|  |  |  | @ -77,9 +77,19 @@ public final class OpenGroupAPIV2 : NSObject { | 
		
	
		
			
				|  |  |  |  |     public struct CompactPollResponseBody { | 
		
	
		
			
				|  |  |  |  |         let room: String | 
		
	
		
			
				|  |  |  |  |         let messages: [OpenGroupMessageV2] | 
		
	
		
			
				|  |  |  |  |         let deletions: [Int64] | 
		
	
		
			
				|  |  |  |  |         let deletions: [Deletion] | 
		
	
		
			
				|  |  |  |  |         let moderators: [String] | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     public struct Deletion { | 
		
	
		
			
				|  |  |  |  |         let id: Int64 | 
		
	
		
			
				|  |  |  |  |         let deletedMessageID: Int64 | 
		
	
		
			
				|  |  |  |  |          | 
		
	
		
			
				|  |  |  |  |         public static func from(_ json: JSON) -> Deletion? { | 
		
	
		
			
				|  |  |  |  |             guard let id = json["id"] as? Int64, let deletedMessageID = json["deleted_message_id"] as? Int64 else { return nil } | 
		
	
		
			
				|  |  |  |  |             return Deletion(id: id, deletedMessageID: deletedMessageID) | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // MARK: Convenience | 
		
	
		
			
				|  |  |  |  |     private static func send(_ request: Request) -> Promise<JSON> { | 
		
	
	
		
			
				
					|  |  |  | @ -164,7 +174,7 @@ public final class OpenGroupAPIV2 : NSObject { | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                         return nil | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                     let deletions = json["deletions"] as? [Int64] ?? [] | 
		
	
		
			
				|  |  |  |  |                     let deletions = given(json["deletions"] as? [JSON]) { $0.compactMap { Deletion.from($0) } } ?? [] | 
		
	
		
			
				|  |  |  |  |                     let moderators = json["moderators"] as? [String] ?? [] | 
		
	
		
			
				|  |  |  |  |                     return try? parseMessages(from: json, for: room, on: server).map { messages in | 
		
	
		
			
				|  |  |  |  |                         return CompactPollResponseBody(room: room, messages: messages, deletions: deletions, moderators: moderators) | 
		
	
	
		
			
				
					|  |  |  | @ -331,21 +341,20 @@ public final class OpenGroupAPIV2 : NSObject { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         let request = Request(verb: .get, room: room, server: server, endpoint: "deleted_messages", queryParameters: queryParameters) | 
		
	
		
			
				|  |  |  |  |         return send(request).then(on: DispatchQueue.global(qos: .userInitiated)) { json -> Promise<[Int64]> in | 
		
	
		
			
				|  |  |  |  |             guard let deletions = json["ids"] as? [JSON] else { throw Error.parsingFailed } | 
		
	
		
			
				|  |  |  |  |             let deletedMessageIDs = deletions.compactMap { $0["deleted_message_id"] as? Int64 } | 
		
	
		
			
				|  |  |  |  |             let serverIDs = deletions.compactMap { $0["id"] as? Int64 } | 
		
	
		
			
				|  |  |  |  |             let serverID = serverIDs.max() ?? 0 | 
		
	
		
			
				|  |  |  |  |             guard let rawDeletions = json["ids"] as? [JSON] else { throw Error.parsingFailed } | 
		
	
		
			
				|  |  |  |  |             let deletions = rawDeletions.compactMap { Deletion.from($0) } | 
		
	
		
			
				|  |  |  |  |             let serverID = deletions.map { $0.id }.max() ?? 0 | 
		
	
		
			
				|  |  |  |  |             let lastDeletionServerID = storage.getLastDeletionServerID(for: room, on: server) ?? 0 | 
		
	
		
			
				|  |  |  |  |             if serverID > lastDeletionServerID { | 
		
	
		
			
				|  |  |  |  |                 let (promise, seal) = Promise<[Int64]>.pending() | 
		
	
		
			
				|  |  |  |  |                 storage.write(with: { transaction in | 
		
	
		
			
				|  |  |  |  |                     storage.setLastDeletionServerID(for: room, on: server, to: serverID, using: transaction) | 
		
	
		
			
				|  |  |  |  |                 }, completion: { | 
		
	
		
			
				|  |  |  |  |                     seal.fulfill(deletedMessageIDs) | 
		
	
		
			
				|  |  |  |  |                     seal.fulfill(deletions.map { $0.deletedMessageID }) | 
		
	
		
			
				|  |  |  |  |                 }) | 
		
	
		
			
				|  |  |  |  |                 return promise | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
		
			
				|  |  |  |  |                 return Promise.value(deletedMessageIDs) | 
		
	
		
			
				|  |  |  |  |                 return Promise.value(deletions.map { $0.deletedMessageID }) | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
	
		
			
				
					|  |  |  | 
 |