- Updated `FileByIdQuery` and `FileByPathQuery` to populate alternate paths for files with the same content ID, improving data retrieval for file instances.
- Introduced `get_alternate_paths` method in both queries to fetch alternate file paths from the database.
- Modified the `InstancesTab` component to utilize a new query for alternate instances, enhancing the user interface with detailed instance information.
- Updated TypeScript types to support the new alternate instances query structure, ensuring type safety across the application.
- Adjusted various components to improve the display of alternate file instances, including device and path information.
- Added a new `files` field to `FileSearchOutput` to provide a flat array of files, improving integration with the explorer.
- Updated the `FileSearchQuery` to join directory paths directly on `parent_id`, simplifying the SQL query.
- Enhanced the query to batch fetch sidecars for content UUIDs, improving performance and data retrieval.
- Adjusted the handling of content identity fields to ensure proper association with files in search results.
- Updated the `SearchView` component to utilize the new `files` array instead of the previous `results` structure.
- Modified the release workflow to eliminate the dependency on the CLI build job, streamlining the release process.
- Maintained the existing structure for the desktop build job to ensure continued functionality.
- Commented out the CLI build jobs in the release workflow to streamline the configuration.
- Maintained structure for potential future reactivation of CLI builds across macOS, Linux, and Windows platforms.
- Ensured that the desktop build jobs remain intact for continued functionality.
- Introduced a new column `device_id` in the entries table to denormalize device relationships, improving query performance.
- Updated related models and queries to accommodate the new device_id field.
- Enhanced foreign key mappings and migration scripts to support the addition of device_id.
- Adjusted various components to handle device_id, ensuring compatibility across the application.
- Improved release workflow to include specific file types for distribution.
- Updated the layout of the MultiFileInspector component to enhance visual clarity and usability.
- Removed unnecessary dividers between sections for a cleaner presentation.
- Streamlined the rendering of file types and tags sections, improving code readability and maintainability.
- Reformatted import statements for better organization.
- Enhanced code readability by adjusting indentation and line breaks in the SearchGridView and SearchListView functions.
- Ensured consistent formatting across file handling and event functions for clarity.
- Updated `stream_file_data` to bypass encryption, as Iroh provides end-to-end encryption for connections.
- Adjusted `FileTransferProtocolHandler` to skip decryption, directly using the received encrypted data.
- Enhanced logging to reflect changes in data handling during file transfers.
- Added tests to ensure session keys are distinct and validate key swapping functionality.
- Improved error handling in `DevicePersistence` for corrupted session keys during device loading.
- Updated documentation for copy strategies to clarify their use cases and selection logic.
- Improved logging in `DevicePersistence` to track loading of paired devices and handle expired session keys.
- Added detailed logging for session key retrieval in `FileTransferProtocolHandler`.
- Introduced a new test for file transfer with daemon restart to ensure session key persistence across restarts.
- Updated macOS subproject reference to indicate a dirty state.
- Refactored `FileCopyJob` to improve logging for final destination calculations.
- Enhanced `stream_file_data` logging to include destination path in transfer requests.
- Added `find_containing` method to `EphemeralIndex` for substring search functionality.
- Improved logging in `ephemeral_search` to track search results and filtering.
- Replaced print statements with tracing logs in `FileTransferProtocolHandler` for better debugging.
- Adjusted indentation for clarity in the `search_ephemeral_index` function.
- Ensured consistent formatting for the filter application section to enhance code readability.
- Added clipboard event handling to support native clipboard operations (copy, cut, paste) based on input focus.
- Introduced functions to check if an input element is focused and to execute native clipboard commands.
- Updated keybind listener to trigger appropriate actions based on clipboard events, differentiating between text input and file operations.
- Enhanced menu setup to ensure clipboard actions are always enabled for better user experience.
- Replaced the previous event processing loop with a select-based approach to handle both incoming events and periodic eviction ticks.
- Ensured that expired pending removes are processed even when no new events arrive.
- Improved efficiency by reducing busy waiting during event collection.
- Added `DirectoryPreview` component for rendering a grid view of subdirectories in the Quick Preview.
- Updated `ContentRenderer` to utilize `DirectoryPreview` for directory types.
- Introduced TypeScript integration test for verifying cache updates upon file deletions, ensuring accurate directory listing after deletions.
- Enhanced keyboard handling in Explorer to prevent shortcuts when input fields are focused.
- Added context menu options for creating new folders and pasting files in empty space within the Explorer.
- Implemented keyboard shortcuts for entering tag assignment mode and toggling tags 1-10.
- Refactored keyboard event handling to streamline tag mode activation and file renaming.
- Updated GridView and ListView components to support context menu interactions.
Implements comprehensive search functionality that intelligently routes between
ephemeral (in-memory) and persistent (FTS5 database) indexes, following the
directory listing pattern for consistency.
**Backend Changes:**
- Add IndexType enum (Persistent/Ephemeral/Hybrid) to communicate which index was used
- Add FilterKind enum to indicate available filters for each search type
- Implement ephemeral_search module with content type filtering via FileTypeRegistry
- Update FileSearchOutput with index_type and available_filters fields
- Add routing logic in FileSearchQuery to determine and use appropriate index
- Support file type, size, date, and content type filters in ephemeral search
**Frontend Changes:**
- Add search mode to Explorer context (browse vs search with query/scope)
- Create SearchView component with placeholder for search results
- Wire up SearchBar with debounced search (300ms, min 2 chars)
- Integrate search mode switching in ExplorerView router
**Key Features:**
- Fast, synchronous search (no events, no jobs)
- Defaults to current folder scope (not global like Finder)
- Backend as source of truth for all search operations
- Content type filtering using FileTypeRegistry.identify_by_extension()
- Ephemeral search supports: file types, size, dates, content types
- Persistent search supports: all ephemeral filters + tags + locations
**Architecture:**
Follows the directory listing pattern: checks location index mode, queries
database, falls back to ephemeral cache. Search results indicate which index
was used and which filters are available for dynamic UI updates.
- Introduced `GenerateThumbstripInput` and `GenerateThumbstripOutput` types for generating thumbstrips from video files.
- Added `RegenerateThumbnailInput` and `RegenerateThumbnailOutput` types for thumbnail regeneration functionality.
- Created `TranscribeAudioInput` and `TranscribeAudioOutput` types for audio transcription jobs.
- Updated `CoreAction` and `LibraryAction` types to include new actions related to thumbnail and audio processing.
- Marked several tasks as completed in the TODO list, including opening files with the default app, drag selection area functionality, and initializing the startup screen for Core/daemon.
- Added `run_in_background` field to ThumbnailPolicy to control background execution behavior.
Resolved conflicts in:
- SelectionContext.tsx: Merged rename state with isActiveTab prop
- useFileContextMenu.ts: Combined rename/folder actions with Open With submenu
- FileCard.tsx: Integrated InlineNameEdit with useOpenWith hook
- TableRow.tsx: Integrated InlineNameEdit with useOpenWith hook
- Updated ThumbnailJobConfig to include `run_in_background` field, allowing jobs to run without persisting to the database or updating the UI.
- Modified IndexerJob to inherit the background flag from its configuration.
- Implemented `should_persist` method in ThumbnailJob to determine persistence based on the background execution flag.
- Added `run_in_background` field to `IndexerJobConfig` to allow jobs to run without persisting to the database or updating the UI.
- Updated `should_persist` method in `IndexerJob` to account for background jobs.
- Modified `handle_new_directory` in `DatabaseAdapter` to create background indexer jobs.
- Ensured default value for `run_in_background` is set to false in various configurations.
- Introduced a new integration test for bulk file moves to validate cache updates and file handling.
- Added a new test suite in `core/tests/typescript_bridge_test.rs` to facilitate end-to-end testing between Rust and TypeScript.
- Introduced `IndexingHarnessBuilder` enhancements to support a daemon RPC server for TypeScript tests.
- Created TypeScript test files for `useNormalizedQuery` to validate file move and folder rename operations.
- Configured Bun test environment with `bunfig.toml` and setup scripts for improved testing efficiency.
- Updated `TcpSocketTransport` to handle TCP connections for the TypeScript client, ensuring robust communication with the Rust backend.
- Enhanced logging and error handling for better visibility during test execution.
- Added a `cleanup_all_connections` command to clean up active TCP connections, preventing leaks during development hot reloads.
- Introduced `cancel_all` and `get_active_count` methods in the SubscriptionManager to manage active subscriptions effectively.
- Updated TCP connection handling in `daemon_request` and `subscribe_to_events` to ensure proper closure of connections.
- Enhanced logging for better visibility of subscription management and connection cleanup processes.
- Added a new function `validate_and_reset_library_if_needed` to check if the current library exists and reset the state if it doesn't.
- Integrated this validation process into the daemon connection initialization, ensuring the app state is consistent with the available libraries.
- Enhanced error handling and logging for better debugging during library validation.
- Introduced a new test suite for file move operations, covering various scenarios to ensure robust handling of file movements and state integrity.
- Replaced synchronous job completion handling with an asynchronous background task to improve responsiveness.
- Extracted job output handling and stats saving into the background task, allowing for better event-driven processing.
- Updated the `save_volume_stats` method to be static and adjusted the output structure to reflect the new indexing approach.
- Modified button styles in OverviewTopBar to enhance visual appeal and user experience.
- Adjusted layout properties, including height, padding, and border styles, for a more modern look.
- Simplified button content structure by removing unnecessary span elements.
- Implemented `getAppVersion` method in the platform abstraction to fetch the application version.
- Updated `DaemonStartupOverlay` to display the app version during startup, improving user feedback.
- Introduced a new `Orb` component for enhanced visual effects in the overlay.
- Made minor layout adjustments in various components for better UI consistency.
- Removed the DaemonOverlays component and integrated its functionality into a new ExplorerWithDaemonCheck component.
- The new component conditionally renders the Explorer UI based on the daemon connection status, preventing unnecessary queries during startup.
- Updated DaemonDisconnectedOverlay to accept daemonStatus as a prop for improved state management.
- Refactored useDaemonStatus hook to streamline polling logic and enhance connection handling.
- Added SwiftRs as a dependency in Package.swift to enhance file opening capabilities.
- Updated the get_apps_for_path function to return a JSON string of available applications instead of an array.
- Modified the Swift implementation to align with the new return type and improved data handling.
- Created a new Package.resolved file to manage package dependencies.
- Reformatted code for better readability and consistency, including indentation and line breaks.
- Enhanced the clarity of function definitions and context values within the SelectionProvider.
- Maintained existing functionality while improving code maintainability and visual structure.
- Added multi-select capability for the Inspector in the TODO list.
- Updated drag selection logic to prevent conflicts with file dragging when clicking on selected items.
- Adjusted drag selection settings across GridView, ListView, and ColumnView to improve user experience and ensure compatibility with drag-and-drop interactions.
- Refactored related components to streamline event handling and enhance performance.
- Eliminated the focus ring styling for the FileCard component to streamline its appearance during drag-and-drop interactions.
- Adjusted class names to enhance visual consistency and user experience in the GridView layout.