initial commit
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# Task Desktop Notifications
|
||||
|
||||
Added June 2026 to `dashboard.js`. Tasks now fire browser desktop notifications when overdue or due within 1 hour.
|
||||
|
||||
## Architecture
|
||||
|
||||
The `checkForTaskAlerts()` function runs on every dashboard refresh tick (configurable, default 30s) alongside existing `checkForNewCriticalAlerts()` and `checkForApproachingPromised()`.
|
||||
|
||||
```
|
||||
tick() → loadDashboardData() → checkForNewCriticalAlerts() → checkForApproachingPromised() → checkForTaskAlerts()
|
||||
```
|
||||
|
||||
## Notification types
|
||||
|
||||
| Alert | Trigger | Title | Body format |
|
||||
|---|---|---|---|
|
||||
| Overdue | Task past due, not completed, newly detected | "🔴 Task Overdue" | "[title] — was due [Xh Ym / Xm] ago" |
|
||||
| Upcoming | Task due within 1 hour, not completed, newly detected | "⏰ Task Due Soon" | "[title] — due in [<1 min / Xm]" |
|
||||
|
||||
## Deduplication
|
||||
|
||||
New alerts are only sent for tasks NOT in the last-known set:
|
||||
- `lastOverdueTaskIds` — Set of overdue task IDs (resets each tick)
|
||||
- `lastUpcomingTaskIds` — Set of upcoming task IDs (resets each tick)
|
||||
|
||||
A task that's overdue on tick 1 fires once. On tick 2, it's already in the set and won't fire again. If the task is completed, it falls out of both filters.
|
||||
|
||||
## Respects settings
|
||||
|
||||
Uses the same `window.appSettings.desktopNotifications` toggle as RO overdue alerts. If desktop notifications are disabled in Site Configuration, task alerts are muted too.
|
||||
|
||||
## Browser API
|
||||
|
||||
Uses the existing `showDesktopNotification()` helper which wraps `Notification` API. First use prompts for permission. Once granted, notifications appear as OS-level toasts across all tabs/apps.
|
||||
|
||||
## Code location
|
||||
|
||||
- `dashboard.js`: `checkForTaskAlerts()` function (~line 2011), `tick()` at line 205
|
||||
- `dashboard.js`: `showDesktopNotification()` helper at line 2054
|
||||
Reference in New Issue
Block a user