add leaving status for leaving groups

pull/799/head
ryanzhao 2 years ago
parent 34d41d7d40
commit e37756ccf4

@ -307,13 +307,19 @@ public class HomeViewModel {
case .closedGroup: case .closedGroup:
try MessageSender try MessageSender
.leave(db, groupPublicKey: threadId) .leave(db, groupPublicKey: threadId)
.done { _ in .done { (interactionId, error) in
Storage.shared.writeAsync { db in Storage.shared.writeAsync { db in
if let _ = error {
try Interaction
.filter(id: interactionId)
.updateAll(db, Interaction.Columns.body.set(to: "group_leave_error".localized()))
} else {
_ = try SessionThread _ = try SessionThread
.filter(id: threadId) .filter(id: threadId)
.deleteAll(db) .deleteAll(db)
} }
} }
}
.retainUntilComplete() .retainUntilComplete()
case .openGroup: case .openGroup:

@ -478,7 +478,7 @@ extension MessageSender {
/// unregisters from push notifications. /// unregisters from push notifications.
/// ///
/// The returned promise is fulfilled when the `MEMBER_LEFT` message has been sent to the group. /// The returned promise is fulfilled when the `MEMBER_LEFT` message has been sent to the group.
public static func leave(_ db: Database, groupPublicKey: String) throws -> Promise<Int64> { public static func leave(_ db: Database, groupPublicKey: String) throws -> Promise<(Int64, Error?)> {
guard let thread: SessionThread = try? SessionThread.fetchOne(db, id: groupPublicKey) else { guard let thread: SessionThread = try? SessionThread.fetchOne(db, id: groupPublicKey) else {
SNLog("Can't leave nonexistent closed group.") SNLog("Can't leave nonexistent closed group.")
return Promise(error: MessageSenderError.noThread) return Promise(error: MessageSenderError.noThread)
@ -503,7 +503,9 @@ extension MessageSender {
} }
// Send the update to the group // Send the update to the group
let promise = try MessageSender let (promise, seal) = Promise<(Int64, Error?)>.pending()
do {
try MessageSender
.sendNonDurably( .sendNonDurably(
db, db,
message: ClosedGroupControlMessage( message: ClosedGroupControlMessage(
@ -533,12 +535,15 @@ extension MessageSender {
.infoMessage(db, sender: userPublicKey) .infoMessage(db, sender: userPublicKey)
).update(db) ).update(db)
} }
seal.fulfill((interactionId, nil))
} }
.map { _ in .catch { error in
return interactionId seal.fulfill((interactionId, error))
}
}
catch {
seal.fulfill((interactionId, error))
} }
// Update the group (if the admin leaves the group is disbanded) // Update the group (if the admin leaves the group is disbanded)
let wasAdminUser: Bool = try GroupMember let wasAdminUser: Bool = try GroupMember

Loading…
Cancel
Save