This commit is contained in:
Woit 2024-12-09 20:49:39 +01:00
parent 55b3469284
commit 413d4f1c72
2 changed files with 34 additions and 27 deletions

View file

@ -3749,7 +3749,7 @@
CODE_SIGN_ENTITLEMENTS = another.im/Resources/another.im.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5;
CURRENT_PROJECT_VERSION = 6;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = K78H7BT98L;
@ -3840,7 +3840,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5;
CURRENT_PROJECT_VERSION = 6;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = K78H7BT98L;
@ -3937,7 +3937,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5;
CURRENT_PROJECT_VERSION = 6;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = K78H7BT98L;
@ -4034,7 +4034,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5;
CURRENT_PROJECT_VERSION = 6;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = K78H7BT98L;
@ -4131,7 +4131,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5;
CURRENT_PROJECT_VERSION = 6;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = K78H7BT98L;
@ -4228,7 +4228,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5;
CURRENT_PROJECT_VERSION = 6;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = K78H7BT98L;

View file

@ -14,9 +14,9 @@ final class WrapperChat: ObservableObject {
let contact: Contact
let account: Account
private let xmpp: MLXMPPManager
private let db: DataLayer
private let monalContact: MLContact
private var xmpp: MLXMPPManager?
private var db: DataLayer?
private var monalContact: MLContact?
private var notificationObservers: [AnyObject] = []
init?(with: Contact, account: Account) {
@ -26,7 +26,7 @@ final class WrapperChat: ObservableObject {
self.account = account
guard
let monalContact = db.contactList()
let monalContact = db?.contactList()
.first(where: {
$0.accountID.intValue == with.ownerId &&
$0.contactJid == with.contactJid
@ -45,7 +45,7 @@ final class WrapperChat: ObservableObject {
self.account = account
guard
let monalContact = db.contactList()
let monalContact = db?.contactList()
.first(where: {
$0.accountID.intValue == with.accountId &&
$0.contactJid == with.participantJid
@ -63,7 +63,16 @@ final class WrapperChat: ObservableObject {
deinit {
notificationObservers.forEach { NotificationCenter.default.removeObserver($0) }
print("Chat wrapper deinit")
// print("Chat wrapper deinit")
}
func deactivate() {
db = nil
xmpp = nil
monalContact = nil
messages = []
notificationObservers.forEach { NotificationCenter.default.removeObserver($0) }
// print("Chat wrapper deactivated")
}
var chatTitle: String {
@ -71,8 +80,9 @@ final class WrapperChat: ObservableObject {
}
func sendText(_ text: String) {
guard let monalContact else { return }
let newMessageId = UUID().uuidString
let histId = db.addMessageHistory(
let histId = db?.addMessageHistory(
to: contact.contactJid,
forAccount: monalContact.accountID,
withMessage: text,
@ -83,19 +93,20 @@ final class WrapperChat: ObservableObject {
mimeType: nil,
size: nil
)
if let newMlMessage = db.message(forHistoryID: histId), let message = Message(newMlMessage) {
if let newMlMessage = db?.message(forHistoryID: histId), let message = Message(newMlMessage) {
messages.insert(message, at: 0)
}
xmpp.sendMessage(text, to: monalContact, isEncrypted: monalContact.isEncrypted, isUpload: false, messageId: newMessageId)
xmpp?.sendMessage(text, to: monalContact, isEncrypted: monalContact.isEncrypted, isUpload: false, messageId: newMessageId)
}
func requestMAM() {
guard let monalContact else { return }
guard let acc = monalContact.account else { return }
if mamRequestInProgress { return }
mamRequestInProgress = true
let lastStanzaId = messages.last?.messageId // last here because list is reversed
?? db.lastStanzaId(forAccount: NSNumber(value: contact.ownerId))
let lastStanzaId = messages.last?.stanzaId // last here because list is reversed
?? db?.lastStanzaId(forAccount: NSNumber(value: contact.ownerId))
acc.setMAMQueryMostRecentFor(monalContact, before: lastStanzaId) { [weak self] msgs, _ in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
@ -107,12 +118,6 @@ final class WrapperChat: ObservableObject {
}
}
}
func deactivate() {
messages = []
notificationObservers.forEach { NotificationCenter.default.removeObserver($0) }
print("Chat wrapper unsubscribed")
}
}
private extension WrapperChat {
@ -157,18 +162,20 @@ private extension WrapperChat {
}
func reloadMessages() {
let messages = db.messages(forContact: contact.contactJid, forAccount: NSNumber(value: contact.ownerId))
let messages = db?.messages(forContact: contact.contactJid, forAccount: NSNumber(value: contact.ownerId))
.compactMap { obj -> Message? in
guard let message = obj as? MLMessage else { return nil }
return Message(message)
}
.sorted { $0.timestamp > $1.timestamp }
self.messages = messages
self.messages = messages ?? []
}
func toggleOmemo(_ new: Bool) {
if monalContact.isEncrypted != new {
monalContact.toggleEncryption(new)
if let monalContact {
if monalContact.isEncrypted != new {
monalContact.toggleEncryption(new)
}
}
}
}