diff --git a/enzevalos_iphone/SwiftUI/Read/ReadModel.swift b/enzevalos_iphone/SwiftUI/Read/ReadModel.swift index 53460c2f3d66cb3d92a71ce27d73be5b9e57c240..8b78a307a25522bf619148a86d8207bb21cbcc1c 100644 --- a/enzevalos_iphone/SwiftUI/Read/ReadModel.swift +++ b/enzevalos_iphone/SwiftUI/Read/ReadModel.swift @@ -45,6 +45,7 @@ class ReadModel <M: DisplayMail>: ObservableObject { init(mail: M) { self.mail = mail + mail.markAsRead(isRead: true) } func newUserAction(action: UserAction) -> PreMailData? { @@ -54,6 +55,9 @@ class ReadModel <M: DisplayMail>: ObservableObject { // TODO return nil case .Delete: + if let mail = mail as? MailRecord { + PersistentDataProvider.dataProvider.deleteMail(mail: mail) + } dismissView = true return nil case .Move: @@ -66,6 +70,9 @@ class ReadModel <M: DisplayMail>: ObservableObject { case .Forward: return PreMailData(body: mail.preparePreviousMailBody(), subject: ResponseType.Reply.addPrefix(subject: mail.subject), to: [], cc: [], bcc: []) case .Archive: + if let mail = mail as? MailRecord { + PersistentDataProvider.dataProvider.archiveMail(mail: mail) + } dismissView = true return nil case .Unread: diff --git a/enzevalos_iphone/persistentData/FolderRecord.swift b/enzevalos_iphone/persistentData/FolderRecord.swift index f89e98a32791cee6929d35a7e9a3a7fe45a4d8f5..37d358782986b92b5b34c21dad3b863982217cba 100644 --- a/enzevalos_iphone/persistentData/FolderRecord.swift +++ b/enzevalos_iphone/persistentData/FolderRecord.swift @@ -16,6 +16,20 @@ extension FolderRecord { request.sortDescriptors = [NSSortDescriptor(key: "flags", ascending: false), NSSortDescriptor(key: "path", ascending: true)] return request } + + static var onlySpecialFolderFetchRequest: NSFetchRequest<FolderRecord> { + let request: NSFetchRequest<FolderRecord> = NSFetchRequest<FolderRecord>(entityName: FolderRecord.entityName) + request.predicate = NSPredicate(format: " flags > 0") + request.sortDescriptors = [NSSortDescriptor(key: "flags", ascending: false), NSSortDescriptor(key: "path", ascending: true)] + return request + } + + static var onlyUserDefinedFolderFetchRequest: NSFetchRequest<FolderRecord> { + let request: NSFetchRequest<FolderRecord> = NSFetchRequest<FolderRecord>(entityName: FolderRecord.entityName) + request.predicate = NSPredicate(format: " flags == 0") + request.sortDescriptors = [NSSortDescriptor(key: "path", ascending: true)] + return request + } } extension FolderRecord { diff --git a/enzevalos_iphone/persistentData/MailRecord.swift b/enzevalos_iphone/persistentData/MailRecord.swift index 46f675480d4f7eb9d0e2e1ddaa9dda08258623a2..7abc53e8fe77043c48466e6ebb7cd7a7b9147521 100644 --- a/enzevalos_iphone/persistentData/MailRecord.swift +++ b/enzevalos_iphone/persistentData/MailRecord.swift @@ -142,6 +142,13 @@ extension MailRecord: DisplayMail { var mcoflag = MCOMessageFlag.init(rawValue: Int(flag)) mcoflag = mcoflag.update(with: .seen) ?? mcoflag self.flag = Int16(mcoflag.rawValue) + + if let moc = self.managedObjectContext { + try? PersistentDataProvider.dataProvider.save(taskContext: moc) + } + if let folder = self.inFolder?.path { + MailHandler.init().setFlag(UInt64(self.uID), flags: mcoflag, folder: folder) + } } } diff --git a/enzevalos_iphone/persistentData/PersistentDataProvider.swift b/enzevalos_iphone/persistentData/PersistentDataProvider.swift index da2877a7f5175ee57430a076e3c04c282c10c774..9cfdc3ce876e03cb04ed932049e13494cefe6e52 100644 --- a/enzevalos_iphone/persistentData/PersistentDataProvider.swift +++ b/enzevalos_iphone/persistentData/PersistentDataProvider.swift @@ -477,11 +477,22 @@ class PersistentDataProvider { } func deleteMail(mail: MailRecord) { - let taskContext = newTaskContext() - taskContext.perform { - taskContext.delete(mail) - try? self.save(taskContext: taskContext) + guard let folder = mail.inFolder?.path else { + let taskContext = newTaskContext() + taskContext.perform { + taskContext.delete(mail) + try? self.save(taskContext: taskContext) + } + return + } + moveMails(with: [UInt64(mail.uID)], from: folder, to: UserManager.backendTrashFolderPath) + } + + func archiveMail(mail: MailRecord) { + guard let folder = mail.inFolder?.path else { + return } + moveMails(with: [UInt64(mail.uID)], from: folder, to: UserManager.backendArchiveFolderPath) } func moveMails(with uids: [UInt64], from: String, to: String) {