mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Fixed a bug where the ConfigurationMessage was getting generated before the contact state was persisted to the database in the message request flow causing odd behaviours (now generating the ConfigurationMessage within the same transaction) Fixed a bug where sending a message to an existing message request thread once the message requests item has been hidden would show the message requests notification and trigger the section to re-appear on the home screen Fixed a bug where blocked contacts weren't getting excluded from the contacts list in the configuration message
72 lines
3.1 KiB
Swift
72 lines
3.1 KiB
Swift
|
|
extension Storage {
|
|
|
|
private static let contactCollection = "LokiContactCollection"
|
|
|
|
@objc(getContactWithSessionID:)
|
|
public func getContact(with sessionID: String) -> Contact? {
|
|
var result: Contact?
|
|
Storage.read { transaction in
|
|
result = self.getContact(with: sessionID, using: transaction)
|
|
}
|
|
return result
|
|
}
|
|
|
|
@objc(getContactWithSessionID:using:)
|
|
public func getContact(with sessionID: String, using transaction: Any) -> Contact? {
|
|
var result: Contact?
|
|
let transaction = transaction as! YapDatabaseReadTransaction
|
|
result = transaction.object(forKey: sessionID, inCollection: Storage.contactCollection) as? Contact
|
|
if let result = result, result.sessionID == getUserHexEncodedPublicKey() {
|
|
result.isTrusted = true // Always trust ourselves
|
|
}
|
|
return result
|
|
}
|
|
|
|
@objc(setContact:usingTransaction:)
|
|
public func setContact(_ contact: Contact, using transaction: Any) {
|
|
let transaction = transaction as! YapDatabaseReadWriteTransaction
|
|
let oldContact = getContact(with: contact.sessionID, using: transaction)
|
|
if contact.sessionID == getUserHexEncodedPublicKey() {
|
|
contact.isTrusted = true // Always trust ourselves
|
|
}
|
|
transaction.setObject(contact, forKey: contact.sessionID, inCollection: Storage.contactCollection)
|
|
transaction.addCompletionQueue(DispatchQueue.main) {
|
|
// Delete old profile picture if needed
|
|
if let oldProfilePictureFileName = oldContact?.profilePictureFileName,
|
|
oldProfilePictureFileName != contact.profilePictureFileName {
|
|
let path = OWSUserProfile.profileAvatarFilepath(withFilename: oldProfilePictureFileName)
|
|
DispatchQueue.global(qos: .default).async {
|
|
OWSFileSystem.deleteFileIfExists(path)
|
|
}
|
|
}
|
|
// Post notification
|
|
let notificationCenter = NotificationCenter.default
|
|
notificationCenter.post(name: .contactUpdated, object: contact.sessionID)
|
|
if contact.sessionID == getUserHexEncodedPublicKey() {
|
|
notificationCenter.post(name: Notification.Name(kNSNotificationName_LocalProfileDidChange), object: nil)
|
|
} else {
|
|
let userInfo = [ kNSNotificationKey_ProfileRecipientId : contact.sessionID ]
|
|
notificationCenter.post(name: Notification.Name(kNSNotificationName_OtherUsersProfileDidChange), object: nil, userInfo: userInfo)
|
|
}
|
|
}
|
|
}
|
|
|
|
@objc public func getAllContacts() -> Set<Contact> {
|
|
var result: Set<Contact> = []
|
|
Storage.read { transaction in
|
|
result = self.getAllContacts(with: transaction)
|
|
}
|
|
return result
|
|
}
|
|
|
|
@objc public func getAllContacts(with transaction: YapDatabaseReadTransaction) -> Set<Contact> {
|
|
var result: Set<Contact> = []
|
|
transaction.enumerateRows(inCollection: Storage.contactCollection) { _, object, _, _ in
|
|
guard let contact = object as? Contact else { return }
|
|
result.insert(contact)
|
|
}
|
|
return result
|
|
}
|
|
}
|