Skip to content

Commit 430247a

Browse files
committed
Added function to get all config Addresses
1 parent 4be43b9 commit 430247a

File tree

2 files changed

+63
-7
lines changed

2 files changed

+63
-7
lines changed

app/src/main/java/org/session/libsession/utilities/ConfigFactoryProtocol.kt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,52 @@ fun ConfigFactoryProtocol.userConfigsChanged(
151151
}
152152
}
153153

154+
/** All addresses that exist in config and therefore must be kept. */
155+
fun ConfigFactoryProtocol.allConfigAddresses(): Set<Address> {
156+
val (contacts, blinded, groups) = withUserConfigs { config ->
157+
Triple(config.contacts.all(), config.contacts.allBlinded(), config.userGroups.all())
158+
}
159+
160+
val contactsAddress : Set<Address> =
161+
contacts.asSequence().map { Address.fromSerialized(it.id) }.toSet()
162+
val blindedAddress : Set<Address> =
163+
blinded.asSequence().map { Address.fromSerialized(it.id) }.toSet()
164+
165+
val closedIds = mutableListOf<AccountId>()
166+
val groupAddresses: Set<Address> = buildSet {
167+
groups.forEach { groupInfo ->
168+
when (groupInfo) {
169+
is GroupInfo.LegacyGroupInfo -> {
170+
add(Address.LegacyGroup(groupInfo.accountId))
171+
groupInfo.members.keys.forEach { add(Address.fromSerialized(it)) }
172+
}
173+
is GroupInfo.ClosedGroupInfo -> {
174+
val groupId = AccountId(groupInfo.groupAccountId)
175+
closedIds += groupId
176+
add(Address.Group(groupId))
177+
}
178+
is GroupInfo.CommunityGroupInfo -> {
179+
add(Address.Community(groupInfo.community.baseUrl, groupInfo.community.room))
180+
}
181+
}
182+
}
183+
}
184+
185+
val closedMemberAddresses: Set<Address> = buildSet {
186+
closedIds.forEach { groupId ->
187+
withGroupConfigs(groupId) { config ->
188+
config.groupMembers.all().forEach { add(Address.fromSerialized(it.accountId())) }
189+
}
190+
}
191+
}
192+
193+
return buildSet {
194+
addAll(contactsAddress)
195+
addAll(blindedAddress)
196+
addAll(groupAddresses)
197+
addAll(closedMemberAddresses)
198+
}
199+
}
154200

155201
/**
156202
* Wait until all configs of given group are pushed to the server.

app/src/main/java/org/thoughtcrime/securesms/configs/ConfigToDatabaseSync.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.session.libsession.utilities.Address.Companion.fromSerialized
3030
import org.session.libsession.utilities.ConfigFactoryProtocol
3131
import org.session.libsession.utilities.TextSecurePreferences
3232
import org.session.libsession.utilities.UserConfigType
33+
import org.session.libsession.utilities.allConfigAddresses
3334
import org.session.libsession.utilities.getGroup
3435
import org.session.libsession.utilities.userConfigsChanged
3536
import org.session.libsignal.crypto.ecc.DjbECPrivateKey
@@ -152,13 +153,8 @@ class ConfigToDatabaseSync @Inject constructor(
152153
}
153154
}
154155

155-
// Initiate cleanup in recipient_settings rows that no longer have any messages
156-
val addressesToKeep = mmsSmsDatabase.getAllReferencedAddresses()
157-
val removed = recipientSettingsDatabase.cleanupRecipientSettings(addressesToKeep)
158-
Log.d(TAG, "Recipient settings pruned: $removed orphan rows")
159-
if(removed > 0){
160-
avatarCacheCleaner.launchAvatarCleanup()
161-
}
156+
// Initiate cleanup in recipient_settings
157+
pruneRecipientSettingsAndAvatars()
162158
}
163159

164160
// If we created threads, we need to update the thread database with the creation date.
@@ -178,6 +174,20 @@ class ConfigToDatabaseSync @Inject constructor(
178174
}
179175
}
180176

177+
private fun pruneRecipientSettingsAndAvatars() {
178+
val addressesToKeep: Set<Address> = buildSet {
179+
addAll(configFactory.allConfigAddresses())
180+
addAll(mmsSmsDatabase.getAllReferencedAddresses())
181+
}
182+
183+
val removed = recipientSettingsDatabase.cleanupRecipientSettings(addressesToKeep)
184+
Log.d(TAG, "Recipient settings pruned: $removed orphan rows")
185+
186+
if (removed > 0) {
187+
avatarCacheCleaner.launchAvatarCleanup()
188+
}
189+
}
190+
181191
private fun deleteGroupData(address: Address.Group) {
182192
lokiAPIDatabase.clearLastMessageHashes(address.accountId.hexString)
183193
lokiAPIDatabase.clearReceivedMessageHashValues(address.accountId.hexString)

0 commit comments

Comments
 (0)