aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/mail/Accounts.qml
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/modules/mail/Accounts.qml')
-rw-r--r--desktop/modules/mail/Accounts.qml22
1 files changed, 22 insertions, 0 deletions
diff --git a/desktop/modules/mail/Accounts.qml b/desktop/modules/mail/Accounts.qml
index 0ae6886..c2bc9d8 100644
--- a/desktop/modules/mail/Accounts.qml
+++ b/desktop/modules/mail/Accounts.qml
@@ -184,6 +184,28 @@ Singleton {
accounts = next;
}
+ // Recount whenever the notmuch database commits. Without this the counts
+ // were read only at shell start and when the mail page opened, so the
+ // tile drifted behind the real inbox for the rest of the session.
+ //
+ // The directory is watched, not a file: Xapian replaces its files on
+ // commit, which kills a watch held on any one of them. notmuch is asked
+ // for its own database path, so a moved database needs no edit here.
+ Process {
+ id: watcher
+ running: true
+ command: ["sh", "-c",
+ 'exec inotifywait -m -q -e close_write,moved_to --format x "$(notmuch config get database.path)/xapian"']
+ // One commit touches several files; the timer turns that burst into
+ // one refresh.
+ stdout: SplitParser { onRead: debounce.restart() }
+ // A dead watcher is the original bug again, silently. Come back.
+ onExited: respawn.start()
+ }
+
+ Timer { id: debounce; interval: 300; onTriggered: root.refresh() }
+ Timer { id: respawn; interval: 5000; onTriggered: watcher.running = true }
+
// Launching qtmaildir. It takes no arguments, so there is nothing to tell
// it about the account or thread clicked.
Process { id: openProc; command: [`${Quickshell.env("HOME")}/bin/qtmaildir`] }