Commit graph

421 commits

Author SHA1 Message Date
Johannes Millan
6faca760f0
fix: address review findings from daily changes (#6944)
* fix: address review findings from daily changes

- Add setPermissionCheckHandler alongside setPermissionRequestHandler
  for defense-in-depth in Electron (permission queries now also denied)
- Fix tagIds merge ordering in issue service: provider adapter tags are
  now merged with default tags instead of being silently overwritten
- Execute deleteTask action last in automations to prevent subsequent
  actions from failing on a deleted task
- Add unit tests for getTaskDefaults logic (TODAY_TAG filtering,
  defaultNote, tagIds merging, deduplication, context tags)
- Add test for deleteTask execution ordering in ActionExecutor

https://claude.ai/code/session_01UhoR5g7RQgm4E6bZCvU9PS

* refactor: revert YAGNI changes from review fixes

- Revert tagIds merge in issue.service.ts: no provider currently sets
  tagIds in getAddTaskData, so merging solves a hypothetical problem
- Revert deleteTask sort in action-executor: the automations feature is
  new and nobody has hit this edge case yet
- Remove tests for reverted behavior, keep tests for existing features
  (TODAY_TAG filtering, defaultNote, note override prevention)

https://claude.ai/code/session_01UhoR5g7RQgm4E6bZCvU9PS

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-24 12:11:47 +01:00
Johannes Millan
caf85a1b57 fix(electron): enable webSecurity, add permission handler, improve cert logging
Enable webSecurity (same-origin policy) since CORS is already handled at
the session level via onBeforeSendHeaders and onHeadersReceived. Add
setPermissionRequestHandler to deny unnecessary permissions (webcam,
microphone, geolocation). Improve certificate-error logging with warn
level and URL context.
2026-03-23 10:52:43 +01:00
Johannes Millan
a118f65d54 refactor(electron): bundle preload script with esbuild to support sandbox mode
Bundle preload.ts into a single file so all local imports (e.g.
ipc-events.const) are inlined at build time. This allows removing
sandbox: false since the bundled preload only requires the built-in
electron module, which is allowed in sandboxed preloads.
2026-03-22 19:38:21 +01:00
Johannes Millan
815341d5e8 fix(electron): explicitly disable sandbox for preload script compatibility
The preload script uses require() for local modules which is not
supported in Electron's sandboxed preload environment (default since
Electron 20). This only affects Electron's preload API restrictions,
not Chromium's OS-level process sandbox which remains active.
2026-03-22 19:16:32 +01:00
Johannes Millan
02bc3e88e3 feat(two-way-sync): add plugin OAuth, two-way field sync, and remote issue deletion
Add OAuth support for plugins with PKCE, token persistence in local-only
IndexedDB, and Electron/web redirect handling. Extend two-way sync with
dueDay, dueWithTime, and timeEstimate field mappings including mutually
exclusive field clearing. Support remote issue deletion on task delete
and remote deletion detection during polling.

Add Google Calendar plugin (disabled from bundled builds pending legal
review) as a development reference for the plugin OAuth and two-way
sync APIs.

