- Changed the build configuration from "Release" to "Debug" in the LaunchAction section of the Spacedrive.xcscheme file, facilitating easier debugging during development.
- Modified Title, ColumnItem, FileCard, TableRow, and MediaViewItem components to conditionally render file extensions alongside file names, enhancing clarity for users.
- Ensured consistent display of file information across different views in the Explorer interface.
- Updated FileOperationModal to fetch and display file information for both source and destination, improving user experience.
- Added FileStack component to visually represent multiple files stacked with rotation, enhancing the file selection interface.
- Refactored source and destination file displays to conditionally render file thumbnails or icons based on availability.
- Improved layout and styling for better clarity and consistency in file operations.
- Added keyboard shortcuts for file operations: Copy (⌘1), Move (⌘2), Skip (S), Keep both (K), and Overwrite (O).
- Improved the visual layout to clearly display source and destination files with an arrow indicator.
- Updated operation type selection buttons to include icons and shortcut hints for better user experience.
- Refactored conflict resolution options to display keyboard shortcuts alongside labels for clarity.
- Introduced a utility function to extract file names from paths for better display in the modal.
- Updated volume-related structures and database entities to improve indexing and retrieval efficiency.
- Enhanced migration scripts to support new indexing statistics for volumes.
- Refactored asset imports and SVG handling across various components for better organization and performance.
- Improved file operation modals and explorer components for a more intuitive user experience.
- Streamlined QuickPreview and video player components to optimize rendering and interaction.
- Adjusted the symlink creation for Spacedrive.framework to include the "Frameworks" directory, aligning with the expected structure for native dependencies.
- Updated CSS classes in the VolumeBar component to enhance visual consistency and clarity.
- Simplified hover effects and adjusted background styles for unique and duplicate byte displays.
- Improved comments for better understanding of the visual elements in the component.
- Enhanced the `FileByIdQuery` and `FileByPathQuery` implementations to first check the database for file entries, ensuring accurate retrieval as the primary source of truth.
- Introduced a fallback mechanism to utilize an ephemeral index if the file is not found in the database, improving resilience and performance.
- Updated the logic for processing content identities, media data, and sidecars, ensuring efficient data loading and handling.
- Added context-aware comments to clarify the purpose of key code sections, enhancing maintainability and readability.
- Introduced a new EventBuffer struct to buffer recent events and manage time-based eviction.
- Implemented methods for adding events, retrieving matching events based on filters, and cleaning up expired events.
- Integrated EventBuffer into the RpcServer to handle subscription race conditions by replaying buffered events to new subscribers.
- Added periodic cleanup task for the event buffer to prevent unbounded memory growth.
- Included unit tests to verify buffer size limits, time-based cleanup, and event filtering functionality.
- Marked subprojects as dirty to indicate local changes.
- Updated Podfile.lock to reflect new versions for several dependencies, including EXConstants (18.0.11), EXManifests (1.0.10), Expo (54.0.27), and others, ensuring compatibility and access to the latest features and fixes.
- Adjusted paths in external sources to match updated dependency versions.
- Replaced internal navigation tracking with a ref for clearSelection to prevent unnecessary re-renders.
- Simplified the logic for initializing the column stack on external navigation changes.
- Updated file selection handling to manage column navigation without affecting currentPath, enhancing performance and usability.
- Refactored the App component to enhance readability and maintainability, including adjustments to route handling and client initialization.
- Introduced QuickPreviewSyncer and QuickPreviewController components in the Explorer to optimize rendering and selection handling.
- Enhanced Column and ListView components with memoization to prevent unnecessary re-renders, improving performance during file selection and navigation.
- Updated event handling in the useNormalizedQuery hook to streamline query management and improve type safety.
- Adjusted various components to ensure consistent styling and behavior across the application.
- Updated the logic in `File` to build `SdPath` using Physical paths for newly created files without a content_id, improving resource management.
- Refactored `useNormalizedQuery` hook to enhance type safety and maintainability, ensuring better handling of query options and event subscriptions.
- Improved event handling for resource changes, ensuring accurate updates to the query cache based on resource events.
- Improved the `emit_change_event` method in `DatabaseAdapter` to handle resource events more effectively, including detailed logging for event emissions.
- Updated the `PersistentEventHandler` to ensure paths are registered with the filesystem watcher upon startup, enhancing real-time monitoring capabilities.
- Introduced new event collectors for better diagnostics and logging of filesystem and core events during tests.
- Enhanced integration tests to cover various scenarios, including batch file operations and delete/restore patterns, ensuring accurate event handling and preventing duplicates.
- Updated the `delete` method in `MemoryAdapter` to emit a `ResourceDeleted` event, allowing the frontend to update its cache accordingly.
- Modified `CollectedCoreEvent` structure to include an `event_type` field for better event categorization.
- Enhanced event collection logic in `CoreEventCollector` to handle both `ResourceChanged` and `ResourceDeleted` events, improving event summary reporting.
- Updated `remove_entry` and `remove_directory_tree` methods in `EphemeralIndex` to ensure proper removal of entries from parent nodes' children lists.
- Introduced `FsEventCollector` and `CoreEventCollector` for improved event collection from the filesystem watcher and core event bus, respectively.
- Enhanced test harness to utilize the new collectors, ensuring accurate event logging and summary reporting.
- Added scenarios to test delete and restore patterns, verifying correct entry counts and preventing duplicate entries.
- Implemented methods for batch creation and deletion of files and directories in the test harness.
- Added scenarios to verify the creation and deletion of multiple files and directories, ensuring proper event handling.
- Enhanced logging for better visibility during test execution.
- Updated the macOS event handler to improve directory deduplication and manage recent directory creations effectively.
- Updated `connect` methods in `EphemeralEventHandler` and `PersistentEventHandler` to be asynchronous, allowing for non-blocking connections to the `FsWatcherService`.
- Modified `init_handlers` in `FsWatcherService` to support async initialization of event handlers.
- Adjusted service startup methods to await handler initialization, ensuring proper setup before starting the watcher.
- Enhanced test harness to utilize the new async capabilities, improving event collection and verification processes.
- Introduced a new filesystem watcher service, replacing the previous location watcher with a more robust and platform-agnostic implementation.
- Updated the core context to include the new filesystem watcher and refactored related services for better integration.
- Added support for ephemeral event handling, allowing real-time updates for non-persistent locations.
- Integrated new sound effects for pairing operations in the UI, enhancing user experience during device pairing.
- Updated the File Operation Modal to support both copy and move operations with improved conflict resolution options.
- Refactored related components to ensure consistency and improved performance across the application.
- 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.