When a download fails, manage_error_signal removes it from the queue but
doesn't send Go, so the next queued download never starts on its own.
Completed and Cancel both send Go; do the same here.
fetch_game_logic saves a fetched game under the key "<id>", but the
download agent (and the offline path) look it up under "game/<id>". Only
the library list writes "game/<id>".
So a game that isn't in the user's library - for example an emulator
pulled in as a dependency - is never found in the cache. The download
agent then falls back to the game's id for the folder name and installs
it into <install dir>/<uuid> instead of <install dir>/<name>.
GameDownloadAgent::run() prunes the install directory by comparing
locally-scanned relative paths against the manifest's file_list keys.
file_list is always written with `/` separators (see droplet's
path_backend.rs), regardless of which OS produced the manifest, but
Path::strip_prefix().to_string_lossy() on Windows yields `\`-separated
strings. Every nested file therefore fails the exact-string HashMap
lookup and gets deleted on every download/update, while flat root
files (no separator to disagree on) happen to survive. This is most
visible on Unity games, where nearly all content lives under a deeply
nested *_Data folder.
Confirmed against a live Drop server: 401/407 of a real game's
file_list entries contain `/`, with the remaining 6 being
separator-less root files, matching exactly which files survive vs.
get pruned.
* Fixing linux bug where client would never actually quit
* Fixing window minimizing to tray
* Make an official event
---------
Co-authored-by: Robert Clabough <robert@clabough.tech>
* Fix Windows and Linux launch
* Add process handler selector, pin Prisma
* Regenerate lcofkiel
* Fix torrential inclusion in image
* Fix layouting
* Implement tree kill for Windows
* Fix server lint
* chore: Major refactoring
Still needs a massive go-over because there shouldn't be anything referencing tauri in any of the workspaces except the original one. Process manager has been refactored as an example
Signed-off-by: quexeky <git@quexeky.dev>
* fix: Remote tauri dependency from process
Signed-off-by: quexeky <git@quexeky.dev>
* refactor: Improvements to src-tauri
Signed-off-by: quexeky <git@quexeky.dev>
* refactor: Builds, but some logic still left to move back
Signed-off-by: quexeky <git@quexeky.dev>
* refactor: Finish refactor
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Run cargo clippy && cargo fmt
Signed-off-by: quexeky <git@quexeky.dev>
* refactor: Move everything into src-tauri
Signed-off-by: quexeky <git@quexeky.dev>
---------
Signed-off-by: quexeky <git@quexeky.dev>
* fix: Add lint and remove all unwraps from lib.rs
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Remove all unwraps from util.rs and add state_lock macro
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Add CacheError and remove unwraps from fetch_object
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Remove unwraps from fetch_object and server_proto
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Remove unwraps from auth.rs
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Remove unwraps from process_handlers
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Clippy unwrap linting
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Remove lint
Because not everything is actually resolved yet: will be resolved with a restructure of the library
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Make the rest of clippy happy
Signed-off-by: quexeky <git@quexeky.dev>
* fix: Send download signal instead of triggering self.on_error
Signed-off-by: quexeky <git@quexeky.dev>
* fix: Corrupted state should panic
Signed-off-by: quexeky <git@quexeky.dev>
* fix: Use debug instead of display for specific errors
Signed-off-by: quexeky <git@quexeky.dev>
* fix: Settings now log error instead of panicking
Signed-off-by: quexeky <git@quexeky.dev>
---------
Signed-off-by: quexeky <git@quexeky.dev>
* feat: different local path in dev #73
* feat: better error output for downloads
* feat: collections in library view
* feat: improve download manager reliability
* feat: new download UI, more stable downloads
* fix: clippy
* fix: only show admin link if user is admin
* feat: check for libs before building
* fix: Fix native_model from requirements and add version requirements for models
Signed-off-by: quexeky <git@quexeky.dev>
* fix: Use Drop-OSS/native_model
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Bump version to include logging
(Albeit, logging occurs before we initialise the logger, but oh well)
Signed-off-by: quexeky <git@quexeky.dev>
* chore: Make clippy happy
Signed-off-by: quexeky <git@quexeky.dev>
---------
Signed-off-by: quexeky <git@quexeky.dev>
* fix: attempt to use local user keychain
* chore: tmp disable non-macos builds
* fix: windows process fix patch
* fix: re-enable windows
* fix: remove sudo
* fix: tmp disable windows again
* fix: windows build again
* chore: re-disable windows
* fix: pin to macos 14
* fix: re-enable other builds
* fix: use Arc<Error> instead of just ErrorKind
* fix: game status updates for UI
* fix: missing game version on push_game_update calls
* feat: wait if library load takes <300ms
* fix: clippy
* feat: retry specific download errors
* fix: potential fix for cmd window on Windows
* feat: add disk space check for download
* fix: update game fix formatting
* fix: clippy
* feat: add new template options, asahi support, and refactoring
* feat: install dir scanning, validation fixes, progress fixes, download manager refactor
This kind of ballooned out of scope, but I implemented some much
needed fixes for the download manager.
First off, I cleanup the Downloadable trait, there was some
duplication of function.
Second, I refactored the "validate" into the GameDownloadAgent,
which calls a 'validate_chunk_logic' yada, same structure as
downloading.
Third, I fixed the progress and validation issues.
Fourth, I added game scanning
* feat: out of box support for Asahi Linux
* fix: clippy
* fix: don't break database
* feat: add macos signing args
* fix: update all versions to -mac specific
* fix: fetch signing identity
* feat: add signing pre-steps like the docs say
* fix: remove apple requirement from signing
* fix: add drop cert to keychain when signing
* fix: add drop.pem to add-trusted-cert
* fix: re-order and specify import operation
* fix: let's try the user store
* fix: password required to update trust
* fix: try another non-interactive fix
* fix: try sudo
* fix: revert attempt fix
* fix: add cert id debug
* fix: attempt to use id rather than name
* fix: revert code id to name