- Add obsidianToTodoistEnabled (default: true) and todoistToObsidianEnabled (default: false) settings
- Modify checkAndHandleSyncLock to accept direction parameter
- Update all 11 call sites with appropriate direction values
- Add UI toggles for both new settings in settings tab
- Update sync status display to show direction states
- Report now saved to vault root directory
- First table shows all 8 data source combinations
- Each issue type now has detailed task information below
Added:
- Full syncDataCache persistence (complete API response)
- Comprehensive test suite for TodoistSyncAPI
Changed:
- Removed syncToken from settings
- Improved mergeSyncData for all API fields
- Refactored rebuildCache for new architecture
- Remove references to todoistTasksData (deprecated)
- Clear taskFileMapping instead of todoistTasksData/fileMetadata
- Ensure syncData is loaded before rebuilding
- Use setTaskFileMapping instead of appendTaskToCache
- Use GetTaskById instead of getTaskById
- Simplify conflict resolution (no cache update needed)
- Replace hardcoded field merging with dynamic approach
- Now handles all fields: projects, items, sections, labels, notes,
sections_order, project_states, user, settings, etc.
- Uses ID-based merging for arrays, direct replacement for objects
- Properly handles is_deleted flag for all array types
- Remove syncToken from UltimateTodoistSyncSettings interface
- Remove syncToken from DEFAULT_SETTINGS
- Read sync_token from syncData (memory) instead of settings
- Sync token is now only stored in memory within syncDataCache
- Add syncDataCache field to settings to store raw API response
- Change syncData type to Record<string, any> to hold complete API response
- Add loadFromCache() method to load cached data on startup
- Save syncData to cache after full sync and incremental sync
- On startup, try loading from cache first before full sync
- taskParser.ts: replace loadTaskFromCacheyID with todoistSyncAPI.GetTaskById
- todoistToObsidian.ts: simplify to use taskFileMapping instead of old cache methods
- cacheOperation.ts: deprecate old cache methods (make them no-ops), keep taskFileMapping methods
- Replace all fetch() calls with Obsidian's requestUrl() to fix CORS issues
- Fix DeviceManager.getPluginPath() to use vault.configDir instead of getBasePath()
- Ensure X-Todoist-Client header is properly sent with device ID
- Update CHANGELOG with fix details
- Add temp_id support to Sync API addTask method
- Add compatible wrapper methods (AddTask, UpdateTask, CloseTask, etc.)
- Replace all todoistRestAPI calls with todoistSyncAPI
- Create comprehensive test suite for migration validation
- Test results: 43/48 tests pass, all core CRUD operations work
Migration complete - Sync API can replace REST API.