wip
This commit is contained in:
parent
b4a708ffad
commit
cc2207ba82
|
@ -13,12 +13,13 @@ struct Message: Identifiable {
|
|||
let accountId: Int
|
||||
let participantJid: String
|
||||
let dbId: Int
|
||||
let messageId: String
|
||||
let stanzaId: String
|
||||
let timestamp: Date
|
||||
let body: String
|
||||
let isInbound: Bool
|
||||
let encrypted: Bool
|
||||
let status: MessageStatus
|
||||
var status: MessageStatus
|
||||
|
||||
var id: String {
|
||||
"\(accountId)|\(dbId)"
|
||||
|
@ -29,6 +30,7 @@ struct Message: Identifiable {
|
|||
accountId = accId
|
||||
participantJid = obj.participantJid
|
||||
self.dbId = dbId
|
||||
messageId = obj.messageId
|
||||
stanzaId = obj.stanzaId
|
||||
timestamp = obj.timestamp
|
||||
body = obj.messageText
|
||||
|
@ -50,7 +52,5 @@ struct Message: Identifiable {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// print("AAAAAA", body, status, "\n", "orig: ", obj.hasBeenReceived, obj.hasBeenSent, " id:", dbId, " stanza:", stanzaId)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ final class WrapperChat: ObservableObject {
|
|||
guard
|
||||
let monalContact = db.contactList()
|
||||
.first(where: {
|
||||
$0.accountID.intValue == with.ownerId
|
||||
$0.accountID.intValue == with.ownerId &&
|
||||
$0.contactJid == with.contactJid
|
||||
})
|
||||
else { return nil }
|
||||
self.monalContact = monalContact
|
||||
|
@ -46,7 +47,8 @@ final class WrapperChat: ObservableObject {
|
|||
guard
|
||||
let monalContact = db.contactList()
|
||||
.first(where: {
|
||||
$0.accountID.intValue == with.accountId
|
||||
$0.accountID.intValue == with.accountId &&
|
||||
$0.contactJid == with.participantJid
|
||||
})
|
||||
else { return nil }
|
||||
self.monalContact = monalContact
|
||||
|
@ -57,23 +59,6 @@ final class WrapperChat: ObservableObject {
|
|||
|
||||
subscribe()
|
||||
reloadMessages()
|
||||
|
||||
// guard let account = accounts.first(where: { $0.id == with.accountId }) else { return nil }
|
||||
//
|
||||
// var contact = contacts.first(where: { $0.ownerId == with.accountId && $0.contactJid == with.participantJid })
|
||||
// if contact == nil {
|
||||
// let semaphore = DispatchSemaphore(value: 0)
|
||||
// Task {
|
||||
// await addContact(contactJid: with.participantJid, forAccountID: with.accountId)
|
||||
// semaphore.signal()
|
||||
// }
|
||||
// semaphore.wait()
|
||||
// contact = contacts.first(where: { $0.ownerId == with.accountId && $0.contactJid == with.participantJid })
|
||||
// }
|
||||
//
|
||||
// guard let contact else { return nil }
|
||||
// let chatModel = WrapperChat(account: account, contact: contact, db: db, xmpp: xmpp)
|
||||
// return chatModel
|
||||
}
|
||||
|
||||
deinit {
|
||||
|
@ -100,7 +85,6 @@ final class WrapperChat: ObservableObject {
|
|||
if let newMlMessage = db.message(forHistoryID: histId), let message = Message(newMlMessage) {
|
||||
messages.insert(message, at: 0)
|
||||
}
|
||||
print("CCCCC", newMessageId)
|
||||
xmpp.sendMessage(text, to: monalContact, isEncrypted: monalContact.isEncrypted, isUpload: false, messageId: newMessageId)
|
||||
}
|
||||
|
||||
|
@ -109,13 +93,16 @@ final class WrapperChat: ObservableObject {
|
|||
if mamRequestInProgress { return }
|
||||
mamRequestInProgress = true
|
||||
|
||||
let lastStanzaId = messages.last?.stanzaId // last here because list is reversed
|
||||
let lastStanzaId = messages.last?.messageId // 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
|
||||
self?.mamRequestInProgress = false
|
||||
print(msgs ?? [])
|
||||
if let msgs, !msgs.isEmpty {
|
||||
print(msgs)
|
||||
self?.reloadMessages()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -142,8 +129,10 @@ private extension WrapperChat {
|
|||
switch notification.name.rawValue {
|
||||
case kMonalSentMessageNotice:
|
||||
if let stanza = notification.userInfo?["message"] as? XMPPStanza, let id = stanza.id {
|
||||
if let index = messages.firstIndex(where: { $0.stanzaId == id }) {
|
||||
print(index)
|
||||
if let index = messages.firstIndex(where: { $0.messageId == id }) {
|
||||
var message = messages[index]
|
||||
message.status = .sent
|
||||
messages[index] = message
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue