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

194 lines
9.2 KiB
Kotlin
Raw Normal View History

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
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
2020-12-02 06:38:30 +01:00
import org.session.libsession.messaging.opengroups.OpenGroup
import org.session.libsession.messaging.opengroups.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.dataextraction.DataExtractionNotificationInfoMessage
import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment
2021-01-11 23:58:38 +01:00
import org.session.libsession.messaging.sending_receiving.linkpreview.LinkPreview
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
import org.session.libsignal.service.internal.push.SignalServiceProtos
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?
fun setUserProfilePictureUrl(newProfilePicture: String)
2020-12-02 06:38:30 +01:00
fun getProfileKeyForRecipient(recipientPublicKey: String): ByteArray?
fun getDisplayNameForRecipient(recipientPublicKey: String): String?
fun setProfileKeyForRecipient(recipientPublicKey: String, profileKey: ByteArray)
// Signal Protocol
2020-12-10 05:30:32 +01:00
fun getOrGenerateRegistrationID(): Int
2020-12-02 06:38:30 +01:00
// Jobs
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
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?
fun addOpenGroup(server: String, channel: Long)
2021-03-11 04:37:53 +01:00
fun setOpenGroupServerMessageID(messageID: Long, serverID: Long)
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
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
// Open Group Metadata
fun updateTitle(groupID: String, newValue: String)
fun updateProfilePicture(groupID: String, newValue: ByteArray)
fun setUserCount(room: String, server: String, newValue: Long)
2020-12-02 06:38:30 +01:00
// Last Message Server ID
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
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-02-16 05:24:21 +01:00
fun isMessageDuplicated(timestamp: Long, sender: String): Boolean
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.
fun persistAttachments(messageId: Long, attachments: List<Attachment>): List<Long>
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-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)
fun removeMember(groupID: String, member: Address)
fun updateMembers(groupID: String, members: List<Address>)
2021-01-13 07:11:30 +01:00
// Closed Group
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,
name: String, members: Collection<String>, admins: Collection<String>, sentTimestamp: Long)
fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceGroup.Type, name: String,
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-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?
fun getThreadIdForMms(messageId: 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?
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?
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.
fun persist(message: VisibleMessage, quotes: QuoteModel?, linkPreview: List<LinkPreview?>, groupPublicKey: String?, openGroupID: String?, attachments: List<Attachment>): Long?
// Data Extraction Notification
2021-04-09 08:06:12 +02:00
fun insertDataExtractionNotificationMessage(senderPublicKey: String, message: DataExtractionNotificationInfoMessage, sentTimestamp: Long)
// 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?
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
}