- Updated the Column component to support multiple file selection and improved type safety.
- Refactored file selection handling to utilize global selection context, allowing for better management of selected files.
- Added drag-and-drop functionality for file items using the DnD Kit.
- Improved keyboard navigation to ensure selected files remain visible during interactions.
- Updated documentation to reflect changes in type safety and file selection requirements.
- Marked subproject commits as dirty for api, ios, macos, and workbench.
- Updated content identity UUID generation to be globally deterministic from content_hash only, enabling cross-device and cross-library deduplication.
- Refactored related documentation to reflect changes in UUID generation logic.
- Added new default group creation for Devices and Tags in LibraryManager.
- Improved keyboard navigation and selection handling in Explorer component.
- Introduced a new File Operation Modal for interactive file copy/move operations with conflict resolution options.
- Integrated sound effects for file operations, including copy and startup sounds.
- Updated the Explorer component to utilize the new modal for drag-and-drop file operations.
- Refactored job management hooks to unify job data handling and improve performance.
- Enhanced documentation for the File Operation Modal and sound effects integration.
- Rename indexing backend: DBWriter to DatabaseStorage
- Replace EphemeralWriter with MemoryAdapter across watcher and
ephemeral components
- Update module paths and imports in core indexing code, job, and
persistence layers to use DatabaseStorage and MemoryAdapter
- Update docs to reflect new names
- (DatabaseStorage, MemoryAdapter)
- Replace EntryProcessor with DBWriter across indexing
- Introduce EphemeralWriter to unify ephemeral indexing logic
- Update IndexPersistence to abstract over writers and adjust modules
- Introduced a new `ephemeral` module to encapsulate the `EphemeralIndex` functionality, enhancing organization and clarity.
- Moved `EphemeralIndex` and related types to the new module, ensuring a cleaner separation of concerns.
- Updated documentation across the `hierarchy`, `job`, and `persistence` modules to reflect the new structure and improve clarity on ephemeral indexing operations.
- Removed deprecated references to `EphemeralIndex` in favor of the new module path, streamlining code references.
- Enhanced comments and documentation to provide better context and understanding of the ephemeral indexing system.
- Replaced calls to `delete_subtree_internal` with `EntryProcessor::delete_subtree` in the `entry`, `location`, and `manager` modules to streamline the deletion process.
- Introduced a new `delete_subtree` method in `EntryProcessor` that handles the deletion of an entry and its descendants without creating tombstones, improving efficiency in database operations.
- Removed the deprecated `delete_subtree_internal` function from the `responder` module, consolidating deletion logic into the `EntryProcessor`.
- Updated documentation and tests to reflect the changes in deletion handling and ensure reliability.
- Removed the `handler.rs` module and integrated its functionality into the new `change_detection` module, which now handles both persistent and ephemeral change processing.
- Implemented a `ChangeDetector` for batch indexing scans, allowing efficient detection of new, modified, moved, and deleted entries.
- Introduced a `ChangeHandler` trait to abstract operations for both persistent and ephemeral storage, ensuring consistent behavior across different backends.
- Enhanced the `EphemeralChangeHandler` and `PersistentChangeHandler` to utilize the new change detection infrastructure.
- Updated the `apply_batch` function to streamline event processing and improve responsiveness to filesystem changes.
- Added comprehensive tests and documentation to validate the new structure and functionality.
- Introduced a new `handler.rs` module to manage filesystem change events for both persistent and ephemeral indexing.
- Added a trait-based `ChangeHandler` interface to abstract operations for different storage backends.
- Enhanced `EphemeralIndexCache` to support filesystem watching, allowing paths to be monitored for changes.
- Implemented methods for registering and unregistering watched paths, improving responsiveness to filesystem events.
- Updated the `LocationWatcher` to handle ephemeral watches and process events accordingly.
- Added tests and documentation to ensure reliability and clarity of the new functionality.
- Updated `EphemeralIndex` to preserve explicitly browsed subdirectories during re-indexing, preventing loss of user navigation context.
- Modified `clear_directory_children` to return the count of cleared entries and a list of deleted browsed directories.
- Introduced `EphemeralIndexCache` enhancements to support filesystem watching, allowing paths to be monitored for changes.
- Added methods for registering, unregistering, and checking watched paths, improving the responsiveness of the indexing system.
- Updated documentation and tests to reflect new functionality and ensure reliability.
- Updated `EphemeralIndex` and `NodeArena` to return `std::io::Result` for better error handling during creation and insertion.
- Implemented memory-mapped storage in `NodeArena` to efficiently manage large indexes, preventing out-of-memory errors.
- Refactored `EphemeralIndexCache` to handle initialization errors gracefully.
- Improved tests to validate new error handling and memory management features.
- Moved the job phase logic into a new `run_job_phases` method for better organization and clarity.
- Updated the `run` method to always mark ephemeral indexing as complete, even on failure, preventing stuck indexing flags.
- Enhanced logging to provide feedback on the completion status of ephemeral indexing.
- Introduced a shared `seen_paths` structure using `RwLock` to manage paths across all workers, addressing symlink loops and duplicate directory processing.
- Updated the `discovery_worker_rayon` function to utilize the shared `seen_paths`, enhancing efficiency and correctness in the discovery phase.
- Implemented a mechanism to clear stale entries for a directory's children during re-indexing to prevent ghost files.
- Updated the `create_for_indexing` method to remove previously indexed paths and ensure a clean slate for new indexing operations.
- Added logging for the number of cleared entries to aid in debugging and monitoring.
- Remove TTL-based ephemeral cache and switch to a permanent in-memory
cache.
- Reuse ephemeral UUIDs when creating persistent entries to preserve
continuity of user data.
- Populate ephemeral UUIDs during the processing phase and expose
get_ephemeral_uuid in the indexer state.
- Remove the location invalidation hook and related UI usage.
- Add a complete ephemeral indexing subsystem
- core/src/ops/core/ephemeral_status with input/output and query types
- core/src/ops/indexing/ephemeral with arena, cache, registry,
index_cache, types
- expose EphemeralIndexCache and EphemeralIndex through core modules
- EphemeralIndexCache supports
get/insert/create_for_indexing/mark_indexing_complete eviction and
stats
- Implement EphemeralIndex data structures for memory-efficient storage
- NodeArena, NameCache, NameRegistry, and related types
- Add EphemeralIndex status API
- EphemeralCacheStatusInput and EphemeralCacheStatusQuery
- EphemeralCacheStatus with per-index details
- Wire ephemeral indexing into the indexing flow
- Change default Ephemeral Indexer behavior to shallow mode
- Align code to EphemeralIndex usage across the codebase
- Enhance content kind detection in UI
- Add getContentKind(file) helper (prefers content_identity.kind, then
content_kind)
- Use getContentKind in Explorer utilities and UI components
- Invalidate directory listings when location index_mode changes
- Add useLocationChangeInvalidation to trigger refetches for ephemeral
vs persistent indexing transitions
- Misc refactors and formatting to accommodate the new modules and APIs
- Update Kotlin version to 2.2.20
- Update sd-mobile-core with modern expo-modules API to successfully
compile on Android
- added android to build-mobile xtask
- updated CONTRIBUTING.md
- Added `openssl-sys` to sd-mobile-core as a workaround for native
Android builds
- Switched from deprecated @react-native-community/clipboard
Implements scheduled task-based daemon persistence on Windows using Task Scheduler. This provides the same auto-start functionality available on macOS (LaunchAgent) and Linux (systemd).
Windows implementation:
- Uses schtasks to create/delete/query scheduled tasks
- Task runs at user logon with no elevation required
- Properly handles task creation, starting, and cleanup
- XML-based task configuration with proper settings
- Clear subscriptions map when connection pool resets to prevent stale subscription IDs after daemon restart
- Revert checkbox state when install/uninstall operations fail to keep UI in sync with actual state
- Return errors when launchctl/systemctl commands fail during service installation instead of silently continuing
- Add proper error checking for all systemctl commands on Linux
Adds daemon-starting event emission from Rust when the daemon starts, eliminating timeout-based logic. The starting state now accurately tracks the actual daemon startup process through events.
- Rust emits daemon-starting event when start command is called
- Platform API listens to daemon-starting events
- Hook preserves isChecking state during polling until daemon connects
- No more timeouts, everything is event-driven