mirror of https://github.com/oxen-io/session-ios
Periodically send configuration messages
parent
d6314c8d30
commit
9eefc21eb9
@ -0,0 +1,16 @@
|
||||
|
||||
extension AppDelegate {
|
||||
|
||||
@objc func syncConfigurationIfNeeded() {
|
||||
let userDefaults = UserDefaults.standard
|
||||
guard userDefaults[.isUsingMultiDevice] else { return }
|
||||
let lastSync = userDefaults[.lastConfigurationSync] ?? .distantPast
|
||||
guard Date().timeIntervalSince(lastSync) > 2 * 24 * 60 * 60 else { return } // Sync every 2 days
|
||||
let configurationMessage = ConfigurationMessage.getCurrent()
|
||||
let destination = Message.Destination.contact(publicKey: getUserHexEncodedPublicKey())
|
||||
Storage.shared.write { transaction in
|
||||
let job = MessageSendJob(message: configurationMessage, destination: destination)
|
||||
JobQueue.shared.add(job, using: transaction)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
|
||||
extension ConfigurationMessage {
|
||||
|
||||
public static func getCurrent() -> ConfigurationMessage {
|
||||
var closedGroups: Set<ClosedGroup> = []
|
||||
var openGroups: Set<String> = []
|
||||
Storage.read { transaction in
|
||||
TSGroupThread.enumerateCollectionObjects(with: transaction) { object, _ in
|
||||
guard let thread = object as? TSGroupThread else { return }
|
||||
switch thread.groupModel.groupType {
|
||||
case .closedGroup:
|
||||
guard thread.isCurrentUserMemberInGroup() else { return }
|
||||
let groupID = thread.groupModel.groupId
|
||||
let groupPublicKey = LKGroupUtilities.getDecodedGroupID(groupID)
|
||||
guard Storage.shared.isClosedGroup(groupPublicKey),
|
||||
let encryptionKeyPair = Storage.shared.getLatestClosedGroupEncryptionKeyPair(for: groupPublicKey) else { return }
|
||||
let closedGroup = ClosedGroup(publicKey: groupPublicKey, name: thread.groupModel.groupName!, encryptionKeyPair: encryptionKeyPair,
|
||||
members: Set(thread.groupModel.groupMemberIds), admins: Set(thread.groupModel.groupAdminIds))
|
||||
closedGroups.insert(closedGroup)
|
||||
case .openGroup:
|
||||
guard let openGroup = Storage.shared.getOpenGroup(for: thread.uniqueId!) else { return }
|
||||
openGroups.insert(openGroup.server)
|
||||
default: break
|
||||
}
|
||||
}
|
||||
}
|
||||
return ConfigurationMessage(closedGroups: closedGroups, openGroups: openGroups)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue