Commit graph

16461 commits

Author SHA1 Message Date
dependabot[bot]
50fa3b7b76
chore(deps): bump aws-sdk-s3 in the bundler group across 1 directory
Bumps the bundler group with 1 update in the / directory: [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby).


Updates `aws-sdk-s3` from 1.169.0 to 1.208.0
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.208.0
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-18 19:23:29 +00:00
Johannes Millan
5ca64347ef fix(docker): use Debian-based nginx for ARM64 QEMU compatibility
Alpine's apk triggers fail under QEMU emulation on ARM64 builds.
Switch to nginx:1 (Debian-based) which works reliably with QEMU.
2025-12-14 13:15:03 +01:00
Johannes Millan
0e17203d0a 16.6.1 2025-12-14 12:33:38 +01:00
Johannes Millan
ebb4af3d73 build: add resolved URL and integrity for ical.js version 2.1.0 2025-12-14 12:29:19 +01:00
Johannes Millan
6f3d9efc78 fix(ui): align time tracking button overlay (#5720)
Move progress circle SVG outside button element and position
at wrapper level for more reliable centering across platforms.
2025-12-14 12:27:23 +01:00
Johannes Millan
887bf05ee1 fix(calendar): handle Office 365 updateTimezones crash (#5722)
Add try-catch wrapper around ICAL.helpers.updateTimezones() to prevent
crash when Office 365 calendars have malformed timezone data that causes
"Cannot read properties of null (reading 'parent')" error.

When updateTimezones fails, the code now falls back to using the raw
component without timezone updates, allowing calendar events to still
be imported.
2025-12-14 12:07:20 +01:00
Johannes Millan
3283e3ce85 fix(repeat): use fallback for undefined startDate (#5724)
Remove early validation that throws when startDate is undefined.
The existing getEffectiveRepeatStartDate() utility already provides
a fallback to '1970-01-01', allowing legacy data without startDate
to work correctly.
2025-12-14 11:57:33 +01:00
Johannes Millan
541798d3f0 build(welcome): update wording for issue claiming instructions 2025-12-13 12:03:56 +01:00
Johannes Millan
89d672d1cc fix(docker): drop arm/v7 platform to fix QEMU build failure
Alpine's busybox triggers fail under QEMU emulation on arm/v7,
causing the Docker Hub workflow to fail. 32-bit ARM is rarely
used today, so removing it simplifies the build.
2025-12-12 21:18:34 +01:00
Johannes Millan
a10eb2fcf8 16.6.0 2025-12-12 19:06:20 +01:00
Johannes Millan
a3d65e021c fix(electron): improve window controls overlay for Windows/Linux (#5713)
- Use CSS env(titlebar-area-width) for dynamic DPI-aware spacing
- Increase fallback width from 96px to 140px to prevent button overlap
- Add theme-aware semi-transparent background to window controls
2025-12-12 19:00:12 +01:00
Johannes Millan
077e7960c3 chore(i18n): remove unused legacy pomodoro translations
Remove translation keys that are no longer used after removing
the legacy pomodoro feature:
- F.FOCUS_MODE.POMODORO_BACK, POMODORO_DISABLE, POMODORO_INFO
- F.POMODORO.* (keep only BREAK_IS_DONE)
- GCF.POMODORO.* (keep only duration-related settings)
2025-12-12 15:43:50 +01:00
Johannes Millan
06555b66ff test(focus-mode): add comprehensive unit tests for focus mode components
- Add tests for FocusModeOverlayComponent (banner, actions, navigation)
- Add tests for FocusModeCountdownComponent (countdown timer, rocket states)
- Add tests for FocusModeBreakComponent (break types, skip/complete actions)
- Add tests for FocusModeSessionDoneComponent (confetti, session actions)
- Add tests for FocusModeTaskSelectorComponent (task creation, selection)
2025-12-12 15:22:48 +01:00
Johannes Millan
c21abf886c test(focus-mode): add unit tests for pomodoro settings dialog
- Add comprehensive tests for DialogPomodoroSettingsComponent
- Extend focus-mode-main tests with pomodoro settings button coverage
- Remove legacy pomodoro action imports from allowed-plugin-actions
2025-12-12 15:11:10 +01:00
Johannes Millan
4ebfac0067 refactor: remove legacy pomodoro feature, add pomodoro settings to focus mode
- Remove standalone legacy pomodoro feature (entire directory)
- Simplify PomodoroConfig to only duration settings
- Add dialog-pomodoro-settings component for focus mode
- Show gear icon in focus mode when Pomodoro mode is selected
- Remove pomodoro from global settings form
- Update play-button component to remove pomodoro controls
- Update take-a-break service to remove pomodoro reset
- Update task-electron effects to remove pomodoro references
2025-12-12 14:50:14 +01:00
Johannes Millan
76f4635e94
Merge pull request #5612 from novikov1337danil/feat/5557-allow-empty-time-filters
feat(filtering): allow empty time/tag filters
2025-12-12 14:30:29 +01:00
Johannes Millan
303421978b test(e2e): reload page after sync to reflect synced state
In 'should sync task done state' test, Client A needs to reload after
syncing to see the changes from Client B. Without reload, the UI
still shows the old 'isDone' state even though sync completed.
2025-12-11 19:06:18 +01:00
Johannes Millan
4ec17b4595 test(e2e): stabilize WebDAV sync projects test
- Navigate to project after creation (createProject doesn't auto-navigate)
- Expand Projects group and wait for project to appear before navigating
- Wait for URL to change to /project/ route after clicking project
- Use more specific page-title selector to avoid matching old view titles
- Increase timeout for title assertion
2025-12-11 18:47:56 +01:00
Johannes Millan
ca387ca2bf refactor(e2e): improve test reliability with deterministic waits
- Add waitForStatePersistence utility for sync tests to replace hardcoded delays
- Fix nav-list vs nav-list-tree selector inconsistencies across test files
- Replace waitForTimeout calls with proper element waits and Angular stability checks
- Update selectors.ts constants to use correct nav-list-tree component selector
2025-12-11 18:47:56 +01:00
Johannes Millan
fe40bdf179 build(deps): update dependencies to fix security vulnerabilities
- Override @conventional-changelog/git-client to ^2.5.1 to fix CVE-2025-59433
- Update glob (via nested deps) to ^11.1.0 to fix CVE-2025-64756
- Update node-forge to ^1.3.3 to fix CVE-2025-12816 & CVE-2025-66030
2025-12-11 18:47:56 +01:00
Johannes Millan
8147c23073
Merge pull request #5657 from theBenForce/feat/linear-provider
feat(#3303): add linear support
2025-12-11 18:44:08 +01:00
Johannes Millan
4877a334eb
Merge pull request #5706 from johannesjo/claude/analyze-issue-plan-0116Q6aLtrXqEk9Up7kmzDcr
fix(repeat): calculate correct target day based on repeat pattern whe…
2025-12-11 18:30:56 +01:00
Johannes Millan
f7312a8934 Fix(e2e): Stabilize WebDAV sync tests
Implemented navigateToProjectByName in ProjectPage to resolve 'TypeError: navigateToProjectByName is not a function' in webdav-sync-expansion.spec.ts. This method now includes robust logic for expanding the 'Projects' group and multiple fallback strategies for locating project buttons.

Added 1-second delays before triggerSync() calls in webdav-sync-expansion.spec.ts (after marking a task undone) and webdav-sync-full.spec.ts (after task deletion). This mitigates race conditions, allowing local state changes to persist before synchronization, thus reducing test flakiness.

All WebDAV E2E tests are now passing consistently.
2025-12-11 11:52:33 +01:00
Johannes Millan
e268076332 test(e2e): try to fix e2e tests 2025-12-10 21:26:48 +01:00
Johannes Millan
19643e781c fix(e2e): WebDAV sync tests connection and timeout issues
- Update WebDAV base URL to use 127.0.0.1 instead of localhost in E2E sync tests. This resolves ECONNREFUSED errors in CI environments where localhost might resolve to IPv6 (::1) while the WebDAV server binds to IPv4.
- Increase various UI interaction timeouts in ProjectPage to improve stability and prevent flakiness in CI environments.
2025-12-10 20:07:56 +01:00
Johannes Millan
b7b6595c51 Merge remote-tracking branch 'origin/master'
* origin/master:
  chore(deps-dev): bump glob
  allow click on buttons under hidden .current-task-title
2025-12-10 16:20:12 +01:00
Johannes Millan
4a07ecfcdd refactor: cleanup 2025-12-10 15:29:03 +01:00
Johannes Millan
1b13113442 Fix(e2e): Stabilize WebDAV sync tests
- Isolate WebDAV sync tests with unique folders per test to prevent cross-test interference.
- Fix 'should sync task attachments' by correcting the attachment link selector, updating text expectation, and using force click to bypass UI interception.
- Fix 'should sync task done state' by adding hover action for the done button and correcting the 'isDone' class assertion.
2025-12-10 12:15:51 +01:00
Claude
a0cc8bd41b
fix(repeat): correct WEEKLY Friday test to expect fallback due to ISO week boundary
Friday (Jan 10) is in the previous ISO week compared to Wednesday (Jan 15),
so getNewestPossibleDueDate's diffInWeeks check returns -1 and breaks the
loop early. This correctly falls back to task.dueDay.

In contrast, Monday (Jan 13) is in the same ISO week as Wednesday (Jan 15),
so diffInWeeks = 0 and Monday is found correctly.
2025-12-10 11:04:16 +00:00
Claude
d2a35a6e7b
fix(repeat): correct test expectations for getNewestPossibleDueDate behavior
The tests incorrectly expected fallback behavior when the repeat pattern
doesn't match today. getNewestPossibleDueDate actually returns the most
recent valid occurrence (even if in the past), not null.

Updated tests:
- WEEKLY on Monday: expects Jan 13 (last Monday before Jan 15)
- WEEKLY on Friday: expects Jan 10 (last Friday before Jan 15)
- MONTHLY on 20th: expects Dec 20 (last 20th before Jan 15)
2025-12-10 10:46:52 +00:00
Claude
259d9d5a62
test(repeat): add deterministic date-based tests using jasmine.clock()
Add a new test suite that uses jasmine.clock().mockDate() to freeze time
at a known date (Wednesday, January 15, 2025). This ensures tests are:
- Deterministic: Same results regardless of when tests run
- Reliable: No flaky tests due to day-of-week dependencies
- Comprehensive: Can test specific scenarios like "Wednesday creating Friday task"

Test scenarios added:
- WEEKLY patterns: Wednesday (matches), Friday (fallback), Monday (fallback)
- MONTHLY patterns: 15th (matches), 20th (fallback)
- DAILY patterns: Every day, every 2 days
- Edge cases: Future startDate (fallback)
2025-12-10 10:33:43 +00:00
Claude
34709427da
test(repeat): add more edge case tests for addRepeatCfgToTaskUpdateTask$ effect
- Add test for WEEKLY pattern when today is NOT the selected day
  (verifies fallback to task.dueDay)
- Add test for invalid repeatEvery value (0)
  (verifies try-catch catches error and falls back gracefully)
- Add test for YEARLY repeat pattern
2025-12-10 10:06:28 +00:00
Johannes Millan
c0e8aa24ac
Merge pull request #5702 from kiausch/fix/unclickable-buttons
allow click on buttons under hidden .current-task-title
2025-12-10 10:58:44 +01:00
Claude
e1742c5a78
fix(repeat): add error handling for undefined startDate and more tests (fixes #5594)
- Guard against undefined startDate before calling getNewestPossibleDueDate
  to prevent throwing errors when startDate is missing from the config
- Wrap the calculation in try-catch for additional safety
- Add comprehensive tests for fallback behavior:
  - Fallback to task.dueDay when startDate is undefined
  - Fallback to task.dueWithTime when both startDate and dueDay are undefined
  - Fallback to Date.now() when no dates are available
  - MONTHLY repeat pattern handling

This addresses the PR review feedback about missing validation for the
optional startDate field.
2025-12-10 09:52:32 +00:00
Claude
2dc5ec8523
fix(repeat): calculate correct target day based on repeat pattern when adding repeat config (fixes #5594)
Use getNewestPossibleDueDate() to calculate the correct target day for
scheduling instead of blindly using startDate which always defaults to
today. This ensures that when creating a repeating task, the task is
scheduled for the next valid occurrence matching the repeat pattern,
not just today's date.

For example, if today is Wednesday and you set a task to repeat every
Friday, the task will now be scheduled for Friday instead of Wednesday.
2025-12-10 09:07:26 +00:00
Johannes Millan
5fbf926183 test(e2e): add comprehensive WebDAV sync E2E tests 2025-12-09 21:23:37 +01:00
Johannes Millan
fcd5c3f2bc
Merge pull request #5700 from johannesjo/dependabot/npm_and_yarn/packages/plugin-dev/automations/npm_and_yarn-bdc76aff73
chore(deps-dev): bump glob from 10.4.5 to 10.5.0 in /packages/plugin-dev/automations in the npm_and_yarn group across 1 directory
2025-12-09 14:41:29 +01:00
dependabot[bot]
fb73837e48
chore(deps-dev): bump glob
Bumps the npm_and_yarn group with 1 update in the /packages/plugin-dev/automations directory: [glob](https://github.com/isaacs/node-glob).


Updates `glob` from 10.4.5 to 10.5.0
- [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/node-glob/compare/v10.4.5...v10.5.0)

---
updated-dependencies:
- dependency-name: glob
  dependency-version: 10.5.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-09 13:28:48 +00:00
Johannes Millan
102ac1c330 16.5.5 2025-12-09 14:26:48 +01:00
Johannes Millan
e3d93de7fc fix(test): add proper waits to app-features E2E test to prevent flakiness
Wait for toggle to be visible after expanding the App Features section
and add a small delay before clicking to ensure the toggle is fully
interactive after the expansion animation.
2025-12-09 14:22:31 +01:00
Johannes Millan
78a4287f3c Merge remote-tracking branch 'origin/master'
* origin/master:
  Fix JSON syntax by adding a comma
2025-12-09 14:10:22 +01:00
Johannes Millan
10d857db1d fix(test): mock Date.now() in scheduling tests to avoid midnight failures (fixes #5609)
Tests were failing when run between 23:01 and 23:59 because adding 1 hour
to Date.now() pushed timestamps into the next day, causing isToday() to
return false and dueWithTime to be cleared unexpectedly.
2025-12-09 14:04:47 +01:00
Johannes Millan
58245c42b0 fix(schedule): respect default reminder setting when drag-scheduling tasks (fixes #5599)
When scheduling tasks via drag-and-drop in the Schedule module, the
reminder was always set to "when it starts" regardless of the user's
configured default reminder setting. Now reads from globalConfig.reminder
.defaultTaskRemindOption instead of hardcoding TaskReminderOptionId.AtStart.
2025-12-09 13:57:17 +01:00
Johannes Millan
2fa6754963 fix(docs): remove broken CalDAV documentation link (#5577)
Remove link to non-existent docs/caldav.md file which was intentionally
deleted during documentation cleanup.
2025-12-09 13:56:32 +01:00
Michael Kiausch
956703ac0b allow click on buttons under hidden .current-task-title 2025-12-09 13:56:16 +01:00
Johannes Millan
eef71b9411 fix(repeat): preserve startDate when changing quick settings (fixes #5594)
Quick settings now only control the repeat pattern (cycle, frequency,
weekdays), not the start date. Previously, selecting any quick setting
would reset the startDate to today, ignoring user-configured dates.
2025-12-09 13:47:48 +01:00
Johannes Millan
a9c1e411eb fix(timezone): correct dueWithTime handling to prevent timezone corruption (fixes #5515) 2025-12-09 13:19:34 +01:00
Johannes Millan
99a158bacb fix(mobile): start page setting not applied on Android (#5689)
Wait for data to be loaded before reading start page config in
DefaultStartPageGuard. Previously, the guard would read the default
config value before user settings were loaded from storage.
2025-12-09 12:18:35 +01:00
Johannes Millan
534095b5dc fix: translation file 2025-12-09 11:56:12 +01:00
Ben Force
ca00dd1c08
Merge branch 'johannesjo:master' into feat/linear-provider 2025-12-08 12:52:10 -06:00