Remove read-only check when creating a location
- Revert location creation if writing the `.spacedrive` file or updating the library location manager fails
* Add QuickPreview Component
- Improve the handling of Range requests
- Implement logic to answer HEAD and OPTIONS methods
- Handle CORS pre-flight requests
- Expand accepted file types
- Improve error handling of invalid Range requests
* Fix linter errors
- Add `use std::cmp::min` to custom_uri (Required on MacOS & Windows)
- Improve logic for retrieving file information in QuickPreview.tsx
* More linter errors
* Simplify `QuickPreview` by extracting the logic for choosing the file preview tag to a `FilePreview` component
- Fix the typo in `QuickPreview` props name
- Remove the unused `handleMedia` ref
- Move the remaining `QuickPreview` logic to the `transitions` callback
- Simplify the `cors` return type in `custom_uri.rs`
* Refactor range handling in `handle_file` function
- Move range handling logic to the initialization of the `range` variable
- Replace `if let` with `match` to reduce code duplication
- Don't export FilePreview
- Export QuickPreviewProps
* Fix typo in `RangeNotSatisfiable` error message
- Remove redundant variables
* Fixing cas_id generation on watcher
Some improvements on watcher file creation
* Rust fmt
---------
Co-authored-by: Ericson Soares <ericson.ds999@gmail.com>
Co-authored-by: Jamie Pine <ijamespine@me.com>
* Complying with a pedantic Clippy
* Solving duplicated directories events
When creating a directory through MacOS's Finder, for some reason
FSEvents receives 2 Create Folder events that we have to handle
* Handling moving to trash bin and restoring on Mac
Still missing the feature to restore a directory and its children
* Now handling creation of empty files on MacOS
* Enabling restore of directories and its children
* Now working: moving a directory to another
inside the same location
* Now Indexer also remove file_paths not on fs
* Enabling multiple file moves on location watcher
* Fix Windows conditional compilation issues
* Fixing cas_id generation and bumping some deps
* Many Windows specific improvs and some refactors
* Rust fmt
* Using conditional compilation on extract inode function
* Linux fixes and some MaterializedPath improvements
* Rust fmt again
* Introducing tick behavior on location watchers
* Making LastFilePathIdManager more atomic
* Some vscode launch configs for lldb debugger
* Simplifying some lifetimes
* Making all watchers more consistent
* 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
Credit: ChatGPT 4
"In this simplified version, the code calculates the sample interval based on the file size and then uses a single loop to handle both the small and large file cases. The last sample is always taken from the end of the file."
* typesafe stream handling
Now it's impossible for your to respond to a broadcast stream. Previously this would just fail due to the TCP connection having been closed by the sender.
* remove connected_peers state from `SpaceTime`
* use `OutEvent` instead of `tokio::spawn` for `SpaceTime` events
* Polling for events > tokio::mpsc
* extend max length of sync messages to ~4GB + broadcast done message
* Fix "actOS" operating system decode error
* 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
* improved object icons
* remove redundant control flow
* added support for base icon overrides by extension
+ deleted old icons folder and moved official icons into there
* fixed folder icon error
* removed temp nodes example
---------
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
* introduce cache factory
run cache factory on all branches
add names
use single quotes
add setup and prisma generation
add pnpm install
don't install cargo-watch in ci
make composite setup script
use env var for windows ci
undo all powershell stuff
* better windows ci
* don't install cargo-watch in ci
* only run cache factory on main
* i'm silly
* debug only ci
* check runner instead of matrix in setup action
* don't save cache output most of the time
* no more os-specific features
* cache entire workspace
* only cache on main again
* test instead of buidl in cache factory
* smaller ci + testing
* don't individually test each crate
* remove unnecessary needs
* smaller formatting and more clippy
* undo rustfmt changes
* disable tests
* Complying with a pedantic Clippy
* Some task runners for vscode
* Solving duplicated directories events
When creating a directory through MacOS's Finder, for some reason
FSEvents receives 2 Create Folder events that we have to handle
* Damn rustfmt
* begin spacedrop ui + misc ui improvements
* better 404 xox
* Update extensions.rs
I think I prefer Container
* added DragRegion component, ot tested cuz im on my fone
* Update DragRegion.tsx
fix import
* added dummy drop items
* better dummy data
* added clouds & search bar
* added action buttons to spacedrop items
* customize subtle button
* added support for apng, thanks luka big pants
* use relative path in sidebar
* use BYTES const
---------
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
* fix `spacedrive://` custom protocol on Windows
(hopefully)
* custom protocol using `http::Response` + fix broken web
* import patches before App on web
* use `http::Request` for input to `handle_custom_uri`
* break into dedicated file + error handling
* serving files via custom protocol
* cargo fmt because vscode did cringe
* lru cache to reduce video chunk request time
* add helper to JS
* clippy be like
* remove duplicate Open buttons in context menu
* fix Linux 🙏
* no shot
* fix Windows custom URI passing (hopefully)
* better fix for custom uri on Linux
* upgrade Tauri for feature
* switch url replacement order
* prevent React dev tools script being added in prod to desktop
* remove React devtools from html
* upgrade Tauri; required upgrading rspc, Axum, PCR
* pass typecheck + less cringe bigint
* clippy is love, clippy is life
* Typecheck plz
* fix bigint to number conversion
* use httpz + localhost server for Linux
* clippy be right
* Remove console.log
* [wip] proper auth
* fix Linux sidebar padding
* Secure Axum server with random
* Extracting app setup specific to linux to a different file
* remove outdated comment
* Some tweaks on cursom_uri.rs
* file_path_with_location doesn't need to be a named include
* fix typo
* factually wrong comment
* Change `unwrap` to `expect`
* bruh
---------
Co-authored-by: Ericson Soares <ericson.ds999@gmail.com>
* begin better onboarding
* added input and altered text
* better router & text + database icon
Co-authored-by: maxichrome <maxichrome@users.noreply.github.com>
* work on privacy screen + radio buttons
* fix video extension bug and alter screens
* add pending schema and location manager helper
* functional onboarding
* added secure temp store and started creating library loading screen
* fix secure temp keystore + api
* better onboarding
* added location settings and some overview concept, all WIP
* fix switch
* prep
* fix location router
* added backend settings
* attempted to fix form
* begin indexer rules editor, plus tweaks
* indexer rules coming soon
* fix onboarding img size
* cleanup
* clone is needed here, but clippy no like
* sike
* whole bunch of fixes
* clippy + ts
* Removing some TODOs from api/libraries.rs and fixing db size calculation
* moved object kind to client, added half functionality for appearance settings
* fix RadioGroup helper
* fix type issues
* cargo fmt
* fix creating library error handling + invalidate location list on update
* forgot to switch back to onError
* Invalidating getStatistics query on library creation and introducing the concept of waiting for a job on FileCopierJob
* F* cargo fmt
* fix RadioGroup interactivity
* wipe all migrations
* put back COLLATE NOCASE on extension columns
* update core.ts
* remove unused device component
* fix typeerror in mobile
---------
Co-authored-by: maxichrome <maxichrome@users.noreply.github.com>
Co-authored-by: Brendan Allan <brendonovich@outlook.com>
Co-authored-by: Ericson Soares <ericson.ds999@gmail.com>
Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>
* add `queue_check`, `mount_check` and `unlock_check`
* make `unlock_check` marginally more readable
* clippy
* clean up & rename functions
* remove unlock check on `keys.list`
* use american spelling of `favorite`
* use `then_some` (thanks clippy)
* more american spelling
* update crypto MSRV
* rename `keychain` to `keyring`
* make a start on the keymanager unlock refactor/keychain integration
* update routes
* update bindings
* add const identifiers
* add UI/front-end support for unlocking KM with OS keychains
* remove SK from lib creation dialog
* update query name
* add keyring functions
* attempt to update `change_master_password()` to use the keychain
* cleanup, fix master password change ui, better secret key in keyring detection
* cleanup TS a little
* add route for getting secret key from keyring
* update bindings
* update var names + show secret key in keys settings
* add `react-qr-code` and option to view the secret key (if it's in the OS keyring)
* allow copying SK to clipboard
* add `key_type` so we're not reliant on specific UUIDs for root/verification key handling
* clippy
* fix mobile typecheck
* fix typecheck, fix typo and tweak balloon hash parameters
* minor cleanup + typo fix
* use newtype structs
* WIP type refactoring (major readability boost!)
* update `use`
* add tokio `sync` feature
* too many structs? idk
* more cleanup
* add `generate` and `Nonce`
* `Nonce` and `Key` typesafety (beautiful)
* clippy + cleanup
* update code & examples
* fix bug & remove `ProtectedVec` as it looked out of place
* use `Key`
* add a query invalidation to make the UI extremely responsive
* ci pls work
* remove `keyringHasSk` route