From e4cc5edf966cf729964cb0eb6078a174ccbcfc43 Mon Sep 17 00:00:00 2001 From: Oliver Wiese <oliver.wiese@fu-berlin.de> Date: Thu, 8 Apr 2021 22:20:14 +0200 Subject: [PATCH] add update mail states (is read, flags) and move mails --- enzevalos_iphone/SwiftUI/Read/ReadModel.swift | 7 +++++++ .../persistentData/FolderRecord.swift | 14 ++++++++++++++ .../persistentData/MailRecord.swift | 7 +++++++ .../PersistentDataProvider.swift | 19 +++++++++++++++---- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/enzevalos_iphone/SwiftUI/Read/ReadModel.swift b/enzevalos_iphone/SwiftUI/Read/ReadModel.swift index 53460c2f..8b78a307 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 f89e98a3..37d35878 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 46f67548..7abc53e8 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 da2877a7..9cfdc3ce 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) { -- GitLab