Commit Graph

557 Commits

Author SHA1 Message Date
Jamie Pine
8d9fe080ca refactor: Enhance TabBar component with layout grouping and memoization
- Integrated LayoutGroup from framer-motion to improve tab animations and transitions.
- Added useMemo to ensure safeActiveTabId is derived efficiently, preventing unnecessary re-renders.
- Refactored tab rendering logic for better clarity and performance, maintaining existing functionality.
2025-12-24 16:47:28 -08:00
Jamie Pine
938f8326fa refactor: Simplify daemon overlay management in Explorer component
- 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.
2025-12-24 16:37:44 -08:00
Jamie Pine
60b23a39f8 Merge branch 'main' into cursor/demon-startup-overlay-a536 2025-12-24 16:21:22 -08:00
Jamie Pine
8f1d66a10e refactor: Improve formatting and structure in SelectionContext component
- 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.
2025-12-24 15:52:16 -08:00
Jamie Pine
214dfa8180 feat: Enhance drag selection functionality in Explorer views
- 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.
2025-12-24 15:36:31 -08:00
Jamie Pine
ca8eae04f8 refactor: Remove focus ring from FileCard component
- 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.
2025-12-24 15:18:11 -08:00
Jamie Pine
7df7974f27 Merge branch 'main' into drag-select 2025-12-24 15:06:19 -08:00
Jamie Pine
6146959ce8 feat: Improve TabNavigationGuard to enhance tab switching experience
- Updated `TabNavigationGuard` to track tab switch timing and prevent stale data rendering during brief navigation delays.
- Introduced logic to only block rendering when a tab switch occurs within 50ms, ensuring smoother transitions and improved user experience.
- Clarified documentation regarding the guard's behavior during in-tab navigation.
2025-12-24 15:05:42 -08:00
Jamie Pine
b519f5b582 feat: Add TabNavigationGuard to prevent stale data during tab switches
- Introduced `TabNavigationGuard` component to manage rendering during tab navigation, ensuring that stale data is not displayed while switching tabs.
- Updated `ExplorerView` to wrap view components with `TabNavigationGuard`, enhancing user experience by blocking rendering until navigation completes.
- Removed unused tab management logic from `ColumnView` to streamline component functionality.
2025-12-24 15:00:49 -08:00
Jamie Pine
51bc83d0fe refactor: Streamline Explorer component state management
- Removed unused TabViewSync and associated hooks to simplify tab state handling.
- Integrated columnStack and scrollPosition management directly within ExplorerProvider, enhancing per-tab state synchronization.
- Updated Explorer and ColumnView components to utilize new context values for improved state consistency.
- Refactored view settings handling in ExplorerProvider to align with the new TabManager context structure, ensuring a cohesive user experience across tabs.
2025-12-24 14:46:13 -08:00
Jamie Pine
6631b5cba7 feat: Enhance tab management with view state synchronization
- Introduced `TabViewSync` component to preserve view settings (viewMode, sortBy, gridSize) per tab, improving user experience when switching between tabs.
- Added `useTabColumnSync` hook to maintain column drill-down state across tabs in the ColumnView, ensuring a seamless navigation experience.
- Updated `TabManagerContext` to include new view state management functions, enhancing the overall tab management capabilities.
- Refactored `Explorer` and `ColumnView` components to integrate the new synchronization features, ensuring consistent state handling across the application.
2025-12-24 12:20:12 -08:00
Jamie Pine
1efeb1b170 feat: Implement tab scroll synchronization across Explorer views
- Added `useTabScrollSync` hook to preserve scroll position for each tab in GridView, ListView, and MediaView components.
- Updated respective views to utilize the new hook, enhancing user experience by maintaining scroll state when switching tabs.
- Exported `useTabScrollSync` from TabManager for accessibility across components.
2025-12-24 11:59:11 -08:00
Jamie Pine
671214d742 Refactor: Update Explorer and TabManager components for improved context handling
- Added a placeholder comment in TabView for future per-tab router isolation.
- Updated ExplorerProvider to include a new prop for controlling tab context processing.
- Changed TabManagerProvider's routes prop type to RouteObject for better type safety.
- Cleaned up TabView component by removing unused tab prop and simplifying children handling.
2025-12-24 11:51:52 -08:00
Jamie Pine
2a6c09f426 Refactor: Update TabBar component for improved styling and functionality
- Adjusted layout and styling of the TabBar for better visual consistency and user experience.
- Enhanced tab button styles to support flexible sizing and improved alignment.
- Updated close button positioning and hover effects for better accessibility.
- Refined transition effects for active tab indication, improving responsiveness.
2025-12-24 11:32:24 -08:00
Jamie Pine
65df3e4c28 Refactor: Enhance tab management and layout in Explorer
- Improved tab management by adding TabDefaultsSync for default tab path handling.
- Refactored ExplorerLayoutContent to better structure the layout, including repositioning the TabBar and adjusting content areas.
- Updated TabBar component to conditionally render based on the number of tabs.
- Enhanced tab title derivation logic in TabNavigationSync to reflect current route accurately.
- Cleaned up styles and structure in various components for improved readability and maintainability.
2025-12-24 11:12:50 -08:00
Cursor Agent
0dd4e688cf Fix: Prevent saving path during tab switch
Co-authored-by: ijamespine <ijamespine@me.com>
2025-12-24 18:54:58 +00:00
Jamie Pine
998deacdb6 Implement drag selection feature across Explorer views
- Added a new DragSelect component to facilitate multi-file selection using mouse drag.
- Integrated DragSelect into GridView, ListView, and ColumnView for consistent user experience.
- Enhanced file selection logic to support both single and multi-file selections, including modifier key handling.
- Updated FileCard and TableRow components to include selectable data attributes for drag selection.
- Improved performance with scroll handling during drag operations and optimized event management.
- Introduced context for managing drag selection state and behavior across different views.
2025-12-24 10:42:15 -08:00
Cursor Agent
1fb4a0f8e6 Refactor: Move daemon reconnect reload to ExplorerLayout
Co-authored-by: ijamespine <ijamespine@me.com>
2025-12-24 17:54:21 +00:00
Cursor Agent
ab858bd023 feat: Implement tabbed interface for Explorer
Adds browser-like tabs to the Explorer, allowing users to browse multiple locations simultaneously. Includes tab creation, closing, switching, and navigation persistence.

