Alpha 3
This commit is contained in:
committed by
Dr. Michael Kübler
parent
8e95cc3acd
commit
c5e46946ac
@@ -40,9 +40,11 @@ struct MessageActionButtons: View {
|
||||
struct MessageDetailWindow: View {
|
||||
let store: MailStore
|
||||
let messageID: String?
|
||||
@State private var draft: ComposeDraft?
|
||||
@Environment(\.openWindow) private var openWindow
|
||||
@State private var confirmingDelete = false
|
||||
@AppStorage("mailDeleteConfirmation") private var deleteConfirmation: MailDeleteConfirmation = .always
|
||||
@AppStorage("markReadImmediately") private var markReadImmediately = false
|
||||
@AppStorage("markReadDelaySeconds") private var markReadDelaySeconds = 1
|
||||
|
||||
private var message: MailMessage? {
|
||||
_ = store.archiveRevision
|
||||
@@ -57,15 +59,15 @@ struct MessageDetailWindow: View {
|
||||
guard let message else { return }
|
||||
switch command {
|
||||
case .reply, .forward:
|
||||
draft = .from(message, accountID: store.accountID(for: message.id), forwarding: command == .forward)
|
||||
let draft = ComposeDraft.from(message, accountID: store.accountID(for: message.id), forwarding: command == .forward)
|
||||
openWindow(id: "compose", value: store.prepareCompose(draft))
|
||||
case .delete:
|
||||
if deleteConfirmation.isRequired(count: 1) { confirmingDelete = true }
|
||||
else { Task { await store.deleteMessages(ids: [message.id]) } }
|
||||
default: break
|
||||
}
|
||||
}.disabled(message == nil || store.isBusy)
|
||||
}.disabled(message == nil)
|
||||
}
|
||||
.sheet(item: $draft) { ComposeView(store: store, draft: $0) }
|
||||
.alert("Nachricht löschen?", isPresented: $confirmingDelete) {
|
||||
Button("Abbrechen", role: .cancel) {}
|
||||
Button("Löschen", role: .destructive) {
|
||||
@@ -76,8 +78,12 @@ struct MessageDetailWindow: View {
|
||||
? "Die Nachricht wird auch auf dem Server endgültig gelöscht."
|
||||
: "Die Nachricht wird auch auf dem Server in den Papierkorb verschoben.")
|
||||
}
|
||||
.task(id: messageID) {
|
||||
if let message, !message.isRead { await store.setRead(ids: [message.id], read: true) }
|
||||
.task(id: AutoReadRequest(ids: Set([messageID].compactMap { $0 }), immediately: markReadImmediately, seconds: markReadDelaySeconds)) {
|
||||
guard let message, !message.isRead else { return }
|
||||
do {
|
||||
try await AutoReadRequest(ids: [message.id], immediately: markReadImmediately, seconds: markReadDelaySeconds).wait()
|
||||
await store.setRead(ids: [message.id], read: true)
|
||||
} catch { /* The message window closed before the read delay elapsed. */ }
|
||||
}
|
||||
.alert("MikeMail", isPresented: Binding(get: { store.error != nil }, set: { if !$0 { store.error = nil } })) {
|
||||
Button("OK") { store.error = nil }
|
||||
|
||||
Reference in New Issue
Block a user