diff --git a/MailCore/Models/Message.swift b/MailCore/Models/Message.swift index 3290b9807..fee6a561c 100644 --- a/MailCore/Models/Message.swift +++ b/MailCore/Models/Message.swift @@ -21,7 +21,7 @@ import MailResources import RealmSwift public class MessageUidsResult: Decodable { - public let messageShortUids: [Int] + public let messageShortUids: [String] public let cursor: String private enum CodingKeys: String, CodingKey { @@ -35,7 +35,7 @@ public class MessageByUidsResult: Decodable { } public class MessageDeltaResult: Decodable { - public let deletedShortUids: [Int] + public let deletedShortUids: [String] public let addedShortUids: [String] public let updated: [MessageFlags] public let cursor: String @@ -46,6 +46,24 @@ public class MessageDeltaResult: Decodable { case updated case cursor = "signature" } + + // FIXME: Remove this constructor when mixed Int/String arrayis fixed by backend + public required init(from decoder: Decoder) throws { + let container: KeyedDecodingContainer = try decoder.container(keyedBy: CodingKeys.self) + + if let deletedShortUids = try? container.decode([String].self, forKey: .deletedShortUids) { + self.deletedShortUids = deletedShortUids + } else { + deletedShortUids = try container.decode([Int].self, forKey: .deletedShortUids).map { "\($0)" } + } + if let addedShortUids = try? container.decode([String].self, forKey: .addedShortUids) { + self.addedShortUids = addedShortUids + } else { + addedShortUids = try container.decode([Int].self, forKey: .addedShortUids).map { "\($0)" } + } + updated = try container.decode([MessageFlags].self, forKey: .updated) + cursor = try container.decode(String.self, forKey: .cursor) + } } public class MessageFlags: Decodable {