- Pass _retryAttempted flag correctly in _retryUploadWithDirectoryCreation
- Add retry flag to error object to track retry attempts across error boundaries
- Update catch block to check both parameter and error flags
- Fix return type of retry method to handle undefined case
- Update test expectations to match new retry behavior
- Change incorrect error log to debug log in _getUrl method
This prevents infinite recursion when WebDAV server returns 409 Conflict
errors for missing parent directories.
- Replace custom mock server with real hacdias/webdav:latest
- Use existing webdav.yaml configuration and alice/bob users
- Remove unnecessary mock server code following KISS principle
- WebDAV server now matches production setup exactly
- Persistent data storage in ./e2e-webdav-data
This provides more realistic e2e testing with the actual WebDAV
server used in production deployments.
- Add mock WebDAV server with ETag and Last-Modified support
- Create basic WebDAV sync e2e test following KISS principle
- Add docker-compose configuration for isolated testing
- Include npm script for automated WebDAV e2e testing
The minimal setup tests WebDAV configuration and basic sync
functionality with both ETag and Last-Modified fallback support.
- Implements robust WebDAV sync for servers without ETag support
- Adds _extractValidators method for ETag and Last-Modified headers
- Enhances conditional header creation with Last-Modified support
- Adds LOCK/UNLOCK mechanism for safe resource creation
- Implements server capability detection with caching
- Adds NoRevAPIError retry mechanism for missing validators
- Includes comprehensive test coverage for all workflows
- Maintains backward compatibility with existing ETag-based code
This enables WebDAV sync with basic servers that only support
Last-Modified headers while preserving optimal performance
for servers with full ETag support.
- Added support for WebDAV If header with Not token for safe creation
- Implemented LOCK/UNLOCK mechanism for exclusive resource creation
- Added _lockResource() and _unlockResource() helper methods
- Updated _createConditionalHeaders to check server capabilities for safe creation
- Added warning when no safe creation method is available
- Enhanced upload method to use locking when needed for safe creation
- Maintains backward compatibility with ETag-supporting servers
- Updated upload, download, getFileMeta, and remove methods to use validators
- Added _getOrDetectCapabilities() helper for efficient capability caching
- Updated _retrieveEtagWithFallback to support both ETag and Last-Modified validators
- Added NoRevAPIError handling with automatic retry after capability detection
- Fixed conditional header usage to properly support Last-Modified validators
- All tests passing with backward compatibility maintained
- Update upload method to support Last-Modified validators
- Add automatic server capability detection on NoRevAPIError
- Update download method to use If-Modified-Since for conditional requests
- Return undefined for 304 Not Modified responses (breaking change)
- Update getFileMeta to extract Last-Modified as fallback validator
- Update remove method to support If-Unmodified-Since for deletions
- Add _getOrDetectCapabilities helper for efficient capability caching
- Update _retrieveEtagWithFallback to support both validator types
- Update _parseXmlResponseElement to use Last-Modified when no ETag
All changes maintain backward compatibility for ETag-capable servers.
Part of Phase 3.3 of WebDAV non-ETag server support implementation.
- Update _createConditionalHeaders to support Last-Modified validators
- Add expectedLastModified and validatorType parameters
- Maintain backward compatibility with existing ETag-only calls
- Implement RFC 7232 compliant conditional header logic:
- If-Unmodified-Since for Last-Modified updates
- Prevent unsafe resource creation with Last-Modified only
- Add comprehensive test coverage for all header combinations
- All existing upload tests continue to pass
Part of Phase 3.2 of WebDAV non-ETag server support implementation.
- Add _extractValidators private method to handle both ETag and Last-Modified headers
- Method extracts validators from response headers with case-insensitive lookup
- Prefers ETag over Last-Modified per RFC 7232 specification
- Returns validator type ('etag', 'last-modified', 'none') for conditional requests
- Add comprehensive test suite for _extractValidators method
- Maintains backward compatibility - all 180 existing tests pass
Part of Phase 3.1 of WebDAV non-ETag server support implementation.
- Add WebdavServerCapabilities interface to detect server features
- Implement detectServerCapabilities() method in WebdavApi
- Support detection of ETags, Last-Modified, If headers, and locking
- Add comprehensive test coverage for capability detection
- Cache detected capabilities to avoid repeated requests
- Support configuration-based capability overrides
- Add documentation for WebDAV conditional headers analysis
- Maintain 100% backward compatibility with existing ETag behavior
This is Phase 2 of WebDAV non-ETag server support implementation.
All existing 180 tests continue to pass.
Add comprehensive logging to help diagnose why idle detection is not
triggering properly when the system suspends/resumes, particularly on
Wayland systems where powerMonitor events may not fire reliably.
The logging covers:
- Power monitor suspend/resume/lock/unlock events
- Idle time calculations on system wake
- Whether idle messages are sent to frontend based on thresholds
This will help identify if:
1. PowerMonitor events are firing on the user's KDE Wayland system
2. Idle time is being calculated correctly during sleep periods
3. Messages are being sent but not processed by the frontend
Related to issue #4734 where time tracking continues during sleep mode.
- Fixes failing tests by initializing planner state in test setup
- The planner-shared.reducer now handles transferTask actions and needs planner state
- All 5 failing tests now pass
- Remove transferTask handling from task.reducer.ts
- Remove transferTask handling from planner.reducer.ts
- Remove transferTask handling from tag.reducer.ts
- Update tests to use meta-reducers for proper action handling
- All transferTask logic now centralized in planner-shared.reducer.ts
- All tests pass successfully
- Add task.reducer.transferTask.spec.ts with 9 test cases covering task dueDay updates
- Add planner.reducer.transferTask.spec.ts with 17 test cases covering planner days array manipulation
- Tests verify current behavior before migrating to planner-shared.reducer
- All tests pass in Berlin timezone
- dialog-edit-task-repeat-cfg: converts timestamp to local date string correctly
- date.service: utility wrapper working as intended
- metric.util: converts timestamps for metrics display correctly
- archive.service: uses current time for today string correctly
When GitLab and OpenProject return due dates as YYYY-MM-DD strings,
we should use them directly instead of converting through getWorklogStr()
which causes timezone issues. In timezones with negative UTC offset,
dates would appear as the previous day.
- GitLab: use issue.due_date directly
- OpenProject: use issue.startDate directly
- Replace Date object creation from dueDay strings with string comparisons
- Use dateStrToUtcDate utility for mixed dueDay/dueWithTime comparisons
- Fix task filtering by scheduled date to use string comparisons
- Fix task sorting by scheduled date to avoid timezone conversion issues
- Add explanatory comments about why string comparison works for YYYY-MM-DD format
This fixes the issue where tasks scheduled for today would incorrectly
appear as overdue in timezones with negative UTC offsets (like São Paulo).
The YYYY-MM-DD format is lexicographically sortable, making string
comparison both simpler and more reliable than Date object comparison.
Fixes#4714