4214 Commits

Author SHA1 Message Date
Jamie Pine
bf1962e5ad Enhance file selection and navigation in Explorer component
- 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.
2025-12-08 23:13:23 -08:00
Jamie Pine
5659e85c09 Update subproject commits and enhance content identity UUID generation
- 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.
2025-12-08 22:52:28 -08:00
Jamie Pine
337a284e96 Enhance file operation handling and add sound effects
- 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.
2025-12-08 21:15:00 -08:00
Jamie Pine
9e25625285
Merge pull request #2898 from Yukeey07/patch-1
Update README with Windows dependency copy instructions
2025-12-08 18:30:27 -08:00
Jamie Pine
5568182694
Merge pull request #2900 from gedeondoescode/setup-android
Android Builds
2025-12-08 18:27:48 -08:00
Jamie Pine
8e4d6d0bdd
Merge branch 'main' into setup-android 2025-12-08 17:39:50 -08:00
Jamie Pine
89becd53ff
Merge pull request #2901 from spacedriveapp/ephemeral-cache
Introduce ephemeral index cache
2025-12-08 17:38:20 -08:00
Jamie Pine
57209a8085 Rename DB writer to DatabaseStorage
- 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)
2025-12-08 17:13:52 -08:00
Jamie Pine
3e49f1de10 comments 2025-12-08 16:45:39 -08:00
Jamie Pine
2641c335ff cargo fmt 2025-12-08 12:32:04 -08:00
Gedeon
dc4bc2929f
Add an actual message this time 2025-12-08 09:56:13 -05:00
Gedeon
5263f49afc
Check if SDMobileCoreModule actually exists 2025-12-08 09:54:48 -05:00
Gedeon
e941d4f3de
Enhance Android build instructions in CONTRIBUTING.md
Updated Android build instructions to include emulator support and environment variable setup.
2025-12-08 08:37:23 -05:00
Jamie Pine
93c40bfb7c Refactor indexing to remove context abstraction 2025-12-08 03:38:13 -08:00
Jamie Pine
e5275c6649 Rename EntryProcessor with DBWriter across indexing
- Replace EntryProcessor with DBWriter across indexing
- Introduce EphemeralWriter to unify ephemeral indexing logic
- Update IndexPersistence to abstract over writers and adjust modules
2025-12-08 03:18:47 -08:00
Jamie Pine
bc6a347b69 Refactor ephemeral indexing structure and improve documentation
- 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.
2025-12-08 02:14:47 -08:00
Jamie Pine
ee39df74a8 Refactor subtree deletion handling in indexing operations
- 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.
2025-12-08 01:35:30 -08:00
Jamie Pine
36659ac96b Refactor indexing change handling and introduce unified change detection
- 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.
2025-12-08 01:25:21 -08:00
Jamie Pine
6bdc9a7055 Implement unified change handling for indexing with filesystem watching support
- 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.
2025-12-08 00:38:17 -08:00
Jamie Pine
3739b3f34f Enhance ephemeral indexing and add filesystem watching support
- 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.
2025-12-08 00:38:04 -08:00
Jamie Pine
b6779d71ac Enhance ephemeral indexing with error handling and memory-mapped storage
- 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.
2025-12-07 23:17:51 -08:00
Jamie Pine
8c24a98756 more comments 2025-12-07 22:36:19 -08:00
Jamie Pine
ed0fa209b4 Improve comments 2025-12-07 22:23:57 -08:00
Jamie Pine
4a2590d418 Refactor IndexerJob to separate job phase execution and ensure proper ephemeral indexing cleanup
- 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.
2025-12-07 21:46:21 -08:00
Jamie Pine
aff2398563 Implement shared path tracking in parallel discovery to prevent duplicate processing
- 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.
2025-12-07 21:37:28 -08:00
Jamie Pine
456da8a924 Enhance ephemeral indexing by clearing stale entries before re-indexing
- 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.
2025-12-07 21:35:19 -08:00
Jamie Pine
191c7f7ef0 Refactor to a single unified ephemeral index cache 2025-12-07 21:31:15 -08:00
Jamie Pine
c3517a554e Preserve ephemeral UUIDs during indexing
- 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.
2025-12-07 21:03:51 -08:00
Jamie Pine
cf400865f4 Introduce ephemeral index cache and status API
- 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
2025-12-07 19:55:34 -08:00
Gedeon Sainrival
86b906f956
Remove needless Log function in SDMobileCoreModule.kt 2025-12-07 21:02:41 -05:00
Gedeon Sainrival
22031d3b5d
Start generating builds for Android
- 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
2025-12-07 20:53:12 -05:00
Jamie Pine
8fc01634f6 parallel indexing rayon without rayon due to async requirement 2025-12-07 15:45:26 -08:00
Jamie Pine
d1392607ad chore: add default locations with IndexMode::None 2025-12-06 20:50:07 -08:00
Jamie Pine
97e3bb590a fix: update QuickPreview and Explorer sync 2025-12-06 20:50:07 -08:00
Jamie Pine
0e932defdc feat: add icons and indexing indicator to PathBar 2025-12-06 20:50:06 -08:00
Jamie Pine
0c7c5e05f2 fix: fix logCallback and setCurrentLibrary 2025-12-06 16:46:02 -08:00
Jamie Pine
17abcc4221 feat: update ExplorerView and Info.plist 2025-12-06 16:46:02 -08:00
Jamie Pine
5183d37394 some more code 2025-12-05 15:17:00 -08:00
Jamie Pine
b4024c860e Mobile app in React Native
+ validation support for Actions
2025-12-05 15:16:41 -08:00
Yukeey
a4c5fd0a73
Update README with Windows dependency copy instructions
Add instructions to copy dependencies for Windows.
2025-12-05 16:00:09 +01:00
Jamie Pine
8987249de6
Merge pull request #2897 from spacedriveapp/daemon-disconnected-screen
Add daemon disconnected screen with auto-reconnect
2025-12-04 18:39:30 -08:00
Jamie Pine
76fa4203d1 Add Windows support for daemon service management
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
2025-12-04 18:34:30 -08:00
Jamie Pine
8ef08e584d Merge branch 'daemon-disconnected-screen' of https://github.com/spacedriveapp/spacedrive into daemon-disconnected-screen 2025-12-04 18:26:28 -08:00
Jamie Pine
73b057e506 Fix daemon connection and service installation error handling
- 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
2025-12-04 18:25:51 -08:00
Cursor Agent
d847415e84 Refactor: Consolidate daemon status listener cleanup
Co-authored-by: ijamespine <ijamespine@me.com>
2025-12-05 02:22:26 +00:00
Jamie Pine
59d6f0d47e Add daemon service management commands 2025-12-04 18:10:24 -08:00
Jamie Pine
a3fdbf7c1e Make daemon starting state fully reactive
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
2025-12-04 17:02:55 -08:00
Jamie Pine
3b605ee78d Add daemon disconnected screen with auto-reconnect
Adds a full-screen overlay when the daemon disconnects with:
- Real-time connection status indicator in top-right
- Explanation of what the daemon is and why it's required
- Restart button with background mode checkbox
- CLI commands reference panel with copy buttons
- Automatic app reload when daemon reconnects

The overlay uses reactive status polling and event-based detection to ensure accurate connection state tracking. When the daemon comes back online, the app automatically reloads to sync state.
2025-12-04 16:47:27 -08:00
Jamie Pine
221affd23a Add cross-device event export and fix dropdown 2025-12-04 15:45:40 -08:00
Jamie Pine
ff5a359980
Merge pull request #2896 from spacedriveapp/sync-event-log
Sync event log
2025-12-04 15:38:03 -08:00