2020-12-02 06:38:30 +01:00
|
|
|
package org.session.libsession.messaging
|
|
|
|
|
2021-01-08 07:05:44 +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
|
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
|
2021-03-30 07:23:12 +02:00
|
|
|
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
|
2021-04-26 03:14:45 +02:00
|
|
|
import org.session.libsession.messaging.open_groups.OpenGroup
|
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
|
2021-04-26 03:23:09 +02:00
|
|
|
import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage
|
2021-03-15 03:35:05 +01:00
|
|
|
import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment
|
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
|
2020-12-10 05:30:32 +01:00
|
|
|
import org.session.libsession.messaging.threads.Address
|
|
|
|
import org.session.libsession.messaging.threads.GroupRecord
|
2021-01-08 01:11:50 +01:00
|
|
|
import org.session.libsession.messaging.threads.recipients.Recipient.RecipientSettings
|
2020-12-02 06:38:30 +01:00
|
|
|
import org.session.libsignal.libsignal.ecc.ECKeyPair
|
2020-12-10 05:30:32 +01:00
|
|
|
import org.session.libsignal.service.api.messages.SignalServiceAttachmentPointer
|
2021-01-13 07:11:30 +01:00
|
|
|
import org.session.libsignal.service.api.messages.SignalServiceGroup
|
2020-12-02 06:38:30 +01:00
|
|
|
|
|
|
|
interface StorageProtocol {
|
|
|
|
|
|
|
|
// General
|
|
|
|
fun getUserPublicKey(): String?
|
2021-01-13 07:11:30 +01:00
|
|
|
fun getUserKeyPair(): Pair<String, ByteArray>?
|
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-03-30 07:23:12 +02:00
|
|
|
fun setUserProfilePictureUrl(newProfilePicture: String)
|
2020-12-02 06:38:30 +01:00
|
|
|
|
2020-12-07 05:22:02 +01:00
|
|
|
fun getProfileKeyForRecipient(recipientPublicKey: String): ByteArray?
|
2021-03-19 06:25:00 +01:00
|
|
|
fun getDisplayNameForRecipient(recipientPublicKey: String): String?
|
2021-03-30 07:23:12 +02:00
|
|
|
fun setProfileKeyForRecipient(recipientPublicKey: String, profileKey: ByteArray)
|
2020-12-07 05:22:02 +01:00
|
|
|
|
2020-12-03 04:29:50 +01:00
|
|
|
// Signal Protocol
|
|
|
|
|
2020-12-10 05:30:32 +01:00
|
|
|
fun getOrGenerateRegistrationID(): Int
|
2020-12-03 04:29:50 +01:00
|
|
|
|
2020-12-02 06:38:30 +01:00
|
|
|
// Jobs
|
2021-01-29 01:16:53 +01:00
|
|
|
fun persistJob(job: Job)
|
2020-12-02 06:38:30 +01:00
|
|
|
fun markJobAsSucceeded(job: Job)
|
|
|
|
fun markJobAsFailed(job: Job)
|
|
|
|
fun getAllPendingJobs(type: String): List<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 resumeMessageSendJobIfNeeded(messageSendJobID: String)
|
|
|
|
fun isJobCanceled(job: Job): Boolean
|
|
|
|
|
|
|
|
// Authorization
|
2021-04-13 09:17:16 +02:00
|
|
|
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>
|
|
|
|
fun getV2OpenGroup(threadId: String): OpenGroupV2?
|
2020-12-02 06:38:30 +01:00
|
|
|
|
|
|
|
// Open Groups
|
|
|
|
fun getThreadID(openGroupID: String): String?
|
2021-02-09 03:16:33 +01:00
|
|
|
fun addOpenGroup(server: String, channel: Long)
|
2021-04-29 09:13:42 +02:00
|
|
|
fun setOpenGroupServerMessageID(messageID: Long, serverID: Long, threadID: Long, isSms: Boolean)
|
2021-03-11 04:37:53 +01:00
|
|
|
fun getQuoteServerID(quoteID: Long, publicKey: String): Long?
|
2020-12-02 06:38:30 +01:00
|
|
|
|
|
|
|
// Open Group Public Keys
|
|
|
|
fun getOpenGroupPublicKey(server: String): String?
|
|
|
|
fun setOpenGroupPublicKey(server: String, newValue: String)
|
|
|
|
|
2020-12-18 06:43:19 +01:00
|
|
|
// Open Group User Info
|
2021-04-15 09:17:55 +02:00
|
|
|
fun setOpenGroupDisplayName(publicKey: String, room: String, server: String, displayName: String)
|
|
|
|
fun getOpenGroupDisplayName(publicKey: String, room: String, server: String): String?
|
2020-12-18 06:43:19 +01:00
|
|
|
|
2021-02-09 01:45:38 +01:00
|
|
|
// Open Group Metadata
|
2021-04-13 09:17:16 +02:00
|
|
|
|
2021-02-09 01:45:38 +01:00
|
|
|
fun updateTitle(groupID: String, newValue: String)
|
|
|
|
fun updateProfilePicture(groupID: String, newValue: ByteArray)
|
2021-05-05 05:52:15 +02:00
|
|
|
fun setUserCount(room: String, server: String, newValue: Int)
|
2021-02-09 01:45:38 +01:00
|
|
|
|
2020-12-02 06:38:30 +01:00
|
|
|
// Last Message Server ID
|
2021-04-13 09:17:16 +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-04-13 09:17:16 +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
|
|
|
|
2020-12-07 05:22:02 +01:00
|
|
|
// Message Handling
|
2021-02-16 05:24:21 +01:00
|
|
|
fun isMessageDuplicated(timestamp: Long, sender: String): Boolean
|
2020-12-07 05:22:02 +01:00
|
|
|
fun getReceivedMessageTimestamps(): Set<Long>
|
|
|
|
fun addReceivedMessageTimestamp(timestamp: Long)
|
2021-02-16 05:24:21 +01:00
|
|
|
// fun removeReceivedMessageTimestamps(timestamps: Set<Long>)
|
2020-12-18 06:43:19 +01:00
|
|
|
// Returns the IDs of the saved attachments.
|
2021-01-29 01:16:53 +01:00
|
|
|
fun persistAttachments(messageId: Long, attachments: List<Attachment>): List<Long>
|
2021-03-15 03:35:05 +01:00
|
|
|
fun getAttachmentsForMessage(messageId: Long): List<DatabaseAttachment>
|
2021-01-20 06:29:52 +01:00
|
|
|
|
|
|
|
fun getMessageIdInDatabase(timestamp: Long, author: String): Long?
|
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)
|
2020-12-07 05:22:02 +01:00
|
|
|
|
2020-12-10 05:30:32 +01:00
|
|
|
// Closed Groups
|
|
|
|
fun getGroup(groupID: String): GroupRecord?
|
2021-02-16 01:14:27 +01:00
|
|
|
fun createGroup(groupID: String, title: String?, members: List<Address>, avatar: SignalServiceAttachmentPointer?, relay: String?, admins: List<Address>, formationTimestamp: Long)
|
2021-03-23 00:00:51 +01:00
|
|
|
fun isGroupActive(groupPublicKey: String): Boolean
|
2020-12-10 05:30:32 +01:00
|
|
|
fun setActive(groupID: String, value: Boolean)
|
2021-04-23 06:07:10 +02:00
|
|
|
fun getZombieMember(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-04-23 06:07:10 +02:00
|
|
|
fun updateZombieMembers(groupID: String, members: List<Address>)
|
2021-01-13 07:11:30 +01:00
|
|
|
// Closed Group
|
2021-02-09 01:45:38 +01:00
|
|
|
fun getAllClosedGroupPublicKeys(): Set<String>
|
2021-03-23 00:00:51 +01:00
|
|
|
fun getAllActiveClosedGroupPublicKeys(): Set<String>
|
2021-02-09 01:45:38 +01:00
|
|
|
fun addClosedGroupPublicKey(groupPublicKey: String)
|
|
|
|
fun removeClosedGroupPublicKey(groupPublicKey: String)
|
|
|
|
fun addClosedGroupEncryptionKeyPair(encryptionKeyPair: ECKeyPair, groupPublicKey: String)
|
|
|
|
fun removeAllClosedGroupEncryptionKeyPairs(groupPublicKey: String)
|
2021-04-14 08:37:04 +02:00
|
|
|
fun insertIncomingInfoMessage(context: Context, senderPublicKey: String, groupID: String, type: SignalServiceGroup.Type,
|
2021-03-11 05:31:14 +01:00
|
|
|
name: String, members: Collection<String>, admins: Collection<String>, sentTimestamp: Long)
|
2021-04-14 08:37:04 +02:00
|
|
|
fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceGroup.Type, name: String,
|
2021-03-11 05:31:14 +01: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?
|
2021-02-09 01:45:38 +01:00
|
|
|
|
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-01-11 23:58:38 +01:00
|
|
|
fun getThreadIdFor(address: Address): Long?
|
2021-04-29 09:13:42 +02:00
|
|
|
fun getThreadIdForMms(mmsId: Long): Long
|
2020-12-02 06:38:30 +01:00
|
|
|
|
2020-12-18 06:43:19 +01:00
|
|
|
// Session Request
|
2020-12-02 06:38:30 +01:00
|
|
|
fun getSessionRequestSentTimestamp(publicKey: String): Long?
|
|
|
|
fun setSessionRequestSentTimestamp(publicKey: String, newValue: Long)
|
|
|
|
fun getSessionRequestProcessedTimestamp(publicKey: String): Long?
|
|
|
|
fun setSessionRequestProcessedTimestamp(publicKey: String, newValue: Long)
|
2021-01-08 01:11:50 +01:00
|
|
|
|
|
|
|
// Loki User
|
|
|
|
fun getDisplayName(publicKey: String): String?
|
2021-03-30 07:23:12 +02:00
|
|
|
fun setDisplayName(publicKey: String, newName: String)
|
2021-01-08 01:11:50 +01:00
|
|
|
fun getServerDisplayName(serverID: String, publicKey: String): String?
|
|
|
|
fun getProfilePictureURL(publicKey: String): String?
|
|
|
|
|
2021-01-08 07:05:44 +01:00
|
|
|
// Recipient
|
2021-01-08 01:11:50 +01:00
|
|
|
fun getRecipientSettings(address: Address): RecipientSettings?
|
2021-03-30 07:23:12 +02:00
|
|
|
fun addContacts(contacts: List<ConfigurationMessage.Contact>)
|
2021-01-08 07:05:44 +01:00
|
|
|
|
|
|
|
// PartAuthority
|
|
|
|
fun getAttachmentDataUri(attachmentId: AttachmentId): Uri
|
|
|
|
fun getAttachmentThumbnailUri(attachmentId: AttachmentId): Uri
|
2021-01-11 23:58:38 +01:00
|
|
|
|
|
|
|
// Message Handling
|
|
|
|
/// Returns the ID of the `TSIncomingMessage` that was constructed.
|
2021-03-15 03:35:05 +01:00
|
|
|
fun persist(message: VisibleMessage, quotes: QuoteModel?, linkPreview: List<LinkPreview?>, groupPublicKey: String?, openGroupID: String?, attachments: List<Attachment>): Long?
|
2021-04-13 09:17:16 +02:00
|
|
|
|
2021-03-16 04:56:47 +01:00
|
|
|
// Data Extraction Notification
|
2021-04-09 08:06:12 +02:00
|
|
|
fun insertDataExtractionNotificationMessage(senderPublicKey: String, message: DataExtractionNotificationInfoMessage, sentTimestamp: Long)
|
2021-04-28 05:53:50 +02:00
|
|
|
|
2021-04-13 09:17:16 +02:00
|
|
|
// DEPRECATED
|
|
|
|
fun getAuthToken(server: String): String?
|
|
|
|
fun setAuthToken(server: String, newValue: String?)
|
|
|
|
fun removeAuthToken(server: String)
|
|
|
|
|
|
|
|
fun getLastMessageServerID(group: Long, server: String): Long?
|
|
|
|
fun setLastMessageServerID(group: Long, server: String, newValue: Long)
|
|
|
|
fun removeLastMessageServerID(group: Long, server: String)
|
|
|
|
|
|
|
|
fun getLastDeletionServerID(group: Long, server: String): Long?
|
|
|
|
fun setLastDeletionServerID(group: Long, server: String, newValue: Long)
|
|
|
|
fun removeLastDeletionServerID(group: Long, server: String)
|
|
|
|
|
|
|
|
fun getOpenGroup(threadID: String): OpenGroup?
|
|
|
|
fun getAllOpenGroups(): Map<Long, OpenGroup>
|
|
|
|
|
|
|
|
fun setUserCount(group: Long, server: String, newValue: Int)
|
|
|
|
fun setOpenGroupProfilePictureURL(group: Long, server: String, newValue: String)
|
|
|
|
fun getOpenGroupProfilePictureURL(group: Long, server: String): String?
|
|
|
|
|
2021-04-15 09:17:55 +02:00
|
|
|
fun setOpenGroupDisplayName(publicKey: String, channel: Long, server: String, displayName: String)
|
|
|
|
fun getOpenGroupDisplayName(publicKey: String, channel: Long, server: String): String?
|
|
|
|
|
2021-04-08 07:11:46 +02:00
|
|
|
}
|