Co-authored-by: ijamespine <ijamespine@me.com>
2025-12-24 17:34:05 +00:00
Cursor Agent
940bd90a8f feat: Add daemon startup overlay and status hook
Co-authored-by: ijamespine <ijamespine@me.com>
2025-12-24 16:58:56 +00:00
Jamie Pine
546c5ec132 Add file operations for renaming and folder creation
- Introduced new features for file renaming, new folder creation, and creating folders with items.
- Implemented inline editing for file names, integrating with existing keybinds and context menus.
- Enhanced backend with new actions for renaming and folder creation, including validation and job management.
- Developed frontend components for inline editing and integrated them into GridView and ListView.
- Added context menu options for renaming and creating folders, improving user experience.
- Updated styles for job progress indicators to include a barber-pole animation for pending jobs.
2025-12-24 08:36:23 -08:00
Jamie Pine
b555156fa7 Update TODO list and enhance job logging configuration
- Added critical tasks for remote file access and updater functionality to the TODO list.
- Updated job logging configuration to include an option for logging ephemeral jobs, improving logging flexibility.
- Enhanced the job manager to conditionally log job events based on persistence settings, ensuring better tracking of job statuses.
- Refactored the inspector component to remove unnecessary console logs, streamlining the codebase.
- Improved the selection context to eliminate redundant logging during file synchronization, enhancing performance.
2025-12-24 08:04:57 -08:00
Jamie Pine
9f5c7c5880 Enhance indexing and change detection mechanisms
- Refactored the `IndexPersistence` implementation to improve error handling and logging when querying directory paths.
- Updated the change detection logic to always load existing entries during reindexing, ensuring accurate detection of moves, modifications, and deletions.
- Introduced a new test suite for folder rename operations, covering both persistent and ephemeral indexing scenarios, validating UUID/inode preservation and parent-child relationship integrity.
- Enhanced the `IndexingHarnessBuilder` to allow disabling the filesystem watcher for specific tests, improving test flexibility.
- Added closure table integrity verification to ensure proper connections between renamed folders and their children, preventing data inconsistencies.
2025-12-24 08:04:33 -08:00
Jamie Pine
3555a11795 Add IndexMode::Stale variant for improved stale file detection
- Introduced a new `IndexMode::Stale` variant to enhance the indexing process by leveraging modified time (mtime) pruning.
- Updated `IndexerJobConfig` to utilize the new mode, allowing for more efficient directory exploration based on filesystem changes.
- Implemented logic in the discovery phase to skip directories with matching mtime, improving performance and reducing unnecessary indexing.
- Enhanced `IndexMode` with helper methods to check for mtime pruning and retrieve the inner indexing mode.
- Updated relevant functions and tests to support the new stale detection capabilities, ensuring robust handling of file indexing and statistics tracking.
- Refactored existing code to accommodate the new indexing strategy while maintaining backward compatibility with previous modes.
2025-12-24 00:49:20 -08:00
Jamie Pine
96c08fa3a1 Enhance file operations and introduce statistics listener service
- Updated the TODO list to clarify the quick preview reporting issue.
- Enhanced the Tauri app's menu to include custom clipboard operations (cut, copy, paste) with appropriate state management.
- Introduced a new `statistics_listener` service to manage per-library statistics recalculation based on resource changes, improving performance and responsiveness.
- Added configuration options for enabling/disabling the statistics listener in the application settings.
- Refactored event handling in the job manager to improve logging and status monitoring.
- Updated tests to include the new statistics listener functionality and ensure proper event collection during file operations.
2025-12-23 08:36:42 -08:00
Jamie Pine
317b79920d Implement clipboard functionality and enhance file operations
- Introduced a new `useClipboard` hook for managing clipboard operations, including copy and cut functionalities.
- Updated file context menu to utilize the clipboard for copy and cut actions, improving user experience.
- Enhanced file operation modal to handle paste operations using clipboard contents, streamlining file management.
- Refactored keyboard navigation in the Explorer component to support clipboard actions, ensuring intuitive user interactions.
- Improved job management by adding sound notifications specific to job types, enhancing feedback during file operations.
2025-12-23 08:36:26 -08:00
Cursor Agent
e7418fe80b Merge main into cursor/unified-keybind-system-design-bdd9
Resolved merge conflict in packages/interface/src/index.tsx by keeping both
the existing context menu exports from main and the new keybind-related
exports from this branch.
2025-12-23 09:06:27 +00:00
Jamie Pine
e0989a01a5 Enhance PathBar component with editing functionality
- Introduced editing mode in the PathBar component, allowing users to modify paths directly.
- Added state management for editing, including handling input changes and keyboard events for submission and cancellation.
- Updated the rendering logic to accommodate editing input, improving user interaction.
- Refactored device icon retrieval to streamline the process and ensure correct icon display based on device state.
- Adjusted width calculations for different states, enhancing the visual responsiveness of the PathBar.
2025-12-23 00:34:53 -08:00
Jamie Pine
ce1f52bde9 Refactor job cancellation and pause/resume error handling
- Replaced `eprintln!` with `tracing::warn!` for logging job cancellation, pause, and resume errors, improving logging consistency and integration with the tracing framework.
- Updated the `useJobs` hook to handle job pause, resume, and cancel actions with improved error handling, ensuring better user feedback on job status.
- Enhanced the UI components to reflect changes in job management, including better error reporting for failed actions.
2025-12-22 07:50:35 -08:00
Jamie Pine
9925d926e2 Enhance device revocation process with library removal option
- Added `remove_from_library` field to `DeviceRevokeInput` and `DeviceRevokeAction` to control whether a device should be removed from library databases during revocation.
- Updated the `from_input` method in `DeviceRevokeAction` to handle the new field.
- Modified the revocation logic to conditionally remove devices from libraries based on the `remove_from_library` flag, improving flexibility in device management.
- Adjusted the CLI argument parsing to default `remove_from_library` to false, ensuring devices remain in libraries unless explicitly specified for removal.
2025-12-22 07:04:04 -08:00
Jamie Pine
dabb195291 Refactor Explorer component and enhance keyboard navigation
- Simplified import statements in Explorer component for better readability.
- Updated QuickPreviewSyncer to use openQuickPreview instead of setQuickPreviewFileId for improved clarity.
- Enhanced keyboard navigation handling in MediaView to support arrow key navigation, allowing users to select files more intuitively.
- Adjusted useExplorerKeyboard to skip media view in keyboard navigation, ensuring a smoother user experience.
2025-12-22 05:55:27 -08:00
Jamie Pine
d52e89768d Refactor Explorer context and navigation handling
- Replaced useState with useReducer in the Explorer context for improved state management.
- Updated navigation functions to use navigateToPath instead of setCurrentPath, enhancing clarity and consistency.
- Removed unused synchronization functions for URL parameters, streamlining the code.
- Introduced new utility functions for target management and improved type definitions for navigation targets.
- Enhanced the handling of view settings and preferences, ensuring better integration with the UI state.
- Deleted obsolete device operation test file to clean up the codebase.
2025-12-22 05:37:08 -08:00
Jamie Pine
4764077f56 Enhance job management functionality and UI
- Added cancel job functionality to the job management system, allowing users to cancel running or paused jobs.
- Updated job-related components (`JobRow`, `JobCard`, `JobList`) to include cancel action buttons, improving user interaction.
- Integrated sound notifications for job completion, enhancing user feedback upon job status changes.
- Refactored `useJobs` hook to manage job cancellation and sound playback, ensuring a cohesive experience across job management features.
- Improved sidebar navigation by implementing `setSpaceItemIdFromSidebar` for better context handling during navigation events.
2025-12-22 02:48:16 -08:00
Jamie Pine
6bf758460a Merge branch 'space-item-cleanup' of https://github.com/spacedriveapp/spacedrive into space-item-cleanup 2025-12-21 12:10:49 -08:00
Cursor Agent
9602a803af Refactor: Use specific names for location, volume, and tag items
Co-authored-by: ijamespine <ijamespine@me.com>
2025-12-21 20:00:22 +00:00
Jamie Pine
ede5b255e3 Enhance job management UI and data structures
- Introduced a new `JobsScreen` component to manage and display job statuses, allowing users to view running, paused, queued, completed, and failed jobs.
- Updated job data structures to include `created_at` and `started_at` timestamps, improving job tracking and reporting.
- Refactored job-related components to utilize the new data structure, ensuring consistency across the application.
- Enhanced the `JobRow` component to display job duration and status more effectively, improving user experience.
- Added filtering options for job visibility, allowing users to toggle between viewing all jobs or only active ones.
2025-12-21 08:50:33 -08:00
Jamie Pine
7d56d67a7c Refactor DevicePanel to enhance location selection UI
- Introduced a new `LocationsScroller` component to improve the display and selection of device locations, allowing for horizontal scrolling.
- Updated the `DeviceCard` to utilize the `LocationsScroller`, enhancing user interaction with location buttons.
- Added scroll state management to enable smooth scrolling behavior and visual feedback for available scroll directions.
- Integrated new icons for navigation buttons, improving the overall aesthetic and usability of the location selection interface.
2025-12-21 08:21:55 -08:00
Jamie Pine
14c6c66dc6 Enhance space item active state logic
- Updated the `useSpaceItemActive` hook to ensure that regular items are not marked as active when a virtual view is active, improving the accuracy of active state determination.
- Refined path-based navigation checks to only apply when on the explorer route, enhancing the reliability of navigation logic.
2025-12-21 08:08:44 -08:00
Jamie Pine
ca5107e437 Refactor SpaceItem component and enhance drop zone management
- Updated the SpaceItem component to improve the handling of custom onClick and context menu behaviors, allowing for more flexible interactions.
- Introduced new hooks for managing drop zones, enabling better support for file insertion and move-into operations.
- Simplified the logic for determining active states and resolved metadata for space items, enhancing overall performance and maintainability.
- Added utility functions for item metadata resolution and drop target identification, streamlining the component's functionality.
- Improved styling and structure for insertion indicators and drop highlights, ensuring a more intuitive user experience.
2025-12-21 08:00:58 -08:00
Jamie Pine
c46031a129 Enhance job management and UI components
- Added support for emitting `JobStarted` events for persistent and resumed jobs in the `JobManager`, improving event tracking.
- Updated `IndexerJobConfig` to filter hidden files by default for ephemeral browsing, aligning with typical file browser behavior.
- Refined button styles in `JobManagerPopover` and `SyncMonitorPopover` to remove hover effects for a more consistent user experience.
- Improved context menu handling in `SpaceItem` to support custom behavior, enhancing flexibility for virtual items.
- Adjusted styling in `SpacesSidebar` to ensure consistent cursor behavior across buttons.
2025-12-21 06:11:57 -08:00
Jamie Pine
9d72285b0e Add sidecar icon handling and improve FileInspector component
- Introduced a new function to determine the appropriate icon for sidecar files based on their format and kind, enhancing visual representation.
- Updated the FileInspector component to utilize the new icon logic, replacing static image components with dynamic icon rendering.
- Cleaned up unused code related to icon display, improving overall component readability and maintainability.
2025-12-20 11:34:09 -08:00
Jamie Pine
fc09e7bbea Enhance device revocation and media view responsiveness
- Added event emission for resource deletion in `DeviceRevokeAction` to improve resource management.
- Refactored `MediaView` to calculate item size dynamically based on available space, enhancing layout responsiveness.
- Updated context menu handling in `DevicesGroup` to support device unpairing, improving user interaction.
- Introduced optional `onContextMenu` prop in `SpaceItem` for customizable context menu behavior.
2025-12-20 10:52:52 -08:00
Jamie Pine
815c37f7e4 Update virtual file handling and enhance Explorer component functionality
- Modified `isVirtualFile` and `getVirtualMetadata` functions to improve type safety and null checks for virtual files.
- Enhanced `useFileContextMenu` and `useDraggableFile` hooks to prevent operations on virtual files, ensuring better user experience.
- Updated `ColumnView` and `GridView` components to support virtual file navigation and display, including new logic for handling selected directories.
- Introduced `TextViewer` and `WithPrismTheme` components for improved text file previews in the QuickPreview section.
- Added new dependencies in `package.json` for syntax highlighting support in text previews.
2025-12-20 09:54:47 -08:00
Jamie Pine
c30eaf1cdb Refactor virtual file mapping and enhance Explorer component interactions
- Updated `mapLocationToFile`, `mapVolumeToFile`, and `mapDeviceToFile` functions to streamline the creation of file-like objects, improving consistency in virtual file handling.
- Introduced new properties such as `created_at`, `modified_at`, and `content_kind` to enhance metadata management for virtual files.
- Enhanced `ColumnItemWrapper` to support double-click navigation for directories, improving user experience in the Explorer interface.
- Refactored path comparison logic to ensure accurate navigation state representation across columns.
2025-12-20 09:25:36 -08:00
Jamie Pine
a3095e4fe1 Enhance UUID preservation in indexing tests and Explorer components
- Added tests to verify UUID preservation during reindexing and file modifications in `indexing_test.rs`.
- Updated `Inspector` and `ExplorerProvider` to handle virtual files and views, ensuring consistent navigation and state management.
- Introduced `VirtualPathBar` and `VolumeSizeBar` components for improved UI representation of virtual views and volume sizes.
- Refactored `PathBar` and `FileCard` components to integrate new virtual file handling logic, enhancing user experience in the Explorer interface.
2025-12-20 09:12:50 -08:00
Jamie Pine
e9ad17aa58 Implement virtual file support in Explorer components
- Introduced `useVirtualListing` hook to manage virtual views for devices, locations, and volumes.
- Enhanced `ExplorerView`, `ColumnView`, `GridView`, and `ListView` to handle virtual files seamlessly.
- Updated `Thumb` and `Icon` components to support custom icon overrides for virtual files.
- Refactored file handling logic to accommodate virtual files in various views, ensuring consistent navigation and display.
- Added utility functions for mapping virtual entities to the File interface, improving integration with existing Explorer functionality.
2025-12-20 08:44:37 -08:00
Jamie Pine
5cbd7c253a Refactor Explorer routing and enhance UI components
- Updated `createExplorerRouter` to improve routing structure and ensure proper path handling.
- Refactored `ExplorerProvider` to enhance state management and synchronization with URL parameters.
- Modified `HeroStats` component to use `motion.div` for improved animations and user experience.
- Adjusted spacing in the `Overview` component for better layout consistency.
- Added `refetchOnReconnect` option in `useClient` to enhance data fetching reliability.
- Improved button component structure for better readability and maintainability.
2025-12-20 08:25:19 -08:00
Jamie Pine
e18385d38b Refactor Explorer component structure and enhance routing
- Renamed `ExplorerLayout` to `ExplorerLayoutContent` for clarity and encapsulated layout logic within a new `ExplorerLayout` component.
- Updated `createExplorerRouter` to specify return type for better type safety.
- Enhanced `ExplorerProvider` to synchronize the current path with the URL, improving navigation consistency.
- Simplified path handling in `SpaceItem` to utilize the new explorer route structure.
- Refactored `ExplorerView` to sync the current path from URL parameters, ensuring accurate state representation.
- Improved overall code organization and readability across the Explorer components.
2025-12-20 07:58:35 -08:00
Jamie Pine
19fed1376a Enhance resource management and UI components
- Updated `ResourceManager` to improve handling of virtual resource dependencies, adding debug logging for better traceability.
- Introduced a new `FileKinds` item type in the `ItemType` enum to categorize file types (images, videos, audio, etc.).
- Enhanced the `LibraryManager` to create space-level items, including the new `FileKinds` category.
- Implemented virtual resource event emissions in `DeleteGroupAction` and `DeleteItemAction` to ensure proper resource management during deletions.
- Added a new `SpaceCustomizationPanel` for managing space groups and items, allowing users to customize their workspace effectively.
- Updated various UI components to support drag-and-drop functionality for palette items and improved context menu interactions for group management.
2025-12-20 07:48:20 -08:00
Jamie Pine
1c5a9d3558 Enhance content kind statistics and database structure
- Added a new `file_count` column to the `content_kinds` table to track the number of content identities for each kind, improving statistics calculation efficiency.
- Implemented a migration script to add the `file_count` column and ensure backward compatibility.
- Updated the `Library` struct to include a method for updating content kind counts based on existing content identities.
- Introduced a new query for retrieving content kind statistics, including file counts, to facilitate better data analysis and reporting.
- Refactored related components to support the new statistics functionality, enhancing overall data integrity and performance.
2025-12-20 05:30:01 -08:00