mirror of
https://github.com/oxen-io/session-android.git
synced 2025-08-11 14:37:45 +00:00
Merge remote-tracking branch 'origin/dev' into closed_groups
# Conflicts: # app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt # app/src/main/java/org/thoughtcrime/securesms/sskenvironment/ProfileManager.kt
This commit is contained in:
@@ -47,7 +47,6 @@ interface StorageProtocol {
|
||||
fun getUserED25519KeyPair(): KeyPair?
|
||||
fun getUserX25519KeyPair(): ECKeyPair
|
||||
fun getUserProfile(): Profile
|
||||
fun setProfileAvatar(recipient: Recipient, profileAvatar: String?)
|
||||
fun setProfilePicture(recipient: Recipient, newProfilePicture: String?, newProfileKey: ByteArray?)
|
||||
fun setBlocksCommunityMessageRequests(recipient: Recipient, blocksMessageRequests: Boolean)
|
||||
fun setUserProfilePicture(newProfilePicture: String?, newProfileKey: ByteArray?)
|
||||
|
@@ -19,7 +19,10 @@ import java.io.FileOutputStream
|
||||
import java.io.InputStream
|
||||
import java.util.concurrent.ConcurrentSkipListSet
|
||||
|
||||
class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipientAddress: Address): Job {
|
||||
class RetrieveProfileAvatarJob(
|
||||
private val profileAvatar: String?, val recipientAddress: Address,
|
||||
private val profileKey: ByteArray?
|
||||
): Job {
|
||||
override var delegate: JobDelegate? = null
|
||||
override var id: String? = null
|
||||
override var failureCount: Int = 0
|
||||
@@ -32,6 +35,7 @@ class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipient
|
||||
// Keys used for database storage
|
||||
private const val PROFILE_AVATAR_KEY = "profileAvatar"
|
||||
private const val RECEIPIENT_ADDRESS_KEY = "recipient"
|
||||
private const val PROFILE_KEY = "profileKey"
|
||||
|
||||
val errorUrls = ConcurrentSkipListSet<String>()
|
||||
|
||||
@@ -43,7 +47,6 @@ class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipient
|
||||
val context = MessagingModuleConfiguration.shared.context
|
||||
val storage = MessagingModuleConfiguration.shared.storage
|
||||
val recipient = Recipient.from(context, recipientAddress, true)
|
||||
val profileKey = recipient.resolve().profileKey
|
||||
|
||||
if (profileKey == null || (profileKey.size != 32 && profileKey.size != 16)) {
|
||||
return delegate.handleJobFailedPermanently(this, dispatcherName, Exception("Recipient profile key is gone!"))
|
||||
@@ -69,7 +72,7 @@ class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipient
|
||||
}
|
||||
|
||||
AvatarHelper.delete(context, recipient.address)
|
||||
storage.setProfileAvatar(recipient, null)
|
||||
storage.setProfilePicture(recipient, null, null)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -87,7 +90,7 @@ class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipient
|
||||
setProfilePictureURL(context, profileAvatar)
|
||||
}
|
||||
|
||||
storage.setProfileAvatar(recipient, profileAvatar)
|
||||
storage.setProfilePicture(recipient, profileAvatar, profileKey)
|
||||
} catch (e: Exception) {
|
||||
Log.e("Loki", "Failed to download profile avatar", e)
|
||||
if (failureCount + 1 >= maxFailureCount) {
|
||||
@@ -101,10 +104,15 @@ class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipient
|
||||
}
|
||||
|
||||
override fun serialize(): Data {
|
||||
return Data.Builder()
|
||||
.putString(PROFILE_AVATAR_KEY, profileAvatar)
|
||||
.putString(RECEIPIENT_ADDRESS_KEY, recipientAddress.serialize())
|
||||
.build()
|
||||
val data = Data.Builder()
|
||||
.putString(PROFILE_AVATAR_KEY, profileAvatar)
|
||||
.putString(RECEIPIENT_ADDRESS_KEY, recipientAddress.serialize())
|
||||
|
||||
if (profileKey != null) {
|
||||
data.putByteArray(PROFILE_KEY, profileKey)
|
||||
}
|
||||
|
||||
return data.build()
|
||||
}
|
||||
|
||||
override fun getFactoryKey(): String {
|
||||
@@ -115,7 +123,8 @@ class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipient
|
||||
override fun create(data: Data): RetrieveProfileAvatarJob {
|
||||
val profileAvatar = if (data.hasString(PROFILE_AVATAR_KEY)) { data.getString(PROFILE_AVATAR_KEY) } else { null }
|
||||
val recipientAddress = Address.fromSerialized(data.getString(RECEIPIENT_ADDRESS_KEY))
|
||||
return RetrieveProfileAvatarJob(profileAvatar, recipientAddress)
|
||||
val profileKey = data.getByteArray(PROFILE_KEY)
|
||||
return RetrieveProfileAvatarJob(profileAvatar, recipientAddress, profileKey)
|
||||
}
|
||||
}
|
||||
}
|
@@ -59,7 +59,7 @@ import java.util.Set;
|
||||
import java.util.WeakHashMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class Recipient implements RecipientModifiedListener {
|
||||
public class Recipient implements RecipientModifiedListener, Cloneable {
|
||||
|
||||
private static final String TAG = Recipient.class.getSimpleName();
|
||||
private static final RecipientProvider provider = new RecipientProvider();
|
||||
@@ -1156,5 +1156,9 @@ public class Recipient implements RecipientModifiedListener {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Recipient clone() throws CloneNotSupportedException {
|
||||
return (Recipient) super.clone();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user