2021-01-13 07:11:30 +01:00
|
|
|
package org.thoughtcrime.securesms.sskenvironment
|
|
|
|
|
|
|
|
import android.content.Context
|
2021-05-07 08:31:46 +02:00
|
|
|
import org.session.libsession.messaging.contacts.Contact
|
2021-05-18 08:03:47 +02:00
|
|
|
import org.session.libsession.utilities.recipients.Recipient
|
2021-01-13 07:11:30 +01:00
|
|
|
import org.session.libsession.utilities.SSKEnvironment
|
|
|
|
import org.thoughtcrime.securesms.ApplicationContext
|
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
|
|
|
import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob
|
|
|
|
|
|
|
|
class ProfileManager: SSKEnvironment.ProfileManagerProtocol {
|
2021-05-12 07:11:09 +02:00
|
|
|
override fun setDisplayName(context: Context, recipient: Recipient, displayName: String?) {
|
2021-05-07 08:31:46 +02:00
|
|
|
val sessionID = recipient.address.serialize()
|
|
|
|
// New API
|
|
|
|
val contactDatabase = DatabaseFactory.getSessionContactDatabase(context)
|
|
|
|
var contact = contactDatabase.getContactWithSessionID(sessionID)
|
|
|
|
if (contact == null) contact = Contact(sessionID)
|
2021-05-13 02:24:32 +02:00
|
|
|
contact.threadID = DatabaseFactory.getStorage(context).getThreadIdFor(recipient.address)
|
2021-05-07 08:31:46 +02:00
|
|
|
if (contact.nickname != displayName) {
|
|
|
|
contact.nickname = displayName
|
|
|
|
contactDatabase.setContact(contact)
|
2021-04-22 02:48:19 +02:00
|
|
|
}
|
2021-05-12 07:11:09 +02:00
|
|
|
// Old API
|
|
|
|
if (displayName == null) return
|
|
|
|
val database = DatabaseFactory.getLokiUserDatabase(context)
|
|
|
|
database.setDisplayName(sessionID, displayName)
|
2021-04-22 02:48:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun setProfileName(context: Context, recipient: Recipient, profileName: String) {
|
|
|
|
val database = DatabaseFactory.getRecipientDatabase(context)
|
|
|
|
database.setProfileName(recipient, profileName)
|
2021-04-30 07:36:50 +02:00
|
|
|
recipient.notifyListeners()
|
2021-05-07 08:31:46 +02:00
|
|
|
// New API
|
|
|
|
val sessionID = recipient.address.serialize()
|
|
|
|
val contactDatabase = DatabaseFactory.getSessionContactDatabase(context)
|
|
|
|
var contact = contactDatabase.getContactWithSessionID(sessionID)
|
|
|
|
if (contact == null) contact = Contact(sessionID)
|
2021-05-13 02:24:32 +02:00
|
|
|
contact.threadID = DatabaseFactory.getStorage(context).getThreadIdFor(recipient.address)
|
2021-05-07 08:31:46 +02:00
|
|
|
if (contact.name != profileName) {
|
|
|
|
contact.name = profileName
|
|
|
|
contactDatabase.setContact(contact)
|
|
|
|
}
|
2021-01-13 07:11:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun setProfilePictureURL(context: Context, recipient: Recipient, profilePictureURL: String) {
|
|
|
|
ApplicationContext.getInstance(context).jobManager.add(RetrieveProfileAvatarJob(recipient, profilePictureURL))
|
2021-05-07 08:53:09 +02:00
|
|
|
// New API
|
|
|
|
val sessionID = recipient.address.serialize()
|
|
|
|
val contactDatabase = DatabaseFactory.getSessionContactDatabase(context)
|
|
|
|
var contact = contactDatabase.getContactWithSessionID(sessionID)
|
|
|
|
if (contact == null) contact = Contact(sessionID)
|
2021-05-13 02:24:32 +02:00
|
|
|
contact.threadID = DatabaseFactory.getStorage(context).getThreadIdFor(recipient.address)
|
2021-05-07 08:53:09 +02:00
|
|
|
if (contact.profilePictureURL != profilePictureURL) {
|
|
|
|
contact.profilePictureURL = profilePictureURL
|
|
|
|
contactDatabase.setContact(contact)
|
|
|
|
}
|
2021-01-13 07:11:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun setProfileKey(context: Context, recipient: Recipient, profileKey: ByteArray) {
|
|
|
|
val database = DatabaseFactory.getRecipientDatabase(context)
|
|
|
|
database.setProfileKey(recipient, profileKey)
|
2021-05-07 08:31:46 +02:00
|
|
|
// New API
|
|
|
|
val sessionID = recipient.address.serialize()
|
|
|
|
val contactDatabase = DatabaseFactory.getSessionContactDatabase(context)
|
|
|
|
var contact = contactDatabase.getContactWithSessionID(sessionID)
|
|
|
|
if (contact == null) contact = Contact(sessionID)
|
2021-05-13 02:24:32 +02:00
|
|
|
contact.threadID = DatabaseFactory.getStorage(context).getThreadIdFor(recipient.address)
|
2021-05-07 08:31:46 +02:00
|
|
|
if (!contact.profilePictureEncryptionKey.contentEquals(profileKey)) {
|
|
|
|
contact.profilePictureEncryptionKey = profileKey
|
|
|
|
contactDatabase.setContact(contact)
|
|
|
|
}
|
2021-01-13 07:11:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun setUnidentifiedAccessMode(context: Context, recipient: Recipient, unidentifiedAccessMode: Recipient.UnidentifiedAccessMode) {
|
|
|
|
val database = DatabaseFactory.getRecipientDatabase(context)
|
|
|
|
database.setUnidentifiedAccessMode(recipient, unidentifiedAccessMode)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun updateOpenGroupProfilePicturesIfNeeded(context: Context) {
|
|
|
|
ApplicationContext.getInstance(context).updateOpenGroupProfilePicturesIfNeeded()
|
|
|
|
}
|
2021-05-11 09:05:04 +02:00
|
|
|
|
|
|
|
override fun getDisplayName(context: Context, recipient: Recipient): String? {
|
|
|
|
val sessionID = recipient.address.serialize()
|
|
|
|
val contactDatabase = DatabaseFactory.getSessionContactDatabase(context)
|
|
|
|
var contact = contactDatabase.getContactWithSessionID(sessionID)
|
|
|
|
if (contact == null) {
|
|
|
|
contact = Contact(sessionID)
|
2021-05-13 02:24:32 +02:00
|
|
|
contact.threadID = DatabaseFactory.getStorage(context).getThreadIdFor(recipient.address)
|
2021-05-11 09:05:04 +02:00
|
|
|
contact.name = DatabaseFactory.getLokiUserDatabase(context).getDisplayName(sessionID) ?: recipient.profileName ?: recipient.name
|
|
|
|
contactDatabase.setContact(contact)
|
|
|
|
}
|
|
|
|
return contact.displayName(Contact.contextForRecipient(recipient))
|
|
|
|
}
|
2021-01-13 07:11:30 +01:00
|
|
|
}
|