Additional fixes:
- Restore accidentally deleted focus-mode translation keys
- Remove full Task[] from deleteTasks action to prevent op-log bloat
- Add dueDay/deadlineDay format validation guards (#6908)
- Fix Android reminder alarm cancel intent matching
- Validate dueDay format to prevent false overdue from corrupted data
- Fix PKCE test expectation after utility consolidation
2026-03-22 13:02:41 +01:00
Johannes Millan
6b9ef0dee2 feat(overlay): resizable responsive overlay with opacity and always-show
- Make overlay window resizable with persisted bounds via simpleStore
- Add new OverlayIndicatorConfig section (isEnabled, isAlwaysShow, opacity)
- Move setting from misc.isOverlayIndicatorEnabled to overlayIndicator
  with migration in reducer
- Add responsive CSS with scale variable (full/tiny modes)
- Add always-show mode that keeps overlay visible when main window is open
- Add opacity slider (10-100%) applied as CSS variable
- Consolidate overlay init into single updateOverlayEnabled path
- Remove dead code: updateOverlayTheme, setIgnoreMouseEvents, unused
  shortcut param
2026-03-20 21:36:30 +01:00
Johannes Millan
29441b7ae2 fix(tray): prevent stale progress bar events from overriding stopped icon
Guard the SET_PROGRESS_BAR tray icon update with an _isRunning check so
that late IPC events (e.g. trailing throttle emissions from focus mode)
cannot override the correct stopped icon after a task is unset.

Closes #3410
2026-03-19 18:58:52 +01:00
Johannes Millan
78ef3c39d5 fix(electron): always show app border unless in fullscreen
Previously the 1px border only appeared with the custom title bar
enabled. Now it shows for all Electron windows and is hidden during
fullscreen via IPC-driven body class toggling.
2026-03-10 18:57:49 +01:00
Thomas Tisch
319727f908
fix: add proxy env support for jira integration #6324 (#6574)
* fix: add proxy env support for jira integration #6324

* refactor(providers): address code review feedback from proxy support for jira provider

* refactor(providers): removed manually setting electron session proxy as settings are automatically picked

---------

Co-authored-by: Thomas Tisch <thomas.tisch@hobex.at>
2026-03-09 13:09:51 +01:00
Johannes Millan
0ea0ba143f fix(electron): improve protocol URL handling and register URL scheme on Linux
Suppress noisy "EXITING due to failed single instance lock" message when
a second instance is launched via xdg-open for protocol URL handling.
Register superproductivity:// as a MIME type handler in the .desktop file
so Linux users no longer need manual xdg-settings configuration.
Remove duplicate requestSingleInstanceLock() call in start-app.ts.

Closes #173
2026-03-05 16:45:05 +01:00
Johannes Millan
c889220e05 fix(tray): update tray icon immediately when task tracking starts
Previously the tray icon only changed from "stopped" to "running" when
SET_PROGRESS_BAR fired on the first addTimeSpent tick, which could take
up to 60 seconds depending on the tracking interval. Now the
CURRENT_TASK_UPDATED handler sets the running icon immediately.

Extracts getRunningIconPath() helper to share icon selection logic
between SET_PROGRESS_BAR and CURRENT_TASK_UPDATED handlers.

Closes #6566
2026-03-03 11:27:20 +01:00
Johannes Millan
8d41a79150 fix(electron): address review feedback for keyboard focus fix
- Gate blur() to Windows only (not supported on Wayland, limited on macOS)
- Add setTimeout delay in ready-to-show to match showOrFocus pattern
- Add webContents.focus() in ready-to-show for renderer-level focus
- Add isDestroyed() guards in setTimeout callbacks
- Only restore focus on resume/unlock if window was visible before
  suspend/lock to avoid surfacing hidden/minimized windows
2026-03-01 13:03:01 +01:00
Johannes Millan
d29d5b1a24 fix(electron): restore keyboard focus on Windows after reboot
On Windows, BrowserWindow.show() can silently fail to acquire keyboard
focus after a system reboot (electron#20464). This leaves the window in
a "phantom focus" state where clicks work but typing does not.

- Add blur()+focus() cycle after show() in ready-to-show handler
- Add webContents.focus() in showOrFocus() delayed callback
- Add showOrFocus() call in resume/unlock-screen power monitor handlers

Fixes #6663
2026-03-01 12:54:13 +01:00
Johannes Millan
ea4460c7e2 fix(electron): use separate tray GUIDs per Windows distribution type
Windows ties tray icon GUIDs to the executable path when unsigned.
Portable and NSIS builds have different exe paths, so sharing a single
GUID caused silent tray creation failure in whichever distribution
registered second. Each distribution type now gets its own stable GUID.

Portable keeps the original GUID to avoid disrupting existing users.
NSIS and Store get new GUIDs for a clean start.

Also adds a try/catch fallback that retries without GUID if creation
fails (e.g., stale GUID registrations).

Closes #6647
2026-02-28 21:41:00 +01:00
Johannes Millan
bbda6b1694 fix(electron): handle legacy simpleSettings directory causing EISDIR crash
In older app versions simpleSettings was stored as a directory. Reading
it as a file threw EISDIR which was caught/logged but saveSimpleStore()
would subsequently fail with an uncaught EISDIR when writing to the
same path.

- Catch EISDIR in loadSimpleStoreAll and rename legacy dir to .bak
- Catch EISDIR in saveSimpleStore, remove dir and retry write
- Replace module-level DATA_PATH with lazy getDataPath() to fix
  stale path when --user-data-dir or Snap overrides userData
- Remove debug console.log that leaked settings to stdout
- Replace console.error with electron-log for consistency

Closes #4791
2026-02-25 15:27:57 +01:00
Onur Neşvat
d65621272d
feat: add today's tasks and active timer to tray context menu (#6599)
* feat: add today's tasks and active timer to tray context menu

* Fix test: add missing onSwitchTask mock to window.ea
2026-02-23 15:42:07 +01:00
Johannes Millan
1059eeea04 refactor(sync): clean up file-based sync adapter dead code and duplication
Remove dead methods (getCurrentSyncData, wouldConflict), dead types
(SyncVersionConflictError, MigrationInProgressError, MigrationLockContent),
dead IPC handler (fileSyncGetRevAndClientUpdate), and a dead mutation.
Deduplicate retry logic in _uploadWithRetry by reusing _buildMergedSyncData.
Make Electron file writes atomic via write-to-temp-then-rename.
2026-02-15 11:19:22 +01:00
Johannes Millan
26ed8a2b43 fix(sync): clear processedOpIds on deleteAllData and preserve error objects
Clear _processedOpIds and persist state in _deleteAllData() to prevent
stale localStorage from surviving app restart after a delete-all operation.

Preserve original Error objects in electron/local-file-sync.ts catch
blocks instead of wrapping with `new Error(e as string)`, which loses
structured fields like `code` and the original stack trace.
2026-02-12 16:27:56 +01:00
Johannes Millan
c53b199bbf chore(backup): increase retention to 30 recent and 21 daily 2026-02-11 20:37:40 +01:00
Johannes Millan
c0fbfd14f2 feat(backup): use timestamped filenames with smart retention policy
Backups now use YYYY-MM-DD_HHmmss.json naming instead of YYYY-MM-DD.json,
allowing multiple backups per day instead of overwriting. A cleanup routine
keeps the 14 most recent backups plus the last backup of each day for 7 days.
2026-02-10 21:22:19 +01:00
Johannes Millan
eced8f4496 fix(electron): skip singleton lock on macOS to fix App Store sandbox error
requestSingleInstanceLock() creates a Unix domain socket blocked by the
macOS App Store sandbox, causing the app to silently fail to start (#6275).
macOS natively prevents multiple app launches, so the lock is unnecessary.
2026-02-10 18:44:19 +01:00
Pue-Tsuâ
9a9e31f36a
Adding Ctrl-V pasting function from clipboard. (#5998)
* docs(clipboard): Added the plan to guide AI implementation.

* feat(clipboard): Changed requirement to reflect the fact that some functions can't be done in browsers.

* feat(clipboard): Added Ctrl-v pasting functionality from clipboard.

- Storing image in IndexedDB in browser, and storing image in userdata path in Electron.
- Added image resizing in markdown.

* docs(clipboard): Removed requirement file since it's implemented.

* feat(clipboard): Added clipboard images management in settings.

* feat(tests): Enhance focus mode and inline markdown tests with mock store and actions

* feat(clipboard): Add electron-only annotation to findImageFile function

* feat(clipboard): Prevent memory leaks by revoking cached blob URLs on image deletion

* feat(clipboard): Improve paste handling by tracking current placeholder and cleaning up old progress

* Merge branch 'master' into feat/clipboard-files

* feat(marked-options): Refactor renderer methods and add hooks for image sizing syntax

* feat(clipboard): Added feature that pasted image will be added to task attachment.

* revert: Revert the change of lock file from last merge.

* revert: Removed unwanted changes.

* refactor(clipboard): Cleaned up code that seems not necessary.

* feat(clipboard): Handle storage quota exceeded error and update messages

* feat(clipboard): Implement validated IPC handlers for clipboard image operations

* feat(clipboard): Add error handling for clipboard image URL resolution

* feat(clipboard): Refactor file operations to use async fs promises

* feat(clipboard): Integrate ClipboardPasteHandlerService for improved paste handling

* feat(clipboard): Rename resolveUrl to resolveIndexedDbUrl for clarity and update references

* feat(clipboard): Add defaultPath option to showOpenDialog for improved user experience

* feat(clipboard): Implement getDefaultClipboardImagesPath utility for consistent image path retrieval

* feat(clipboard): Refactor MIME type handling to use centralized mapping for improved maintainability

* feat(clipboard): Add computed property to toggle markdown parsing based on formatting settings

* revert: Removed unwanted changes.

* revert: Removed unwanted chagnes.

* revert: Removed unwanted chagnes.

* fix(clipboard-images-cfg): remove debug log from selectImagePath method

* refactor(paste-handler): update currentPlaceholder to use getter/setter methods

* fix(docs): correct formatting and improve clarity in multiple wiki pages

* fix: update dialog handling in initLocalFileSyncAdapter for type safety

* revert: Revert space change.

* fix(inline-markdown): ensure model is set to an empty string instead of undefined

* fix(tests): update clipboard images section locator to use collapsible title
2026-02-04 15:46:51 +01:00
Johannes Millan
cba5ba3f12 fix: apply code review fixes across sync, electron, and issue panel
- Fix isLoading staying true after search results arrive in issue panel
- Use getPayloadKey() for correct entity key derivation in conflict resolution
- Update archive-wins comments/logs to reflect all op types, not just updates
- Add archive-wins unit tests for local/remote archive vs UPDATE/DELETE
- Tighten WebDAV archive E2E assertion to deterministic archive-wins check
- Add @deprecated JSDoc to legacy pfapi meta-model-ctrl.js
- Refactor wasMaximizedBeforeHide from exported let to getter/setter
2026-01-30 17:45:33 +01:00
Johannes Millan
b6de071636 fix(electron): remove duplicate lines in main-window close/minimize handlers 2026-01-30 17:06:47 +01:00
Garrett04
4167633a62
fix(window): restore maximized window state from startup/minimized/tray (#6268)
* fix(window): restore maximized window state from startup/minimized/tray

Changes:
Call `win.restore()` before `win.show()` to ensure the window returns to its previous state when restored from startup/minimized/tray.

Fixes #5466

* fix(window): add manual tracking of maximized window state before hide

Changes:
add wasMaximizedBeforeHide flag to manually track and handle maximized window state reliably across all platforms

* fix(window): add manual tracking of maximized window state before hide

Changes:
add wasMaximizedBeforeHide flag to manually track and handle maximized window state reliably across all platforms
2026-01-30 16:40:57 +01:00
TecTrix
6f3a8902e2
Increase ping interval and idle time in order to not waste CPU cycles. (#6227)
If I understand the codebase correctly, this will do exactly as the title states, if not, please educate me :). Also is there a way to turn of idle checking when it is  also turned of in the settings?
2026-01-28 15:37:50 +01:00
Johannes Millan
6ca7223dc6 refactor: add markdown renderer tests and remove dead IPC code
- Add 18 unit tests for marked-options-factory covering:
  - Image renderer (sizing syntax, lazy loading, dimensions)
  - Paragraph renderer (headings h1./h2. syntax)
  - parseImageDimensionsFromTitle helper
  - preprocessMarkdown hook
- Export parseImageDimensionsFromTitle and preprocessMarkdown for testability
- Remove unused IPC.TOGGLE_FULLSCREEN event and handler
  (F11 fullscreen is handled directly in main-window.ts)
2026-01-26 20:55:29 +01:00
Benjamin Hooper
5a2b675383
feat(ui): Desktop Full Screen Mode (F11) #5851 (#6183) 2026-01-26 13:22:32 +01:00
Johannes Millan
d578beb52b style(electron): make custom window title bar fully transparent 2026-01-21 20:45:52 +01:00
johannesjo
09d86d8afb fix(electron): resolve macOS app quit not responding
- Replace deprecated `selector:` properties with proper Electron `role:` in macOS menu
- Add standard macOS menu items (hide, hideOthers, unhide)
- Ensure before-close handlers always call setDone() to prevent app hanging
- Change sync error dialog from confirm() to alert() since result was ignored
2026-01-21 16:54:11 +01:00
Johannes Millan
9f2d2b9a6e fix(focus-mode): prevent tray indicator jumping during focus sessions
The tray icon was jumping between showing task time and focus session time
when focus mode was active with a task being tracked. This occurred because
the tray display logic didn't know which focus mode was active.

Changes:
- Send focus mode type (Countdown/Pomodoro/Flowtime) from frontend to Electron
- Update IPC handler to receive and pass focus mode type to tray message creation
- Implement three-mode priority logic in createIndicatorMessage():
  1. Countdown/Pomodoro modes: Show focus session countdown timer
  2. Flowtime mode: Show task estimate or title (no timer)
  3. No focus mode: Show normal task time (existing behavior)
- Update TypeScript type definitions for updateCurrentTask()
- Update unit tests to mock the new mode() signal

This ensures the tray displays the correct timer without jumping based on
the active focus mode, matching the behavior of the overlay indicator.

Fixes jumping tray indicator during focus mode + tracking
2026-01-20 17:07:23 +01:00
Johannes Millan
fa8bad6292 fix(electron): restore hidden window on taskbar click
Fixes #6042 where app wouldn't launch from taskbar when minimize to tray
was enabled. The second-instance handler now uses showOrFocus() which
properly handles both hidden and minimized windows, matching the behavior
of the tray icon click handler.
2026-01-20 17:07:23 +01:00
Johannes Millan
df386a7a7e fix(electron): only pass tray GUID on Windows to prevent validation error
Electron validates the GUID argument even when undefined is passed,
causing "Invalid GUID format" error on Linux/macOS. Only pass the
GUID argument on Windows where it's needed.
2026-01-13 18:26:45 +01:00
Johannes Millan
9140f51a8d feat(electron): add static GUID to tray icon for Windows
Add a static GUID to the Electron Tray constructor on Windows to persist
tray icon position and visibility preferences across app updates. This
prevents the tray icon from being hidden in the overflow menu after
Microsoft Store updates change the executable path.

Closes #5973
2026-01-13 18:26:45 +01:00
Johannes Millan
ce91c8b1dc Merge branch 'master' into feat/operation-logs
Resolve merge conflicts:
- package.json: use @types/node@^22.19.5
- sync-form.const.ts: keep eslint-disable for naming convention
- global-config.effects.ts: remove extra blank line
- unlink-all-tasks-on-provider-deletion.effects.ts: keep deprecation notice
- auto-fix-typia-errors.ts: keep better-typed getValueByPath
- undo-task-delete.meta-reducer.spec.ts: keep getLastDeletePayload import
- Accept deletions for files refactored into operation-logs architecture
2026-01-10 17:08:09 +01:00
Johannes Millan
e6da7ced37 chore(deps): upgrade ESLint to v9 with flat config
- Upgrade eslint from v8 to v9.39.2
- Upgrade typescript-eslint to v8.52.0 (unified package)
- Add angular-eslint package for flat config support
- Migrate from .eslintrc.json to eslint.config.js (flat config)
- Update package configs for sync-md, automations, boilerplate-solid-js
- Remove unused eslint-disable directives
- Fix lint errors (empty interface, template eqeqeq)

BREAKING: Requires Node.js 18.18+ (ESLint 9 requirement)
2026-01-10 16:08:11 +01:00
Johannes Millan
6017da13c7 refactor: integrate pfapi into oplog 3 2026-01-07 14:10:05 +01:00
Johannes Millan
db990b7018 refactor: integrate pfapi into oplog 2 2026-01-07 13:37:05 +01:00
Johannes Millan
a42c8a4cee Merge branch 'master' into feat/operation-logs
* master:
  refactor(dialog): remove unused OnDestroy implementation from DialogAddNoteComponent
  fix(calendar): poll all calendar tasks and prevent auto-move of existing tasks
  docs: add info about how to translate stuff #5893
  refactor(calendar): replace deprecated toPromise with firstValueFrom
  build: update links to match our new organization
  add QuestArc to community plugins list
  feat(calendar): implement polling for calendar task updates and enhance data retrieval logic
  fix(heatmap): use app theme class instead of prefers-color-scheme
  fix(focus-mode): start break from banner when manual break start enabled
  feat(i18n): connect Finnish and Swedish translation files
  refactor(focus-mode): split sessionComplete$ and breakComplete$ into single-responsibility effects
  Fixing Plugin API doc on persistence

# Conflicts:
#	src/app/features/issue/store/poll-issue-updates.effects.ts
#	src/app/t.const.ts
2026-01-05 19:12:46 +01:00
Johannes Millan
1a79592aca build: update links to match our new organization 2026-01-05 14:45:06 +01:00
Johannes Millan
e6ea0d74f0 Merge branch 'master' into feat/operation-logs
* master: (37 commits)
  16.8.0
  feat(i18n): add new translations
  fix: address code review issues from today's changes
  fix: address code review issues from today's changes
  fix(data-repair): change quickSetting to CUSTOM when startDate is missing
  fix(test): fix fetch spy setup in audio tests
  fix(android): sync time tracking from notification correctly on resume
  fix(database): prevent repeated error dialogs when disk is full
  fix(reminder): prevent dismissed reminders from reappearing
  fix(task-repeat): prevent race condition when saving repeat config
  fix(android): add error handling for native service calls
  fix(reminder): cancel native Android reminders immediately on task deletion
  fix(error-handler): use getErrorTxt to prevent [object Object] in error titles
  fix(planner): use task startDate for weekly repeat weekday calculation
  fix(focus-mode): use independent 1s timer for Pomodoro countdown
  feat(focus-mode): add Skip Break button to banner during active breaks
  feat(notes): add auto-save to fullscreen markdown editor
  fix(reflection-note): prevent trailing spaces from being deleted while typing
  fix(sync): add error handling for JSON parse failures in sync data
  fix(error-handling): prevent [object Object] from appearing in error messages
  ...

# Conflicts:
#	src/app/core/persistence/database.service.ts
#	src/app/features/android/store/android-focus-mode.effects.ts
#	src/app/features/android/store/android-foreground-tracking.effects.ts
#	src/app/features/reminder/reminder.service.spec.ts
#	src/app/features/reminder/reminder.service.ts
#	src/app/features/tasks/dialog-view-task-reminders/dialog-view-task-reminders.component.ts
#	src/app/features/tasks/store/task-reminder.effects.spec.ts
#	src/app/features/tasks/store/task-reminder.effects.ts
#	src/app/features/work-context/store/work-context.effects.spec.ts
#	src/app/features/work-context/store/work-context.effects.ts
#	src/app/t.const.ts
#	src/assets/i18n/en.json
2026-01-02 19:56:30 +01:00
Johannes Millan
e571d6e3bc fix(error-handling): prevent [object Object] from appearing in error messages
Improve error text extraction utilities to never return "[object Object]"
when displaying error messages to users. The fix adds more robust fallback
mechanisms including:

- Check for message, name, statusText properties before calling toString()
- Detect "[object Object]" result and fallback to JSON.stringify()
- Provide meaningful fallback messages when all extraction methods fail

Fixes #5790
2026-01-02 15:40:14 +01:00
Johannes Millan
bb254dd07b Merge branch 'master' into feat/operation-logs
* master:
  fix(test): use dynamic date in year boundary test to avoid today collision
  fix(electron): reduce idle detection log verbosity
  fix(plugins): ensure setCounter creates valid SimpleCounter records
  feat(android): add quick add widget
  perf(android): prewarm WebView during idle time to speed up startup
  fix(ical): prevent race condition in lazy loader
  Merge branch 'master' into master

# Conflicts:
#	src/app/features/android/store/android.effects.ts
#	src/app/features/schedule/ical/get-relevant-events-from-ical.spec.ts
2025-12-31 14:20:58 +01:00
Johannes Millan
62d449a82f fix(electron): reduce idle detection log verbosity
Change frequent idle check logs from info to debug level to prevent
polluting system logs (e.g., /var/log/syslog) every 5 seconds.

Closes #5794
2025-12-31 13:42:18 +01:00
Johannes Millan
6c098b6eaa Merge branch 'master' into feat/operation-logs
Resolve conflict in webdav-sync-expansion.spec.ts:
- Use simplified sync verification without reload (sync updates NgRx directly)
- Test: B marks task done -> sync -> verify A sees task as done
2025-12-29 21:54:15 +01:00
Johannes Millan
c4023b4f45 fix(security): address CodeQL security alerts
- Fix incomplete HTML sanitization in errors.ts (alerts #50-52)
  Apply regex repeatedly to handle nested inputs like <scri<script>pt>
- Add lgtm comment for intentional cert bypass in jira.ts (alert #40)
- Fix incomplete string escaping in load-env.js (alert #39)
  Escape backslashes before quotes
- Fix shell command injection in check-file.js (alerts #37-38)
  Use execFileSync with args array instead of string interpolation
2025-12-23 13:42:57 +01:00
Johannes Millan
501b8b5a32 Merge branch 'master' into feat/operation-logs
* master:
  fix(build): remove deprecated win32metadata from electron-builder config
  fix(focus-mode): address critical focus mode and Android notification issues
  test(task-repeat): fix flaky tests and add Mon/Wed/Fri coverage (#5594)
  fix(electron): delay window focus after notification to prevent accidental input
  feat(task): add Go to Task button for all newly created tasks
  fix(sync): show context-aware permission error for Flatpak/Snap
  fix(android): skip reminder dialog on Android to fix snooze button
  fix(focus-mode): respect isFocusModeEnabled setting in App Features
  fix(android): sync notification timer when time spent is manually changed
  feat(sync): add WebDAV Test Connection button and improve UX
  fix(build): ensure consistent Windows EXE metadata for installer and portable
  Update es.json
  Update es.json
  Update es.json
  feat(i18n): update Turkish language
  16.7.3
  fix: es.json

# Conflicts:
#	src/app/features/android/store/android.effects.ts
#	src/app/features/config/form-cfgs/sync-form.const.ts
#	src/app/features/focus-mode/store/focus-mode.effects.ts
#	src/app/features/tasks/store/task-ui.effects.ts
#	src/app/imex/sync/sync-wrapper.service.ts
#	src/app/pages/config-page/config-page.component.ts
#	src/app/pfapi/api/sync/providers/webdav/webdav.ts
#	src/app/t.const.ts
2025-12-22 20:44:21 +01:00
Johannes Millan
18a0e78f12 fix(sync): show context-aware permission error for Flatpak/Snap
Add isFlatpak() detection to Electron API and show environment-specific
error messages when file permission errors occur during sync:
- Flatpak users see Flatseal and ~/.var/app/ guidance
- Snap users see 'snap connect' and ~/snap/... guidance
- Other users see generic permission error

Addresses #4078
2025-12-22 15:11:50 +01:00
Johannes Millan
ab0371fac6 fix(e2e): improve supersync test stability and build compatibility
E2E test improvements:
- Increase timeouts for sync button and add task bar visibility checks
- Add retry logic for sync button wait in setupSuperSync
- Handle dialog close race conditions in save button click
- Fix simple counter test to work with collapsible sections and inline forms

Build fixes:
- Add es2022 lib/target and baseUrl to electron tsconfig
- Include window-ea.d.ts for proper type resolution
- Add @ts-ignore for import.meta.url in reminder service for Electron build
2025-12-19 09:59:44 +01:00
Johannes Millan
9f1d68ea40 Merge branch 'master' into feat/operation-logs
* master:
  fix(electron): use includes() instead of in operator for hostname check
  fix(docker): use Debian-based nginx for ARM64 QEMU compatibility
  16.6.1
  build: add resolved URL and integrity for ical.js version 2.1.0
  fix(ui): align time tracking button overlay (#5720)
  fix(calendar): handle Office 365 updateTimezones crash (#5722)
  fix(repeat): use fallback for undefined startDate (#5724)
  build(welcome): update wording for issue claiming instructions
  fix(docker): drop arm/v7 platform to fix QEMU build failure
2025-12-16 18:14:12 +01:00