session-android/libsession/src/main/java/org/session/libsession/database/StorageProtocol.kt

157 lines
7.8 KiB
Kotlin
Raw Normal View History

2021-05-18 08:03:47 +02:00
package org.session.libsession.database
2020-12-02 06:38:30 +01:00
2021-01-13 07:11:30 +01:00
import android.content.Context
2021-01-08 07:05:44 +01:00
import android.net.Uri
2021-05-07 08:31:46 +02:00
import org.session.libsession.messaging.contacts.Contact
2020-12-02 06:38:30 +01:00
import org.session.libsession.messaging.jobs.AttachmentUploadJob
import org.session.libsession.messaging.jobs.Job
import org.session.libsession.messaging.jobs.MessageSendJob
import org.session.libsession.messaging.messages.control.ConfigurationMessage
2020-12-18 06:43:19 +01:00
import org.session.libsession.messaging.messages.visible.Attachment
2021-01-11 23:58:38 +01:00
import org.session.libsession.messaging.messages.visible.VisibleMessage
Merge remote-tracking branch 'upstream/dev' into open_groups_V2, working on compact poller implementation # Conflicts: # app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java # app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java # app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt # app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt # app/src/main/java/org/thoughtcrime/securesms/loki/api/BackgroundPollWorker.kt # app/src/main/java/org/thoughtcrime/securesms/loki/api/PublicChatManager.kt # app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt # app/src/main/java/org/thoughtcrime/securesms/loki/protocol/MultiDeviceProtocol.kt # app/src/main/java/org/thoughtcrime/securesms/loki/utilities/MentionManagerUtilities.kt # app/src/main/java/org/thoughtcrime/securesms/loki/utilities/OpenGroupUtilities.kt # app/src/main/java/org/thoughtcrime/securesms/loki/views/MentionCandidateView.kt # app/src/main/java/org/thoughtcrime/securesms/loki/views/ProfilePictureView.kt # libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt # libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt # libsession/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt # libsession/src/main/java/org/session/libsession/messaging/mentions/MentionsManager.kt # libsession/src/main/java/org/session/libsession/messaging/messages/Destination.kt # libsession/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupAPIV2.kt # libsession/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupMessageV2.kt # libsession/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupV2.kt # libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt # libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt # libsession/src/main/java/org/session/libsession/messaging/utilities/DotNetAPI.kt # libsession/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt # libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt # libsession/src/main/java/org/session/libsession/snode/SnodeMessage.kt # libsession/src/main/java/org/session/libsession/utilities/mentions/MentionsManager.kt # libsignal/src/main/java/org/session/libsignal/service/loki/api/SwarmAPI.kt # libsignal/src/main/java/org/session/libsignal/service/loki/api/opengroups/PublicChat.kt # libsignal/src/main/java/org/session/libsignal/service/loki/utilities/mentions/MentionsManager.kt
2021-04-28 09:41:30 +02:00
import org.session.libsession.messaging.open_groups.OpenGroupV2
2021-01-08 07:05:44 +01:00
import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId
import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment
2021-05-27 07:00:16 +02:00
import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage
2021-04-26 03:23:09 +02:00
import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview
2021-01-11 23:58:38 +01:00
import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel
2021-05-18 08:11:38 +02:00
import org.session.libsession.utilities.Address
2021-05-18 08:03:47 +02:00
import org.session.libsession.utilities.GroupRecord
2021-05-21 07:02:34 +02:00
import org.session.libsession.utilities.recipients.Recipient
2021-05-18 08:03:47 +02:00
import org.session.libsession.utilities.recipients.Recipient.RecipientSettings
2021-05-18 01:21:56 +02:00
import org.session.libsignal.crypto.ecc.ECKeyPair
2021-05-18 01:50:16 +02:00
import org.session.libsignal.messages.SignalServiceAttachmentPointer
import org.session.libsignal.messages.SignalServiceGroup
2020-12-02 06:38:30 +01:00
interface StorageProtocol {
// General
fun getUserPublicKey(): String?
2021-01-14 01:42:26 +01:00
fun getUserX25519KeyPair(): ECKeyPair
2020-12-02 06:38:30 +01:00
fun getUserDisplayName(): String?
fun getUserProfileKey(): ByteArray?
fun getUserProfilePictureURL(): String?
2021-05-21 07:21:24 +02:00
fun setUserProfilePictureURL(newProfilePicture: String)
2021-05-21 07:02:34 +02:00
// Signal
2020-12-10 05:30:32 +01:00
fun getOrGenerateRegistrationID(): Int
2020-12-02 06:38:30 +01:00
// Jobs
fun persistJob(job: Job)
fun markJobAsSucceeded(jobId: String)
fun markJobAsFailedPermanently(jobId: String)
fun getAllPendingJobs(type: String): Map<String,Job?>
2020-12-15 05:45:44 +01:00
fun getAttachmentUploadJob(attachmentID: Long): AttachmentUploadJob?
2020-12-02 06:38:30 +01:00
fun getMessageSendJob(messageSendJobID: String): MessageSendJob?
fun getMessageReceiveJob(messageReceiveJobID: String): Job?
2020-12-02 06:38:30 +01:00
fun resumeMessageSendJobIfNeeded(messageSendJobID: String)
fun isJobCanceled(job: Job): Boolean
// Authorization
fun getAuthToken(room: String, server: String): String?
fun setAuthToken(room: String, server: String, newValue: String)
fun removeAuthToken(room: String, server: String)
// Open Groups
fun getAllV2OpenGroups(): Map<Long, OpenGroupV2>
2021-05-21 07:02:34 +02:00
fun getV2OpenGroup(threadId: Long): OpenGroupV2?
fun addOpenGroup(urlAsString: String)
fun setOpenGroupServerMessageID(messageID: Long, serverID: Long, threadID: Long, isSms: Boolean)
2020-12-02 06:38:30 +01:00
// Open Group Public Keys
fun getOpenGroupPublicKey(server: String): String?
fun setOpenGroupPublicKey(server: String, newValue: String)
// Open Group Metadata
fun updateTitle(groupID: String, newValue: String)
fun updateProfilePicture(groupID: String, newValue: ByteArray)
fun setUserCount(room: String, server: String, newValue: Int)
2020-12-02 06:38:30 +01:00
// Last Message Server ID
2021-05-21 07:02:34 +02:00
fun getLastMessageServerID(room: String, server: String): Long?
fun setLastMessageServerID(room: String, server: String, newValue: Long)
fun removeLastMessageServerID(room: String, server: String)
2020-12-02 06:38:30 +01:00
// Last Deletion Server ID
2021-05-21 07:02:34 +02:00
fun getLastDeletionServerID(room: String, server: String): Long?
fun setLastDeletionServerID(room: String, server: String, newValue: Long)
fun removeLastDeletionServerID(room: String, server: String)
2020-12-02 06:38:30 +01:00
// Message Handling
2021-05-19 00:56:44 +02:00
fun isDuplicateMessage(timestamp: Long): Boolean
fun getReceivedMessageTimestamps(): Set<Long>
fun addReceivedMessageTimestamp(timestamp: Long)
fun removeReceivedMessageTimestamps(timestamps: Set<Long>)
2021-05-21 07:02:34 +02:00
/**
* Returns the IDs of the saved attachments.
*/
fun persistAttachments(messageID: Long, attachments: List<Attachment>): List<Long>
fun getAttachmentsForMessage(messageID: Long): List<DatabaseAttachment>
fun getMessageIdInDatabase(timestamp: Long, author: String): Long? // TODO: This is a weird name
fun updateSentTimestamp(messageID: Long, isMms: Boolean, openGroupSentTimestamp: Long, threadId: Long)
fun markAsSending(timestamp: Long, author: String)
2021-03-02 02:24:09 +01:00
fun markAsSent(timestamp: Long, author: String)
fun markUnidentified(timestamp: Long, author: String)
2021-03-02 04:13:12 +01:00
fun setErrorMessage(timestamp: Long, author: String, error: Exception)
2021-08-10 08:42:15 +02:00
fun setMessageServerHash(messageID: Long, serverHash: String)
2020-12-10 05:30:32 +01:00
// Closed Groups
fun getGroup(groupID: String): GroupRecord?
fun createGroup(groupID: String, title: String?, members: List<Address>, avatar: SignalServiceAttachmentPointer?, relay: String?, admins: List<Address>, formationTimestamp: Long)
fun isGroupActive(groupPublicKey: String): Boolean
2020-12-10 05:30:32 +01:00
fun setActive(groupID: String, value: Boolean)
2021-05-21 07:02:34 +02:00
fun getZombieMembers(groupID: String): Set<String>
2020-12-10 05:30:32 +01:00
fun removeMember(groupID: String, member: Address)
fun updateMembers(groupID: String, members: List<Address>)
2021-05-21 07:02:34 +02:00
fun setZombieMembers(groupID: String, members: List<Address>)
fun getAllClosedGroupPublicKeys(): Set<String>
fun getAllActiveClosedGroupPublicKeys(): Set<String>
fun addClosedGroupPublicKey(groupPublicKey: String)
fun removeClosedGroupPublicKey(groupPublicKey: String)
fun addClosedGroupEncryptionKeyPair(encryptionKeyPair: ECKeyPair, groupPublicKey: String)
fun removeAllClosedGroupEncryptionKeyPairs(groupPublicKey: String)
fun insertIncomingInfoMessage(context: Context, senderPublicKey: String, groupID: String, type: SignalServiceGroup.Type,
2021-05-21 07:02:34 +02:00
name: String, members: Collection<String>, admins: Collection<String>, sentTimestamp: Long)
fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceGroup.Type, name: String,
2021-05-21 07:02:34 +02:00
members: Collection<String>, admins: Collection<String>, threadID: Long, sentTimestamp: Long)
2021-01-20 00:04:14 +01:00
fun isClosedGroup(publicKey: String): Boolean
2021-01-20 01:18:00 +01:00
fun getClosedGroupEncryptionKeyPairs(groupPublicKey: String): MutableList<ECKeyPair>
fun getLatestClosedGroupEncryptionKeyPair(groupPublicKey: String): ECKeyPair?
fun updateFormationTimestamp(groupID: String, formationTimestamp: Long)
fun setExpirationTimer(groupID: String, duration: Int)
2021-02-05 06:35:15 +01:00
// Groups
fun getAllGroups(): List<GroupRecord>
2020-12-02 06:38:30 +01:00
2020-12-10 05:30:32 +01:00
// Settings
fun setProfileSharing(address: Address, value: Boolean)
// Thread
2021-01-11 23:58:38 +01:00
fun getOrCreateThreadIdFor(address: Address): Long
2021-01-20 00:04:14 +01:00
fun getOrCreateThreadIdFor(publicKey: String, groupPublicKey: String?, openGroupID: String?): Long
2021-05-21 07:02:34 +02:00
fun getThreadId(publicKeyOrOpenGroupID: String): Long?
fun getThreadId(address: Address): Long?
fun getThreadId(recipient: Recipient): Long?
fun getThreadIdForMms(mmsId: Long): Long
2021-05-21 03:09:03 +02:00
fun getLastUpdated(threadID: Long): Long
fun trimThread(threadID: Long, threadLimit: Int)
2020-12-02 06:38:30 +01:00
2021-05-21 07:02:34 +02:00
// Contacts
2021-05-07 08:31:46 +02:00
fun getContactWithSessionID(sessionID: String): Contact?
fun getAllContacts(): Set<Contact>
fun setContact(contact: Contact)
fun getRecipientForThread(threadId: Long): Recipient?
2021-01-08 01:11:50 +01:00
fun getRecipientSettings(address: Address): RecipientSettings?
fun addContacts(contacts: List<ConfigurationMessage.Contact>)
2021-01-08 07:05:44 +01:00
2021-05-21 07:02:34 +02:00
// Attachments
2021-01-08 07:05:44 +01:00
fun getAttachmentDataUri(attachmentId: AttachmentId): Uri
fun getAttachmentThumbnailUri(attachmentId: AttachmentId): Uri
2021-01-11 23:58:38 +01:00
// Message Handling
2021-05-21 07:02:34 +02:00
/**
* Returns the ID of the `TSIncomingMessage` that was constructed.
*/
fun persist(message: VisibleMessage, quotes: QuoteModel?, linkPreview: List<LinkPreview?>, groupPublicKey: String?, openGroupID: String?, attachments: List<Attachment>): Long?
2021-04-09 08:06:12 +02:00
fun insertDataExtractionNotificationMessage(senderPublicKey: String, message: DataExtractionNotificationInfoMessage, sentTimestamp: Long)
2021-04-08 07:11:46 +02:00
}