This commit is contained in:
Woit 2024-11-29 18:35:20 +01:00
parent 32e42f8506
commit 87642a5a10
8 changed files with 155 additions and 117 deletions

View file

@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
07D2570A3091519439B47A6A /* Chat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9B95CF9DA11FCEE44990A0 /* Chat.swift */; };
08CAF17FA202CF3CB760D93C /* Pods_NotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B7A5555D807EE78C95217FD /* Pods_NotificationService.framework */; };
1767C5109B06AA6FDCD990E6 /* AimErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404FB187FD6CB3DD41DAC820 /* AimErrors.swift */; };
1C8760F8FB99C27D0C3A6ED1 /* RegistrationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D4382FFF3D97C4E1D7727C /* RegistrationScreen.swift */; };
@ -86,6 +87,7 @@
38720923251EDE07001837EB /* MLXEPSlashMeHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 38720921251EDE07001837EB /* MLXEPSlashMeHandler.m */; };
389E298C25E901CA009A5268 /* MLAudioRecoderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 389E298925E901CA009A5268 /* MLAudioRecoderManager.m */; };
389E298D25E901CA009A5268 /* MLAudioRecoderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 389E298B25E901CA009A5268 /* MLAudioRecoderManager.h */; };
3BBDABE6BF04654E4D73FE94 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DEED95641012F70DC22087 /* Account.swift */; };
3D06A515281FFCC000DDAE90 /* NotificationDebugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D06A514281FFCC000DDAE90 /* NotificationDebugging.swift */; };
3D27D956290B0BB60014748B /* AddContactMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D27D955290B0BB60014748B /* AddContactMenu.swift */; };
3D27D958290B0BC80014748B /* ContactRequestsMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D27D957290B0BC80014748B /* ContactRequestsMenu.swift */; };
@ -131,7 +133,7 @@
54E594BE2523C34B00E4172B /* MLPubSub.m in Sources */ = {isa = PBXBuildFile; fileRef = 54E594BC2523C34A00E4172B /* MLPubSub.m */; };
54F0B81928231691003664BD /* WelcomeLogIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F0B81828231690003664BD /* WelcomeLogIn.swift */; };
54F0B81C282316F5003664BD /* RegisterAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54F0B81B282316F5003664BD /* RegisterAccount.swift */; };
598A717356906687AD101542 /* MonalWrapperModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 282FE922A600668B10016B4C /* MonalWrapperModels.swift */; };
5C2B6A5C14F38F315ECC3F5E /* ScenarioLogIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C02B964344F7E01D60E660D7 /* ScenarioLogIn.swift */; };
6E9488F6997650B805476F25 /* Pods_another_im.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F29121F912380F72CCE51747 /* Pods_another_im.framework */; };
7D40218FEAB3BA882811A682 /* Pods_Monal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C40963CED187B2F1B4B88F7 /* Pods_Monal.framework */; };
7E1C0AC72CEF68C000B8FEC0 /* MainTabScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1C0AC62CEF68C000B8FEC0 /* MainTabScreen.swift */; };
@ -283,6 +285,7 @@
D09B51F62C7F30DD008D725B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 26B2A4BA1B73061400272E63 /* Images.xcassets */; };
D0FA79B12C7E5C7400216D2A /* ServerDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA79B02C7E5C7400216D2A /* ServerDetails.swift */; };
D7E74AF213445E39318BC648 /* Pods_MonalUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29250DA62DD2322383585B2B /* Pods_MonalUITests.framework */; };
DEDA22BC3DBA90E586F6B7CE /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 405F76B4AD0B916C50352D23 /* Message.swift */; };
E89DD32525C6626400925F62 /* MLFileTransferDataCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DD32025C6626300925F62 /* MLFileTransferDataCell.m */; };
E89DD32625C6626400925F62 /* MLFileTransferVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DD32125C6626300925F62 /* MLFileTransferVideoCell.m */; };
E89DD32725C6626400925F62 /* MLFileTransferFileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DD32225C6626300925F62 /* MLFileTransferFileViewController.m */; };
@ -290,6 +293,7 @@
E8CF9CC726249640001A1952 /* MLSettingsAboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8CF9CC026249640001A1952 /* MLSettingsAboutViewController.m */; };
E8DED06225388BE8003167FF /* MLSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8DED06125388BE8003167FF /* MLSearchViewController.m */; };
F9C277F46F5157194744C491 /* Pods_shareSheet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F1488206B764014DD7EC92A /* Pods_shareSheet.framework */; };
FB2F7FAE1616F093C3E3B7E3 /* Contact.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4345AD68A77CBACCCA9FA1D /* Contact.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -576,11 +580,11 @@
26FC619524EB6C270094C302 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = external/en.lproj/iosShare.strings; sourceTree = "<group>"; };
26FE3BC91C61A6C3003CC230 /* MLResizingTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLResizingTextView.h; sourceTree = "<group>"; };
26FE3BCA1C61A6C3003CC230 /* MLResizingTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLResizingTextView.m; sourceTree = "<group>"; };
282FE922A600668B10016B4C /* MonalWrapperModels.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MonalWrapperModels.swift; sourceTree = "<group>"; };
29250DA62DD2322383585B2B /* Pods_MonalUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MonalUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
2B7A5555D807EE78C95217FD /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2C59BAF969550DFAC27E5F2B /* Pods_MonalXMPPUnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MonalXMPPUnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2C9B95CF9DA11FCEE44990A0 /* Chat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Chat.swift; sourceTree = "<group>"; };
2D8673A73C41D0B1697FE97D /* LoginScreen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LoginScreen.swift; sourceTree = "<group>"; };
2E5021A8D40FCC591D952104 /* Pods-NotificaionService.alpha-ios.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificaionService.alpha-ios.xcconfig"; path = "Target Support Files/Pods-NotificaionService/Pods-NotificaionService.alpha-ios.xcconfig"; sourceTree = "<group>"; };
32CA4F630368D1EE00C91783 /* MonalSourceCodePrefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MonalSourceCodePrefix.pch; sourceTree = "<group>"; };
@ -607,6 +611,7 @@
3EB7A7084FA9A8F68A3D251C /* Pods-MonalXMPPUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalXMPPUnitTests.debug.xcconfig"; path = "Target Support Files/Pods-MonalXMPPUnitTests/Pods-MonalXMPPUnitTests.debug.xcconfig"; sourceTree = "<group>"; };
4049F81F60EA5B7A57A4E9C6 /* Pods-NotificationService.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.beta.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.beta.xcconfig"; sourceTree = "<group>"; };
404FB187FD6CB3DD41DAC820 /* AimErrors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AimErrors.swift; sourceTree = "<group>"; };
405F76B4AD0B916C50352D23 /* Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = "<group>"; };
43FFAD161EF5A0B1CB149814 /* Pods-shareSheet.alpha-ios.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-shareSheet.alpha-ios.xcconfig"; path = "Target Support Files/Pods-shareSheet/Pods-shareSheet.alpha-ios.xcconfig"; sourceTree = "<group>"; };
4862C3A0242FB4F709B8F3FF /* Pods-MonalXMPPUnitTests.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalXMPPUnitTests.beta.xcconfig"; path = "Target Support Files/Pods-MonalXMPPUnitTests/Pods-MonalXMPPUnitTests.beta.xcconfig"; sourceTree = "<group>"; };
4A614910EEF29D66DD4B37E3 /* Pods-NotificaionService.adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificaionService.adhoc.xcconfig"; path = "Target Support Files/Pods-NotificaionService/Pods-NotificaionService.adhoc.xcconfig"; sourceTree = "<group>"; };
@ -779,6 +784,7 @@
B8155E63F8DE80FF36D0B3B7 /* Pods-NotificationService.adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.adhoc.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.adhoc.xcconfig"; sourceTree = "<group>"; };
BC9E05245CF07072A35AE126 /* Pods-another.im.alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-another.im.alpha.xcconfig"; path = "Target Support Files/Pods-another.im/Pods-another.im.alpha.xcconfig"; sourceTree = "<group>"; };
BFA9EFD7A8064201C81F52CF /* Pods-Monal.alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Monal.alpha.xcconfig"; path = "Target Support Files/Pods-Monal/Pods-Monal.alpha.xcconfig"; sourceTree = "<group>"; };
C02B964344F7E01D60E660D7 /* ScenarioLogIn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ScenarioLogIn.swift; sourceTree = "<group>"; };
C10490482612ED2F0054AC9E /* MLEmoji.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MLEmoji.swift; sourceTree = "<group>"; };
C10490E22612F3D00054AC9E /* MLCrypto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MLCrypto.swift; sourceTree = "<group>"; };
C10490EA2612F3E00054AC9E /* EncryptedPayload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptedPayload.swift; sourceTree = "<group>"; };
@ -906,6 +912,8 @@
C1F5C7A72775DA000001F295 /* MLContactSoftwareVersionInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MLContactSoftwareVersionInfo.h; sourceTree = "<group>"; };
C1F5C7A82775DA000001F295 /* MLContactSoftwareVersionInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MLContactSoftwareVersionInfo.m; sourceTree = "<group>"; };
C1F5C7AB2777621B0001F295 /* ContactResources.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactResources.swift; sourceTree = "<group>"; };
C4345AD68A77CBACCCA9FA1D /* Contact.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Contact.swift; sourceTree = "<group>"; };
C8DEED95641012F70DC22087 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = "<group>"; };
CCF3CF336EBAA5802383370F /* WelcomeScreen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WelcomeScreen.swift; sourceTree = "<group>"; };
D02192F22C89BB3800202A59 /* BlockedUsers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsers.swift; sourceTree = "<group>"; };
D0FA79B02C7E5C7400216D2A /* ServerDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerDetails.swift; sourceTree = "<group>"; };
@ -1443,7 +1451,7 @@
name = tools;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
29B97314FDCFA39411CA2CEA = {
isa = PBXGroup;
children = (
8414ADF92A7ABAC900EFFCCC /* Packages */,
@ -1571,7 +1579,8 @@
children = (
7E6AF38E2CEB9110004328B5 /* MonalXmppWrapper.swift */,
404FB187FD6CB3DD41DAC820 /* AimErrors.swift */,
282FE922A600668B10016B4C /* MonalWrapperModels.swift */,
E23C31EA05858AFC0AB43D06 /* Scenaries */,
8C5F2E42A69F9A7B93A20F78 /* Models */,
);
path = XMPP;
sourceTree = "<group>";
@ -1765,6 +1774,18 @@
path = WebRTC;
sourceTree = "<group>";
};
8C5F2E42A69F9A7B93A20F78 /* Models */ = {
isa = PBXGroup;
children = (
C8DEED95641012F70DC22087 /* Account.swift */,
C4345AD68A77CBACCCA9FA1D /* Contact.swift */,
2C9B95CF9DA11FCEE44990A0 /* Chat.swift */,
405F76B4AD0B916C50352D23 /* Message.swift */,
);
name = Models;
path = Models;
sourceTree = "<group>";
};
C1049187261301530054AC9E /* MonalXMPPUnitTests */ = {
isa = PBXGroup;
children = (
@ -1831,6 +1852,15 @@
name = Frameworks;
sourceTree = "<group>";
};
E23C31EA05858AFC0AB43D06 /* Scenaries */ = {
isa = PBXGroup;
children = (
C02B964344F7E01D60E660D7 /* ScenarioLogIn.swift */,
);
name = Scenaries;
path = Scenaries;
sourceTree = "<group>";
};
EA534340732BF66B533E4C0B /* Generated */ = {
isa = PBXGroup;
children = (
@ -2144,7 +2174,7 @@
eu,
"es-AR",
);
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
mainGroup = 29B97314FDCFA39411CA2CEA;
packageReferences = (
C1F5C7AD2777638B0001F295 /* XCRemoteSwiftPackageReference "swift-collections" */,
841898A82957712000FEC77D /* XCRemoteSwiftPackageReference "ViewExtractor" */,
@ -2755,7 +2785,11 @@
C11E557980B75AA90738EC9C /* LoginScreen.swift in Sources */,
1C8760F8FB99C27D0C3A6ED1 /* RegistrationScreen.swift in Sources */,
1767C5109B06AA6FDCD990E6 /* AimErrors.swift in Sources */,
598A717356906687AD101542 /* MonalWrapperModels.swift in Sources */,
3BBDABE6BF04654E4D73FE94 /* Account.swift in Sources */,
FB2F7FAE1616F093C3E3B7E3 /* Contact.swift in Sources */,
07D2570A3091519439B47A6A /* Chat.swift in Sources */,
DEDA22BC3DBA90E586F6B7CE /* Message.swift in Sources */,
5C2B6A5C14F38F315ECC3F5E /* ScenarioLogIn.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View file

@ -0,0 +1,33 @@
import Foundation
import SwiftUI
struct Account: Identifiable {
let id: Int
let local: String
let domain: String
let resource: String
let isEnabled: Bool
var jid: String {
"\(local)@\(domain)"
}
init?(_ dict: NSDictionary) {
guard let id = dict.value(forKey: "account_id") as? Int else { return nil }
guard let local = dict.value(forKey: "username") as? String else { return nil }
guard let domain = dict.value(forKey: "domain") as? String else { return nil }
guard let resource = dict.value(forKey: "resource") as? String else { return nil }
guard let isEnabled = dict.value(forKey: "enabled") as? Bool else { return nil }
self.id = id
self.local = local
self.domain = domain
self.resource = resource
self.isEnabled = isEnabled
}
}
extension Account: UniversalInputSelectionElement {
var icon: Image? { nil }
var text: String? { jid }
}

View file

@ -0,0 +1,27 @@
import Foundation
import monalxmpp
struct Chat: Identifiable {
let accountId: Int
let participantJid: String
let participantName: String?
var id: String {
"\(accountId)_\(participantJid)"
}
var name: String {
if let participantName, !participantName.isEmpty {
return participantName
} else {
return participantJid
}
}
init?(_ obj: MLContact) {
guard let accId = obj.accountID as? Int else { return nil }
accountId = accId
participantJid = obj.contactJid
participantName = obj.nickName
}
}

View file

@ -0,0 +1,16 @@
import Foundation
import monalxmpp
struct Contact: Identifiable {
let ownerId: Int
let contactJid: String
let name: String?
var id: String { contactJid }
init?(_ obj: MLContact) {
ownerId = obj.accountID.intValue
contactJid = obj.contactJid
name = obj.nickName.isEmpty ? nil : obj.nickName
}
}

View file

@ -0,0 +1,29 @@
import Foundation
import monalxmpp
struct Message: Identifiable {
let accountId: Int
let participantJid: String
let dbId: Int
let stanzaId: String
let timestamp: Date
let body: String
let isInbound: Bool
let encrypted: Bool
var id: String {
"\(accountId)|\(dbId)"
}
init?(_ obj: MLMessage) {
guard let accId = obj.accountID as? Int, let dbId = obj.messageDBId as? Int else { return nil }
accountId = accId
participantJid = obj.participantJid
self.dbId = dbId
stanzaId = obj.stanzaId
timestamp = obj.timestamp
body = obj.messageText
isInbound = obj.inbound
encrypted = obj.encrypted
}
}

View file

@ -1,110 +0,0 @@
import Foundation
import monalxmpp
import SwiftUI
// MARK: - Account
enum AccountsAvailability {
case noAccounts
case allDisabled
case someEnabled
}
struct Account: Identifiable {
let id: Int
let local: String
let domain: String
let resource: String
let isEnabled: Bool
var jid: String {
"\(local)@\(domain)"
}
init?(_ dict: NSDictionary) {
guard let id = dict.value(forKey: "account_id") as? Int else { return nil }
guard let local = dict.value(forKey: "username") as? String else { return nil }
guard let domain = dict.value(forKey: "domain") as? String else { return nil }
guard let resource = dict.value(forKey: "resource") as? String else { return nil }
guard let isEnabled = dict.value(forKey: "enabled") as? Bool else { return nil }
self.id = id
self.local = local
self.domain = domain
self.resource = resource
self.isEnabled = isEnabled
}
}
extension Account: UniversalInputSelectionElement {
var icon: Image? { nil }
var text: String? { jid }
}
// MARK: - Contact
struct Contact: Identifiable {
let ownerId: Int
let contactJid: String
let name: String?
var id: String { contactJid }
init?(_ obj: MLContact) {
ownerId = obj.accountID.intValue
contactJid = obj.contactJid
name = obj.nickName.isEmpty ? nil : obj.nickName
}
}
// MARK: - Chat
struct Chat: Identifiable {
let accountId: Int
let participantJid: String
let participantName: String?
var id: String {
"\(accountId)_\(participantJid)"
}
var name: String {
if let participantName, !participantName.isEmpty {
return participantName
} else {
return participantJid
}
}
init?(_ obj: MLContact) {
guard let accId = obj.accountID as? Int else { return nil }
accountId = accId
participantJid = obj.contactJid
participantName = obj.nickName
}
}
// MARK: Message
struct Message: Identifiable {
let accountId: Int
let participantJid: String
let dbId: Int
let stanzaId: String
let timestamp: Date
let body: String
let isInbound: Bool
let encrypted: Bool
var id: String {
"\(accountId)|\(dbId)"
}
init?(_ obj: MLMessage) {
guard let accId = obj.accountID as? Int, let dbId = obj.messageDBId as? Int else { return nil }
accountId = accId
participantJid = obj.participantJid
self.dbId = dbId
stanzaId = obj.stanzaId
timestamp = obj.timestamp
body = obj.messageText
isInbound = obj.inbound
encrypted = obj.encrypted
}
}

View file

@ -1,6 +1,12 @@
import Foundation
import monalxmpp
enum AccountsAvailability {
case noAccounts
case allDisabled
case someEnabled
}
final class MonalXmppWrapper: ObservableObject {
@Published private(set) var accountsAvailability: AccountsAvailability = .noAccounts
@Published private(set) var accounts: [Account] = []
@ -260,10 +266,12 @@ final class MonalChatWrapper: ObservableObject {
acc.setMAMQueryMostRecentFor(monalContact, before: lastStanzaId) { [weak self] msgs, _ in
self?.mamRequestInProgress = false
if !(msgs ?? []).isEmpty {
DispatchQueue.main.async { [weak self] in
self?.refreshMessages()
}
}
}
}
}
private extension MonalChatWrapper {

View file

@ -0,0 +1 @@
import Foundation