* Fix setup-system breaking in macOS due to unavailable envvar
- Remove unused docker build-arg from ffmpeg workflow
- Fix Overview Explorer extending below inspector
- Fix some left behind formatting problems
* Some more formatting
* WIP
* Some minor fixes for light theme
- Fix `useIsDark` not reading the initial theme value (only reacting to theme changes)
- Fix `Inspector` always showing a dark image when no item was selected
- Fix `Thumb` video extension using black text on light theme
* Improve form error messages
- Fix `addLocationDialog` not registering the path input
- Remove `@hookform/error-message`
* Fix Dialog not respecting max-width
- Fix ErrorMessage animation jumping
* A lot of misc fixes
- Implement an `useExplorerItemData` (cleaner fix for thumbnail flicker)
- Fix broken image showing for `Thumb` due a rece condition when props are updated
- Implement an `ExternalObject` component that hacks an alternative for `onLoad` and `onError` events for <object>
- Fix `Overview` broken layout when `Inspector` is open and window is small
- Improve `IndexerRuleEditor` UX in `AddLocationDialog`
- Improve the way `IndexerRuleEditor` handles rules deletion
- Fix `IndexerRuleEditor` closing the the new rule form even when the rule creation fails
- Add an editable prop to `IndexerRuleEditor` to disable all editable functions
- Fix `getIcon` fallbacking to Document instead of the dark version of an icon if it exists
- Add some missing colors to white theme
* Format
* Fix Backup restore key dialog not resetting after error
* Feedback
* Format
* Normalize imports
* Fix ColorPicker export
* Fix Thumb video ext not showing in MediaView with show square thumbnails
- Fix AddLocationDialog Error resetting when changing IndexRules
* Index rule updater upgrade
wip
Index Rules editor UI update
prettier/ts
'tasks' to 'items'
better error message
fix type
Update Select.tsx
previous type causes various other errors - band aid solution for now.
* PR feedback
* Fix RuleInput validation regex
- Fix inverted Whitelist/Blacklist
- Some minor async fix
- Lint/Format
* UI tweaks
* Index rules UI adjustments
* format
* tweaks
---------
Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
* added base UI for categories on overview
* update core
* cleanup ui
* Inspector default view if nothing is selected, explorer takes child components, hidden menu tweak if no items are sm:flex
* wip
* somewhat functional
* scroll
* category fixes
* clean category bar
* added config store + made toolbar available on all explorer screens
* clean up overview.tsx
* added counts
* fix inspector bug
* add support for favorites
+ add book extension support
* refactor into smaller components
* Some small rust nitpicks
* fix camel case location_type
* Rust fmt
* fix typescript CI
---------
Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Co-authored-by: nikec <nikec.job@gmail.com>
Co-authored-by: Ericson Soares <ericson.ds999@gmail.com>
* d
* wip
* Nit: margin and padding tweak
* UI design tweaks
* Update Job.tsx
* Improve UI
* [WIP] - Refactor job manager
* remove invalidate explorer event on thumb generation. the event above performs atomic updates on the front end when new thumbnails are generated, now just need to make that work
* prettier formatting + removed unused imports
* UI tweaks
* progress bar width adjustment
* tweaks
* fix em
* fix thumbnail generation
* fix progress bar
* fix time
---------
Co-authored-by: Jamie Pine <ijamespine@me.com>
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
Co-authored-by: Oscar Beaumont <oscar@otbeaumont.me>
* Hide notice on overview and
- Removed prettier/recommended from eslint
- Optimized imports
* move overview check to parent
* don't show recents if there is none
* use useMatch
* finally
* should be working?
* fix types
* fix types
* Wouldn't it be nice if Metro would just work
* idk
* try harder Metro
* potentially fix bundling issues
* idk, maybe fix it?
* fix metro
* update podfile.lock
* bruh
* bruhz
* tailwind is drunk again
---------
Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>
* Add dry_run for `location.create` and `location.addLibrary`
* Add dry_run to IndexerRuleCreateArgs
- Add invalidate_query to create and edit api method of the location route
- Adjust some code to use the new dry_run property
* `AddLocationDialog` and `IndexerRuleEditor` now validate with backend without user interaction
- Create `useCallbackToWatchForm` to make it easier to watch form changes with an async function that also executes during component mount
- `method` is now part of the `addLocationDialog` form schema, and a hidden input
- Add an `index.ts` for hooks and components
* Fix mobile
* Remove redundant type definition
* Add `useCallbackToWatchForm` as an additional hook to `react-hooks/exhaustive-deps`
- Improve `useCallbackToWatchForm` argument handling, to avoid duplicated references to form
* Fix unnecessary form value updates in `addLocationDialog`
- Move reset `method` on `path` change logic from the superfluous `useEffect` to `useCallbackToWatchForm` in `addLocationDialog`
- Improve core API debug logs for `dry_run`
- Fix incorrect file name for `useCallbackToWatchForm` hook
- Improve the documentation for `useCallbackToWatchForm`
- Fix `useCallbackToWatchForm` not ignoring callback errors
- Fix `useCallbackToWatchForm` ignoring returned Promise from `onWatch`
- Add basic validation for the `form` argument in `useCallbackToWatchForm`
* Remove superflous if checks
- generate new core.ts
* Remove DryRunError
* Remove unused import
---------
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
* WIP Fix thumb incorrect size
* Fix sidebar thumb incorrect size
- Fix ext pill incorrect positioning on first load
* Improve `Thumb` overall style behavior
- Fix incorrect position of the video extension pill
- Simplify `MediaView`'s `Thumb` usage by internalizing the `mediaAspectSquare` style
- Change `QuickPreview` to use `cover` and size 0 for `Thumb`
* Remove unused import
* Allow modifing the internal img className
* lint
* Apply PR feedback
- Remove superfluous true value in component property
- Rename ObjectKinds to ObjectKindKey
* Fix video ext pill not being properly positioned in MediaView(non square thumbnail) in prod build
* Fix video ext pill incorrect position (now for sure)
- Replace img size logic with ResizeObserver
- Add error handling when thumbnails fails to load
* Shorten variable names
* Fix IndexerRuleEditor isKeyOf
---------
Co-authored-by: Jamie Pine <32987599+jamiepine@users.noreply.github.com>
* WIP Create Indexer Rule UI + Backend api fix
* Complete IndexerEditor UI for creating new rules
- WIP testing to ensure all rules are parsed correctly
- Add utilities to satisfy the TypeScript typechecker
- Introduce a utility function to facilitate extracting information from an RSPCError
- Modify AddLocationDialog to utilize the aforementioned utility function
* Validation and submit logic is now functional
- Reorganize UI for improved user flow
- Implement validation and error messaging, replace some bare inputs with form inputs, and fix styling issues
- Resolve issues with post-processing of rules during submission
- Wrap editable portion of component in a `FormProvider` due to the `Form` being in a `Portal`
- Add specialized `ErrorMessage` component to `@sd/ui` library
- Update `AddLocationDialog` and `FormField` to utilize the new `ErrorMessage` component
* Fix submit not waiting for confirmation from backend
- Reset form after submit
- Disable form while submiting
- Update form related dependencies
* Implement deleting an indexer rule
- Modify indexer rule api route to disallow deleting default rules
* Fix form reset on error
- Minor style adjustments
* Misc UI fixes
- Solve React dev warning due to not using ref in a fowardRef
- Show title in alertDialog
* Partial revert "Misc UI fixes"
* Remove console.log from 'OptionsPanel.tsx'
- Replace invalidateQuery with refresh for `locations.list` in `AddLocationDialog`
* Format `Select.tsx`
- Update turbo to fix https://github.com/vercel/turbo/issues/3598
* Implement multiple Glob matches in the same indexer rule
- Replace matching logic to use GlobSet instead of simple Glob
- Add `No OS protected` indexer rule to avoid indexing OS protected files
- Enable `No OS protected` indexer rule by default
* Rust fmt
* Reduce `No OS protected` rule Glob list by using OR matches
* Add globs for android and ios files in `No OS protected` rule
* Add some more unix special path to be ignored
* Add a new property to IndexerRule to enable it by default when adding a new location:
- Modify the Prisma schema to add the default property to the IndexerRule model.
- Adjust the IndexerRule struct's create and save logic to consider the new property.
- Adjust AddLocationDialog to properly load the default indexer rules from the backend.
- Minorly improve IndexerRuleEditor to avoid adding duplicate entries to its assigned form field.
- Add editorconfig entries for SQL and Prisma types.
* rust fmt
* Add Windows users special folders and files to `No OS protected` rule
* Construct `No OS protected` globs from string vec
- Don't repeat windows globs that require both a root and C: version
* Apply review feedback and add error handling for `IndexerRuleEditor`
- Revert manual changes made to init migration
- Create external migration that adds a `default` prop in `IndexerRule` model
- Remove redundant `useMemo`
- Replace destructuring of `useQuery`
- Provide feedback to user when a error occurs while querying indexer rules
* useMemo only for `indexerRulesIds` and not the whole `defaultValues` object
- Remove logic to accpet unix root path for windows indexer `No OS protected` rule
* Make Prettier and ESLint work together
- Resolve conflicts between Prettier and ESLint regarding indentation and Tailwind rules order
- Add `.editorconfig` to standardize basic formatting options across tools and editors
- Add `.gitattributes` to hide `pnpm-lock.yaml` in `git diff` output
- Include EditorConfig in the recommended extensions for VSCode
- Replace some instances of `pnpm exec <command>` with `pnpm <command>`
- Remove superfluous Tauri config for Linux
* Revert Prettier changes (it was working correctly before)
- Update ESLint to read Tailwind config from absolute path
- Remove redundant Prettier dependency from subprojects
- Specify the source folder for the lint script in subprojects
* use mobile's tailwind config with eslint
* pnpm format + pnpm lint:fix
---------
Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>
* Implement indexer rule editing for locations
- Partially implement IndexerRuleEditor (missing indexer rule creation)
- Update AddLocationDialog to use IndexerRuleEditor instead of checkboxes
- Enable IndexerRuleEditor on the Location settings page
- Improve error handling on the Location settings page
* Change location data retrieve logic on settings page
- Improve error handling on settings page (don't send NaN to backend)
- Add disabled prop to Form component
- Wait for data before allowing edits on location settings page
- Change some snake_case object properties to camelCase
- Fix a small error in rspc client that transformed any falsy argument value to null
* Remove console.log
* Fix issue with errors only being handled during the first load of the location settings page
* Add label and error to form field
* Add error styling
* Update other form fields
* Update FormField.tsx
* Update Input.tsx
* Move field state to hook
* remove required
* [Desktop] Improve explorer item context menu tags
* [Desktop] Add tag assignment to file inspector
* clean up
* Update tags/CreateDialog.tsx
---------
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
* update color picker
* fix position and ref
* style hex input
* update input field
* add Icon type option
* Update input
* change right padding on lg size
* update other inputs
* update color picker input
---------
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
* Handle RPC errors when adding Locations
- Add custom error codes for NeedRelink and AddLibraryToMetadata errors in backend
- Handle errors in AddLocationDialog form
- Show custom error message for above errors and ask user to confirm action
- Handle user action confirmation with appropriate RPC method (`locations.relink`/`locations.addLibrary`)
* Abstract openDirectoryPickerDialog logic to a function
- Add 'Unkown Error' when code doesn't match a know one
* Fix bugs in logic to handle `locations.create` errors
- Fix minor issue: AddLocationButton opened the dialog in desktop even when the user cancelled the file picker
- Replace ternary with object for custom form error messages to allow for easier expansion
- Break onSubmit logic up into functions
- Remove incorrect `locations.indexer_rules.delete` call
- Fix Checkbox element state not updating on external form state changes
* Adjust AddLocationDialog style to match other Dialogs in the app
- Reset exception code at the end of `confirmAfterError`
* Rework how backend errors are handled when adding Locations
- Change NeedRelink and AddLibraryToMetadata errors to use 409 (Conflict) status code and a static message.
- Only enable custom submit logic in AddLocationDialog for 409 (Conflict) errors that have a known custom error form message.
- Differentiate previous errors based on their messages instead of status code in AddLocationDialog onSubmit.
- Add @hookform/error-message dependency for improved form validation error rendering.
* Invalidate library.list to ensure it is shown on sidebar
* Improvements to AddLocationDialog
- Remove uncessary scope block and make useEffect depend directly on `form`
- Move `form.handleSubmit` from `onSubmit` call to `handleSubmit` definition
- Change basic Checkbox to RadixCheckbox and adapt onChange logic to onCheckedChange
- Some simple styling improvements to the error message
* Introducing sub path indexing for IndexerJob
* Introducing shallow indexer job
* Some feature flags to avoid warnings at pnpm prep
* Many fixes at shallow indexer job
* Changing how we implement the bookkeeping for file_path ids
Now we're account for independent locations, and also integrating
better with the LibraryContext, instead of using a static global
* Making indexer job reentrant
* Introducing shallow file identifier job
And a bunch of minor refactors
* Rust fmt
* Removing light scan from getExplorerData query
Light scan is a mutation, so we can call it on useEffect function from
the Explorer component in the frontend, when a location_id or the explorer
path changes
* Handling job early finish on init for identifier
* Only invalidate query if we have orphan paths
* Introducing ShalowThumbnailerJob
* Clippy warnings about `into_iter()`
* Naming scheme for Prisma's selects and includes
* Invalidating getExplorerData at thumbnailer
* Small mistakes lol
* Some nitpicks with pnpm prep
* Rust fmt
* Changing indexer's walk log to `trace!`
* Not deleting all file_paths on location fullRescan
* TS typecheck
* Removing `file_path` selection just with id
* beginnings of app directory
* settings mostly good
* colocate way more components
* flatten components folder
* reexport QueryClientProvider from client
* move CodeBlock back to interface
* colocate Explorer, KeyManager + more
* goddamn captialisation
* get toasts out of components
* please eslint
* no more src directory
* $ instead of :
* added back RowHeader component
* fix settings modal padding
* more spacing, less margin
* fix sidebar locations button
* fix tags sidebar link
* clean up back button
* added margin to explorer context menu to prevent contact with edge of viewport
* don't export QueryClientProvider from @sd/client
* basic guidelines
* import interface correctly
* remove old demo data
* fix onboarding layout
* fix onboarding navigation
* fix key manager settings button
---------
Co-authored-by: Jamie Pine <ijamespine@me.com>