Compare commits

..

1546 Commits

Author SHA1 Message Date
DecDuck 7c629a2f26 Add #269 2026-06-21 19:32:54 +10:00
DecDuck 5bab286061 Implement #268 2026-06-21 18:43:08 +10:00
DecDuck 505c324c26 Fix #414 2026-06-21 17:01:37 +10:00
DecDuck cbecd1161d Publish docs, update links (#431)
* Publish docs, update links

* Fix sitemap gen

* Migrate to Astro v6

* Fix server lint
2026-06-21 16:39:34 +10:00
DecDuck 9185089c99 Fix v0.4.0 process handler, add override menu (#430)
* 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
2026-06-21 15:24:33 +10:00
DecDuck 0290718ee0 Fix droposs.org build, finish website (#429)
* Fix compile issues

* Finish up website
2026-06-21 11:31:21 +10:00
DecDuck 2e86422004 Add lints, new website publish (#428)
* Add lints and new website

* Fix droplet CI

* Fix droplet ci again

* Fix clippy lints
2026-06-21 11:16:39 +10:00
DecDuck 796abf478f Fix GitHub Actions build (#427)
* Fix server build

* Remove server drop-base submod

* Update lockfile

* Use debian images for build

* Fix pino errors, lint

* Fix macOS keychain lookup
2026-06-21 10:37:54 +10:00
dependabot[bot] 062ddc0c24 chore(deps): bump next from 15.4.4 to 15.5.18 in /sites/promo (#413)
Bumps [next](https://github.com/vercel/next.js) from 15.4.4 to 15.5.18.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v15.4.4...v15.5.18)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.18
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-15 08:13:45 +10:00
dependabot[bot] ac1e0230ae chore(deps): bump nuxt from 3.20.1 to 3.21.6 in /desktop/main (#416)
Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from 3.20.1 to 3.21.6.
- [Release notes](https://github.com/nuxt/nuxt/releases)
- [Commits](https://github.com/nuxt/nuxt/commits/v3.21.6/packages/nuxt)

---
updated-dependencies:
- dependency-name: nuxt
  dependency-version: 3.21.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-15 08:13:01 +10:00
dependabot[bot] 8637ff52ef chore(deps): bump nuxt from 3.21.2 to 3.21.6 (#417)
Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from 3.21.2 to 3.21.6.
- [Release notes](https://github.com/nuxt/nuxt/releases)
- [Commits](https://github.com/nuxt/nuxt/commits/v3.21.6/packages/nuxt)

---
updated-dependencies:
- dependency-name: nuxt
  dependency-version: 3.21.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-15 08:12:37 +10:00
dependabot[bot] 18471a1d35 chore(deps): bump openssl from 0.10.75 to 0.10.80 in /desktop/src-tauri (#419)
Bumps [openssl](https://github.com/rust-openssl/rust-openssl) from 0.10.75 to 0.10.80.
- [Release notes](https://github.com/rust-openssl/rust-openssl/releases)
- [Commits](https://github.com/rust-openssl/rust-openssl/compare/openssl-v0.10.75...openssl-v0.10.80)

---
updated-dependencies:
- dependency-name: openssl
  dependency-version: 0.10.80
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-15 08:12:17 +10:00
dependabot[bot] c8bb84e0d8 chore(deps): bump tar from 0.4.44 to 0.4.46 in /desktop/src-tauri (#420)
Bumps [tar](https://github.com/composefs/tar-rs) from 0.4.44 to 0.4.46.
- [Release notes](https://github.com/composefs/tar-rs/releases)
- [Commits](https://github.com/composefs/tar-rs/compare/0.4.44...0.4.46)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 0.4.46
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-15 08:11:47 +10:00
dependabot[bot] a3974f6137 chore(deps-dev): bump nitropack from 2.13.3 to 2.13.4 (#410)
Bumps [nitropack](https://github.com/nitrojs/nitro) from 2.13.3 to 2.13.4.
- [Release notes](https://github.com/nitrojs/nitro/releases)
- [Changelog](https://github.com/nitrojs/nitro/blob/main/changelog.config.ts)
- [Commits](https://github.com/nitrojs/nitro/compare/v2.13.3...v2.13.4)

---
updated-dependencies:
- dependency-name: nitropack
  dependency-version: 2.13.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-09 12:28:18 +10:00
dependabot[bot] 0b4e20bd0f chore(deps): bump vite from 7.2.2 to 7.3.2 in /desktop/main (#388)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.2.2 to 7.3.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-09 12:27:20 +10:00
dependabot[bot] 546f47e40e chore(deps): bump defu from 6.1.4 to 6.1.6 in /desktop/main (#386)
Bumps [defu](https://github.com/unjs/defu) from 6.1.4 to 6.1.6.
- [Release notes](https://github.com/unjs/defu/releases)
- [Changelog](https://github.com/unjs/defu/blob/main/CHANGELOG.md)
- [Commits](https://github.com/unjs/defu/compare/v6.1.4...v6.1.6)

---
updated-dependencies:
- dependency-name: defu
  dependency-version: 6.1.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-09 12:26:57 +10:00
dependabot[bot] 516eaade4f chore(deps): bump time from 0.3.44 to 0.3.47 in /torrential (#381)
Bumps [time](https://github.com/time-rs/time) from 0.3.44 to 0.3.47.
- [Release notes](https://github.com/time-rs/time/releases)
- [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md)
- [Commits](https://github.com/time-rs/time/compare/v0.3.44...v0.3.47)

---
updated-dependencies:
- dependency-name: time
  dependency-version: 0.3.47
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-09 12:26:43 +10:00
dependabot[bot] 784e42f177 chore(deps): bump bytes from 1.11.0 to 1.11.1 in /torrential (#380)
Bumps [bytes](https://github.com/tokio-rs/bytes) from 1.11.0 to 1.11.1.
- [Release notes](https://github.com/tokio-rs/bytes/releases)
- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/bytes/compare/v1.11.0...v1.11.1)

---
updated-dependencies:
- dependency-name: bytes
  dependency-version: 1.11.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-09 12:26:27 +10:00
dependabot[bot] 758baa9bbb chore(deps): bump quinn-proto from 0.11.13 to 0.11.14 in /torrential (#379)
Bumps [quinn-proto](https://github.com/quinn-rs/quinn) from 0.11.13 to 0.11.14.
- [Release notes](https://github.com/quinn-rs/quinn/releases)
- [Commits](https://github.com/quinn-rs/quinn/compare/quinn-proto-0.11.13...quinn-proto-0.11.14)

---
updated-dependencies:
- dependency-name: quinn-proto
  dependency-version: 0.11.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-09 12:26:12 +10:00
DecDuck bf7ce5927f Attempt fix monorepo build (#404)
* add latest changes and fix launcher

* add optional tag specify

* fix client release

* empty commit
2026-04-27 15:38:05 +10:00
Husky ff1144e016 Improve repo tooling (#398)
* add basic git files to root

* make server part of monorepo

* import promo

* import libraries base

* import docs

* import desktop

* move docs and promo
2026-04-20 11:44:38 +10:00
DecDuck 5bbe406e4c disable proxy buffering 2026-04-19 09:38:42 +10:00
DecDuck 6bb7eca145 Merge branch 'v0.4.0' into 'develop'
New v0.4.0 website

See merge request drop-oss/drop!1
2026-04-03 01:25:10 +00:00
DecDuck 2dd90fbc44 New v0.4.0 website 2026-04-03 01:25:10 +00:00
DecDuck 50106d5fa2 Add final packages and fix torrential launch 2026-03-30 19:47:53 +11:00
DecDuck f05b306b38 Merge remote-tracking branch 'nativemodel/main' into develop 2026-03-30 19:44:33 +11:00
DecDuck 15a93e4756 Merge branch 'vincent-herlemont:main' into main 2026-03-30 19:43:43 +11:00
DecDuck 649409d51e Merge remote-tracking branch 'libarchive/master' into develop 2026-03-30 19:42:56 +11:00
DecDuck 789a78ce89 Merge remote-tracking branch 'droplet/main' into develop 2026-03-30 19:38:54 +11:00
DecDuck e881da5ce3 move base to libraries 2026-03-30 19:38:14 +11:00
DecDuck 17d9bc2b5a fix desktop deps 2026-03-30 19:36:48 +11:00
DecDuck 6b294949b9 Add and fix missing projects 2026-03-30 19:34:34 +11:00
DecDuck 1e7019606b Merge remote-tracking branch 'torrential/main' into develop 2026-03-30 19:24:10 +11:00
DecDuck f1a8badce2 Merge remote-tracking branch 'base/main' into develop 2026-03-30 19:23:07 +11:00
DecDuck ccfba3fb02 Merge remote-tracking branch 'promo/main' 2026-03-30 19:08:13 +11:00
DecDuck f82ec017d9 Update readmes for monorepo 2026-03-30 19:04:39 +11:00
DecDuck 5069d22f7e Merge remote-tracking branch 'docs/master' 2026-03-30 19:02:45 +11:00
DecDuck a83164b9e0 Merge remote-tracking branch 'cli/main' 2026-03-30 19:01:50 +11:00
DecDuck 0a731c8731 Merge remote-tracking branch 'desktop/develop' 2026-03-30 19:01:10 +11:00
DecDuck 65ab0e8c8d Merge remote-tracking branch 'server/develop' 2026-03-30 19:00:50 +11:00
DecDuck 17f68cdd4e Initial commit 2026-03-30 07:46:26 +00:00
NicoVIII 22dc94b920 Add z-index to ComboboxOptions (#271) (#375)
I never used headlessui before, so I have no idea why this is needed, but it looks like this fixes the problem. I think a high z-index is alright, because there shouldn't be things that should lie above the options.
2026-03-29 21:24:45 +11:00
renovate[bot] ba279f77c2 chore(deps): update hustcer/setup-nu action to v3.23 2026-03-19 01:05:32 +00:00
dependabot[bot] f03fed0b8a chore(deps): bump shescape from 2.1.8 to 2.1.10 (#368)
Bumps [shescape](https://github.com/ericcornelissen/shescape) from 2.1.8 to 2.1.10.
- [Release notes](https://github.com/ericcornelissen/shescape/releases)
- [Changelog](https://github.com/ericcornelissen/shescape/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ericcornelissen/shescape/compare/v2.1.8...v2.1.10)

---
updated-dependencies:
- dependency-name: shescape
  dependency-version: 2.1.10
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-13 08:12:57 +11:00
DecDuck 0a14fb412d Add MFA notes 2026-03-10 18:24:04 +10:00
Paco f3e90bd033 Fix non-authenticated users being counted as sessions (#362) 2026-03-03 08:02:58 +11:00
DecDuck 5f57fa8b4b fix: panic on readbuf too small for block 2026-03-02 22:53:45 +11:00
DecDuck e5fd8f8877 fix: update tests with fail condition 2026-03-02 22:31:37 +11:00
DecDuck 10b66a9e32 fix: cargo fmt 2026-03-02 22:26:11 +11:00
DecDuck 14346301a3 fix: clippy lints 2026-03-02 22:24:59 +11:00
DecDuck 52a158bc22 fix: clippy lints 2026-03-02 22:24:47 +11:00
DecDuck 94d3dd503a fix: install libarchive in ci 2026-03-02 22:16:40 +11:00
DecDuck c006549e95 fix: libarchive fmt and use nightly toolchain 2026-03-02 22:12:02 +11:00
DecDuck b1949d952d fix: formatting 2026-03-02 22:11:49 +11:00
DecDuck 275ed25a63 fix: submodules 2026-03-02 22:11:09 +11:00
DecDuck 4cdcc38349 feat: add tests 2026-03-02 22:10:06 +11:00
DecDuck ff17d4256a feat: switch to libarchive backend 2026-03-01 22:57:04 +11:00
DecDuck f5c4cbe18f fix: remove final debug statement 2026-03-01 22:31:11 +11:00
DecDuck b513699ad9 bump version 2026-03-01 22:28:43 +11:00
DecDuck 642e3363a7 fix: remove debug info 2026-03-01 22:28:27 +11:00
DecDuck e7d69fc98d fix: update submodule type 2026-03-01 22:23:26 +11:00
DecDuck c4bfe3357d fix: use renamed package 2026-03-01 22:21:23 +11:00
DecDuck 69e5268410 fix: rename package 2026-03-01 22:21:13 +11:00
DecDuck b2b3ee7d3c version bump 2026-03-01 22:19:05 +11:00
DecDuck c8449d7b3e feat: libarchive backend 2026-03-01 22:18:39 +11:00
DecDuck e1f1cbb4da feat: null-ptr fix 2026-03-01 22:18:22 +11:00
DecDuck 236022e99f Check integrity task (#364) 2026-03-01 21:49:34 +11:00
DecDuck 83516d83fd OIDC validation & issuer fixes (#363)
* fix: validation and issuer checks

* feat: query param util

* fix: lint
2026-03-01 21:25:55 +11:00
DecDuck 150ff87856 Merge pull request #1 from Huskydog9988/misc-changes
Improve OIDC docs plus add guide
2026-03-01 10:16:53 +00:00
DecDuck df7f4132c8 Merge branch 'master' into misc-changes 2026-03-01 10:16:45 +00:00
DecDuck e5d818f819 fix: add send trait to filereader 2026-02-28 14:59:54 +11:00
DecDuck 9ce1a8f8d9 feat: update rc number 2026-02-27 15:16:54 +11:00
DecDuck 14f4135071 Tag connect & disconnect fix (#360)
* fix: tag connect/disconnect

* fix: lint

* fix: oidc typo fix
2026-02-27 15:15:27 +11:00
DecDuck 0a7da8b2f5 feat: update rc tag 2026-02-27 09:16:53 +11:00
DecDuck d7fffe59f9 OIDC & store fixes (#358)
* fix: typos

* fix: platform filtering

* feat: fix tags and create option
2026-02-27 09:15:19 +11:00
DecDuck df6aebbd6d Fix Windows exe launch through cmd routing (#190)
* feat: modify_command in process manager

* fix: import windows extension
2026-02-27 08:48:51 +11:00
DecDuck b3bb3133d7 Fix options modal and launcher on Windows (#189)
* fix: proton paths fetch on windows

* fix: fetch_proton_paths on windows

* fix: native launcher
2026-02-26 12:59:29 +11:00
DecDuck 3e45f0e3b8 fix: image tags 2026-02-26 01:56:37 +11:00
DecDuck 84fa70f436 Fix emulator path calculation (#188)
Fixes a typo that makes the emulator executable append to the **game** install dir, not the **emulator** install dir.
2026-02-26 01:54:26 +11:00
DecDuck 06530648c3 Fix build due to missing command
Adds vendored protoc
2026-02-26 01:00:53 +11:00
DecDuck d4ae9ab62d fix: update quickstart tag 2026-02-25 23:58:27 +11:00
DecDuck f467493ffe feat: emulators guide 2026-02-25 23:57:07 +11:00
DecDuck 82b9912bd0 Game updates (#187)
* refactor: split umu launcher

* feat: latest version picker + fixes

* feat: frontend latest changes

* feat: game update detection w/ setting

* feat: fixes and refactor for game update

* fix: windows ui

* fix: deps

* feat: update modifications

* feat: missing ui and lock update

* fix: create install dir on init

* fix: clippy

* fix: clippy x2

* feat: add configuration option to toggle updates

* feat: uninstall dropdown on partiallyinstalled
2026-02-25 23:27:30 +11:00
DecDuck 3d5479bc31 Quick fixes (#355)
* fix: error message on import

* fix: 2fa input size
2026-02-25 23:23:36 +11:00
DecDuck bf395ec40c feat: add migration guide 2026-02-25 23:17:58 +11:00
DecDuck ee9dba5dc0 Add display name field to version importer (#354) 2026-02-25 23:05:24 +11:00
DecDuck 8956b6e8b2 Fix torrential depot (#353)
Adds a plugin to automatically add/update the torrential depot record
2026-02-25 22:24:15 +11:00
DecDuck 7dc889852d Paginated admin library & upgrade manifests (#351)
* feat: new page layout + endpoint

* feat: non-parallel mass import

* feat: paginated admin library

* feat: lint and performance improvement

* feat: library filter util

* feat: link frontend features to backend

* fix: lint

* fix: small fixes

* feat: bump torrential

* fix: lint
2026-02-25 02:17:33 +11:00
DecDuck 116b2183bb fix: root ca gen and warning message 2026-02-25 02:14:18 +11:00
DecDuck 3375e8c972 Fix dev torrential server (#349)
* fix: droplet interface not waiting for torrential

* fix: lint
2026-02-13 13:10:53 +11:00
Huskydog9988 431d28f812 note the reference docs 2026-02-11 11:02:15 -05:00
Huskydog9988 9b947e7f61 add robots.txt 2026-02-11 10:51:20 -05:00
Huskydog9988 6bddfad93c allow more subheadings 2026-02-11 10:51:11 -05:00
Huskydog9988 88174e6a7d move oidc guide 2026-02-11 10:21:25 -05:00
Huskydog9988 70c30ef589 basic OIDC guide 2026-02-10 21:47:43 -05:00
Huskydog9988 d5ae4181aa advise people to use OIDC_WELLKNOWN 2026-02-10 21:23:30 -05:00
Huskydog9988 5dfcd89002 clarify build instructions 2026-02-10 21:12:17 -05:00
Huskydog9988 901ecc0b51 update prisma version 2026-02-10 21:02:43 -05:00
Husky d1786b3c60 migrate to prisma v7 (#345)
* migrate to prisma v7

* fix prisma type imports

* update prisma version in docker

* fix prisma cli breaking things
2026-02-11 01:26:53 +00:00
Huskydog9988 6bca84cb34 document logout url 2026-02-10 11:55:33 -05:00
Huskydog9988 12b67425df update oidc redirct url docs 2026-02-10 11:42:40 -05:00
Huskydog9988 a435ebe53a add discord and matrix links 2026-02-10 10:38:44 -05:00
Husky e4a295f767 Series of small fixes (#346)
* migrate bufbuild config to v2

* fix localdir lookup

* fix old oidc redirect path

* rework twemoji path stuff

* fix torrential cmd

* fix broken lock file

* align dev server port with nginx

* bump pnpm

* bump nuxt

* make translations lazy loaded

* format numbers via i18n

* fix prisma breaking if extension already exists
2026-02-09 16:27:31 +00:00
Paco d0d79b3668 Refactoring and UI improvements on the admin home page (#348) 2026-02-09 18:40:45 +11:00
DecDuck 2b9edaaf53 Regenerate lockfile 2026-02-09 15:36:10 +11:00
Huskydog9988 838c39e849 fix build failing due to missing command 2026-02-08 11:54:08 -05:00
dependabot[bot] 5548ec730d chore(deps): bump seroval from 1.4.0 to 1.5.0 (#338)
Bumps [seroval](https://github.com/lxsmnsyc/seroval) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/lxsmnsyc/seroval/releases)
- [Commits](https://github.com/lxsmnsyc/seroval/commits/1.5.0)

---
updated-dependencies:
- dependency-name: seroval
  dependency-version: 1.5.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-07 13:41:19 +11:00
dependabot[bot] b179a3a716 chore(deps): bump lodash from 4.17.21 to 4.17.23 (#337)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-07 13:41:05 +11:00
dependabot[bot] 9de3b540f8 chore(deps): bump lodash-es from 4.17.21 to 4.17.23 (#340)
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-07 13:33:27 +11:00
DecDucK d7ec7fc25c Fix Windows build 2026-02-07 13:14:19 +11:00
DecDuck 16ef83228b Async downloader, better Proton support (#183)
* feat: async downloader + other fixes

* feat: windows command parsing + use library path for install path

* feat: better proton support

* feat: style fixes and store button now uses in-app

* feat: emulator rename + umu emulator fix

* feat: bring process creation inline with docs

* fix: clippy
2026-02-06 23:24:14 +11:00
DecDuck bc5623cc78 API optimisations (#343)
* feat: api optimisation

* feat: emulator rename
2026-02-06 23:12:03 +11:00
DecDuck 204e4ff66d feat: update process creation docs 2026-02-06 23:10:44 +11:00
DecDuck 00823e0b00 feat: update distrobox docs 2026-02-06 18:26:45 +11:00
DecDuck bef3642b53 feat: add proton config info 2026-02-06 18:15:54 +11:00
Paco d6920700cb Fixes wrong values used in RAM usage section (#344) 2026-02-06 13:42:00 +11:00
Paco af08472e45 Make application and logo configurable (#336)
* Adds settings for server name and logo

* Implements ApplicationLogo and replaces site name based on settings

* Refactors component for changing the company logo

* Removes unused variable

* Uses message instead of statusMessage

* Replaces favicon with logo if set
2026-02-06 11:43:21 +11:00
DecDuck 15f5986b07 Use native runners for CI (#342)
* feat: use platform-specific runners

* feat: replace with template

* fix: image name

* fix: registry image name

* fix: checkout repo

* fix: add drop version

* fix: add sha env

* fix: permissions
2026-02-06 09:55:22 +11:00
DecDuck 2662ae4154 Use self-hosted runner 2026-02-06 01:21:54 +11:00
DecDuck 228bd69409 Fix Docker build 2026-02-06 00:53:50 +11:00
DecDuck f79fcd4a78 Translated using Weblate (German) (#328)
Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (German)

Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (German)

Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (French)

Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (French)

Currently translated at 100.0% (518 of 518 strings)






Translate-URL: https://translate.droposs.org/projects/drop/drop/de/
Translate-URL: https://translate.droposs.org/projects/drop/drop/fr/
Translation: Drop/Drop

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Hicks <hicksgaming99+weblate@gmail.com>
Co-authored-by: Ribemont Francois <ribemont.francois+weblate@gmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
2026-02-06 00:34:11 +11:00
DecDuck 1f74d35bdc In-app store, delta version support (#179)
* fix: windows launch

* feat: add necessary client fixes for store

* fix: keyring fix

* feat: delta version support

* feat: dl/disk progress

* feat: move to jwt auth

* fix: lint
2026-02-06 00:30:27 +11:00
DecDuck 13c97cfcfc In-app store, torrential backend, locales (#332)
* feat: add store nav and fixes

* fix: reduce password requirement & new task error ui

* fix: client webtoken fix

* fix: delta versions and dockerfile

* fix: use setup platforms for filter & display

* fix: setup not accounted when returning valid options

* feat: tighter delta version support

* feat: dl/disk size

* feat: offload manifest generation to torrential

* fix: bump torrential

* feat: remove droplet

* feat: bump torrential

* feat: convert locales
2026-02-06 00:12:24 +11:00
DecDuck 938109708e feat: update drop docs 2026-02-05 23:43:52 +11:00
DecDuck c84ead0969 feat: formatting 2026-02-05 22:40:00 +11:00
DecDuck 454fb19941 feat: rest of droplet calls 2026-02-05 22:36:50 +11:00
DecDuck 006ed0a1f8 fix: remove log line 2026-02-05 19:17:24 +11:00
DecDuck 55b76a6529 feat: manifest generation 2026-02-05 12:00:25 +11:00
DecDuck dedf57517a fix: semaphore reference 2026-02-04 22:46:03 +11:00
DecDuck 047a1184f9 feat: bump version 2026-02-04 22:40:11 +11:00
DecDuck 23491695b3 feat: optional reader semaphore 2026-02-04 22:39:52 +11:00
DecDuck aa46a88957 feat: protobuf communication 2026-02-04 13:44:07 +11:00
DecDuck c142a45099 feat: add download reference and importing update 2026-01-31 19:13:14 +11:00
DecDuck 589aa86e9c feat: add and fix build guides 2026-01-29 18:55:00 +11:00
DecDuck 6b614acfd8 Fix console.log and NGINX port 2026-01-29 16:34:45 +11:00
DecDuck ccfa9ae376 feat: build server docs 2026-01-29 15:21:13 +11:00
quexeky 9077a30bee Use updated droplet-rs
(currently only local installation of droplet supported)
2026-01-29 08:52:21 +11:00
DecDuck d6f2f8ef18 fix: remove default cards 2026-01-28 23:45:59 +11:00
DecDuck 1b53624a32 feat: add user install guides 2026-01-28 23:42:04 +11:00
DecDuck 6bfec06fec feat: add more guides and command parsing 2026-01-28 23:15:38 +11:00
DecDuck 974b1d0f76 fix: broken links 2026-01-28 20:38:31 +11:00
DecDuck c571dccc61 feat: creating library page 2026-01-28 20:29:00 +11:00
DecDuck af9818f75c feat: link validator 2026-01-28 19:42:57 +11:00
DecDuck 7ffcf8241b fix: github pages build for real this time 2026-01-28 19:41:04 +11:00
DecDuck 2358c76def fix: github pages build 2026-01-28 19:40:24 +11:00
DecDuck 4d079901fb feat: github pages deploy 2026-01-28 19:37:37 +11:00
DecDuck 9d7e1c5f17 feat: initial commit 2026-01-28 19:36:09 +11:00
houston[bot] 06869fb61c Initial commit from Astro 2026-01-28 18:30:02 +11:00
quexeky b7a429543a chore: Migrate to using ReaderStream instead of ChunkReader 2026-01-26 16:09:20 +11:00
quexeky a72cac7259 feat: Add name default and manual configuration 2026-01-26 09:06:48 +11:00
quexeky 820c1b06f9 feat: Use info! for progress logging
Replaces existing progress_bar.println()
2026-01-25 22:32:23 +11:00
quexeky bb3280cedf fix: Speedtest not registering number of bytes read 2026-01-25 22:07:50 +11:00
quexeky 8c8e9ad4c9 feat: Migrate to Apache opendal 2026-01-25 21:04:11 +11:00
quexeky 2518d9e023 chore: Update spec.md 2026-01-25 12:14:39 +11:00
quexeky a9d1c6eea4 chore: Add spec.md 2026-01-25 08:02:23 +11:00
DecDuck 6b8d150770 Game specialisation & delta versions (#323)
* feat: game specialisation, auto-guess extensions

* fix: enforce specialisation specific schema at API level

* fix: lint

* feat: partial work on depot endpoints

* feat: bump torrential

* feat: dummy version creation for depot uploads

* fix: lint

* fix: types

* fix: lint

* feat: depot version import

* fix: lint

* fix: remove any type

* fix: lint

* fix: push update interval

* fix: cpu usage calculation

* feat: delta version support

* feat: style tweaks for selectlaunch.vue

* fix: lint
2026-01-23 16:04:38 +11:00
Paco 88d14f2d35 Adds new tile on the admin home page with system data. (#301)
* Adds new tile on the admin home page with system data. Also fixes the active users bug in the pie chart

* Fixes missing parentheses

* Updates user stats cache when signing in

* Reads active number of users from session provider

* Removes unused variable

* Small improvements

* Removes acl properties from system data websocket and performs initial push of data

* fix: remove acl fetch

---------

Co-authored-by: DecDuck <declanahofmeyr@gmail.com>
2026-01-22 10:58:21 +11:00
DecDuck 106ef8d42c Merge pull request #1 from quexeky/main
Remove static target_dir from main.rs
2026-01-21 22:38:25 +00:00
quexeky e7297019ea chore: Add flake.nix and .envrc 2026-01-22 07:42:58 +11:00
quexeky 28a1152ed2 chore: Remove static target_dir from main.rs 2026-01-22 07:35:23 +11:00
renovate[bot] 7c69ec1e76 chore(deps): update webiny/action-conventional-commits action to v1.3.1 2026-01-21 17:05:28 +00:00
quexeky e462fe3efd fix: AsyncRead not advancing initialised buffer 2026-01-21 22:20:05 +11:00
dependabot[bot] f6266d2839 chore(deps): bump diff from 8.0.2 to 8.0.3 (#326)
Bumps [diff](https://github.com/kpdecker/jsdiff) from 8.0.2 to 8.0.3.
- [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md)
- [Commits](https://github.com/kpdecker/jsdiff/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: diff
  dependency-version: 8.0.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-21 21:41:17 +11:00
quexeky 1db9e6264b feat: S3 chunk uploading 2026-01-21 20:35:39 +11:00
Paco b7ef662f5a Customisable OIDC label #325 (#327) 2026-01-21 08:15:01 +00:00
DecDuck 34f2a92785 feat: use new depot endpoints in game specialisation 2026-01-21 16:52:49 +11:00
quexeky 69bef2b785 feat: Add config overwrite confirmation 2026-01-20 19:19:48 +11:00
quexeky d8e487a273 refactor: Rename commands/configure/configure.rs to commands/configure/configurable.rs 2026-01-20 19:06:42 +11:00
quexeky 29a77ff06e refactor: Rename commands/config to commands/configure 2026-01-20 19:05:31 +11:00
quexeky 38e8ac4839 refactor: Remove ConfigItem 2026-01-20 19:02:54 +11:00
quexeky bf35f66961 feat: Storing configs 2026-01-20 18:44:40 +11:00
quexeky a3cc54f8a6 feat: CLI Configuration and maintainability 2026-01-20 17:44:33 +11:00
DecDuck fc69ae30ab Depot API & executor launch (#173)
* feat: depot api downloads

* feat: frontend fixes and experimental webview store

* feat: sync downloader

* feat: cleanup and fixes

* feat: encrypted database and fixed resuming

* feat: launch option selector

* fix: autostart when no options

* fix: clippy

* fix: clippy x2

* feat: executor launch

* feat: executor launch

* feat: not installed error handling

* feat: better offline handling

* feat: dependency popup

* fix: cancelation and resuming issues

* feat: dedup by platform

* feat: new ui for additional components and fix dl manager clog

* feat: auto-queue dependencies

* feat: depot scanning and ranking

* feat: new library fetching stack

* In-app store page (Windows + macOS) (#176)

* feat: async store loading

* feat: fix overscroll behaviour

* fix: query params in server protocol

* fix: clippy
2026-01-20 11:40:48 +11:00
Husky 526a8e69dd Add ODIC Back-Channel Logout (#304)
* prevent returning expired sessions

* add issuer to ODIC creds

* get id token in ODIC

* make session signin return session

* working backchannel logout?

* require https for ODIC provider

* handle wellknown not being https

* find session api progress

* fix windows build

* return session token on session

* switch OIDC to #searchSessions

* update pnpm

* switch to using message on error obj

* move odic callback

* fix type errors

* redirect old oidc callback

* make redirect url a URL

* remove scheduled task downloadCleanup

* fix session search for oidc

* fix signin result

* cleanup code

* ignore data dir

* fix lint error
2026-01-20 09:50:04 +11:00
quexeky 85b2e65b5f chore: Mostly finished s3 config 2026-01-20 08:31:45 +11:00
quexeky 6e21e40648 feat: Logging
Also initial progress on the upload interface
2026-01-19 18:54:41 +11:00
DecDuck 1b897a737d Fix sign-in page errors, etc (#322)
* fix: store page redirect

* fix: silent fail passkey + error display

* fix: remove console log modal
2026-01-19 17:34:03 +11:00
DecDuck af82b9dac2 fix: remove console log 2026-01-19 17:31:25 +11:00
dependabot[bot] 4053bac85f chore(deps): bump undici from 7.13.0 to 7.18.2 (#319)
Bumps [undici](https://github.com/nodejs/undici) from 7.13.0 to 7.18.2.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v7.13.0...v7.18.2)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 7.18.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 17:16:21 +11:00
dependabot[bot] 0578cfb3ca chore(deps): bump node-forge from 1.3.1 to 1.3.2 (#295)
Bumps [node-forge](https://github.com/digitalbazaar/forge) from 1.3.1 to 1.3.2.
- [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md)
- [Commits](https://github.com/digitalbazaar/forge/compare/v1.3.1...v1.3.2)

---
updated-dependencies:
- dependency-name: node-forge
  dependency-version: 1.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 17:16:09 +11:00
dependabot[bot] 7560dc0dfb chore(deps): bump diff from 8.0.2 to 8.0.3 (#321)
Bumps [diff](https://github.com/kpdecker/jsdiff) from 8.0.2 to 8.0.3.
- [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md)
- [Commits](https://github.com/kpdecker/jsdiff/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: diff
  dependency-version: 8.0.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 17:15:52 +11:00
dependabot[bot] d7b2869190 chore(deps): bump tar from 7.4.3 to 7.5.3 (#320)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.4.3 to 7.5.3.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.3)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 17:15:37 +11:00
dependabot[bot] 02fb851dc0 chore(deps): bump devalue from 5.5.0 to 5.6.2 (#318)
Bumps [devalue](https://github.com/sveltejs/devalue) from 5.5.0 to 5.6.2.
- [Release notes](https://github.com/sveltejs/devalue/releases)
- [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/devalue/compare/v5.5.0...v5.6.2)

---
updated-dependencies:
- dependency-name: devalue
  dependency-version: 5.6.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 17:15:24 +11:00
dependabot[bot] 2399a282f5 chore(deps-dev): bump h3 from 1.15.3 to 1.15.5 (#316)
Bumps [h3](https://github.com/h3js/h3) from 1.15.3 to 1.15.5.
- [Release notes](https://github.com/h3js/h3/releases)
- [Changelog](https://github.com/h3js/h3/blob/v1.15.5/CHANGELOG.md)
- [Commits](https://github.com/h3js/h3/compare/v1.15.3...v1.15.5)

---
updated-dependencies:
- dependency-name: h3
  dependency-version: 1.15.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 17:13:30 +11:00
DecDuck 22c03cabcc feat: update comparison 2026-01-19 14:04:49 +11:00
quexeky 320d323880 feat: Add nix and rust-toolchain.toml 2026-01-19 13:45:00 +11:00
DecDuck 87bdd6ff98 fix: update romm table 2026-01-19 12:43:58 +11:00
DecDuck 536b689c5f Translated using Weblate (French) (#297)
Currently translated at 100.0% (529 of 529 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (529 of 529 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (523 of 523 strings)

Translated using Weblate (Polish)

Currently translated at 24.4% (128 of 523 strings)

Translated using Weblate (Polish)

Currently translated at 22.7% (119 of 523 strings)

Added translation using Weblate (Polish)

Translated using Weblate (German)

Currently translated at 100.0% (523 of 523 strings)

Translated using Weblate (English (en_PIRATE))

Currently translated at 73.8% (386 of 523 strings)







Translate-URL: http://translate.droposs.org/projects/drop/drop/de/
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/
Translate-URL: http://translate.droposs.org/projects/drop/drop/pl/
Translate-URL: https://translate.droposs.org/projects/drop/drop/fr/
Translation: Drop/Drop

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Andus <resres2007@gmail.com>
Co-authored-by: Hicks <hicksgaming99+weblate@gmail.com>
Co-authored-by: Ribemont Francois <ribemont.francois+weblate@gmail.com>
2026-01-15 15:37:21 +11:00
DecDuck 60730f05c5 Fix MFA superlevel redirect & ViewTransition (#314)
* feat: fix mfa superlevel & viewtransition

* fix: lint
2026-01-15 15:34:17 +11:00
DecDuck 792d5000c9 Auto-run torrential in development (#313)
* Auto-run torrential in development

* fix: lint
2026-01-14 15:10:48 +11:00
Husky 752409b561 Switch to nuxt assets for emojis (#311)
* switch to nuxt assets for emojis

* add auth to emoji endpoint

* fix cache control header

* fix type error
2026-01-14 14:49:58 +11:00
DecDuck 038507fa74 Depot API & v4 (#298)
* feat: nginx + torrential basics & services system

* fix: lint + i18n

* fix: update torrential to remove openssl

* feat: add torrential to Docker build

* feat: move to self hosted runner

* fix: move off self-hosted runner

* fix: update nginx.conf

* feat: torrential cache invalidation

* fix: update torrential for cache invalidation

* feat: integrity check task

* fix: lint

* feat: move to version ids

* fix: client fixes and client-side checks

* feat: new depot apis and version id fixes

* feat: update torrential

* feat: droplet bump and remove unsafe update functions

* fix: lint

* feat: v4 featureset: emulators, multi-launch commands

* fix: lint

* fix: mobile ui for game editor

* feat: launch options

* fix: lint

* fix: remove axios, use $fetch

* feat: metadata and task api improvements

* feat: task actions

* fix: slight styling issue

* feat: fix style and lints

* feat: totp backend routes

* feat: oidc groups

* fix: update drop-base

* feat: creation of passkeys & totp

* feat: totp signin

* feat: webauthn mfa/signin

* feat: launch selecting ui

* fix: manually running tasks

* feat: update add company game modal to use new SelectorGame

* feat: executor selector

* fix(docker): update rust to rust nightly for torrential build (#305)

* feat: new version ui

* feat: move package lookup to build time to allow for deno dev

* fix: lint

* feat: localisation cleanup

* feat: apply localisation cleanup

* feat: potential i18n refactor logic

* feat: remove args from commands

* fix: lint

* fix: lockfile

---------

Co-authored-by: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
2026-01-13 15:32:39 +11:00
DecDuck 55fdaf51e1 Fix incompatiblities with server/develop 2026-01-11 13:03:35 +11:00
DecDuck 4e32c38948 feat: begin designing cli 2026-01-06 16:11:06 +07:00
dependabot[bot] b6701f50e6 chore(deps): bump qs from 6.14.0 to 6.14.1 (#303)
Bumps [qs](https://github.com/ljharb/qs) from 6.14.0 to 6.14.1.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.0...v6.14.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-04 18:34:00 +11:00
Andus dda9834a4e Add user profile page (#302)
* Add user page and API endpoint

* add: /user/[id] page
* add: /api/v1/user/[id] API endpoint

* Change loading message in user profile page

* Fix build errors, prettier code
2026-01-04 13:45:20 +11:00
DecDuck e17dcae782 fix: modal transparency 2025-12-31 18:10:50 +10:00
DecDuck b812543a4c feat: open file semaphore 2025-12-20 20:09:53 +11:00
DecDuck a6cb297e60 fix: limit chunks to 512 files each 2025-12-20 19:48:40 +11:00
DecDuck 3ff2944f77 fix: manifest generation no actually this time 2025-12-20 18:35:24 +11:00
DecDuck 87642befed feat: fix droplet manifest generation 2025-12-20 17:04:18 +11:00
DecDuck 0d4c1e516f feat: depot API 2025-12-20 01:11:05 +11:00
DecDuck 44efcbb633 fix: remove test.txt 2025-12-19 14:50:45 +11:00
DecDuck 56e6ecee26 feat: clearer error messages 2025-12-19 14:36:40 +11:00
DecDuck dac75556d3 fix: make manifest public 2025-12-18 19:49:37 +11:00
DecDuck 8f24d4ea75 fix: add deserialize traits for manifest 2025-12-18 19:39:03 +11:00
DecDuck 5c6597eb6b feat: iv and key creation 2025-12-18 19:04:56 +11:00
DecDuck d7f9faf602 feat: new 7z output parser 2025-12-18 18:45:44 +11:00
renovate[bot] 4f23c7bf6d chore(deps): update hustcer/setup-nu action to v3.22 2025-12-13 17:34:01 +00:00
DecDuck aa21a779ff feat: basics 2025-12-13 21:29:41 +11:00
DecDuck e37e3f620b feat: provide rusty manifest 2025-12-13 21:28:20 +11:00
DecDuck ed0b7bcf42 fix: progress reporting 2025-12-13 21:20:57 +11:00
DecDuck 62ff8be3c0 feat: multithreaded manifest generation 2025-12-13 21:14:59 +11:00
DecDuck bef9f8d25d bump version 2025-12-13 15:28:04 +11:00
DecDuck a3ee266f9d feat: manifest generator 2025-12-13 15:27:03 +11:00
DecDuck 1cd607f5b5 initial commit 2025-12-13 14:04:35 +11:00
DecDuck 89af632d84 feat: multipart downloads 2025-12-03 13:56:29 +11:00
quexeky 872a5421bf refactor: Convert to a dependency injection system for library sources, contexts, and backends
Signed-off-by: quexeky <git@quexeky.dev>
2025-12-03 10:14:31 +11:00
quexeky 51b469962a refactor: Add lints to use in future and fix some
Signed-off-by: quexeky <git@quexeky.dev>
2025-12-03 07:34:40 +11:00
DecDuck f7735fa88a fix: remove openssl 2025-12-01 21:29:19 +11:00
quexeky d10b4967fd refactor: Focus on maintainability
Signed-off-by: quexeky <git@quexeky.dev>
2025-12-01 20:21:40 +11:00
DecDuck 9e604bf61b feat: add healthcheck 2025-12-01 17:45:55 +11:00
DecDuck 39d4fea255 update readme 2025-12-01 16:29:33 +11:00
DecDuck 8965b05dda add license 2025-12-01 16:28:09 +11:00
DecDuck fd65a0653f fix: clippy lints 2025-12-01 16:27:08 +11:00
DecDuck bd2e44d4f0 feat: initial commit 2025-12-01 16:25:29 +11:00
DecDuck 4dfb02b0e7 fix: remove lifetimes 2025-12-01 14:35:16 +11:00
DecDuck acdf2ba0f7 fix: add unpin type 2025-12-01 14:33:32 +11:00
DecDuck 217079cdf7 feat: async update 2025-12-01 14:29:41 +11:00
DecDuck 724415df78 feat: make version backends sync 2025-12-01 11:25:53 +11:00
DecDuck 7c49a5cacb feat: add backend constructor 2025-12-01 11:14:18 +11:00
DecDuck 2d67febdb1 feat: move version backend 2025-12-01 11:11:46 +11:00
DecDuck 9f284c9727 Bump version 2025-11-30 23:18:05 +11:00
DecDuck bf0a0b5a9c Fix accessibility with API token modal 2025-11-30 23:17:42 +11:00
DecDuck b5e5fc0c77 Fix server error messages 2025-11-30 23:13:01 +11:00
DecDuck 0cfc11f669 Translated using Weblate (German) (#290)
Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (German)

Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (German)

Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (German)

Currently translated at 96.3% (503 of 522 strings)

Translated using Weblate (German)

Currently translated at 96.3% (503 of 522 strings)

Translated using Weblate (French)

Currently translated at 100.0% (522 of 522 strings)

Translated using Weblate (French)

Currently translated at 100.0% (522 of 522 strings)






Translate-URL: http://translate.droposs.org/projects/drop/drop/de/
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
Translation: Drop/Drop

Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Hicks <hicksgaming99+weblate@gmail.com>
Co-authored-by: Ribemont Francois <ribemont.francois+weblate@gmail.com>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
2025-11-30 23:07:11 +11:00
DecDuck 7ba2965312 Internal server error fixes, 7z fixes, OIDC fixes (#289)
* fix: add no-prisma-delete lint

* fix: typescript for lint

* fix: bump droplet

* fix: oidc scopes override

* fix: type errors

* feat: delete all notifications

* fix: lint

* fix: light mode style fixes
2025-11-30 23:01:52 +11:00
renovate[bot] 619619058f chore(deps): update rust crate criterion to 0.8.0 2025-11-30 01:42:06 +00:00
DecDuck 987df47f4e fix: update comparison table 2025-11-22 16:11:02 +11:00
DecDuck 1bdea73cdb feat: update stats and add download metadata 2025-11-22 16:06:11 +11:00
Weblate 277e09a566 Translated using Weblate (French)
Currently translated at 100.0% (499 of 499 strings)

Translated using Weblate (French)

Currently translated at 96.9% (484 of 499 strings)

Co-authored-by: Ribemont Francois <ribemont.francois+weblate@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
Translation: Drop/Drop
2025-11-22 10:34:45 +11:00
Hicks-99 a3eb874248 Add additional content screenshots for Steam provider (#284) 2025-11-21 22:27:36 +11:00
renovate[bot] 91ff29e05a chore(deps): update actions/checkout action to v6 2025-11-20 17:02:15 +00:00
DecDuck bb03e06133 Remove .gitlab-ci.yml 2025-11-20 16:09:16 +11:00
DecDuck 7717a54ff0 Fix 7z archives with spaces (#288)
* fix: ignore imported versions

* fix: bump droplet for 7z fixes
2025-11-20 14:02:56 +11:00
DecDuck a2d6141751 Add metadata timeout (#287)
* Add metadata timeout

* Fix lint
2025-11-20 11:17:58 +11:00
DecDuck 59c5bc0aa0 feat: add rest of download links 2025-11-19 23:13:45 +11:00
DecDuck 60748903e6 Move to pnpm to fix builds 2025-11-19 23:02:20 +11:00
DecDuck 7dbc483712 Fix Apple signing 2025-11-19 22:14:57 +11:00
DecDuck ef3b722780 fix: update last updated number 2025-11-15 14:45:21 +11:00
DecDuck 830ef1292d feat: add new certificate and current builds for v0.3.4 2025-11-15 14:44:22 +11:00
DecDuck ee5c9e191a Fix Prisma build 2025-11-15 10:59:17 +11:00
DecDuck 2d13c6e0e3 Add 7zip to container 2025-11-15 10:01:58 +11:00
DecDuck 6754d0b5d4 Bump version 2025-11-15 09:09:58 +11:00
DecDuck 096181bdf4 Bump version 2025-11-15 09:05:14 +11:00
Paco 55a2942755 Admin home page #128 (#259)
* First iteration on the new PieChart component

* #128 Adds new admin home page

* Fixes code after merging conflicts

* Removes empty file

* Uses real data for admin home page, and improves style

* Reverts debugging code

* Defines missing variable

* Caches user stats data for admin home page

* Typo

* Styles improvements

* Invalidates cache on signup/signin

* Implements top 5 biggest games

* Improves styling

* Improves style

* Using generateManifest to get the proper size

* Reading data from cache

* Removes unnecessary import

* Improves caching mechanism for game sizes

* Removes lint errors

* Replaces piechart tooltip with colors in legend

* Fixes caching

* Fixes caching and slight improvement on pie chart colours

* Fixes a few bugs related to caching

* Fixes bug where app signin didn't refresh cache

* feat: style improvements

* fix: lint

---------

Co-authored-by: DecDuck <declanahofmeyr@gmail.com>
2025-11-08 09:14:45 +11:00
laylafogiel-hash 341e9e3bd9 Add manual release date editor (#262)
* add manual release date editor

* watch() releaseDate instead of relying on coreMetadata updates

* make linter happy

---------

Co-authored-by: udifogiel <udifogiel@proton.me>
2025-11-07 09:27:37 +11:00
renovate[bot] c4c886deed chore(deps): update hustcer/setup-nu action to v3.21 2025-10-25 02:50:25 +00:00
DecDuck 278d32c1a3 Fix lints 2025-10-24 09:33:39 +11:00
laylafogiel-hash b8becde497 Improve igdb metadata fetching (#257)
* improve igdb metadata fetching

    * Make sure to get images with reasonable resolution.
      By default the url igdb returns is in "t_thumb" size,
      an image of size 90x90, which is good only for the icon,
      but bad for pretty much else. This commit will make sure
      covers will be of size "t_cover_big", artworks of 1080p
      height (i.e. "t_1080p") and logos will have their original
      size ("t_original"). Maybe "t_logo_med" is more appropriate?

    * Fetch screenshots as well.

    * Use a separate image for icon and for cover.
      icon needs to be a square, and can be of low
      resolution, so the "t_thmb" size is more appropriate
      for him.

    * If there is a storyline for a game use it as a short
      description.

* IDGB -> IGDB

* use the longer text between storyline and description for description

---------

Co-authored-by: udifogiel <udifogiel@proton.me>
2025-10-24 09:25:54 +11:00
DecDuck 3cef4c78b3 feat: update comparison matrix for GameVault update 2025-10-24 09:20:23 +11:00
DecDuck 3b0f4838c3 fix: update arm64 linux link 2025-10-21 12:44:25 +11:00
quexeky 480056c655 Fix folders not opening (#162) 2025-10-17 15:27:32 +11:00
DecDuck aab9b2c414 Fix macOS build 2025-10-16 15:32:28 +11:00
quexeky 8ff7604502 156 refactor into workspaces (#157)
* 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>
2025-10-14 17:12:51 +11:00
renovate[bot] 10516f9868 chore(deps): update actions/setup-node action to v6 2025-10-14 05:30:26 +00:00
DecDuck 6ce5fcdb95 Use 7zip for archive backend (#264)
* feat: use 7zip for archive backend

* fix: lint
2025-10-13 13:02:27 +11:00
dependabot[bot] 72b0cff220 chore(deps): bump axios from 1.11.0 to 1.12.0 (#246)
Bumps [axios](https://github.com/axios/axios) from 1.11.0 to 1.12.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.11.0...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.12.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 11:36:59 +11:00
dependabot[bot] 71fbc9f51b chore(deps): bump tar-fs from 2.1.3 to 2.1.4 (#256)
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 2.1.3 to 2.1.4.
- [Commits](https://github.com/mafintosh/tar-fs/compare/v2.1.3...v2.1.4)

---
updated-dependencies:
- dependency-name: tar-fs
  dependency-version: 2.1.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 11:36:31 +11:00
laylafogiel-hash 527da5e5d4 Add store sort options (#238) (#261)
This commit adds the option
to sort store items by name,
and to choose the sort order.

Co-authored-by: udifogiel <udifogiel@proton.me>
2025-10-13 11:20:48 +11:00
laylafogiel-hash 7f9c7eb10a Carousel UI improvements (#258)
* make carousel pagination clickable

* make carousel in game pages wrap around

* make items in store fit the row when the filter menu is visible

---------

Co-authored-by: udifogiel <udifogiel@proton.me>
2025-10-13 11:18:52 +11:00
quexeky 11395dbab1 139 add and resolve clippy lints to prevent unwrap and expect functions (#154)
* 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>
2025-10-08 16:17:24 +11:00
DecDuck 125f31a5cb feat: fix getting started button 2025-09-25 08:59:35 +10:00
Hicks-99 b902678e79 Add Steam metadata provider (#232) (#250)
* feat(metadata): add Steam metadata provider (#232)

* style(steam): remove emojis from log messages
2025-09-21 10:43:35 +10:00
DecDuck 86c330bd30 fix: update description 2025-09-14 07:13:09 +10:00
DecDuck b73091c90b Update README.md 2025-09-11 08:16:33 +10:00
DecDuck c14b32adbc Update CONTRIBUTING.md 2025-09-10 10:40:21 +10:00
dependabot[bot] 88493f0ec4 chore(deps): bump vite from 6.3.5 to 6.3.6 (#245)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.5 to 6.3.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.3.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-10 10:39:11 +10:00
DecDuck de054f20e7 Translations update from Weblate (#195)
* Translated using Weblate (German)

Currently translated at 66.5% (314 of 472 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (French)

Currently translated at 93.1% (465 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/

* Translated using Weblate (Russian)

Currently translated at 16.0% (80 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/ru/

* Translated using Weblate (German)

Currently translated at 62.9% (314 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 62.9% (314 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 62.9% (314 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 81.7% (408 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 81.7% (408 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 81.7% (408 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 100.0% (499 of 499 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

---------

Co-authored-by: Niklas Eifler <droposs@eiflerstrom.de>
Co-authored-by: pVDWNwffCRw2B2inHGs# <farmouss@gmail.com>
Co-authored-by: D3 <sl4yerenter@protonmail.com>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: Kuschiniko <nico.kusch@outlook.de>
Co-authored-by: Hicks <hicksgaming99+weblate@gmail.com>
2025-09-10 10:38:16 +10:00
dependabot[bot] 1a0ebb0729 chore(deps): bump devalue from 5.1.1 to 5.3.2 (#219)
Bumps [devalue](https://github.com/sveltejs/devalue) from 5.1.1 to 5.3.2.
- [Release notes](https://github.com/sveltejs/devalue/releases)
- [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/devalue/compare/v5.1.1...v5.3.2)

---
updated-dependencies:
- dependency-name: devalue
  dependency-version: 5.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-07 17:31:24 +10:00
dependabot[bot] 6988bf0550 chore(deps): bump tmp from 0.2.3 to 0.2.5 (#228)
Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.3 to 0.2.5.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.5)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-07 17:31:10 +10:00
DecDuck bbdbfedca3 Collections & download stability, UI (#130)
* 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
2025-09-07 15:57:06 +10:00
DecDuck 9ae7f52495 fix: remove debug modal stack entry 2025-09-06 15:20:13 +10:00
quexeky d678d48fdb Native model fixes (#137)
* 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>
2025-09-05 15:31:28 +10:00
DecDuck 7de9add7f8 patch: disable github sponsors fetching 2025-09-05 13:31:22 +10:00
DecDuck 01c408c8dc fix: add mdx types 2025-09-05 13:27:45 +10:00
DecDuck fdc2bbe25e move to new website, wiped history 2025-09-05 13:22:28 +10:00
renovate[bot] d2bcb2937b chore(deps): update actions/setup-node action to v5 2025-09-04 04:30:42 +00:00
DecDuck 1ff82979ea Preallocate download streams (#229)
* feat: pre-allocate streams for high-latency downloads

* fix: update drop-base

* fix: remove debug latency

* fix: lint
2025-08-31 14:50:56 +10:00
DecDuck e0ef85b906 fix: modal stack 2025-08-31 14:33:52 +10:00
Husky f203d0a3fd Switch to pnpm (#162)
* fix: metadata provider log

* feat: fully switch to pnpm

* ci: prettier ignore pnpm lock

* chore: dedupe lockfile

* chore: update pnpm
2025-08-31 09:53:55 +10:00
DecDuck b016351a45 Delete yarn.lock 2025-08-31 09:45:04 +10:00
DecDuck bab3c94adc Bump version to v0.3.3 2025-08-28 18:23:12 +10:00
DecDuck a9730772a7 Add placeholders to unfinished pages (#126)
* feat: add placeholders for community & news pages

* feat: add placeholder to interface in settings menu
2025-08-28 18:22:33 +10:00
DecDuck b28b7e1cc3 Fix for multi-version downloads (#125)
* fix: multi version downloads

* fix: remove debug utils

* fix: clippy
2025-08-28 18:05:05 +10:00
quexeky 8de354f3f3 Add umu-run discovery (#122)
Signed-off-by: quexeky <git@quexeky.dev>
2025-08-28 18:05:05 +10:00
quexeky c9f126ac8e chore: Version bump
Signed-off-by: quexeky <git@quexeky.dev>
2025-08-26 10:47:51 +10:00
quexeky 43544a3109 fix: Incorrect variable usage in log::info!
Signed-off-by: quexeky <git@quexeky.dev>
2025-08-26 10:47:00 +10:00
DecDuck d194f0e315 Update drop-base commit 2025-08-26 09:19:22 +10:00
DecDuck ac7b66cf62 Update droplet & other small features, and bump version for v0.3.3 (#212)
* fix: bump version and fix context timeout issues

* fix: bump droplet

* feat: add appimage auto-detection (#209)
2025-08-25 13:23:46 +10:00
quexeky ed1dae1c29 chore: Version bump
Signed-off-by: quexeky <git@quexeky.dev>
2025-08-25 08:42:35 +10:00
quexeky af7c86eea8 feat: Add logging
Signed-off-by: quexeky <git@quexeky.dev>
2025-08-25 08:41:24 +10:00
DecDuck dcef096552 API tokens (#201)
* fix: small fixes to request util and version update endpoint

* feat: api token creation and management

* fix: lint

* fix: remove unneeded sidebar component
2025-08-23 13:58:52 +10:00
useless-bit 6d3a8aad08 Init Prisma in Dockerfile (#204) 2025-08-23 07:55:37 +10:00
dependabot[bot] bf06eb0ccf chore(deps): bump vite-plugin-static-copy from 3.1.1 to 3.1.2 (#199)
Bumps [vite-plugin-static-copy](https://github.com/sapphi-red/vite-plugin-static-copy) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/sapphi-red/vite-plugin-static-copy/releases)
- [Changelog](https://github.com/sapphi-red/vite-plugin-static-copy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sapphi-red/vite-plugin-static-copy/compare/vite-plugin-static-copy@3.1.1...vite-plugin-static-copy@3.1.2)

---
updated-dependencies:
- dependency-name: vite-plugin-static-copy
  dependency-version: 3.1.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-22 13:49:31 +10:00
quexeky 22210f5d1b feat: Remove native_model_encode_downgrade
Signed-off-by: quexeky <git@quexeky.dev>
2025-08-21 12:36:02 +10:00
DecDuck aef91853ab Admin task UI update & QoL (#194)
* feat: revise library source names & update droplet

* feat: add internal name hint to library sources

* feat: update library source table with new name + icons

* fix: admin invitation localisation issue

* feat: #164

* feat: overhaul task UIs, #163

* fix: remove debug task

* fix: lint
2025-08-19 15:03:20 +10:00
FurbyOnSteroids b5223757a2 Fix non-unicode characters in game path (#193)
* replace btoa with a Buffer implementation, as btoa does not support non-unicode characters.

* replace btoa with a Buffer implementation, as btoa does not support non-unicode characters.

* fix linting

* fix linting

* replace buffer implementation with a md5 hash. This also adds the ts-md5 library.

* Revert "replace buffer implementation with a md5 hash. This also adds the ts-md5 library."

This reverts commit f98b811ab9.

* replace buffer implementation with md5 hash from node:crypto

* fix linting.. again

---------

Co-authored-by: FurbyOnSteroids <codeberg@your-moms-bellybutton.hair>
2025-08-16 22:23:57 +10:00
DecDuck 9129c0c518 Merge pull request #191 from Drop-OSS/weblate
Translations update from Weblate
2025-08-16 12:06:53 +10:00
Weblate 65b6afce38 Merge remote-tracking branch 'origin/develop' into develop 2025-08-16 02:05:27 +00:00
Ribemont Francois 9fc1f1638d Translated using Weblate (French)
Currently translated at 98.2% (450 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-16 12:02:48 +10:00
Weblate Translation Memory 694bbad8e5 Translated using Weblate (English (en_PIRATE))
Currently translated at 83.8% (384 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/
2025-08-16 12:02:48 +10:00
Weblate ddac9fa623 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/
2025-08-16 12:02:47 +10:00
Ribemont Francois bab1d841b8 Translated using Weblate (French)
Currently translated at 97.3% (446 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-16 12:02:47 +10:00
Weblate Translation Memory 0087d5fcb8 Translated using Weblate (French)
Currently translated at 97.8% (448 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-16 12:02:36 +10:00
DecDuck 71ee106c04 Fix Tauri builds (#119)
* 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
2025-08-15 23:55:34 +10:00
DecDuck 70f7015ef8 Fix #117 (#118)
* fix: version data not being attached to process manager push

* fix: clippy
2025-08-15 23:02:01 +10:00
DecDuck 519057108a Various fixes (#186)
* fix: #181

* fix: use taskHandler as source of truth for imports

* fix: task formatting

* fix: zip downloads

* feat: re-enable import version button on delete + lint
2025-08-15 22:57:56 +10:00
DecDuck e502440ed6 UI & error fixes & QoL (#116)
* 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
2025-08-15 22:56:49 +10:00
dependabot[bot] 5f9b73b228 chore(deps): bump tmp from 0.2.3 to 0.2.4 (#179)
Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.3 to 0.2.4.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.4)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-13 08:28:06 +10:00
DecDuck 5dbc6dabab Fix platform builds 2025-08-12 15:08:50 +10:00
renovate[bot] 4d553e961b chore(deps): update actions/checkout action to v5 2025-08-11 13:37:30 +00:00
DecDuck 52676a6d3c fix: #92 (#115) 2025-08-11 14:37:46 +10:00
DecDuck 8e83702874 fix: type errors 2025-08-09 18:19:01 +10:00
DecDuck b91b2efaef v2 download API and fixes (#112)
* fix: potential download fixes

* fix: show installed games not on remote

* fix: more download_logic error handling

* partial: move to async

* feat: interactivity improvements

* feat: v2 download API

* fix: download seek offsets

* fix: clippy

* fix: apply clippy suggestion

* fix: performance improvements starting up download

* fix: finished bucket file

* fix: ui tweaks and fixes

* fix: revert version to 0.3.2

* fix: clippy
2025-08-09 15:50:21 +10:00
DecDuck 3c5fe2e651 v2 download API and Admin UI fixes (#177)
* fix: small ui fixes

* feat: #171

* fix: improvements to library scanning on admin UI

* feat: v2 download API

* fix: add download context cleanup

* fix: lint
2025-08-09 15:45:39 +10:00
Ribemont Francois ddb34f3b43 Translated using Weblate (French)
Currently translated at 98.2% (450 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-06 21:06:35 +00:00
Weblate Translation Memory ad1c6a2323 Translated using Weblate (English (en_PIRATE))
Currently translated at 83.8% (384 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/
2025-08-06 21:06:35 +00:00
DecDuck 359e1412a8 Translations update from Weblate (#172)
* Translated using Weblate (English)

Currently translated at 100.0% (458 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en/

* Translated using Weblate (English (en_PIRATE))

Currently translated at 80.7% (370 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

* Translated using Weblate (English)

Currently translated at 100.0% (458 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en/

* Translated using Weblate (English (en_PIRATE))

Currently translated at 83.4% (382 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

* Added translation using Weblate (Russian)

* Translated using Weblate (French)

Currently translated at 49.1% (225 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/

* Translated using Weblate (German)

Currently translated at 54.3% (249 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 54.3% (249 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (Russian)

Currently translated at 6.1% (28 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/ru/

* Translated using Weblate (English (en_PIRATE))

Currently translated at 84.0% (385 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

* Translated using Weblate (French)

Currently translated at 97.8% (448 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/

* Translated using Weblate (French)

Currently translated at 97.8% (448 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/

* Translated using Weblate (German)

Currently translated at 68.5% (314 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 68.5% (314 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (German)

Currently translated at 68.5% (314 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/

* Translated using Weblate (English)

Currently translated at 100.0% (458 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en/

* Translated using Weblate (French)

Currently translated at 97.3% (446 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/

* Update translation files

Updated by "Remove blank strings" add-on in Weblate.

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/

---------

Co-authored-by: Husky <husky@disroot.org>
Co-authored-by: Ribemont Francois <ribemont.francois+weblate@gmail.com>
Co-authored-by: Hicks <hicksgaming99+weblate@gmail.com>
Co-authored-by: Kuschiniko <nico.kusch@outlook.de>
Co-authored-by: Dmitrii <nossster@gmail.com>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: Weblate <noreply@weblate.org>
2025-08-06 17:49:07 +10:00
Mars7x e72b94bfc9 README fixes (#174) 2025-08-06 17:48:25 +10:00
Weblate e352110794 Update translation files
Updated by "Remove blank strings" add-on in Weblate.

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/
2025-08-06 02:57:46 +00:00
Ribemont Francois 4d05e467e3 Translated using Weblate (French)
Currently translated at 97.3% (446 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-06 02:57:46 +00:00
Weblate Admin ff47cd84e4 Translated using Weblate (English)
Currently translated at 100.0% (458 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en/
2025-08-06 02:57:46 +00:00
Husky b4b3f7bb7d Translated using Weblate (German)
Currently translated at 68.5% (314 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/
2025-08-06 00:05:00 +00:00
Kuschiniko a1f8f0c006 Translated using Weblate (German)
Currently translated at 68.5% (314 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/
2025-08-06 00:05:00 +00:00
Hicks 3c9e74c25c Translated using Weblate (German)
Currently translated at 68.5% (314 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/
2025-08-06 00:05:00 +00:00
Weblate Translation Memory dab0a64027 Translated using Weblate (French)
Currently translated at 97.8% (448 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-06 00:05:00 +00:00
Ribemont Francois 3e11fad8e3 Translated using Weblate (French)
Currently translated at 97.8% (448 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-06 00:05:00 +00:00
Husky 65c82f3fd0 Translated using Weblate (English (en_PIRATE))
Currently translated at 84.0% (385 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/
2025-08-06 00:04:59 +00:00
Dmitrii 7be73196f7 Translated using Weblate (Russian)
Currently translated at 6.1% (28 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/ru/
2025-08-05 19:50:38 +00:00
Kuschiniko e2dc4b2c11 Translated using Weblate (German)
Currently translated at 54.3% (249 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/
2025-08-05 19:50:38 +00:00
Hicks 7bbc2fa245 Translated using Weblate (German)
Currently translated at 54.3% (249 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/de/
2025-08-05 19:50:38 +00:00
Ribemont Francois 681b49fab1 Translated using Weblate (French)
Currently translated at 49.1% (225 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/fr/
2025-08-05 19:50:38 +00:00
DecDuck 1a9c7fa791 Move frontend to main folder (#109)
* feat: small refactor

* fix: appimage build script

* fix: add NO_STRIP to AppImage build

* fix: build and dev mode from refactor

* fix: submodule step 1

* fix: submodules step 2
2025-08-05 16:09:47 +10:00
Weblate Admin 0d2a109c42 Added translation using Weblate (Russian) 2025-08-05 01:47:18 +00:00
Husky ae3798c89a Translated using Weblate (English (en_PIRATE))
Currently translated at 83.4% (382 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/
2025-08-04 17:18:11 +00:00
Husky 47cb0cd10a Translated using Weblate (English)
Currently translated at 100.0% (458 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en/
2025-08-04 17:18:11 +00:00
Husky a846e3235d Translated using Weblate (English (en_PIRATE))
Currently translated at 80.7% (370 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/
2025-08-04 17:18:11 +00:00
Husky f10fe64bd6 Translated using Weblate (English)
Currently translated at 100.0% (458 of 458 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en/
2025-08-04 17:18:11 +00:00
DecDuck 0bf51c0466 QoL Download Manager (#108)
* 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
2025-08-04 16:30:45 +10:00
Husky b864d77f2a Small IO tweaks, robots.txt, and README improvements (#173)
* feat: add link to drop version in footer

* feat: add drop logo aria label

* feat: disable all crawling by bots

for now i think this is a good default as all of drop is currently behind auth

* feat: hide logo when inside wordmark for aria

* docs: update readme and contributing

* feat: default page in setup wizzard is img

* ci: remove redundant perm in release ci

* docs: update translation links and add progress image

* fix: lang selector using wrong weblate link
2025-08-04 16:30:22 +10:00
DecDuck 6cd25eaf69 Fix errors with caching when cache is deleted (#101) 2025-08-04 15:02:32 +10:00
DecDuck f26b4e18dd Fixes reqwest client setup, #87 (#107) 2025-08-04 15:01:44 +10:00
DecDuck 94c49bc5c2 Process manager templating & game importing (#96)
* 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
2025-08-02 20:17:27 +10:00
DecDuck 5c69669428 macOS app signing (#95)
* 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
2025-08-02 15:01:53 +10:00
DecDuck 6b98c2b2dd Reqwest optionally load certificates from disk (#94)
* feat: Add get_client function

Signed-off-by: quexeky <git@quexeky.dev>

* chore: Converted all instances of reqwest::blocking::Client::new() and reqwest::Client::new() to DROP_CLIENT_SYNC and DROP_CLIENT_ASYNC respectively

Signed-off-by: quexeky <git@quexeky.dev>

* fix: use_remote_logic not using certificates

Signed-off-by: quexeky <git@quexeky.dev>

* fix: add log statement to certificates

* chore: add more logging

* fix: clippy

* refactor: into single fetch_certificates func

---------

Signed-off-by: quexeky <git@quexeky.dev>
Co-authored-by: quexeky <git@quexeky.dev>
2025-08-02 11:59:50 +10:00
luzpaz e1b63fb607 Fix various typos (#156)
Found via `codespell -q 3 -S "./yarn.lock" -L pris`
2025-08-01 21:53:31 +10:00
DecDuck 52176787a7 Fix #119 (#153) 2025-08-01 16:26:27 +10:00
DecDuck d501894dd1 Translated using Weblate (English) (#151)
Currently translated at 100.0% (456 of 456 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en/
2025-08-01 14:31:50 +10:00
DecDuck 9565a7557f Bump version to v0.3.1 (#85) 2025-08-01 14:13:13 +10:00
DecDuck 5947682940 Version bump: v0.3.0 2025-08-01 14:09:16 +10:00
DecDuck 30f0ced75e feat: bump version (#150) 2025-08-01 14:02:44 +10:00
DecDuck c434713085 Fix for undeleted games from library sources (#148)
* fix: casade delete for games and library sources

* fix: add bug workaround

* fix: lint
2025-08-01 14:00:10 +10:00
DecDuck bc3417711c Device code authorization (#83)
* feat: device code authorization

* Fix for setup executable unable to be launched (#81)

* Fix for redownload invalid chunks (#84)

* feat: Redownloading invalid chunks

Signed-off-by: quexeky <git@quexeky.dev>

* fix: clippy

* fix: clippy x2

---------

Signed-off-by: quexeky <git@quexeky.dev>
Co-authored-by: quexeky <git@quexeky.dev>

* chore: Run clippy fix pedantic

Signed-off-by: quexeky <git@quexeky.dev>

* feat: add better error handling

* fix: clippy

---------

Signed-off-by: quexeky <git@quexeky.dev>
Co-authored-by: quexeky <git@quexeky.dev>
2025-08-01 13:12:05 +10:00
DecDuck a3ea3409c1 Code-based authorization for Drop clients (#145)
* feat: code-based authorization

* fix: final touches

* fix: require session on code fetch endpoint

* feat: better error handling

* refactor: move auth send to client handler

* fix: lint
2025-08-01 13:11:56 +10:00
DecDuck f696bad436 Translations update from Weblate (#107)
* Translated using Weblate (English (Australia))

Currently translated at 1.6% (6 of 375 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_AU/

* Translated using Weblate (English (en_PIRATE))

Currently translated at 99.4% (373 of 375 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

* Translated using Weblate (English (en_PIRATE))

Currently translated at 99.4% (373 of 375 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

* Translated using Weblate (English (en_PIRATE))

Currently translated at 100.0% (375 of 375 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

---------

Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
2025-08-01 10:38:53 +10:00
quexeky 0109518ea7 chore: Run clippy fix pedantic
Signed-off-by: quexeky <git@quexeky.dev>
2025-08-01 08:42:45 +10:00
DecDuck 592d4c2633 Fix for incorrect description on company page 2025-07-31 21:49:15 +10:00
DecDuck e674432c39 Fix for invalid route in setup wizard 2025-07-31 21:44:25 +10:00
DecDuck 4ff6be81c2 Fix for Release CI 2025-07-31 21:39:01 +10:00
DecDuck ec5f0ca986 Fix Github Release CI (#144)
* fix: attempt fix from https://github.com/reproducible-containers/buildkit-cache-dance

* fix: lint

* fix: migrate to pnpm to see if it builds

* fix: comment out unified deps builder

* fix: remove dependency on deps

* fix: shamefully hoist deps
2025-07-31 21:36:01 +10:00
DecDuck e7579986c2 v0.3.0 2025-07-31 20:41:42 +10:00
DecDuck 2691654ab6 Setup wizard & 0.3.0 release (#146)
* fix: small merge fixes

* feat: initial setup wizard

* fix: last few localization items

* fix: lint

* fix: bump version
2025-07-31 20:41:02 +10:00
DecDuck c557bb71f2 Fix for redownload invalid chunks (#84)
* feat: Redownloading invalid chunks

Signed-off-by: quexeky <git@quexeky.dev>

* fix: clippy

* fix: clippy x2

---------

Signed-off-by: quexeky <git@quexeky.dev>
Co-authored-by: quexeky <git@quexeky.dev>
2025-07-31 18:25:38 +10:00
DecDuck 6c726297fe Merge branch 'main' into develop 2025-07-31 18:03:19 +10:00
DecDuck 2555eff993 Store overhaul (#142)
* feat: small library tweaks + company page

* feat: new store view

* fix: ci merge error

* feat: add genres to store page

* feat: sorting

* feat: lock game/version imports while their tasks are running

* feat: feature games

* feat: tag based filtering

* fix: make tags alphabetical

* refactor: move a bunch of i18n to common

* feat: add localizations for everything

* fix: title description on panel

* fix: feature carousel text

* fix: i18n footer strings

* feat: add tag page

* fix: develop merge

* feat: offline games support (don't error out if provider throws)

* feat: tag management

* feat: show library next to game import + small fixes

* feat: most of the company and tag managers

* feat: company text field editing

* fix: small fixes + tsgo experiemental

* feat: upload icon and banner

* feat: store infinite scrolling and bulk import mode

* fix: lint

* fix: add drop-base to prettier ignore
2025-07-30 13:40:49 +10:00
DecDuck 23adebafd6 Fix for setup executable unable to be launched (#81) 2025-07-30 09:57:07 +10:00
DecDuck 26b12a6e8c fix: fade in fade out + styling 2025-07-27 20:25:21 +10:00
DecDuck 50c1c21456 feat: add text input modal 2025-07-27 20:09:29 +10:00
DecDuck cc59bb2567 feat: remove overflow-hidden 2025-07-27 18:56:36 +10:00
DecDuck da3642cba2 Cache-first object fetching (#76)
* fix: submillisecond cache hits

* fix: async object loading to hand control back to renderer

* fix: clippy
2025-07-27 12:04:50 +10:00
renovate[bot] becea96257 chore(deps): update rust crate criterion to 0.7.0 2025-07-25 16:00:44 +00:00
DecDuck d0d663cdd3 Bump version to v0.3.0-rc-8 (#74) 2025-07-25 22:21:59 +10:00
Husky 58da16c551 Update Prisma to 6.11 (#133)
* chore: update prisma to 6.11

more prisma future proofing due to experimental features

* chore: update dependencies

twemoji - new unicode update
argon2 - bux fixes
vue3-carousel - improve mobile experiance
vue-tsc - more stable

* fix: incorrect prisma version in docker

Also remove default value for BUILD_DROP_VERSION, that is now handled in nuxt config

* fix: no logging in prod

* chore: optimize docker builds even more

* fix: revert adoption of prisma driverAdapters

see: https://github.com/prisma/prisma/issues/27486

* chore: optimize dockerignore some more

* Fix `pino-pretty` not being included in build (#135)

* Remove `pino` from frontend

* Fix for downloads and removing of library source (#136)

* fix: downloads and removing library source

* fix: linting

* Fix max file size of 4GB (update droplet) (#137)

* Fix manual metadata import (#138)

* chore(deps): bump vue-i18n from 10.0.7 to 10.0.8 (#140)

Bumps [vue-i18n](https://github.com/intlify/vue-i18n/tree/HEAD/packages/vue-i18n) from 10.0.7 to 10.0.8.
- [Release notes](https://github.com/intlify/vue-i18n/releases)
- [Changelog](https://github.com/intlify/vue-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-i18n/commits/v10.0.8/packages/vue-i18n)

---
updated-dependencies:
- dependency-name: vue-i18n
  dependency-version: 10.0.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump @intlify/core from 10.0.7 to 10.0.8 (#139)

---
updated-dependencies:
- dependency-name: "@intlify/core"
  dependency-version: 10.0.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Small fixes (#141)

* fix: save task as Json rather than string

* fix: pull objects before creating game in database

* fix: strips relative dirs from version information

* fix: #132

* fix: lint

* fix: news object ids and small tweaks

* fix: notification styling errors

* fix: lint

* fix: build issues by regenerating lockfile

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: DecDuck <declanahofmeyr@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-25 21:28:00 +10:00
DecDuck f0112ec027 Process manager fixes (#71)
* fix: launching on linux

* feat: #70

* feat: add dummy store page

* feat: add store redir and refresh button to library

* feat: cache first object fetching

* feat: Remove let_chains feature and update to Rust 2024

Signed-off-by: quexeky <git@quexeky.dev>

* feat: Check for if process was manually stopped

Signed-off-by: quexeky <git@quexeky.dev>

* fix: use bitcode instead of serde

* chore: remove logs

* fix: clippy

* fix: clippy 2

* fix: swap to stop icon

---------

Signed-off-by: quexeky <git@quexeky.dev>
Co-authored-by: quexeky <git@quexeky.dev>
2025-07-25 10:44:40 +10:00
DecDuck c5b6894c40 Small fixes (#141)
* fix: save task as Json rather than string

* fix: pull objects before creating game in database

* fix: strips relative dirs from version information

* fix: #132

* fix: lint

* fix: news object ids and small tweaks

* fix: notification styling errors

* fix: lint
2025-07-20 14:56:15 +10:00
dependabot[bot] 761a5524c3 chore(deps): bump @intlify/core from 10.0.7 to 10.0.8 (#139)
---
updated-dependencies:
- dependency-name: "@intlify/core"
  dependency-version: 10.0.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-20 14:29:49 +10:00
dependabot[bot] 26e3e599c5 chore(deps): bump vue-i18n from 10.0.7 to 10.0.8 (#140)
Bumps [vue-i18n](https://github.com/intlify/vue-i18n/tree/HEAD/packages/vue-i18n) from 10.0.7 to 10.0.8.
- [Release notes](https://github.com/intlify/vue-i18n/releases)
- [Changelog](https://github.com/intlify/vue-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-i18n/commits/v10.0.8/packages/vue-i18n)

---
updated-dependencies:
- dependency-name: vue-i18n
  dependency-version: 10.0.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-20 14:29:37 +10:00
DecDuck 7aee57038d Fix client running behind reverse proxy (#69)
* fix: reverse proxy 400 due to duplicate header

* fix: clippy

* bump version and update ci
2025-07-18 20:08:12 +10:00
DecDuck 3d75ace23f Release v0.3.0-rc-6 (#68) 2025-07-18 17:38:36 +10:00
DecDuck d74e7a26eb Clippy CI/CD (#67)
* feat: add clippy ci

* fix: clippy errors

* fix: ci/cd

* fix: update ci packages

* fix: add gtk3 to ci deps

* fix: add webkit to ci deps

* fix: ci deps and perms

* fix: add clippy settings to lib.rs
2025-07-18 17:36:04 +10:00
DecDuck 1f83845522 Panic hook to generate crash dumps #65 (#66) 2025-07-18 16:35:02 +10:00
renovate[bot] 1d1d551993 chore(deps): update hustcer/setup-nu action to v3.20 2025-07-15 13:11:16 +00:00
DecDuck e55a4d6d7e Fix manual metadata import (#138) 2025-07-14 17:26:00 +10:00
DecDuck 59ea3a13ba Fix max file size of 4GB (update droplet) (#137) 2025-07-14 16:43:42 +10:00
DecDuck d6fd505f41 Fix windows build by removing linux extension import (#64) 2025-07-14 16:43:11 +10:00
DecDuck 88f8742143 Download fixes (#63)
* refactor: Rename StoredManifest to DropData

Signed-off-by: quexeky <git@quexeky.dev>

* fix: Downloads when resuming would truncate files which had not been finished

Signed-off-by: quexeky <git@quexeky.dev>

* chore: Didn't import debug macro

Signed-off-by: quexeky <git@quexeky.dev>

* fix: Download chunks with wrong indexes

Migrated to using checksums as indexes instead

Signed-off-by: quexeky <git@quexeky.dev>

* feat: Resume download button

Also added DBWrite and DBRead structs to make database management easier

Signed-off-by: quexeky <git@quexeky.dev>

* feat: Download resuming

Signed-off-by: quexeky <git@quexeky.dev>

* feat: Resume button and PartiallyInstalled status

Signed-off-by: quexeky <git@quexeky.dev>

* feat: Download validation

Signed-off-by: quexeky <git@quexeky.dev>

* chore: Ran cargo fix & cargo fmt

Signed-off-by: quexeky <git@quexeky.dev>

* fix: download validation, installs, etc

* chore: version bump

---------

Signed-off-by: quexeky <git@quexeky.dev>
Co-authored-by: quexeky <git@quexeky.dev>
2025-07-14 16:31:06 +10:00
DecDuck 1bfa03087a Fix for downloads and removing of library source (#136)
* fix: downloads and removing library source

* fix: linting
2025-07-14 15:34:10 +10:00
DecDuck 65fba0ca7b Remove pino from frontend 2025-07-14 14:20:17 +10:00
DecDuck 9ca9d92d55 Fix pino-pretty not being included in build (#135) 2025-07-14 12:11:17 +10:00
Husky 81eaeb6b9b Logging (#131)
* ci: pull version from package.json on build

* fix: implicit any type

* feat: inital support for logger

* style: fix lint

* feat: move more logging over to pino

* fix: logging around company importing
2025-07-09 12:01:23 +10:00
vincent-herlemont 31efa79429 ci: add comprehensive formatting and linting setup
- Add formatting commands to justfile (format, fmt_check, clippy_check, fc)
- Create GitHub Actions workflows for automated fmt and clippy checks
- Fix existing clippy warnings in macro code
- Ensure CI enforcement of code quality standards

This brings native_model in line with native_db's robust formatting and linting approach.
2025-07-06 17:51:49 +02:00
DecDuck cf7d84db1b Toggle for showing title & description overlay on store page #51 (#130)
* #51 Adds settings page with showTitleDescriptionOnGamePanel

* Removes console.log

* Renames isHidden to system, adds missing system column on Game and fixes nitro plugin on fresh database

* Implements a different way to handle the placeholder image

* Removes system column on Game

* Groups settings keys together

* Removes unused i18n keys

* fix: fix eslints and other small tweaks

---------

Co-authored-by: Francois Ribemont <ribemont.francois@gmail.com>
2025-07-06 13:13:57 +10:00
DecDuck 4a866d2f18 FlatLibrary provider (#127) 2025-07-06 12:44:41 +10:00
Husky 145bdd756e User invite uses external domain option (#118)
* feat: user invite uses external domain option
fixes #117

* fix: inconsistent external url format

* fix: normalize external url more cleanly
2025-07-01 09:11:26 +10:00
DecDuck aa4236b70b Fix linting 2025-07-01 09:09:10 +10:00
DecDuck 61f2060db3 Fix CodeQL warnings 2025-06-28 12:00:42 +10:00
quexeky 19e32d0bbc fix: Accidentally moved request when setting the header
Signed-off-by: quexeky <git@quexeky.dev>
2025-06-25 09:17:06 +10:00
DecDuck af983fdcff chore: bump version to 0.3.0-rc-4 2025-06-25 09:05:08 +10:00
quexeky 18d11a6da9 fix: Move Authorization header generation to download_game_chunk()
Signed-off-by: quexeky <git@quexeky.dev>
2025-06-25 06:53:42 +10:00
semantic-release-bot 64b1d15dd1 chore: update version to 0.6.2 2025-06-19 01:55:54 +00:00
vincent-herlemont 65f3db92c6 chore: update release workflow conditions and add dry run for non-dispatch events 2025-06-19 10:33:21 +09:00
vincent-herlemont c177e97857 chore: replace release.config.js with .releaserc.json for semantic release configuration 2025-06-17 21:30:00 +09:00
DecDuck f92e475703 Combined fixes (#116)
* fix: missing CheckIcon import in LanguageSelector

* fix: #114 and error handling

* fix: #97

* fix: lint

* feat: #104

* fix: #72
2025-06-10 10:08:01 +10:00
Pacodastre f70cb75b35 Adds delete user functionality in admin panel #86 (#110)
* #86 Adds delete user functionality in admin panel

* Removes unnecessary code

* Prevents current user from deleting itself
2025-06-08 14:49:11 +10:00
DecDuck 8f86ac0dfa Fix: Re-use validator from signup on invitation creation #108 (#113)
* fix: invitation validation

* fix: lint
2025-06-08 14:47:08 +10:00
Husky 7b75b9e66a Various bug fixes (#102)
* feat: set lang in html head

* fix: add # in front of git ref

* fix: remove unused vars from example env

* fix: package name and license field

* fix: enable sourcemap for client and server

* fix: emojis not showing in prod

this is extremely cursed, but it works

* chore: refactor auth manager

* feat: disable invitations if simple auth disabled

* feat: add drop version to footer

* feat: translate auth endpoints

* chore: move oidc module

* feat: add weekly tasks

enabled object cleanup as weekly task

* feat: add timestamp to task log msgs

* feat: add guard to prevent invalid progress %

* fix: add missing global scope to i18n components

* feat: set base url for i18n

* feat: switch task log to json format

* ci: run ci on develop branch only

* fix: UserWidget text not updating #109

* fix: EXTERNAL_URL being computed at build

* feat: add basic language outlines for translation

* feat: add more english dialects
2025-06-08 13:49:43 +10:00
DecDuck 3a7389aeb5 Re-use validator from signup on invitation creation #108 (#111)
* fix: server side validation and client side validation for invitation creation

* fix: lint
2025-06-08 11:59:00 +10:00
DecDuck 5a842210f4 Migrate game metadata import to task system #90 (#103)
* feat: move game import to new task system

* fix: sizing issue with new task UI

* fix: lint

* feat: add pcgamingwiki task
2025-06-08 11:37:24 +10:00
DecDuck 622edbf54e Translations update from Weblate (#106)
* Translated using Weblate (English (en_PIRATE))

Currently translated at 100.0% (362 of 362 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

* Translated using Weblate (English (en_PIRATE))

Currently translated at 100.0% (362 of 362 strings)

Translation: Drop/Drop
Translate-URL: http://translate.droposs.org/projects/drop/drop/en_PIRATE/

---------

Co-authored-by: Anonymous <noreply@weblate.org>
2025-06-08 11:15:16 +10:00
DecDuck 50bdc44c33 Redesign of language selector #100 (#101)
* feat: add new language selector in footer, add pirate language

* fix: translations in title bar not updating

* chore: refactor into separate component

* fix: update translate url

* fix: update pirate translation to use "ship" instead of "plank" for platform

a very very necessary change
2025-06-08 10:33:41 +10:00
DecDuck 29c8e70852 Fix: Sign out functionality #95 (#99)
* fix: signout button on user widget

* fix: add comment explaining
2025-06-07 17:26:09 +10:00
DecDuck 124f1ccbc0 Fix: Broken footer links #96 (#98)
* fix: footer links

* fix: lint
2025-06-07 17:21:07 +10:00
DecDuck d9b7ae5737 Fix unauthenticated /api/v1/client/chunk route
Critical fix, no issue or PR
2025-06-07 16:27:43 +10:00
DecDuck 9ecd86cece Task groups & viewer in admin panel #52 (#91)
* feat: historical tasks in database, better scheduling, and unified API for accessing tasks

* feat: new UI for everything

* fix: add translations and fix formatting
2025-06-07 15:39:01 +10:00
Pacodastre bbc3cdb49c Fix: Image upload modal doesn't close when clicking cancel #50 (#93) 2025-06-07 15:10:28 +10:00
quexeky 1feb1e653b fix: Broken README path
Signed-off-by: quexeky <git@quexeky.dev>
2025-06-07 06:37:14 +10:00
quexeky 3c41132823 fix: Update broken README link in docs
Signed-off-by: quexeky <git@quexeky.dev>
2025-06-07 06:35:57 +10:00
quexeky 57a0046224 fix: Re-update the user and app status when recieve_handshake is called (#54)
Also enabled assetProtocol for better caching in general

Signed-off-by: quexeky <git@quexeky.dev>
2025-06-06 12:09:44 +10:00
DecDuck c13ee0b17f Release: v0.3.0-rc-3 (#51) 2025-06-06 09:25:44 +10:00
DecDuck 7b5cf9b72a Fix: Server attempts to create setup executable and finds undefined #83 (#84) 2025-06-06 09:18:58 +10:00
quexeky dae7c12f40 Database not being properly serialised with rpm_serde (#48)
Signed-off-by: quexeky <git@quexeky.dev>
2025-06-05 17:22:22 +10:00
DecDuck 0eb4c141ec Better metadata editing division #79 (#82)
* feat: new dropdown-based editor switching

* feat: tab based switching

* feat: add icon

* fix: lint

* chore: i18n translations

oh boy was this a 'chore'
2025-06-05 14:53:19 +10:00
Husky 2233aec23f i18n Support and Task improvements (#80)
* fix: release workflow

* feat: move mostly to internal tasks system

* feat: migrate object clean to new task system

* fix: release not  getting good base version

* chore: set version v0.3.0

* chore: style

* feat: basic task concurrency

* feat: temp pages to fill in page links

* feat: inital i18n support

* feat: localize store page

* chore: style

* fix: weblate doesn't like multifile thing

* fix: update nuxt

* feat: improved error logging

* fix: using old task api

* feat: basic translation docs

* feat: add i18n eslint plugin

* feat: translate store and auth pages

* feat: more translation progress

* feat: admin dash i18n progress

* feat: enable update check by default in prod

* fix: using wrong i18n keys

* fix: crash in library sources page

* feat: finish i18n work

* fix: missing i18n translations

* feat: use twemoji for emojis

* feat: sanatize object ids

* fix: EmojiText's alt text

* fix: UserWidget not using links

* feat: cache and auth for emoji api

* fix: add more missing translations
2025-06-05 09:53:30 +10:00
Aden Lindsay 05af43b622 Many new improvments and features to the UI (#76)
* feat(general): many new improvments and features to the UI

* fix: fix lints and run preetier

* fix: furthermore fixes

* chore: fix preetier eslint issue

* stlye: reposition mark all as read button for better placement

* fix: fix inccorect positioning on the mark all as read buton, again

* fix: fix account related issue with predefined types and styling

* fix: fix notification button dissapearance & type definition

* fix: fix auth page styling

* stlye: fixed styling on users list

* fix: fix lint dead code collector

* fix: please the prettier gods

* fix(notifications): seriously serialising

* chore: please the prettier gods once again, o holy one

* fix: remove eslint thing, im blaming eslint for that one

---------

Co-authored-by: Aden <aden@adenmgb.com>
2025-06-04 13:56:23 +10:00
DecDuck 6826838909 Custom readValidatedBody util to return more specific error #69 (#78)
* feat: add readDropValidatedBody w/ special handler for ArkErrors

* fix: lint
2025-06-03 17:40:41 +10:00
DecDuck 115427af7c Fix: Importing without Metadata is broken. #73 (#75)
* fix: manual metadata import

* fix: lint
2025-06-03 10:49:01 +10:00
DecDuck c61d7e605c Fix admin library page "to import" logic #70 (#71) 2025-06-02 12:06:57 +10:00
DecDuck f79724183f Cannot create library source due to backend missing from request #67 (#68) 2025-06-02 11:05:36 +10:00
DecDuck 1a81e458ed fix: database corrupted on every startup (#40) 2025-06-01 19:53:24 +10:00
DecDuck f8dc4d0578 Add UI for multi-library management #59 (#63)
* feat: add ui for library source management

* fix: lint
2025-06-01 18:33:42 +10:00
DecDuck 792eea9c1b Multi-upload to image library #56 (#60)
* feat: support for file upload handler to track multiple files

* feat: update image upload endpoint to allow multiple files

* fix: lint
2025-06-01 16:06:56 +10:00
DecDuck d4ea3e2fbe Database-level multi-library support #48 (#58)
* feat: start of library backends

* feat: update backend routes and create initializer

* feat: add legacy library creation

* fix: resolve frontend type errors

* fix: runtime errors

* fix: lint
2025-06-01 16:05:05 +10:00
DecDuck 18dc93a57b Fix GiantBomb metadata #61 (#62)
* fix: reviews error

* fix: lint
2025-06-01 15:39:10 +10:00
DecDuck f786529a52 feat: ratings ui, import giantbomb ratings 2025-05-30 22:07:50 +10:00
Huskydog9988 19ed1aabd5 fix: release workflow 2025-05-30 19:01:39 +10:00
DecDuck 09f5945c55 fix: remove old validation on version import 2025-05-30 13:18:35 +10:00
DecDuck 00cab7db0d chore: move more admin over to arktype validators 2025-05-30 13:17:21 +10:00
DecDuck 27bf90bed0 fix: various fixes 2025-05-30 10:29:55 +10:00
DecDuck a1dd6e2f50 chore: remove old playtime api 2025-05-30 08:41:50 +10:00
DecDuck 8be79cfa0e Merge branch 'Huskydog9988-more-fixes' into develop 2025-05-30 08:40:42 +10:00
DecDuck 4cb0b6701b chore: remove const 2025-05-30 08:39:58 +10:00
DecDuck a60bbe633d chore: add DROP_VERISON constant 2025-05-30 08:39:43 +10:00
Huskydog9988 aba6d98d17 feat: cleanup extra metadata 2025-05-29 17:27:03 -04:00
Huskydog9988 3603fc5dca fix: remove unused favicon ref 2025-05-29 17:07:30 -04:00
Huskydog9988 51a8cc9b54 feat: object cleanup is finally here 2025-05-29 16:55:24 -04:00
Huskydog9988 2b2121792b fix: not being able to edit game title 2025-05-29 15:59:53 -04:00
Huskydog9988 7f84171ff4 fix: allow specifying git ref 2025-05-29 15:22:12 -04:00
Huskydog9988 911ce09ef2 feat: add attestations to docker images
attestations are best practice https://docs.docker.com/build/ci/github-actions/attestations/
2025-05-29 14:26:15 -04:00
Huskydog9988 93bbb22232 fix: compose not following node best practices 2025-05-29 14:18:57 -04:00
Huskydog9988 4fba02dde3 fix: git install in docker 2025-05-29 14:18:19 -04:00
Husky 54d5745ee1 Merge branch 'develop' into more-fixes 2025-05-29 13:58:27 -04:00
Huskydog9988 554356ea67 fix: accidental removal of nightly tag 2025-05-29 13:54:14 -04:00
Huskydog9988 45c561fd4f feat: supply drop version during release build 2025-05-29 13:52:32 -04:00
Huskydog9988 7656dc51b5 feat: allow clients to fetch drop version 2025-05-29 13:29:19 -04:00
DecDuck b9c3e8669a fix: metadata update errors 2025-05-29 17:36:52 +10:00
DecDuck c4e0268090 fix: blade's metadata issue 2025-05-29 17:28:49 +10:00
Huskydog9988 87414e0f2e fix: use ghcr instead of docker registry 2025-05-28 12:15:23 -04:00
DecDuck 4ba3f71895 fix: add new dependencies to linux build 2025-05-28 20:51:32 +10:00
quexeky 14a2bc22ca fix: Folders can now be copied too
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-28 20:48:34 +10:00
quexeky ae023255a3 chore: Add extract() function
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-28 20:48:34 +10:00
quexeky 6630ccd5e0 chore: Initial path normalisation & parsing with backup generation
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-28 20:47:43 +10:00
DecDuck 721c5c5408 fix: regenerate lockfile 2025-05-28 20:37:26 +10:00
DecDuck 5a0c454050 fix: remove memd-exec dependency 2025-05-28 20:22:18 +10:00
DecDuck 01b14f5995 build: 0.3.0-rc-2 2025-05-28 20:09:58 +10:00
DecDuck 67f951ef7c chore: add DROP_VERISON constant 2025-05-28 15:07:11 +10:00
quexeky 06e460b7be Merge branch 'compat' into develop
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-28 11:24:30 +10:00
quexeky 17b3bb0732 refactor: Reorganise file structure
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-28 11:19:48 +10:00
quexeky db1e033ecf refactor: Delete downloadable_metadata.rs
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-28 09:18:33 +10:00
DecDuck e9a4fe2105 inprogress: compat 2025-05-28 09:07:09 +10:00
Husky eb06c5c0ac Merge branch 'develop' into more-fixes 2025-05-27 15:17:42 -04:00
Huskydog9988 4588b53de1 fix: info leak in screenshots api 2025-05-27 15:14:50 -04:00
Huskydog9988 1502ab7263 feat: basic playtime backend 2025-05-27 12:30:20 -04:00
quexeky 7a9605fee2 feat: Add "NO_TRAY_ICON" env option
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-27 12:13:49 +10:00
DecDuck edec443555 feat: add arm linux builds 2025-05-25 11:46:24 +10:00
DecDuck 38f635a489 Merge pull request #46 from Pacodastre/fix-docker-compose-image
Fixes wrong image being used in deploy-template example
2025-05-25 07:16:14 +10:00
Francois Ribemont 613efd7642 Fixes wrong image being used in example 2025-05-24 21:11:51 +01:00
ferris 2a34adc35f fix: bincode 2 ci errors & remaining _rc text 2025-05-18 21:43:50 +09:00
ferris cf68ecfb19 feat!: Update bincode 2 & allow any AsRef<[u8]> to be decoded 2025-05-18 21:43:50 +09:00
renovate[bot] cf3a633539 chore(deps): update rust crate criterion to 0.6.0 2025-05-17 11:02:34 +00:00
quexeky f5205fb54e chore(tailscale): Add test
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-16 15:01:50 +10:00
quexeky 1457a76e88 feat(tailscale): Add TailscaleListener and TailscaleConn
Needs testing on a native windows machine

Signed-off-by: quexeky <git@quexeky.dev>
2025-05-16 12:57:11 +10:00
Huskydog9988 012c218abb fix: missing user check in screenshot api endpoint 2025-05-15 18:28:08 -04:00
Huskydog9988 af823f511e chore: style 2025-05-15 17:29:43 -04:00
Huskydog9988 b1613b6dc9 feat: very basic screenshot api 2025-05-15 15:51:35 -04:00
Huskydog9988 a549d3a1db fix: remove old requiredPerms field 2025-05-15 14:42:40 -04:00
Huskydog9988 5dbe6a54db fix: don't send system notifications to all users 2025-05-15 13:53:05 -04:00
Huskydog9988 69be3af09f fix: drop update notifications 2025-05-15 13:45:05 -04:00
Huskydog9988 598a38e482 Merge remote-tracking branch 'origin/develop' into more-fixes 2025-05-15 13:38:46 -04:00
DecDuck 7e470afdec fix: openid redirect auth query 2025-05-15 21:22:24 +10:00
DecDuck 1528395d41 fix: remove reqwest default-features to compile without openssl 2025-05-15 21:03:31 +10:00
DecDuck 2c10345fad fix: move to reqwest rustls 2025-05-15 20:58:48 +10:00
DecDuck 4fc5023402 fix: update cargo lock 2025-05-15 20:53:04 +10:00
DecDuck 0f73e84e81 feat: backend inline capability registration 2025-05-15 16:06:03 +10:00
DecDuck 57179dcd15 feat: inline capability registration 2025-05-15 16:05:34 +10:00
quexeky 1be4f9fcb4 feat(tailscale): Add wrapper around libtailscale with Tailscale struct
Signed-off-by: quexeky <git@quexeky.dev>
2025-05-15 15:23:20 +10:00
DecDuck 751a3e4d06 chore: style 2025-05-15 14:58:01 +10:00
DecDuck 41bdc0eeb4 fix: apply notification acls to live notifications 2025-05-15 14:57:16 +10:00
DecDuck 1ded35f32f feat: separate library and metadata pages, notification acls 2025-05-15 14:55:05 +10:00
Huskydog9988 307552d9f8 feat: add acl to notifications
not sure if i got all the acls of the different notifications down rn, but it seems to be about right
2025-05-14 22:53:09 -04:00
Huskydog9988 a94ede3861 fix: gamerating model 2025-05-14 22:13:53 -04:00
Huskydog9988 cb8887ae81 feat: igdb tag support 2025-05-14 22:03:32 -04:00
Huskydog9988 bd192babd5 feat: pcgamgingwiki desc in searchstub 2025-05-14 21:52:32 -04:00
Huskydog9988 b4dde85cda feat: game metadata rating support 2025-05-14 21:40:25 -04:00
Huskydog9988 1216bdfb64 fix: igdb assuming certain values always exist 2025-05-14 21:38:16 -04:00
DecDuck 179754a170 feat: move to native_model to allow for database upgrades 2025-05-15 10:13:24 +10:00
Huskydog9988 47cd54c898 fix: check update not using drop's correct version 2025-05-14 19:54:06 -04:00
Huskydog9988 b93dcdbb56 chore: style 2025-05-14 18:27:31 -04:00
Huskydog9988 f3405ba571 feat: fs object metadata cache and validation 2025-05-14 17:19:51 -04:00
Huskydog9988 d557c48b3a fix: object fs backend not deleting metadata 2025-05-14 16:51:45 -04:00
Huskydog9988 f792252c0a fix: editing game image metadata in admin panel 2025-05-14 16:30:35 -04:00
Huskydog9988 3fbcc2e886 feat: update checker based gh releases 2025-05-14 16:07:25 -04:00
Huskydog9988 8b57ef9dd5 fix: allow notification nonce reuse per user 2025-05-14 15:40:55 -04:00
DecDuck cd90b7a5c0 chore: libtailscale rust build 2025-05-14 10:01:26 +10:00
DecDuck f4e8b2b14f Update README.md 2025-05-12 17:11:19 +10:00
DecDuck 9f6863c1bd Update README.md 2025-05-12 17:10:36 +10:00
Huskydog9988 3ad801b072 feat: games now have tag support 2025-05-11 12:52:00 -04:00
Huskydog9988 af88b27dfd feat: pcgamgingwiki now provides a description 2025-05-11 00:35:16 -04:00
Huskydog9988 d42ad8582a feat: better docker builds 2025-05-10 23:49:58 -04:00
Huskydog9988 fc9cbe4fa0 feat: new unified data folder 2025-05-10 16:18:28 -04:00
Huskydog9988 985394aeaf fix: back button link in admin dash 2025-05-10 16:02:44 -04:00
Huskydog9988 e26d5b2fb2 feat: openapi support plus more api validation 2025-05-10 15:16:26 -04:00
DecDuck be915c9de9 fix: windows builds 2025-05-10 16:41:37 +10:00
DecDuck 21bcb94527 fix: windows launching 2025-05-10 15:38:20 +10:00
DecDuck e83d81f734 fix: update object id paths for new server 2025-05-10 15:25:40 +10:00
DecDuck 79f4aa929e feat: refactored into separate metadata and library pages 2025-05-10 15:22:57 +10:00
DecDuck 4027ec4da2 fix: re-add minimise button 2025-05-10 14:22:21 +10:00
DecDuck 47ee7fccde feat: rework developer/publisher system 2025-05-10 11:59:56 +10:00
DecDuck 2f83e67f2f Merge branch 'Huskydog9988-further-improvements' into develop 2025-05-10 11:26:16 +10:00
DecDuck e99dbc0fc1 feat: update search style 2025-05-10 11:25:45 +10:00
Huskydog9988 3c7d4ca446 fix: pcgamingwiki not parsing company websites 2025-05-10 11:25:45 +10:00
Huskydog9988 8a30e61ff9 feat: unified company metadata store
still need to migrate users from old developer and publisher tables
2025-05-10 11:25:45 +10:00
Huskydog9988 598c8f6358 feat: finish migrating to new objectid naming 2025-05-10 11:25:45 +10:00
Huskydog9988 7eaf4bda68 fix: linting errors 2025-05-10 11:25:45 +10:00
Huskydog9988 8a9b2bfc87 feat: minimum support for unrefed object cleanup 2025-05-10 11:25:45 +10:00
Huskydog9988 892e46801a feat: identify unused objects 2025-05-10 11:25:44 +10:00
Huskydog9988 093d0aa523 feat: manually edit search term for game import 2025-05-10 11:25:44 +10:00
Huskydog9988 ecc5bba282 fix: missing metadata preventing game import
when a metadata provider fails to import a game's developer / publisher, the import is no longer blocked. the imports usally fail because there isn't a page for these compaines
2025-05-10 11:25:44 +10:00
Huskydog9988 ad88cde540 feat: basic screenshot manager 2025-05-10 11:25:44 +10:00
DecDuck 9012b0a273 feat: update search style 2025-05-10 11:24:04 +10:00
DecDuck d83434a2ba fix: install dir flow 2025-05-10 09:02:59 +10:00
Huskydog9988 10273a4d68 fix: pcgamingwiki not parsing company websites 2025-05-08 21:22:15 -04:00
Huskydog9988 4e14fb355b feat: unified company metadata store
still need to migrate users from old developer and publisher tables
2025-05-08 20:44:37 -04:00
DecDuck a461b67135 fix: fix invitation register url 2025-05-09 10:02:48 +10:00
Huskydog9988 b781ac89bf feat: finish migrating to new objectid naming 2025-05-08 19:42:46 -04:00
Huskydog9988 f81fb38581 fix: linting errors 2025-05-08 19:26:46 -04:00
Huskydog9988 af5739e3c5 feat: minimum support for unrefed object cleanup 2025-05-08 19:20:34 -04:00
Huskydog9988 75f48437f2 feat: identify unused objects 2025-05-08 19:19:10 -04:00
Huskydog9988 74aeb67aee feat: manually edit search term for game import 2025-05-08 12:16:12 -04:00
Huskydog9988 74a54f1436 fix: missing metadata preventing game import
when a metadata provider fails to import a game's developer / publisher, the import is no longer blocked. the imports usally fail because there isn't a page for these compaines
2025-05-08 11:57:37 -04:00
Huskydog9988 8ee485feef feat: basic screenshot manager 2025-05-08 11:38:09 -04:00
DecDuck f93035d984 fix: revert session store 2025-05-08 21:46:12 +10:00
DecDuck 5e4cf6114c Revert "fix: convert socket sessions to cacheHandler"
This reverts commit 6c2778592e.
2025-05-08 21:43:54 +10:00
DecDuck ca1ce5d0fa fix: docker build 2025-05-08 21:30:52 +10:00
DecDuck 52f8350d19 fix: add prisma binary targets 2025-05-08 20:21:50 +10:00
DecDuck 08ef6a21e3 chore: warn when metadata fails 2025-05-08 19:49:37 +10:00
DecDuck 019dca78f3 fix: swap order of nuxt and prisma generations 2025-05-08 17:35:59 +10:00
DecDuck aa3e72b9f5 fix: switch prisma schema type 2025-05-08 17:33:07 +10:00
DecDuck b90683e973 fix: refactor prisma multifolder into docs example 2025-05-08 16:25:01 +10:00
DecDuck 867772d7ec fix: update prisma schema and path 2025-05-08 16:20:19 +10:00
DecDuck 67afadec4e fix: remove jank prisma script, and move to generated prisma client 2025-05-08 16:17:23 +10:00
DecDuck 8295021c57 Merge branch 'Huskydog9988-more-stuff' into develop 2025-05-08 15:50:47 +10:00
DecDuck 6c2778592e fix: convert socket sessions to cacheHandler 2025-05-08 15:50:29 +10:00
DecDuck 255bb4f3e1 feat: add oidc to admin panel 2025-05-08 15:48:46 +10:00
DecDuck f475f486a5 feat: add oidc to admin panel 2025-05-08 15:29:50 +10:00
Huskydog9988 f4bbbbf334 chore: remove fsbackend console logs 2025-05-07 22:32:24 -04:00
Huskydog9988 4d54b97705 fix: edgecase where object hash isn't read 2025-05-07 22:29:10 -04:00
Huskydog9988 9adbc157ab feat: unified cache handler 2025-05-07 22:26:34 -04:00
Huskydog9988 1b11427300 docs: why timeline was disabled 2025-05-07 21:45:13 -04:00
Huskydog9988 7566617e74 fix: eslint error and server plugin name 2025-05-07 18:50:57 -04:00
Huskydog9988 7f36f08cd5 Merge branch 'develop' of https://github.com/Huskydog9988/drop into more-stuff 2025-05-07 18:45:36 -04:00
Huskydog9988 e1c919a7dc refactor: homepage link in header 2025-05-07 18:42:13 -04:00
DecDuck ea0fe6f98f fix: github ci and dialogtitle issue 2025-05-08 08:25:10 +10:00
DecDuck 0e7c0ff22a feat: oidc 2025-05-07 22:14:04 +10:00
DecDuck 57f8a5a2e5 fix: bump tauri.config.json to 0.3.0-rc-1 2025-05-07 14:36:54 +10:00
DecDuck 4c964a12e8 fix: remove nightly trigger
it creates releases
2025-05-07 14:29:27 +10:00
DecDuck 570a01a335 feat: bump app versions to 0.3.0-rc-1 2025-05-07 14:28:11 +10:00
DecDuck 069853a7c5 fix: switch to rust nightly 2025-05-07 13:51:27 +10:00
DecDuck 7d545efa1e fix: signout, again 2025-05-07 12:26:22 +10:00
DecDuck 8b46d08f3b feat: add github build 2025-05-07 12:21:03 +10:00
DecDuck aa083bd615 fix: ignore error if we are unable to blacklist certificate 2025-05-07 12:16:09 +10:00
DecDuck e4137d3a59 fix: signout route 2025-05-07 11:33:21 +10:00
DecDuck e6065b6daa fix: notification rendering 2025-05-07 09:54:02 +10:00
DecDuck 286c4e4644 feat: cleanup settings menu and fix styles 2025-05-01 13:36:52 +10:00
DecDuck 78ffc9e020 fix: error with game options for remote games 2025-05-01 12:26:41 +10:00
quexeky 5615fe475d chore(library): Update error type on update_game_configuration 2025-04-28 11:31:54 +10:00
DecDuck cff788f369 fix: some of GitHub's dependabot alerts 2025-04-27 21:15:32 +10:00
DecDuck 7ee5778953 feat: launch options 2025-04-27 21:07:39 +10:00
DecDuck c774a45541 fix: types 2025-04-26 22:35:08 +10:00
DecDuck f4d14f1ce5 fix: rounding issue on modal template 2025-04-26 22:34:26 +10:00
DecDuck 26cd580c45 feat: better error message if cannot connect to provided url 2025-04-26 01:06:03 +10:00
Huskydog9988 7987bd0a77 chore: remove redundant omitApi prisma option 2025-04-24 18:34:20 -04:00
Huskydog9988 eba4fe12df feat: run tasks at startup 2025-04-23 21:14:16 -04:00
DecDuck 56f5028f69 fix: task api and other small issues 2025-04-20 23:34:22 +10:00
DecDuck 7f8fac4b24 fix: metadata init issues 2025-04-20 23:24:08 +10:00
DecDuck d5007a1194 fix: misc fixes 2025-04-20 21:33:19 +10:00
DecDuck e3adbaa468 feat: log metadata error if fail 2025-04-20 21:23:09 +10:00
DecDuck 4d3508ba08 Update release.yml 2025-04-20 20:43:01 +10:00
DecDuck c8db07b9d7 fix: prisma migrations in docker
i hate prisma so so so so so much
2025-04-20 18:12:29 +10:00
DecDuck f24a5dbfc4 fix: copy package.json to Dockerfile 2025-04-19 21:51:44 +10:00
DecDuck 2e52635760 fix: prisma schema folder location 2025-04-19 21:51:22 +10:00
DecDuck 5c1fa2eac1 Merge pull request #37 from Huskydog9988/eslint
feat: add eslint and prettier
2025-04-19 11:40:21 +10:00
Huskydog9988 ad89257023 fix: don't set own script csp 2025-04-17 20:57:27 -04:00
Huskydog9988 d11e7a2e3d ci: add prefix to branch based docker tags 2025-04-17 20:18:21 -04:00
Huskydog9988 9ab8aa6627 fix: userwidget not opening 2025-04-17 20:17:31 -04:00
Huskydog9988 8ed5990c73 fix: missing components errors 2025-04-16 12:03:42 -04:00
Huskydog9988 cf700ceda1 fix: type error in $dropFetch 2025-04-15 22:01:24 -04:00
Huskydog9988 297bda6e97 chore: prettier pass 2025-04-15 21:46:34 -04:00
Huskydog9988 bc5ab53b50 fix: last eslint errors 2025-04-15 21:43:27 -04:00
Huskydog9988 9a2683d98e fix: more eslint stuff 2025-04-15 21:10:45 -04:00
Huskydog9988 0eb29650ca fix: eslint errors, switch to using maps 2025-04-15 20:04:45 -04:00
Huskydog9988 3961323cca fix: more eslint issues 2025-04-13 22:10:28 -04:00
Huskydog9988 d8d0254523 feat: add lint ci job 2025-04-13 21:46:41 -04:00
Huskydog9988 e95091bbf5 fix: inital eslint errors 2025-04-13 21:44:29 -04:00
Huskydog9988 1e19ccb442 feat: add eslint and prettier 2025-04-13 21:43:35 -04:00
DecDuck d6d9911b2c Merge branch 'Huskydog9988-more-ui-work' into develop 2025-04-14 10:54:09 +10:00
DecDuck 9e4cb7f753 fix: etags and other
remove sanitize-filename because IDs are internally generated
remove pulse animation on NO GAME cards
add migration
refactors to be inline with other stuff
2025-04-14 10:52:12 +10:00
Huskydog9988 48c41953dc fix: missing key in loops 2025-04-12 16:03:35 -04:00
Huskydog9988 ed0562cb00 feat: save fs objectbackend hashes 2025-04-12 15:54:26 -04:00
Huskydog9988 9750dafc69 fix: incorrect perms when deleting objects 2025-04-11 19:32:30 -04:00
Huskydog9988 d5fb89c3a1 feat: make internal objectbackend methods private 2025-04-10 19:57:08 -04:00
Huskydog9988 521838f0a7 chore: update @types/bcryptjs 2025-04-10 19:50:37 -04:00
Huskydog9988 51befb3a19 fix: don't add write perms, users can only delete objects 2025-04-10 19:50:04 -04:00
Huskydog9988 9a41fde219 fix: don't use stream package 2025-04-10 19:29:11 -04:00
Huskydog9988 6faaf00617 feat: hash objects for etag value 2025-04-09 14:48:13 -04:00
DecDuck 5f23718202 feat: add iframe store page 2025-04-08 16:17:03 +10:00
DecDuck 6a9480f9e4 feat: allow client-based web tokens 2025-04-08 16:16:40 +10:00
Huskydog9988 41df7f71f9 feat: upgrade to nuxt 3.16 2025-04-07 21:55:52 -04:00
Huskydog9988 871fcce3e2 feat: add skeleton for loading game carousel 2025-04-07 21:28:58 -04:00
Huskydog9988 d2760a1c68 feat: add nonce to scripts 2025-04-07 20:01:57 -04:00
Huskydog9988 8c2d994fcd chore: drop unused dep 2025-04-07 19:57:47 -04:00
Huskydog9988 531d5a9a97 feat: enable nuxt dev tools 2025-04-07 19:57:00 -04:00
Huskydog9988 2b92d75a4b refactor: move tsconfig to nuxt config 2025-04-07 19:55:33 -04:00
Huskydog9988 f2f8dfefac feat: add etag to object response 2025-04-07 19:19:45 -04:00
Huskydog9988 e37d8cff14 fix: gamecarousel layout shifts (mostly) 2025-04-07 17:28:40 -04:00
Huskydog9988 38c5c7a93b fix: gamecarousel not resizing 2025-04-07 16:57:44 -04:00
Huskydog9988 6fe80a01a6 fix: wordmark causing page refresh 2025-04-07 16:49:56 -04:00
Huskydog9988 6c02b03814 feat: sleak transition from store page to item 2025-04-07 16:17:55 -04:00
Huskydog9988 7188dc54d4 fix: missing html attributes 2025-04-07 16:13:57 -04:00
Huskydog9988 81b1253e1a fix: use nuxtlink instaed of a tag 2025-04-07 16:11:56 -04:00
DecDuck 25dc4fd4d7 fix: remove debug values from game carousel 2025-04-07 17:44:48 +10:00
DecDuck e77b87bbf7 fix: store page released date 2025-04-07 16:55:01 +10:00
DecDuck a013282ac5 feat: add backend for template launching 2025-04-07 13:52:52 +10:00
DecDuck 20acca5bf9 fix: add tsignore pending upstream fix 2025-04-07 10:52:56 +10:00
DecDuck edb260d01a Merge branch 'Huskydog9988-more-fixes' into develop 2025-04-07 10:40:20 +10:00
DecDuck 79054a0fd4 fix: devices page (reactivity and relative timestamps) 2025-04-07 10:37:01 +10:00
Huskydog9988 08d5fec4e7 refactor: remove momentjs 2025-04-06 19:44:38 -04:00
Huskydog9988 de729f11fd chore: updates prisma and bycryptjs 2025-04-06 14:34:25 -04:00
Huskydog9988 04fa0a570e fix: don't prerender auth routes 2025-04-06 14:28:03 -04:00
Huskydog9988 5e79eb61bc fix: don't use npm crypto 2025-04-06 14:27:31 -04:00
Huskydog9988 a01a94fff2 refactor: use node crypto uuid 2025-04-06 14:08:36 -04:00
Huskydog9988 b4ab6c38fe fix: type error in devices page 2025-04-06 13:47:55 -04:00
Huskydog9988 c6752b6d71 fix: generate prisma types on install (like nuxt) 2025-04-06 13:46:53 -04:00
DecDuck 12103fafc4 fix: devices page for mobile 2025-04-05 23:30:38 +11:00
DecDuck 1729591a2c feat: add ability to review and revoke clients 2025-04-05 17:42:32 +11:00
DecDuck cfbfd97c8d fix: remove weird import 2025-04-05 15:38:07 +11:00
DecDuck 11b602a81e feat: improve errors and include installed games in library 2025-04-05 15:36:53 +11:00
DecDuck e627941add fix: return user library for client 2025-04-05 15:34:24 +11:00
DecDuck d19e5baa64 fix: remove legacy metadata client routes 2025-04-05 15:34:12 +11:00
DecDuck 033cdbc4b0 refactor: move game id fetch to index 2025-04-05 15:33:59 +11:00
DecDuck c7b99955b8 Merge branch 'Huskydog9988-better-ci' into develop 2025-04-05 14:22:38 +11:00
DecDuck d92c5a6ec2 Merge branch 'better-ci' of https://github.com/Huskydog9988/drop into Huskydog9988-better-ci 2025-04-05 14:22:21 +11:00
DecDuck b261e12139 fix: fix types, remove @nuxt/image because of broken types 2025-04-05 14:21:37 +11:00
Huskydog9988 7a8dfb9464 ci: drop PAT_TOKEN 2025-04-04 19:19:33 -04:00
Huskydog9988 3a0bdb7aa2 ci: add typecheck ci 2025-04-04 19:15:05 -04:00
Huskydog9988 1fc383ef27 ci: update actions versions 2025-04-04 19:03:38 -04:00
Huskydog9988 8d35e15c01 ci: don't mark nightly container as latest 2025-04-04 18:59:18 -04:00
Huskydog9988 bdfa4818f1 feat: typecheck in dev 2025-04-04 18:52:34 -04:00
Huskydog9988 e86f6e94f5 fix: auth prerender 2025-04-04 18:51:01 -04:00
DecDuck 922ca78096 fix: fix types 2025-04-05 09:40:25 +11:00
DecDuck bf38921f54 feat: add yarn typecheck and fix all types 2025-04-05 09:40:05 +11:00
DecDuck f7141a7ce4 fix: offline game status, user widget and use binary-encoding 2025-04-04 11:07:10 +11:00
DecDuck 6141c57afe Merge branch 'Huskydog9988-db-store' into develop 2025-04-04 10:37:08 +11:00
DecDuck f8ecc4a10c chore: apply schema changes to db 2025-04-04 10:34:58 +11:00
Huskydog9988 4134777264 Merge remote-tracking branch 'origin/develop' into db-store 2025-04-03 19:21:05 -04:00
Huskydog9988 3a50e3ebae refactor: session handler 2025-04-03 19:15:33 -04:00
DecDuck bbe571363f feat: better client name w/ hostname 2025-04-04 10:14:23 +11:00
Huskydog9988 a8d681f99d fix: register page validation 2025-04-03 19:11:35 -04:00
Huskydog9988 d50a2e7f0d fix: add missing dev deps 2025-04-03 18:15:39 -04:00
Huskydog9988 c564792c7a Merge branch 'develop' into db-store 2025-04-03 18:12:07 -04:00
DecDuck 0f4ce9b6f3 feat: switch to shell-based command launching
note: needs error handling
2025-04-02 20:04:14 +11:00
Huskydog9988 2524e42abd feat: cache for session store in db 2025-04-01 21:32:13 -04:00
DecDuck 91024e64e7 feat: add offline widget & remove openssl in favour of droplet-rs 2025-04-02 11:00:39 +11:00
quexeky b0df1a8b42 fix: Use [package] instead of [lib]
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 10:10:47 +11:00
quexeky b2de86b892 fix: Removed cdylib reference
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 10:04:18 +11:00
quexeky 4e9794f628 chore: Version bump
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 09:53:33 +11:00
quexeky 8c209672e0 fix: Remove napi dependencies
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 09:53:20 +11:00
quexeky 14405f7009 chore: Version bump
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 09:48:12 +11:00
quexeky bab8a29494 fix: Rollback to 2021 edition
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 09:47:42 +11:00
quexeky 39e60587d2 refactor: Remove unused dependencies
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 09:46:02 +11:00
quexeky 0b8edf7bc2 chore: Update authors
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 09:26:31 +11:00
quexeky 961cbdcc9e feat: Migrate all features to droplet-rs
Signed-off-by: quexeky <git@quexeky.dev>
2025-04-02 09:21:58 +11:00
quexeky 1f6eeb89a9 Initial commit 2025-04-01 22:17:34 +11:00
DecDuck ec93dfe3c2 fix: renable nuxt-security with xss validator off 2025-04-01 21:20:54 +11:00
DecDuck 6774101091 fix: update last accessed client on push 2025-04-01 21:16:54 +11:00
DecDuck 6fe8bf1e76 feat: add cloud save backend 2025-04-01 21:08:57 +11:00
DecDuck 75d1e04504 feat: update readme 2025-04-01 18:36:51 +11:00
DecDuck 97d37ea8f8 feat: account pages framework & updates to library 2025-04-01 18:28:34 +11:00
DecDuck 9e976e1237 fix: register redirect 2025-04-01 18:18:57 +11:00
DecDuck 86ddc920e9 fix: re-request fix for $dropFetch 2025-04-01 16:58:53 +11:00
DecDuck af9863ac14 fix: carousel pagination 2025-04-01 16:42:08 +11:00
DecDuck 3893e9ca7a fix: sidebar in library page 2025-04-01 16:19:03 +11:00
DecDuck 9c076ca528 Merge branch 'develop' of https://github.com/AdenMGB/drop into AdenMGB-develop 2025-04-01 12:11:57 +11:00
DecDuck 5c2255e1ec feat: slight optimisation with removing from collection 2025-04-01 12:08:39 +11:00
DecDuck 57403a88ff fix: $dropFetch SSR and rate limiting 2025-04-01 12:02:34 +11:00
DecDuck 3de1bca870 fix: remove previous fix and add longer yarn install timeout 2025-03-31 12:35:34 +11:00
DecDuck 5834f3b019 fix: revert previous and add yarn clean/configs 2025-03-31 12:24:50 +11:00
DecDuck ed3e64079f fix: potential fix for timeout: switch to full image from slim 2025-03-31 12:18:14 +11:00
DecDuck 03517de4af fix: pin nuxt to 3.15.4 and recreate lockfile 2025-03-31 11:50:15 +11:00
DecDuck 1a77949ab3 fix: recreate lockfile 2025-03-31 11:37:09 +11:00
DecDuck 40b09dd78b fix: update workflow to recurse submodules properly 2025-03-31 09:47:54 +11:00
DecDuck f84d195254 fix: add submodules 2025-03-31 09:38:58 +11:00
DecDuck cb6fcdd943 fix: update dockerfile & use NPM droplet 2025-03-31 09:32:09 +11:00
renovate[bot] 1691bce648 chore(deps): update hustcer/setup-nu action to v3.19 2025-03-30 06:58:01 +00:00
DecDuck 9a1314d9a7 fix: update dockerfile to debian 12 2025-03-27 11:09:37 +11:00
DecDuck 4a171236bb Merge pull request #29 from Huskydog9988/patch-1
nightly builds and fix drop repo
2025-03-27 09:22:31 +11:00
Husky 37fad74741 nightly builds and fix drop repo 2025-03-26 18:20:37 -04:00
DecDuck 14d52a8bda feat: github build 2025-03-27 09:16:22 +11:00
DecDuck 5654a87233 fix: public assets 2025-03-24 12:55:07 +11:00
DecDuck d035c9d847 refactor: use hash directly in authmek and version field on authmek 2025-03-24 12:50:21 +11:00
DecDuck 454650b2a7 Merge pull request #28 from Huskydog9988/auth-overhaul
overhaul auth and futureproof it with argon2
2025-03-24 12:27:14 +11:00
Huskydog9988 df062b6522 move register to auth path 2025-03-23 21:08:08 -04:00
Huskydog9988 a85645ea16 address some issues 2025-03-23 21:07:12 -04:00
Huskydog9988 440459d3de Merge branch 'develop' into auth-overhaul 2025-03-23 20:33:46 -04:00
Huskydog9988 df6d8882c2 switch back to json 2025-03-23 20:29:50 -04:00
DecDuck 06323e9461 Merge pull request #26 from Huskydog9988/perf-fixes
massive perf improvements
2025-03-23 10:56:35 +11:00
Huskydog9988 cce2c23566 use arktype for clientside validation 2025-03-22 19:37:28 -04:00
Huskydog9988 a89798cacd make signup less error prone in db 2025-03-22 17:26:12 -04:00
Huskydog9988 47affba159 new accounts use argon2 2025-03-22 17:09:10 -04:00
Huskydog9988 f2e2c56a5a fix signout 2025-03-22 16:55:08 -04:00
Huskydog9988 51dc9cdb2a add sharp for ipx 2025-03-22 15:58:53 -04:00
Huskydog9988 69fb3c3308 move auth pages into auth dir 2025-03-22 15:54:43 -04:00
DecDuck 1aced5122e Merge pull request #27 from Huskydog9988/cleanup-platform-parse
fix: platformparse case sensitivity
2025-03-20 23:10:28 +00:00
Husky c580f45c1e fix: platformparse case sensitivity 2025-03-20 17:52:04 -04:00
Husky 985f32d372 Merge branch 'develop' into perf-fixes 2025-03-16 12:16:47 -04:00
renovate[bot] ea0479dd69 chore(deps): update extractions/setup-just action to v3 2025-03-15 14:00:27 +00:00
DecDuck cac815224d fix: macos and ui 2025-03-15 15:05:35 +11:00
DecDuck c2a1232022 fix: macos and rate limiting 2025-03-15 15:04:52 +11:00
renovate[bot] 054279a5e4 chore(deps): update hustcer/setup-nu action to v3.18 2025-03-15 01:49:11 +00:00
Husky 956875fd89 massive perf improvements
on the store page, brings LCP down to only 5.6s from 11s. total lighthouse score is now 78
2025-03-14 20:18:26 -04:00
Aden Lindsay 817c65d9b6 fix(library): Use $dropFetch util 2025-03-15 09:54:20 +10:30
Aden Lindsay 5cc87ddf90 style(library): complete restyling to match client library 2025-03-15 09:46:15 +10:30
Aden Lindsay 0cca515ffd fix(webui): Fix forcably redirecting to https 2025-03-15 09:45:09 +10:30
Huskydog9988 8b13a7e46b add migrations to store ca and session in db 2025-03-14 11:37:31 -04:00
Huskydog9988 032147cad9 store sessions in db 2025-03-14 11:35:12 -04:00
Huskydog9988 c57cd8afa2 store certs in db 2025-03-14 10:53:37 -04:00
DecDuck 2fa57c583a fix?: https redirection issues 2025-03-14 20:31:00 +11:00
DecDuck df33d74bb3 fix: remove @nuxt/content 2025-03-14 13:23:56 +11:00
DecDuck 303f208ed1 Merge branch 'Huskydog9988-perf-improvements/fetch' into develop 2025-03-14 13:16:55 +11:00
DecDuck 3067b4b4d0 merge: husky updates 2025-03-14 13:16:26 +11:00
DecDuck 920ce8b0d0 feat: refactor news and migrate rest of useFetch to $dropFetch 2025-03-14 13:12:04 +11:00
DecDuck 661befba3f feat: user page & $dropFetch util 2025-03-14 12:22:08 +11:00
DecDuck 72748bd9e3 feat: lazy init igdb 2025-03-13 16:18:44 +11:00
DecDuck 49935458c7 Merge branch 'Huskydog9988-metadata-improvements' into develop 2025-03-13 15:55:09 +11:00
DecDuck 96c7da56fe Merge branch 'metadata-improvements' of https://github.com/Huskydog9988/drop into Huskydog9988-metadata-improvements 2025-03-13 15:54:51 +11:00
DecDuck c3f6d27439 feat: database level metadata provider init 2025-03-13 15:20:13 +11:00
Huskydog9988 bb634cb90b automate twitch credential refresh 2025-03-12 19:06:52 -04:00
Huskydog9988 2cf8b72cef accidently commited secret from testing lol (revoked) 2025-03-12 19:06:52 -04:00
Huskydog9988 b344a10248 make pcgamig wiki types match api return 2025-03-12 19:06:52 -04:00
Huskydog9988 d1aac181dd fix issue in igdb where company isn't found 2025-03-12 19:06:34 -04:00
Huskydog9988 4d2115ca66 fix manual metadata fetching publishers +types 2025-03-12 19:06:34 -04:00
Huskydog9988 405754abd5 in progress igdb 2025-03-12 19:06:34 -04:00
Huskydog9988 d2976bed63 add content security policy to allow showing remote images for game importing 2025-03-12 19:05:11 -04:00
Huskydog9988 02e03d5e66 add pcgamingwiki as metadata source 2025-03-12 19:05:11 -04:00
Huskydog9988 9adacfb4ef note that you need to init submodules 2025-03-12 19:04:32 -04:00
Huskydog9988 195fa81800 cleanup giantbomb provider 2025-03-12 19:04:32 -04:00
Huskydog9988 ae5355d8a0 gracefully disable metadata provider when api key is missing 2025-03-12 19:04:32 -04:00
quexeky 84053e6faf chore: Update changelog.md 2025-03-12 18:59:59 -04:00
quexeky 7141626735 fix: Update README.md with discord link 2025-03-12 18:59:59 -04:00
quexeky 81e4f98529 fix(collections): Ensured that all internal collection commands use and send the correct data
Signed-off-by: quexeky <git@quexeky.dev>
2025-03-11 20:35:43 +11:00
quexeky 056ff05677 chore(collections): Slightly fixed return value for collections
Signed-off-by: quexeky <git@quexeky.dev>
2025-03-11 19:26:05 +11:00
DecDuck 240d1364e8 feat: add mac as platform 2025-03-11 19:02:53 +11:00
DecDuck 1ca5c37b9a feat: partial work on home admin page 2025-03-11 18:25:29 +11:00
DecDuck 0902d63bee feat: add news client routes 2025-03-11 18:24:50 +11:00
DecDuck 26f3975c67 feat: file uploads on news articles 2025-03-11 17:51:46 +11:00
DecDuck 16bd89e8e0 fix: notifications and store styling 2025-03-11 17:08:31 +11:00
quexeky bd27d9f29b feat(collections): Added all internal collections commands
Signed-off-by: quexeky <git@quexeky.dev>
2025-03-11 12:34:56 +11:00
DecDuck 1fb283a8a7 feat: move article creation into a modal 2025-03-11 12:20:56 +11:00
DecDuck 6152bdd166 feat: custom sizing for modal 2025-03-11 12:15:47 +11:00
DecDuck e4066fc246 fix: store page styling 2025-03-11 11:47:35 +11:00
DecDuck e31fe149d3 fix: re-enable metadata providers 2025-03-11 11:33:05 +11:00
quexeky 161930cf59 feat(collections): Added fetch_collections function
Signed-off-by: quexeky <git@quexeky.dev>
2025-03-11 10:46:16 +11:00
DecDuck 426242bab8 fix: add aarch64 tag to runner 2025-03-11 09:06:41 +11:00
DecDuck 61d8861071 feat: client collection routes 2025-03-10 12:28:59 +11:00
DecDuck 26649434f9 fix: news frontend 2025-03-10 12:05:10 +11:00
DecDuck 79bc09c15f fix: unmerged changes 2025-03-10 11:42:33 +11:00
DecDuck 6146f0c19e Merge branch 'AdenMGB-develop' into develop 2025-03-10 11:41:40 +11:00
DecDuck be00777a6c fix: decduck's code review 2025-03-10 11:39:45 +11:00
DecDuck 1447c37cb0 feat: migrate to tailwind v4 and fix user token API 2025-03-10 10:35:03 +11:00
DecDuck 8e53e92ad1 fix: home page now (temporarily) redirects to store 2025-03-10 10:34:57 +11:00
DecDuck f8d7886dab fix(droplet): add aarch64 optional packages 2025-03-10 10:34:32 +11:00
DecDuck 75f201a29a feat(acls): refactor & acl descriptions 2025-03-10 10:34:32 +11:00
DecDuck e6911259b2 feat(acls): added backend acls 2025-03-10 10:34:26 +11:00
DecDuck 84065f34ca fix: refactoring and error handling 2025-02-20 21:19:54 +11:00
quexeky 17f4f903d3 Merge remote-tracking branch 'aden/develop' into develop 2025-02-18 14:45:09 +11:00
Aden Lindsay 2ad09b51fa style(library): Re-designed Library UI with new features 2025-02-15 16:41:32 +10:30
DecDuck 37549408e3 fix: unmerged changes 2025-02-15 08:35:16 +11:00
DecDuck 60f7801345 fix: loading button styles 2025-02-14 20:07:40 +11:00
DecDuck ced981cbc8 feat: migrate to tailwind v4 and fix user token API 2025-02-14 20:01:18 +11:00
DecDuck 7b0dd6ea4c fix: null strings in setup versions 2025-02-13 13:34:46 +11:00
DecDuck 233dc16e43 fix: import ui setup autocomplete 2025-02-13 13:34:45 +11:00
quexeky 73fbf2e0be feat(library): Reactive library updating
Signed-off-by: quexeky <git@quexeky.dev>
2025-02-12 10:00:45 +11:00
quexeky 1dddd4bf92 fix(cache): Added proper error handling to fetch_object(_offline) 2025-02-12 10:00:45 +11:00
quexeky 8f460dd2ca feat(cache): Caching objects which use the useObject tauri command 2025-02-12 10:00:45 +11:00
quexeky 353fd2eb46 chore(cache): Added fetch_drop_object command
Signed-off-by: quexeky <git@quexeky.dev>
2025-02-12 10:00:45 +11:00
quexeky 605c904c47 feat(cache): Implemented caching for game metadata 2025-02-12 10:00:45 +11:00
quexeky d9774862e8 fix(cache): Bug where games would not remove themselves from the list of installed applications when being uninstalled 2025-02-12 10:00:45 +11:00
quexeky 9ba9986ae5 chore: Various formatting 2025-02-12 10:00:45 +11:00
quexeky 3cb592ecf2 feat(cache): Added forceOffline in settings and caching games & library 2025-02-12 10:00:45 +11:00
quexeky 273c68561b feat(cache): Added offline!() macro to manage online and offline function distinctions
See fetch_library command for example
2025-02-12 10:00:45 +11:00
quexeky a93e5917ee chore: Swapped over to using a macro with an offline mode
Signed-off-by: quexeky <git@quexeky.dev>
2025-02-12 10:00:45 +11:00
quexeky 4f564862a1 chore: Progress on caching 2025-02-12 10:00:45 +11:00
quexeky e4921e4629 fix: Removed unnecessary nightly feature try_trait_v2 2025-02-12 10:00:45 +11:00
quexeky 91e811b32a fix(downloads): Fix rearranging download queue throwing error 2025-02-12 10:00:45 +11:00
quexeky 224ff2d015 chore: Version bump 2025-02-12 10:00:45 +11:00
DecDuck e4eb6b87c1 fix: home page now (temporarily) redirects to store 2025-02-08 11:41:16 +11:00
DecDuck 2a6fdbef83 fix(droplet): add aarch64 optional packages 2025-02-08 11:38:06 +11:00
DecDuck b97ff1a1b6 feat(acls): refactor & acl descriptions 2025-02-07 17:26:23 +11:00
DecDuck eb8fb4fc89 feat(acls): added backend acls 2025-02-04 13:15:52 +11:00
Aden Lindsay 230d49cf3d fix(backend): Add forgotton migration for news storage 2025-02-03 16:50:10 +10:30
Aden Lindsay 839f79c3d6 feat(api): Added API for deleting news articles 2025-02-02 10:21:43 +10:30
Aden Lindsay 315bb3a45b feat(api): Added API for retriving information about a spesific news article 2025-02-02 10:21:10 +10:30
Aden Lindsay 710a79af3c feat(api): Added API for fetching news articles 2025-02-02 10:20:26 +10:30
Aden Lindsay afdf1e5bda feat(api): Added API for creating articles 2025-02-02 10:19:31 +10:30
Aden Lindsay 990498005e feat(backend): Added backend communction between API & Frontend 2025-02-02 10:18:27 +10:30
Aden Lindsay b3349c766b feat(DB): Updated DB for news articles to be stored in the DB 2025-02-02 10:17:21 +10:30
Aden Lindsay 17f7a36d6d feat(news): Updated user for authoring articles 2025-02-02 10:16:28 +10:30
Aden Lindsay a5cfd67ec4 feat(news): Created article full screen view 2025-02-02 10:15:09 +10:30
Aden Lindsay e801b8636a feat(news): Created article overview page 2025-02-02 10:10:16 +10:30
Aden Lindsay 45fcd29e52 feat(news) Added news page/sidebar 2025-02-02 10:09:25 +10:30
Aden Lindsay 68622d9d54 feat(news): Added backend for news 2025-02-02 10:08:34 +10:30
Aden Lindsay b670442436 Create useNews.ts 2025-02-02 10:07:24 +10:30
Aden Lindsay 259e9be111 feat(news): Added ability to search and filter news articles 2025-02-02 10:06:38 +10:30
Aden Lindsay 6df93388b6 feat(news): Created ability to create news articles 2025-02-02 10:05:55 +10:30
Aden Lindsay 0d8b6c55bd feat(news): added ability to delete news articles 2025-02-02 10:05:13 +10:30
DecDuck 8b97906063 Merge pull request #20 from AdenMGB/develop
Fresh animations & scaled Games Grid view properly
2025-01-30 19:30:21 +11:00
renovate[bot] 3e87c3a1b0 chore(deps): update hustcer/setup-nu action to v3.17 2025-01-29 05:45:28 +00:00
Aden Lindsay 730608383d style(store): Added reactive hover state for admin dashboard button 2025-01-28 19:25:00 +10:30
Aden Lindsay 9c5e209af3 style(store): hover state for coursel button 2025-01-28 19:24:30 +10:30
Aden Lindsay 8df2cd706b style(collections): Hover state & scaling games grid properly 2025-01-28 19:23:24 +10:30
Aden Lindsay 0449c4ba26 fix(library): Fixed game banner as background, & added hover state 2025-01-28 19:22:29 +10:30
Aden Lindsay 74f986d288 style(collections): Added hover state & animation for addition icon 2025-01-28 19:20:33 +10:30
Aden Lindsay abaecb34c2 style(GamePanel): New hover state styles 2025-01-28 19:17:12 +10:30
Aden Lindsay eab1ba468c style(AddLibraryButton): New hover state animations 2025-01-28 19:15:49 +10:30
DecDuck 3d65a99d9f fix: collection overview trash icon 2025-01-28 17:23:06 +11:00
DecDuck 7bca1d3922 fix: store page styling 2025-01-28 17:21:05 +11:00
DecDuck 4caa240bd6 fix: cascade delete for collection entries 2025-01-28 17:06:30 +11:00
DecDuck dd141bbfd5 fix: collection creation & overview hover styles 2025-01-28 17:01:34 +11:00
DecDuck 006bc47c50 feat: collection deleting 2025-01-28 16:50:57 +11:00
DecDuck fa368e51f9 fix: store style & library game page 2025-01-28 16:39:13 +11:00
DecDuck 2d5c200db5 feat: mobile ui and other design 2025-01-28 16:24:08 +11:00
DecDuck 438b236c14 feat: refactor & redesign parts of UI 2025-01-28 16:24:08 +11:00
DecDuck 812936926d refactor(create collection modal): use ModalTemplate & v-model 2025-01-28 16:24:08 +11:00
Aden Lindsay 83ffb7f34f squash: AdenMGB collection design & backend work
Update index.post.ts to implement saving collections functionality

Update index.get.ts to verify if collection exists and if user can access it

Update index.delete.ts to ask questions and not be so nonchalant

Update entry.post.ts

Update entry.delete.ts to do it better

Update index.vue to add functionality to the add to library button + fidgit with image

Update index.vue to also add add to library functionality, but no fidget :(

Update entry.post.ts to infact not remove it

Update index.ts

Update index.vue to manage collections from store page

Update index.ts to restrut for ahhhh

Update index.vue too add collection control to carosel

Update index.vue fix minor issue

Update index.vue to fix dropdown modal bug

Create library.vue for page layout

Create index.vue for library game details pane

Create index.vue for viewing collections pane

Create DeleteCollectionModal.vue component

Create CreateCollectionModal.vue component

Update AddLibraryButton.vue with dropdown :D

Update index.vue to use new components

Update index.vue for more components :O

Update entry.post.ts to not not return success, it'll figure it out

Update entry.delete.ts to not return...
2025-01-28 16:24:02 +11:00
Aden Lindsay f74b0a279e Create signout.vue to sign out :shocked: 2025-01-28 16:19:41 +11:00
DecDuck 464a2e0cf9 fix: requiring disabled param 2025-01-28 15:56:20 +11:00
DecDuck 9f9f5b2f4f fix: loading button disabled styles 2025-01-28 15:55:11 +11:00
DecDuck 304b947f7b Merge branch 'backslash-fix' into develop 2025-01-28 15:20:30 +11:00
DecDuck 71a882bcbb fix: import ui setup autocomplete 2025-01-28 15:20:06 +11:00
DecDuck 1be01a38a0 feat: ui and functionality changes 2025-01-28 15:18:04 +11:00
quexeky 4d4827deff Edit .gitlab-ci.yml 2025-01-26 12:21:38 +00:00
quexeky 0672d46782 Edit .gitlab-ci.yml 2025-01-26 12:17:19 +00:00
quexeky 5499e8fd6d Edit .gitlab-ci.yml 2025-01-26 12:14:22 +00:00
quexeky 5bf39f4daa Edit .gitlab-ci.yml 2025-01-26 12:13:21 +00:00
quexeky c1b7f644d8 Edit .gitlab-ci.yml 2025-01-26 12:12:54 +00:00
quexeky cbebbca7f2 Edit .gitlab-ci.yml 2025-01-26 12:11:34 +00:00
quexeky 1fceee0627 chore: Update changelog.md 2025-01-25 22:49:06 +11:00
quexeky 86ebfe93af Merge pull request #18 from Drop-OSS/develop
Merge develop into main
2025-01-25 19:27:22 +11:00
quexeky 50080e6444 Merge branch 'main' into develop 2025-01-25 18:46:33 +11:00
quexeky d7a163070a Update changelog.md 2025-01-25 14:35:17 +11:00
quexeky b0bb44fbf6 fix(logging): Restored RUST_LOG env functionality 2025-01-25 14:34:08 +11:00
quexeky 26a3dd7338 fix(library): Added "LIbrary Failed to Update" content to recover from library load fail 2025-01-24 22:35:09 +11:00
Aden Lindsay cbd086fceb feat(settings): Made save button include user feedback & only allow numeric characters 2025-01-24 13:01:59 +11:00
quexeky 9428f2a829 Update issue templates 2025-01-21 10:17:46 +11:00
quexeky 1242f954a5 Update .gitlab-ci.yml file 2025-01-21 10:17:46 +11:00
quexeky 78587c61fc refactor(downloads): Replaced static usage with const 2025-01-21 10:17:30 +11:00
quexeky 4fd964024e Update .gitlab-ci.yml with artifacts 2025-01-21 09:09:02 +11:00
quexeky 5b00d188ab Update .gitlab-ci.yml 2025-01-21 08:41:51 +11:00
quexeky a51e41d34f chore: Update .gitlab-ci.yml 2025-01-21 08:04:29 +11:00
quexeky 20bb2bf198 build: Version bump & appimage build 2025-01-20 23:13:49 +11:00
quexeky 9698ab977e fix: Games not launching due to string semantics 2025-01-20 23:12:57 +11:00
quexeky 48cbd1a5ed feat(games): Added multi-argument game launch and setup support 2025-01-20 20:03:44 +11:00
quexeky 9831d96300 chore: Apply stashed changes 2025-01-20 18:22:24 +11:00
quexeky 48a7463040 fix(game downloads): Added error handling for chunk request errors 2025-01-20 18:13:25 +11:00
quexeky 4a737c35b0 fix: Adding usize to completed_contexts_lock instead of &usize 2025-01-20 17:39:05 +11:00
DecDuck f4bd013925 fix(download agent): fixed completed indexes 2025-01-20 17:29:33 +11:00
DecDuck 13d9ba78d1 fix: assorted fixes 2025-01-20 16:46:57 +11:00
quexeky fdccb10650 chore: Ran cargo clippy & cargo fmt 2025-01-20 08:55:19 +11:00
quexeky c2d8966c1a feat(database): Ensure that any database issues are resolved by standalone functions
Functions are as follows:
- save_db()
- borrow_db_checked()
- borrow_db_mut_checked()
2025-01-20 08:24:06 +11:00
DecDuck 2e2592afd8 fix(ui): modal stack doesn't cover whole app 2025-01-19 22:23:40 +11:00
DecDuck f0dc9320d0 fix(logs): add file & line to console logs 2025-01-19 22:23:09 +11:00
DecDuck 4ce06a16bc feat(downloads): re-enable checksums 2025-01-19 22:22:55 +11:00
DecDuck 8ca5b48e48 fix(download manager): don't crash download manager if multiple errors
come in
2025-01-19 22:22:04 +11:00
quexeky bc81a4d399 style(logging): Ensured that all logs start with lowercase capital and have no trailing punctuation 2025-01-19 20:36:38 +11:00
quexeky 5bf83df9af feat(settings): Allow settings to update UI using fetch_settings command 2025-01-19 19:14:52 +11:00
quexeky ce8ae086ee Revert "chore: Update .gitlab-ci.yml"
This reverts commit 053fd8605c.
2025-01-19 18:37:51 +11:00
quexeky 4ed6d8383e chore(logging): Imported appropriate logging macros 2025-01-19 18:37:21 +11:00
quexeky 28d4598cb3 refactor(logging): Using more appropriate logging statements
Still probably needs some work, but that's enough for now
2025-01-19 18:30:16 +11:00
quexeky 053fd8605c chore: Update .gitlab-ci.yml 2025-01-19 17:18:08 +11:00
quexeky 90fb05899e feat(errors): Using SerializeDisplay for better error management with Result 2025-01-19 17:17:51 +11:00
DecDuck d6131e9f84 fix(prisma): update prisma schemas 2025-01-19 16:46:43 +11:00
DecDuck 0e631a9228 feat(collections): backend 2025-01-19 16:29:29 +11:00
DecDuck faf87da3c7 fix: fix other metadata endpoints 2025-01-19 16:15:43 +11:00
DecDuck 3776e1e9d4 fix(install ui): stop loading on error 2025-01-19 15:44:00 +11:00
quexeky 7faec60fba refactor(remote): Created separate function to generate requests 2025-01-19 15:09:35 +11:00
quexeky c9555362b6 feat(progress): Added rolling progress window
Still needs tweaks on specific timings, as well as cleanup
2025-01-19 09:48:04 +11:00
quexeky b692a1d831 chore: Progress on rolling progress window 2025-01-19 08:41:20 +11:00
quexeky f59473fcd1 chore(downloads): Progress on terminator 2025-01-16 18:57:40 +11:00
quexeky 441914b7b8 chore(exit): Progress on cleanup and exit 2025-01-16 18:57:40 +11:00
quexeky 968fcef456 chore(progress): Added rolling_progress_updates.rs
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-16 17:23:53 +11:00
quexeky 04773dc1f6 feat(logging): Added line numbers to file logging and highlighting to console 2025-01-16 16:48:31 +11:00
DecDuck 023d17abc4 cicd: custom dind 2025-01-14 20:43:50 +11:00
DecDuck 78a26f5eef feat(tasks): improved ux 2025-01-14 20:43:22 +11:00
quexeky c196c7ec8c fix(settings): Broken command invoke logic in settings/downloads.vue 2025-01-14 07:57:33 +11:00
quexeky f1bba5cc74 Implement better error system and segregate errors and commands (#23)
* chore: Progress on amend_settings command

Signed-off-by: quexeky <git@quexeky.dev>

* chore(errors): Progress on better error handling with segragation of files

* chore: Progress on amend_settings command

Signed-off-by: quexeky <git@quexeky.dev>

* chore(commands): Separated commands under each subdirectory into respective commands.rs files

Signed-off-by: quexeky <git@quexeky.dev>

* chore(errors): Almost all errors and commands have been segregated

* chore(errors): Added drop server error

Signed-off-by: quexeky <git@quexeky.dev>

* feat(core): Update to using nightly compiler

Signed-off-by: quexeky <git@quexeky.dev>

* chore(errors): More progress on error handling

Signed-off-by: quexeky <git@quexeky.dev>

* chore(errors): Implementing Try and FromResidual for UserValue

Signed-off-by: quexeky <git@quexeky.dev>

* refactor(errors): Segregated errors and commands from code, and made commands return UserValue struct

Signed-off-by: quexeky <git@quexeky.dev>

* fix(errors): Added missing files

* chore(errors): Convert match statement to map_err

* feat(settings): Implemented settings editing from UI

* feat(errors): Clarified return values from retry_connect command

* chore(errors): Moved autostart commands to autostart.rs

* chore(process manager): Converted launch_process function for games to use game_id

---------

Signed-off-by: quexeky <git@quexeky.dev>
2025-01-13 21:44:57 +11:00
Aden Lindsay fd3e539205 feat(debug): use shift or DEBUG RUST_LOG to show Debug Info
* Update settings.vue to have a conditional debug page

* Update debug.rs to add RUST_LOG status fetching
2025-01-09 19:44:04 +11:00
Aden Lindsay cc1020a004 refactor(compat): remove unnecessary compat code (#20)
* Delete pages/settings/compatibility.vue

* Update settings.vue

* Update debug.vue

* Update lib.rs

* Update compat.rs
2025-01-09 13:44:27 +11:00
DecDuck 9038c5a955 fix(handle invalid database): use set_file_name instead of pushing to
strings
2025-01-09 12:27:32 +11:00
DecDuck 231eb935fa fix(metadata): update routes for new server 2025-01-09 12:11:39 +11:00
quexeky 0a2bc6a03f fix: Update README.md with discord link 2025-01-08 22:43:30 +00:00
quexeky 93c25126af feat(download manager): Added UI to change download threads
Co-authored-by: AdenMGB <140392385+AdenMGB@users.noreply.github.com>
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-06 20:56:19 +11:00
quexeky c16b1df264 chore: More refining info!() statements
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-06 20:46:08 +11:00
quexeky 2db1b36d2e chore: Removed tools/
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-06 20:06:01 +11:00
quexeky 9418761df2 chore: Removed tests/
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-06 20:05:19 +11:00
quexeky c6e71fa3a8 chore: General cleanup
- Changed some info!() statements to debug!() and warn!()
- Removed most Turbofish syntax cases
- Removed InvalidCodeError and replaced it with InvalidResponse

Signed-off-by: quexeky <git@quexeky.dev>
2025-01-06 20:04:34 +11:00
quexeky 074a6d00bb chore: Moved generateGameMeta.ts to composables, using PathBuf instead of String for install_dirs
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-06 09:22:18 +11:00
quexeky 6a33494d68 feat(settings): Added max_download_threads setting and separated settings from db
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-06 07:36:35 +11:00
DecDuck fc034f580f fix(invitations): fix always being created as admin 2025-01-05 22:21:55 +11:00
quexeky 9dde86bd82 chore: More cleanup after cargo clippy
Also added some type efficiency improvements (using references where possible and added SliceDeque crate)

Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 21:08:27 +11:00
quexeky 35047f9885 refactor: Ran cargo clippy & fmt
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 20:29:15 +11:00
quexeky ba90d90a86 fix(db): Added Settings component
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:44:18 +11:00
quexeky c6549a8cda fix(game downloads): Accidentally was attempting to lock onto something that was already in scope
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:05:00 +11:00
quexeky 2e63daadd7 perf(game downloads): Moved some variable declarations outside of the spawned download thread
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:05:00 +11:00
quexeky 00e64c13c5 chore(README): Updated README.md
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:47 +11:00
quexeky 8a122fb8f9 feat(database): Added database corruption dialog
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:47 +11:00
quexeky 91ba75b21b feat(recovery): Added database recovery
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:47 +11:00
quexeky 42f8730473 fix(kill game): Re-enabled killing games
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:47 +11:00
quexeky b0787e8f44 refactor(downloads): Moved all files relevant to game downloads to their own directory
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:47 +11:00
quexeky bf1e6b2fa7 fix(uninstalling): Re-enabled uninstalling apps
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:21 +11:00
quexeky 7764a0ed4c fix(game launcher): Renamed game_id to id
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:07 +11:00
quexeky 3f229687f3 feat(download manager): Added generic download manager
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:04:07 +11:00
quexeky febfb99e9d refactor(download manager): Removed Arc requirement for DownloadableMetadata
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:02:19 +11:00
quexeky a0cedf831b refactor(download manager): Fully separate & generic download manager
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:02:19 +11:00
quexeky 3d32501d81 refactor(download manager): Removed all references to anything outside of the DownloadManager
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:47 +11:00
quexeky 945d607ed2 chore(download manager): Added manage_go_signal command
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:47 +11:00
quexeky ea8ede6f53 chore(download manager): Added manage_queue_signal
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:47 +11:00
quexeky e147088375 chore(tool manager): Added ToolDownloadAgent
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:18 +11:00
quexeky 01383b514b Revert "refactor(download manager): Moved manifest and stored_manifest to download_manager"
This reverts commit 8db239334688912f2be30023f4220c3e149df7d6.
2025-01-05 19:00:18 +11:00
quexeky ece79e4306 refactor(download manager): Moved manifest and stored_manifest to download_manager
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:18 +11:00
quexeky 4c37ab03ed chore(download manager): Ensure that Downloadable is also send and sync
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:18 +11:00
quexeky bdc7ac76b5 chore(download manager): Some easy cleanup of the download manager
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:18 +11:00
quexeky 8d0b1cdc43 refactor(download manager): Renamed GameDonwloadError to ApplicationDownloadError and moved
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 19:00:18 +11:00
quexeky a4a4c3e996 chore(download manager): Renamed most instances of "game" outside of actual game downloads
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 18:59:08 +11:00
quexeky 88bece5c29 refactor(download manager): Added Downloadable trait and replaced references to GameDownloadAgent
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 18:52:00 +11:00
quexeky 26d0c1732a refactor(download manager): Moved download manager to separate directory
Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 18:52:00 +11:00
quexeky 20f726632e chore(tool manager): Progress on adding tools
Going to try changing around the download manager to take a generic trait rather than specifically for game downloads

Signed-off-by: quexeky <git@quexeky.dev>
2025-01-05 18:49:32 +11:00
DecDuck 3ca5be6658 feat(library ui): add installed ui in the library menu 2025-01-05 18:32:22 +11:00
Aden Lindsay 2d5d0d5ab3 feat(settings): add debug page
* Create debug.rs

* Update settings.vue to add tab for debug

* Update main.scss to add light theme

* Update interface.vue to add light mode

* Create debug.vue

* Update debug.vue too add open log button

* Update lib.rs

* Update debug.rs

* Update debug.rs

* Update lib.rs

* Update lib.rs

* Update debug.rs

* Update debug.vue

* fix(debug): refactor and cleanup

* revert(theme): revert light theming

---------

Co-authored-by: DecDuck <declanahofmeyr@gmail.com>
2025-01-05 17:56:33 +11:00
Aden Lindsay 2bd13eea58 feat(account settings): Add signout functionality (#16)
* Create account.vue with logout button

* Update auth.rs to add signout command

* Update lib.rs to pass sign_out command to frontend
2025-01-01 13:23:18 +11:00
DecDuck ca3f9ca463 fix(download manager): fix incorrect error assumptions & update types 2024-12-31 00:08:05 +11:00
DecDuck dd001b0f58 feat(import): overhauled version importing 2024-12-31 00:04:50 +11:00
DecDuck ccce1cf20d fix(utils): fix recursive dirs util 2024-12-31 00:04:14 +11:00
DecDuck 4a7d2b821f fix(tasks): fix disconnect code 2024-12-31 00:03:56 +11:00
DecDuck 4273b0ef90 squash(autostart): added adenmgb's autostart feature
Squashed commit of the following:

commit 085cd9481dee748ee84c1a8f9dcd8ef0b01105ab
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 16:29:41 2024 +1030

    Update lib.rs for the DB sync of autostart

commit 86f2fb19bde3933ec6b5cd82701de0d306121659
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 16:29:13 2024 +1030

    Update db.rs to accomidate the settings sync

commit ece11e7581c9aef55588b2e829379b1224021a45
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 16:27:48 2024 +1030

    Update autostart.rs to include DB

commit 7ea8a24fdc2ff98379694ce8e347a40fcfd5fea3
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 15:17:38 2024 +1030

    Add files via upload

commit af2f232d94fa449d9e20df737ce81ebded87fd50
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 15:17:09 2024 +1030

    Delete src-tauri/Cargo.toml

commit 5d27b65612457de6eb30835d5423b9d96fd5a596
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 15:15:42 2024 +1030

    Add files via upload

commit 2eea7b97a876e23cc0d6daec37f1b75af9bf3ae2
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 15:15:31 2024 +1030

    Delete src-tauri/src/lib.rs

commit 9a635a10d1340f86c74812113284b115b34b9bbe
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 15:14:49 2024 +1030

    Add files via upload

commit 2fb049531a082fbdd217aba694819b7a3f954a55
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 15:13:37 2024 +1030

    Add files via upload

commit ea1be4d7505a9ab16bda338491c0ec313d0bc586
Author: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
Date:   Mon Dec 30 15:13:20 2024 +1030

    Delete pages/settings/index.vue
2024-12-30 17:31:03 +11:00
DecDuck 65a7150bd3 feat(process): shared child with stop command 2024-12-30 15:37:29 +11:00
quexeky f737c73213 fix(deep links): Re-enabled deep links
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-30 14:18:42 +11:00
DecDuck 2bc7c78044 feat(metadata): change name, description and icon 2024-12-30 14:17:27 +11:00
quexeky 6ab05b6c38 feat(process manager): Game kill tauri command
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-30 13:50:26 +11:00
quexeky 811fcb1ad3 feat(Compat): Implemented spawning with umu (using umu-wrapper-lib)
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-30 13:12:27 +11:00
DecDuck 98b28d60b7 fix(scrollbars): fix ugly scrollbars on edge webview 2024-12-29 20:45:45 +11:00
DecDuck 7c20d4965d feat(game panel): adjust gradient 2024-12-29 19:20:17 +11:00
DecDuck 4fa2550a43 feat(carousel ui): add aden's carousel pagination design 2024-12-29 19:08:18 +11:00
DecDuck 9372da5789 fix(process): fix poorly designed parsing for executables with spaces 2024-12-28 10:13:26 +11:00
DecDuck ed6e9d7c3f fix(cleanup): remove app.vue and clear nuxt.config.ts of options 2024-12-27 20:39:41 +11:00
DecDuck 8812174bba fix(submodule): remove playground so can be used as submodule 2024-12-27 20:33:22 +11:00
DecDuck 8d7f20d373 fix(ci/cd): recurse submodules 2024-12-27 20:31:06 +11:00
DecDuck 52f1fe3d23 feat(admin ui): add modifying game descriptions 2024-12-27 19:52:59 +11:00
DecDuck 4f06b8e026 fix(drop-base): add drop-base as git submodule 2024-12-27 16:36:37 +11:00
DecDuck 79a51009af fix(library page): fix install button 2024-12-27 16:33:04 +11:00
DecDuck 82428786c4 feat(admin ui): customisable image carousel and new layout 2024-12-27 14:43:40 +11:00
DecDuck ba4688b938 merge(SeeThruHead): add nvm rc
Signed-off-by: DecDuck <declanahofmeyr@gmail.com>
2024-12-27 14:33:23 +11:00
Aden Lindsay 1449b97369 Add files via upload 2024-12-27 14:32:56 +11:00
Aden Lindsay 3d9c987fc5 Delete pages/library.vue 2024-12-27 14:32:56 +11:00
DecDuck 5fd17fa740 fix(install flow): clear stale data before requesting new 2024-12-27 14:32:56 +11:00
DecDuck a0e8723077 feat(install modal): add note about more install dirs 2024-12-27 14:32:56 +11:00
DecDuck 58bc3e161f merge(adenmgb): library ui
Signed-off-by: DecDuck <declanahofmeyr@gmail.com>
2024-12-27 14:30:38 +11:00
seethruhead 1c1e1f84e9 adds nvm rc! 2024-12-26 22:21:26 -05:00
Aden Lindsay 088b658511 Add files via upload 2024-12-27 13:40:24 +10:30
Aden Lindsay 314960a6cb Delete pages/library.vue 2024-12-27 13:39:50 +10:30
DecDuck c4044abf4a fix(install flow): clear stale data before requesting new 2024-12-27 14:04:55 +11:00
DecDuck 84bc622396 feat(install modal): add note about more install dirs 2024-12-27 14:03:06 +11:00
DecDuck 4870f1dbf6 fix(mail regex): removed global flag 2024-12-27 13:14:29 +11:00
DecDuck a5bf7b66b2 fix(callback ui): fix width of token breaking things 2024-12-27 13:07:29 +11:00
DecDuck d695b0a96a feat(client ui): manual handshake 2024-12-27 13:07:29 +11:00
DecDuck fae6dc6920 feat(ui): add noWrapper option 2024-12-27 13:07:29 +11:00
DecDuck 9b7192a8cc feat(auth): offer manual signin 2024-12-27 13:07:10 +11:00
DecDuck 742c098ae0 feat(modals): add modal template 2024-12-27 12:36:21 +11:00
DecDuck 981b1169ee fix(auth initiate): add better error message 2024-12-27 12:15:30 +11:00
DecDuck b4269cacd5 feat(loading button): add disabled states 2024-12-27 12:03:19 +11:00
quexeky 79cc299b2e chore: Ran cargo clippy
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-27 11:58:37 +11:00
DecDuck 4c242ab558 feat(download ui): add speed and time remaining information
closes #7

Co-authored-by: AdenMGB <140392385+AdenMGB@users.noreply.github.com>
2024-12-27 11:53:17 +11:00
quexeky 9665ee2222 fix(account creation): Fix username length requirement
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-27 08:17:03 +11:00
DecDuck 89b65a5182 fix(sign on): add message about nonce expiration 2024-12-26 21:30:08 +11:00
DecDuck 0b106fc497 feat(metadata): 'manual' metadata provider 2024-12-26 19:54:49 +11:00
DecDuck dad7ff67c3 feat(loading button): add disabled state 2024-12-26 19:38:48 +11:00
DecDuck 466f4eaa34 feat(store ui): 'no images' slide on image carousel 2024-12-26 19:37:44 +11:00
DecDuck 8e90ac86f7 feat(object transactions): support more types 2024-12-26 19:37:21 +11:00
DecDuck 6e17fbc234 feat(admin ui): mobile nav 2024-12-26 19:36:40 +11:00
DecDuck 9e30b57302 feat(downloads): lockless tracking of downloaded chunks 2024-12-26 17:41:10 +11:00
DecDuck 59cc48b308 feat(process): better process management, including running state 2024-12-26 17:19:19 +11:00
DecDuck 320fc99a84 feat(errors): better download manager errors + modal 2024-12-26 12:56:54 +11:00
DecDuck 889b6c848d chore(metadata): update metadata 2024-12-26 12:56:26 +11:00
DecDuck fcd9c96d06 fix(deploy template): fix FATAL: "root"... message 2024-12-26 12:34:10 +11:00
DecDuck 3164ec7106 feat(game): game uninstalling & partial compat 2024-12-26 11:59:26 +11:00
DecDuck eea187061b feat(admin ui): improve feedback when metadata fails 2024-12-25 23:36:39 +11:00
DecDuck e7770618f0 feat(version auto detection): add .sh for linux 2024-12-25 23:19:36 +11:00
DecDuck 48e865f40b chore(process manager): refactor for generic way to implement cross
platform launchers
2024-12-25 23:05:10 +11:00
quexeky 7b410c4ded chore(changelog): Updated changelog 2024-12-25 11:41:31 +11:00
quexeky fd41109fe4 chore(changelog): Update changelog
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-25 11:39:25 +11:00
quexeky b033528bec docs(version): Version bump
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-25 11:19:31 +11:00
quexeky 1f3f76cb77 Update README.md 2024-12-24 23:24:13 +00:00
quexeky f4dcc49600 Update CONTRIBUTING.md 2024-12-24 21:34:05 +00:00
DecDuck d16f99fbc3 fix(process): absolute executable invoke 2024-12-24 18:30:38 +11:00
DecDuck e9822d055b fix(client event handler): future lenience 2024-12-24 17:46:56 +11:00
DecDuck 94c4931521 fix: windows shadow 2024-12-24 14:41:03 +11:00
DecDuck ae877db672 chore(stored manifest): swap file name and to binary encoding 2024-12-24 12:52:40 +11:00
DecDuck bd60bf9521 fix(library ui): fix scrollbars on edge webview 2024-12-24 12:32:59 +11:00
DecDuck ef41dcd32d fix(process log): use unix timestamp to avoid invalid characters in
filename
2024-12-24 12:32:58 +11:00
quexeky 30995a98bd feat(downloads): Added manifest.json utility for persistent download progress
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-24 12:22:45 +11:00
quexeky eaaec8d815 chore(downloads): Made logging systems match
Signed-off-by: quexeky <git@quexeky.dev>
2024-12-24 12:22:45 +11:00
DecDuck 340ddcdf75 feat(process): add pre-launch log to file 2024-12-24 11:59:59 +11:00
DecDuck 95a293f9a1 fix: moved icons and created PlatformClient so we can use the enum on the frontend 2024-12-24 11:43:36 +11:00
DecDuck 04d41e132c fix(icons): remove unnecessary import 2024-12-24 10:56:30 +11:00
DecDuck e82052955c fix(icons): remove dynamic imports 2024-12-24 10:49:04 +11:00
DecDuck 8ce33217e5 fix(icons): properly import icons 2024-12-24 10:39:13 +11:00
DecDuck dcf167fee7 chore(replace md-it): replaced markdown-it with micromark 2024-12-24 10:08:27 +11:00
DecDuck 14459cf9d3 chore(polish & cleanup) 2024-12-24 09:05:51 +11:00
DecDuck d509995a86 feat(modal): fix confirm and add notification 2024-12-24 08:54:45 +11:00
DecDuck 63f40f35f0 feat(add modal stack): created modal stack and confirmation 2024-12-24 08:43:49 +11:00
DecDuck 60d38f36a5 fix(windows build) 2024-12-24 08:01:36 +11:00
DecDuck 93dd1a2de5 feat(delete games): update prisma & delete games 2024-12-23 21:12:32 +11:00
DecDuck 6a1ce2c175 feat: quit button 2024-12-23 20:56:11 +11:00
DecDuck ebd49b33f8 refactor(game status): transient vs synced state now defined 2024-12-23 20:44:02 +11:00
DecDuck 6f9c320d85 feat(umu id override): add support for overriding UMU id 2024-12-23 13:33:22 +11:00
DecDuck 93a84e1835 chore(download agent): moved to completed index arr to help
serialization
2024-12-21 19:21:15 +11:00
DecDuck 772e6a124d feat(tray): background processes and close/open menu 2024-12-21 15:09:49 +11:00
DecDuck 760a2a1772 feat(tray icon): initial creation and logo update 2024-12-19 10:09:25 +11:00
DecDuck 57e96707ac feat(library admin): client side search 2024-12-17 20:42:12 +11:00
DecDuck b5b5c68b00 feat(queue & game): queue and library UIs 2024-12-17 20:29:54 +11:00
DecDuck 9bbf463774 feat(process manager): launch games with log files 2024-12-15 17:29:21 +11:00
DecDuck 66bb664d8a feat(download manager): only allow downloads for supported platforms 2024-12-15 16:15:51 +11:00
Louis van Liefland e56b6187ca chore(downloads): Added time debugging and fixed logging formatting 2024-12-14 22:38:11 +11:00
DecDuck f904644395 merge(download-manager) -> 'main'
feat(downloads): Added Download Manager

See merge request drop-oss/drop-app!1
2024-12-09 10:44:26 +00:00
DecDuck 8a00b362b4 Merge branch 'main' into download-manager 2024-12-09 21:20:44 +11:00
DecDuck 10d998cd29 fix: windows build 2024-12-09 20:41:36 +11:00
Louis van Liefland 3e45d15f10 refactor: Ran cargo clippy & cargo fmt 2024-12-09 20:32:42 +11:00
DecDuck 113235be2f fix(download manager): fixed queue manipulation and waiting for downloads 2024-12-09 18:07:41 +11:00
DecDuck be4b50fac3 fix(client chunk api route): follow best practices 2024-12-09 17:04:51 +11:00
DecDuck 3d8639136b feat(download ui): debug queue interface 2024-12-09 17:03:48 +11:00
DecDuck 441aae4858 fix(giantbomb): fix for missing developers or publishers 2024-12-08 16:07:42 +11:00
DecDuck ff39f1ca39 fix: remove unnecessary unstable feature 2024-12-08 12:55:41 +11:00
DecDuck 74f071281e feat(download widget): download widget and queue fix 2024-12-08 12:33:45 +11:00
DecDuck 57fe5eae05 feat: temporary queue ui and flamegraph instructions 2024-12-07 20:21:22 +11:00
DecDuck b8684211c8 feat(download): add version metadata route 2024-12-07 11:00:56 +11:00
DecDuck 2e5997525d feat(download & db): combined db and download interface improvements 2024-12-07 11:00:35 +11:00
DecDuck 3d55cb768a feat(install ui): ui to install games 2024-12-06 22:16:50 +11:00
DecDuck bdc6527a4f fix(manifests): fix delta manifest generation 2024-12-06 22:16:42 +11:00
DecDuck 86848f599a refactor(windows logo): moved windows logo into logos dir 2024-12-06 21:25:21 +11:00
DecDuck da6f470aa1 style(invitation ui): non rounded bottom 2024-12-06 19:43:15 +11:00
DecDuck e6553e6ed1 feat(download manager): syncs state to disk to persist across reboots 2024-12-04 17:29:46 +11:00
DecDuck 9dc052691d feat(download manager): update db state with ui and emit events 2024-11-28 20:31:04 +11:00
DecDuck 95109899b7 fix(download manager): use of completed signal, and pause/resuming 2024-11-28 12:39:21 +11:00
DecDuck 543e7b0b44 feat(client): fetch game endpoint 2024-11-26 20:11:25 +11:00
DecDuck cd42466cc4 feat(library): automatically fetch remote data if not available 2024-11-26 20:11:03 +11:00
DecDuck 12b15aa0fd refactor(download manager): rename files to what they contain 2024-11-26 19:54:43 +11:00
DecDuck e08a2b20f3 feat: retry connnection on server unavailable 2024-11-26 18:09:15 +11:00
DecDuck aa1f70d344 feat(settings): finish download dir CRUD interface 2024-11-25 16:09:29 +11:00
DecDuck 104e903454 feat(settings): ability to add more download dirs 2024-11-24 21:04:56 +11:00
DecDuck b51db3b259 feat(ui): more ui improvements 2024-11-24 16:12:19 +11:00
DecDuck 8016830c34 refactor: more consistent naming for globals 2024-11-24 15:29:14 +11:00
DecDuck 09481cf3e8 feat(ui): game carousel 2024-11-24 09:47:32 +11:00
DecDuck 829236e56d fix(db): initialise doesn't recreate default install dir 2024-11-24 09:01:11 +11:00
Louis van Liefland b31d5c286a chore(downloads): Progress on write speeds & added debug statements 2024-11-23 23:32:56 +11:00
DecDuck 2262fb5df0 feat(store): new endpoints, ui and beginnings of main store page 2024-11-23 21:29:24 +11:00
quexeky b9960c1733 style(downloads): Abstracted queue system
TODO: Still need to cleanup the rest of the legacy code which used to use the queue system
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-23 18:18:03 +11:00
DecDuck 2cd3392d59 fix(style): game panel now always shows 3 lines exactly 2024-11-23 09:12:57 +11:00
DecDuck 404aeeb9c7 feat(store page): add button to open in admin panel 2024-11-23 09:03:56 +11:00
DecDuck 3f61f28054 fix(library): only show versions that are directories 2024-11-23 08:49:38 +11:00
quexeky e074011ca8 feat(downloads): Download cancelling
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-21 16:46:05 +11:00
DecDuck a80dcc31cc fix(auth): use chrono library to generate timestamps 2024-11-19 15:47:56 +11:00
quexeky e5a6129079 docs(logging): Updated logging format 2024-11-19 04:47:08 +00:00
DecDuck 27b768bd2f fix(log): added console as an appender 2024-11-19 15:33:14 +11:00
DecDuck a3244e2ff2 chore: cleanup of lib and toml 2024-11-19 15:28:57 +11:00
DecDuck e730f0f14c feat(context menu): prevent default context menu and emit event on elements 2024-11-19 15:28:32 +11:00
quexeky 5aff5c1a21 chore(downloads): progress on more precise download control
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-19 15:27:35 +11:00
DecDuck 47bcf5bbcd fix: types 2024-11-19 15:09:49 +11:00
DecDuck ed87b6896b feat(auth): refactoring and error message 2024-11-19 15:05:28 +11:00
quexeky c18b964b3e feat: added file-based logging
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-19 13:23:42 +11:00
DecDuck bf571003b0 fix(openssl): use vendored flag 2024-11-19 11:49:36 +11:00
DecDuck 2bbd9b282b style: updated text colours across app 2024-11-19 11:11:59 +11:00
DecDuck 39743c8b64 fix(readme): update readme instructions 2024-11-18 20:13:10 +11:00
quexeky 639a1f5270 style(downloads): Made all errors type-based
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-18 13:21:20 +11:00
DecDuck 3652d6123c feat(notifications): added notification system w/ interwoven refactoring 2024-11-16 19:41:19 +11:00
DecDuck 4db9ebe66a fix(ws): fixed websocket authentication 2024-11-16 18:28:38 +11:00
DecDuck e4a8dbc67b feat(sessions): cleanup and raw accessors 2024-11-16 18:23:44 +11:00
DecDuck be52466426 feat(session): under the hood organisation and consolidation 2024-11-16 18:20:14 +11:00
DecDuck 38e0d087c2 fix: properly disconnect websockets from task handler 2024-11-16 17:27:27 +11:00
quexeky 2f245e56b6 chore(downloads): Ran cargo clippy & cargo fmt
Side note, I'm going to start using chore to declare these rather than refactor because I don't think that it actually qualifies

Signed-off-by: quexeky <git@quexeky.dev>
2024-11-16 17:05:24 +11:00
DecDuck 16ab7fbe3b feat: new ws handler 2024-11-16 17:03:52 +11:00
quexeky b24e106420 feat(downloads): Added AgentInterfaceData to get information about all downloads in queue
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-16 17:03:37 +11:00
DecDuck 1a884eae50 fix: admin invitation w/ system user 2024-11-16 17:03:04 +11:00
DecDuck fd69348f5e fix: split prisma schemas 2024-11-16 16:30:22 +11:00
DecDuck efc6f3267f refactor: rename admin socket session map 2024-11-16 16:27:38 +11:00
DecDuck 3731b3fcf4 refactor: split prisma schemas 2024-11-16 16:24:23 +11:00
DecDuck 7685db03a2 feat: introduction of 'system user' 2024-11-16 16:18:15 +11:00
DecDuck 2ace2eb844 refactor: more consistent naming for object handler 2024-11-16 16:11:20 +11:00
DecDuck c884a28bb5 feat(ui): smoother bar in admin task ui 2024-11-16 16:08:41 +11:00
DecDuck 046c9e6fd2 feat(ui): user widget now redirects to actual page 2024-11-16 16:08:23 +11:00
DecDuck 7442287bf8 feat(registration): require lowercase usernames 2024-11-16 16:08:02 +11:00
semantic-release-bot 5e34dd593f chore: update version to 0.6.1 2024-11-14 16:02:20 +00:00
Luca Barbato 79cda8ef05 fix: Remove skeptic
It is unmaintained and fails to build tests.

Same as https://github.com/vincent-herlemont/native_db/pull/286.
2024-11-14 16:58:20 +01:00
semantic-release-bot 537b207aef chore: update version to 0.6.0 2024-11-14 13:42:17 +00:00
Luca Barbato 021ea5c54c feat: Add a named variant for rmp_serde_1_3
And advise to use it if advanced serde features are in use.
2024-11-14 14:38:46 +01:00
Luca Barbato b543e30216 docs: Document rmp-serde existence
And warn about metadata-less formats and serde advanced features.
2024-11-14 14:38:46 +01:00
Luca Barbato 28d41a41e9 chore: Remove trailing whitespaces 2024-11-14 14:38:46 +01:00
quexeky 18c7a9b2bc docs(download manager): Added description on how the DownloadManager works
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-13 22:17:30 +11:00
quexeky 6428611689 style(downloads): Fixing some references to "id" vs "game_id"
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-13 21:55:28 +11:00
quexeky f508391b6d refactor(downloads): Ran cargo fmt
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-13 21:28:24 +11:00
quexeky cee86b43ed refactor(downloads): Ran cargo clippy & moved DownloadManagerInterface
Created file "download_manager_interface.rs" to contain the DownloadManagerInterface

Signed-off-by: quexeky <git@quexeky.dev>
2024-11-13 21:05:25 +11:00
quexeky 928b60483a feat(downloads): Added Download Manager
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-13 20:38:00 +11:00
renovate[bot] e75e945383 chore(deps): update hustcer/setup-nu action to v3.16 2024-11-13 06:36:21 +00:00
semantic-release-bot 9cd037a857 chore: update version to 0.5.0 2024-11-12 22:51:31 +00:00
renovate[bot] f539da2a52 chore(deps): update actions/checkout digest to 11bd719 2024-11-12 23:48:46 +01:00
renovate[bot] 56a1387f8b fix(deps): update rust crate thiserror to v2 2024-11-12 23:48:02 +01:00
Luca Barbato d932be10ac fix: Unbreak the doctests 2024-11-12 23:47:47 +01:00
Dylan Bowker 028ae2d0c8 chore: added rust msrv to Cargo.toml 2024-11-12 23:47:47 +01:00
Dylan Bowker a653f3f826 docs: simplified docs on codecs 2024-11-12 23:47:47 +01:00
Dylan Bowker a21b7d0aa0 docs: moved notes on codecs to README.md 2024-11-12 23:47:47 +01:00
Dylan Bowker b85d4ce554 docs: update to docs on codecs 2024-11-12 23:47:47 +01:00
Dylan Bowker ac150841b0 docs: update to docs on codecs 2024-11-12 23:47:47 +01:00
Dylan Bowker 2196af7a82 fix: removed #![feature(doc_cfg)] nightly feature 2024-11-12 23:47:47 +01:00
Dylan Bowker 95e68f235e chore: re-instated original default features 2024-11-12 23:47:47 +01:00
Dylan Bowker dac9ddb4c0 chore: some docs clean-up 2024-11-12 23:47:47 +01:00
Dylan Bowker 646673efda feat: add support for rmp-serde 2024-11-12 23:47:47 +01:00
DecDuck 86f77daa01 chore(downloads): partial download manager 2024-11-12 09:06:28 +11:00
quexeky aa17db3d42 refactor(downloads): Reordered DownloadThreadControlFlag to agree with From<bool>
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-12 09:03:36 +11:00
quexeky f8ce05b9c2 fix(downloads): Chunk counting logic error
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-12 09:02:58 +11:00
quexeky 92ff527d50 refactor(downloads): ran cargo clippy & cargo fmt
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-11 18:27:39 +11:00
quexeky e601bbc26b refactor: Removed unnecessary dependencies
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-11 18:25:26 +11:00
quexeky 281f7844fd feat(downloads): Separated chunk updates into individual counters
Also added a From<bool> for DownloadThreadControlFlag because I accidentally was calling the wrong one before and had meant to add it anyway

Signed-off-by: quexeky <git@quexeky.dev>
2024-11-11 18:07:45 +11:00
quexeky 97f1db9aa1 feat(downloads): Added DownloadThreadControl struct
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-11 10:05:49 +11:00
quexeky 628898ec23 feat(downloads): Convert DownloadThreadControlFlag to AtomicBool
Also ran cargo fmt & cargo clipy

Signed-off-by: quexeky <git@quexeky.dev>
2024-11-11 09:39:25 +11:00
quexeky 1443d7f605 refactor: Created file settings.rs
Add constant values here to have a central management point for any relevant constants

Signed-off-by: quexeky <git@quexeky.dev>
2024-11-11 09:11:46 +11:00
quexeky d4c3bb08a1 refactor(downloads): Convert DOWNLOAD_MAX_THREADS to const
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-11 07:58:49 +11:00
DecDuck 2a83814f07 fix(download dir): fix logic error in detecting dir 2024-11-10 22:31:11 +11:00
DecDuck bc6aabc58d feat(downloads): reduce scope of download agent
due to a miscommunication, the scope of the download agent has grown too
much. this commit reduces that scopes, and intends for a lot of the
heavy lifting to be done by the soon-to-be-implemented download manager.
2024-11-10 22:25:54 +11:00
DecDuck 24fcc694d2 feat: content length header for chunk downloads 2024-11-10 22:14:01 +11:00
quexeky 74b8ed39d1 refactor: Ran cargo clippy & cargo fmt
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-10 13:21:37 +11:00
quexeky 3258a3d709 feat(library): Added option to change root directory
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-10 13:18:28 +11:00
quexeky 2f506a2068 refactor(database): Convert DATA_ROOT_DIR to Mutex
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-09 22:44:44 +11:00
quexeky 4aadb77e87 feat(downloads): Added function to take and set any game state
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-09 21:26:44 +11:00
quexeky f80bbe1b0e feat(downloads): Generic function to set download state
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-09 20:15:04 +11:00
quexeky e7169dd1b1 style(downloads): Added GAME_PAUSE_CHECK_INTERVAL value
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-09 20:00:05 +11:00
quexeky e288f2472b refactor: Cleaning up downloads playing and pausing
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-09 19:57:53 +11:00
quexeky da1f39c061 feat(downloads): Pausing and resuming game downloads
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-09 19:55:36 +11:00
DecDuck 4c727a9cec fix(client reg): prisma create footprint 2024-11-09 17:25:35 +11:00
DecDuck 7192164f8c fix(admin library): results are returned alphabetically 2024-11-08 21:31:22 +11:00
DecDuck 73d70179a7 feat(game page): more subtle design improvements 2024-11-08 21:23:31 +11:00
DecDuck 8851a62220 feat(game page): slightly improved game page 2024-11-08 20:59:17 +11:00
DecDuck b5b31494d7 fix(invitations): fix types 2024-11-08 20:44:38 +11:00
DecDuck 28a965a6f5 feat(invitations): completed admin UI, with minor changes to backend 2024-11-07 23:23:49 +11:00
DecDuck 023f8bcbb2 fix(invitations): fix expires requirement in the admin endpoint 2024-11-07 20:07:53 +11:00
DecDuck e9a19ecb46 chore(invitations): add expires field 2024-11-07 19:07:05 +11:00
quexeky f6f8186d5a chore(p2p): Starting p2p progress
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-06 16:40:19 +11:00
quexeky ae68506268 refactor(downloads): Scoping changes and removing qualifications
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-06 16:39:30 +11:00
DecDuck 508c04c07d feat(client cap): client capability framework + peer API configuration 2024-11-06 12:25:00 +11:00
DecDuck de1b8aa77e chore(utils): consolidate type utils 2024-11-06 11:49:08 +11:00
DecDuck 3c24d88375 feat(type utils): add enum dictionary type 2024-11-06 11:38:49 +11:00
DecDuck ad00fc7d7f feat(ca): generate a server certificate for mtls APIs 2024-11-06 11:38:32 +11:00
DecDuck 536b1b0ef1 chore: remove client API deadweight 2024-11-06 09:55:38 +11:00
DecDuck 70e3ba0a2d chore: update prisma version 2024-11-06 09:29:28 +11:00
DecDuck a4153608e0 refactor(ca): change name of store file 2024-11-06 09:20:02 +11:00
DecDuck df69c067c5 feat(client api): keep track of last connected 2024-11-06 09:17:03 +11:00
quexeky eaca334f0f docs(README): Updated contributing link
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 20:47:20 +11:00
DecDuck 2421fd55de chore(app settings): remove log statements 2024-11-05 19:03:47 +11:00
DecDuck 0d7173780e feat(library manager): automatically create library folder if it doesn't exist 2024-11-05 19:03:14 +11:00
DecDuck 97ee9411ed feat(library ui): add header 2024-11-05 19:01:22 +11:00
DecDuck a396a4939f refactor(icons): move icons into dedicated folder 2024-11-05 18:39:49 +11:00
DecDuck 768f25a5ae feat(registration): add title to tab 2024-11-05 13:18:50 +11:00
quexeky a2624e2785 docs: Updated README.md
Removed non-existent Volunteer section in the TOC

Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 12:39:09 +11:00
quexeky ca2e1e0b44 docs: Added SECURITY.md
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 12:39:09 +11:00
DecDuck 3762f1b8e6 docs(readme): update information and setup guide 2024-11-05 12:22:49 +11:00
quexeky a53b21d2f6 docs: Updated README.md
Removed some existing incorrect statements that had not been adapted fully. Still need to continue updating the contributing guide

Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 12:09:15 +11:00
quexeky bffd13c1a9 docs: updated CONTRIBUTING.md
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 12:04:46 +11:00
DecDuck 2b04b6183e build only ci 2024-11-05 11:09:16 +11:00
DecDuck b5041e8990 update deploy template 2024-11-05 11:02:35 +11:00
DecDuck 6263ae1cb7 migrate bcrypt to bcryptjs 2024-11-05 10:56:34 +11:00
DecDuck 20fdd30871 remove bcrypt (debug) 2024-11-05 10:49:48 +11:00
DecDuck dcd3d2c948 Delete .gitlab-ci.yml 2024-11-04 22:29:47 +00:00
quexeky 6b77a364ee Added "Work in Progress" to CONTRIBUTING.md
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 09:29:09 +11:00
quexeky d06b0c3b94 Relative link from README.md to CONTRIBUTING.md
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 09:27:19 +11:00
DecDuck 28e7e8dd4f fix registry authentication 2024-11-05 09:26:21 +11:00
quexeky 74d92b2638 Update styling
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 09:25:45 +11:00
DecDuck c5dfdc8cb7 move to raw docker 2024-11-05 09:23:44 +11:00
DecDuck 98dc783f6c copy autodevops configuration 2024-11-05 09:19:59 +11:00
quexeky b6b6b6fff1 Updated image
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-05 09:16:19 +11:00
DecDuck 6c7578a560 use autodevops build stage 2024-11-05 09:14:48 +11:00
DecDuck ac6668ec34 disable tls in build 2024-11-05 09:11:30 +11:00
DecDuck fa80fdbab8 use configuration from docs for ci/cd 2024-11-05 09:09:10 +11:00
DecDuck f06f3b0326 fixed docker daemon location 2024-11-05 09:07:26 +11:00
DecDuck 640a1b13c9 use gitlab ci variable declaration 2024-11-05 09:03:35 +11:00
DecDuck acc2a91099 manual ci/cd 2024-11-05 09:01:27 +11:00
DecDuck 76197bfae0 move to yarn v2 2024-11-04 22:55:29 +11:00
DecDuck 95a06661d7 remove canvas from dependencies 2024-11-04 22:38:05 +11:00
DecDuck 48ebc5f9c6 back to yarn, with nuxt telemetry force disabled
I think Nuxt prompts have been messing with the installs
2024-11-04 22:15:36 +11:00
quexeky 5dd70a4033 Resizing fix to icon?
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 22:00:39 +11:00
quexeky 5a10d1d01d Forgot to remove a piece
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 21:59:39 +11:00
quexeky 37ce2d89e2 Some updates to README.md and CONTRIBUTING.md
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 21:59:12 +11:00
DecDuck 076835d567 rustix fs feature 2024-11-04 10:55:52 +00:00
DecDuck 1a7dfade39 migrate to pnpm due to ci/cd issues with yarn 2024-11-04 21:52:31 +11:00
DecDuck ba328a22bd verbose yarn install 2024-11-04 21:31:32 +11:00
DecDuck 8ec55b7465 run yarn install in CI/CD non interactively 2024-11-04 21:21:32 +11:00
DecDuck be3c0168ba removed yarn.lock 2024-11-04 21:15:49 +11:00
DecDuck 1f7e50a694 docker based deployment 2024-11-04 20:50:35 +11:00
quexeky afab522b1d Removing more unnecessary imports
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 19:22:30 +11:00
quexeky 855effeff0 Fixed all merge issues
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 19:05:27 +11:00
quexeky 1ec2370477 Merge branch 'downloads' (again)
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 18:57:54 +11:00
quexeky 56ce939788 Ran cargo fmt
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 18:50:25 +11:00
quexeky 7547376b70 Update README.md
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 18:49:55 +11:00
quexeky 0a65969209 Updated README.md
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 18:48:00 +11:00
quexeky 817ba940ca Removed unnecessary dependencies
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 18:47:50 +11:00
DecDuck 9a76fe0202 fixes and patches for merged changes 2024-11-04 18:13:03 +11:00
DecDuck 3c693849b7 Merge branch 'error-handling'
Makes the Drop app more resistent to errors during start-up
2024-11-04 18:06:51 +11:00
DecDuck 206ac0437a Merge branch 'downloads'
Adds the backend logic for downloading games, as well as debug buttons
in the store page
2024-11-04 18:04:23 +11:00
quexeky 6dfc2d7393 Allowing some dead code features because they are there for future use (potentially)
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 18:03:18 +11:00
quexeky edc64ba6d2 Ran cargo clippy and cargo fmt
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 17:48:44 +11:00
quexeky 63b7defa6f Converted to using BufWriters instead of streaming everything at once
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 17:45:46 +11:00
quexeky afd07bb379 Functioning download progress updates
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-04 17:11:37 +11:00
DecDuck 5c5aa02fea Drop will no longer crash when the server goes down 2024-11-03 19:47:27 +11:00
DecDuck 1abcc3d3e5 drop no longer freaks out if server is unavailable on startup 2024-11-03 16:16:26 +11:00
DecDuck 35e8b5b7d6 immutable application settings framework 2024-11-02 11:32:36 +11:00
quexeky a1fed18d00 Removed gxhash and ran cargo fmt
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-01 07:51:56 +11:00
quexeky 42f381865d Clippy cleanup
Signed-off-by: quexeky <git@quexeky.dev>
2024-11-01 07:49:42 +11:00
DecDuck f3df6ee687 remove unpacker mod statement 2024-10-31 23:42:16 +11:00
quexeky b4a5e501a8 Removed unpacker.rs
Signed-off-by: quexeky <git@quexeky.dev>
2024-10-31 23:06:14 +11:00
quexeky ca2398ad8d Lesson learned: Wrappers are the bane of my existence. Also here's the download cancelling logic.
Signed-off-by: quexeky <git@quexeky.dev>
2024-10-31 20:56:10 +11:00
DecDuck 6c2e84b512 slight fixes to register logic 2024-10-31 20:28:29 +11:00
quexeky 1d322a3afe Updated tailwind config 2024-10-30 09:17:20 +11:00
quexeky 1daba5334a Adding checks for the stopper callback
Signed-off-by: quexeky <git@quexeky.dev>
2024-10-29 22:15:44 +11:00
DecDuck 6301bb18b6 server side and user client side completed for registration 2024-10-28 22:16:29 +11:00
quexeky a45f9c51aa Some progress on thread terminations 2024-10-28 22:06:44 +11:00
quexeky 07cd0b1b6f Removed utils.rs 2024-10-28 22:04:50 +11:00
quexeky 6735f929e8 Queue is running game downloads sequentially now 2024-10-28 20:57:42 +11:00
quexeky 7bfaf99aaf I think that download queuing is working 2024-10-28 19:23:41 +11:00
DecDuck d9aedc9886 user mobile header 2024-10-27 15:52:30 +11:00
DecDuck 2e30cc0015 break into single column store on lg devices 2024-10-27 15:30:26 +11:00
DecDuck 73a2e40941 add proper carousel to store page
uses the VueCarousel library to add an actual carousel to the store page
for the images. uses responsive styles
2024-10-27 15:21:31 +11:00
DecDuck 7bdc71ce56 bump droplet and add vue carousel 2024-10-27 15:07:39 +11:00
quexeky a3cac56c4f More debugging because apparently checksums are the bane of my existence. But it works and I was just an idiot 2024-10-26 23:23:43 +11:00
quexeky dcdb3c731c Converted to md5 2024-10-26 22:22:10 +11:00
quexeky 397b77881a Debugging line 2024-10-26 16:47:27 +11:00
DecDuck 72da0610a0 Update file chunk.get.ts 2024-10-26 05:46:28 +00:00
quexeky 615f9f00d6 More progress on checksums 2024-10-26 15:18:34 +11:00
quexeky 978be3e9dd Merge branch 'main' into downloads 2024-10-26 10:58:12 +11:00
quexeky 6d5dc457b2 Mostly finished with checksums. Just merging main in at the same time 2024-10-26 10:58:04 +11:00
renovate[bot] 736eb712f4 chore(deps): update hustcer/setup-nu action to v3.15 2024-10-25 09:21:28 +00:00
quexeky d68c5f632e Encoding game IDs and versions 2024-10-25 17:55:45 +11:00
DecDuck 59ef4645c4 restructing and renaming 2024-10-25 17:41:03 +11:00
quexeky 638fbdfb58 copy direct to disk 2024-10-25 14:56:49 +11:00
DecDuck 513f962964 starting docs infra 2024-10-25 13:15:46 +11:00
DecDuck 45c22a40e1 fixed multi-chunk downloads 2024-10-25 10:28:58 +11:00
DecDuck 6971a8d29e better download defaults 2024-10-24 22:17:50 +11:00
DecDuck 733b035110 slight bug fixes and clean up 2024-10-24 22:12:01 +11:00
DecDuck 959cf6ab1f my own take on some BASED design decisions 2024-10-24 22:05:58 +11:00
quexeky 839dce184a Removed debugging statements 2024-10-24 20:39:03 +11:00
quexeky 2b8a6ccdd8 Downloads should be fixed now 2024-10-24 19:38:58 +11:00
quexeky 3cd70367ac I think that downloads are working. Need to test and set decent file locations now 2024-10-24 17:18:09 +11:00
quexeky 45e2efb18f Game downloads from the client are working (multithreaded) by parsing in gameID, GameVersion, and maxThreads from FE (#1) 2024-10-24 12:26:40 +11:00
quexeky 90e41c6522 Clippy changes 2024-10-24 09:41:04 +11:00
quexeky 2e0b37ae19 Just debugging tauri's damn Sync command features 2024-10-24 09:38:02 +11:00
DecDuck 94b657e5e5 better server side signin redirects
this makes it so if a user requests a page (not API route) and isn't
signed in, it automatically redirects them to the sign in page (doesn't
show a flash of the error page)
2024-10-23 12:55:38 +11:00
DecDuck bdc82501aa failed gracefully on invalid chunk index 2024-10-23 12:36:09 +11:00
DecDuck 8919fcf71a slight patch to rename query to be more consistent 2024-10-23 12:13:30 +11:00
DecDuck eb4a9ae65f added download chunk endpoint 2024-10-23 12:03:31 +11:00
DecDuck 6f12288d8f Add LICENSE 2024-10-22 22:41:21 +00:00
DecDuck 9c9109b86a Add LICENSE 2024-10-22 22:40:13 +00:00
DecDuck 180b62b6b5 additional polish and QoL features 2024-10-22 09:43:00 +11:00
quexeky bcfce8588e Manifests are now being parsed successfully 2024-10-21 22:37:42 +11:00
quexeky 7933b0aa89 Merge remote-tracking branch 'origin/downloads' into downloads 2024-10-21 22:02:26 +11:00
DecDuck eae2bd33cf fixed manifest generation 2024-10-21 21:50:55 +11:00
DecDuck bca805af8a more cleaning 2024-10-21 21:50:27 +11:00
DecDuck 737b3061a8 fixed task system 2024-10-21 21:50:21 +11:00
DecDuck a3d127c018 cleanup & polish 2024-10-21 21:49:51 +11:00
Alessio D'Ambrosio 940c54a37b Update Cargo.toml 2024-10-21 21:23:52 +11:00
quexeky 6c0cf81935 Debugging & starting work on parsing manifest 2024-10-21 21:23:08 +11:00
DecDuck 506f4c427c ability to fetch client certs for p2p 2024-10-21 10:14:13 +11:00
DecDuck 258325fc11 fixed some of quexeky's BASED design decisions 2024-10-20 20:55:37 +11:00
quexeky 749b650b15 Validated that loading data works 2024-10-20 20:45:02 +11:00
DecDuck 17738103c6 patch for no version check in manifest generation 2024-10-20 20:38:28 +11:00
DecDuck 410770da0f check for no version in manifest generation 2024-10-20 20:31:07 +11:00
DecDuck 9e4e86ad6a patch metadata handler 2024-10-20 19:44:00 +11:00
quexeky eb37b2464a SLowly integrating game_download into the FE. Started with using the manifest minimal example in the server (#1) 2024-10-19 22:17:43 +11:00
quexeky 495bebe4a3 Theoretically adding queue support and optimistic manifest downloading (#1). Needs tests when actual functions are implemented 2024-10-19 19:32:05 +11:00
quexeky 34ecc85d3c Merge remote-tracking branch 'origin/downloads' into downloads 2024-10-19 17:36:28 +11:00
quexeky 34d2b978e5 More fleshing out on how specifically game downloads will work (#1) 2024-10-19 17:36:09 +11:00
quexeky 38eee872fe More fleshing out on how specifically game downloads will work 2024-10-19 17:35:26 +11:00
quexeky f5b5d164ab Included in AppStatus (Also trying to link to Issue #1) 2024-10-19 14:54:29 +11:00
quexeky deae3875f7 Update on GameDownload 2024-10-18 22:35:03 +11:00
quexeky f8b96d06e7 Progress checker works 2024-10-18 20:42:26 +11:00
quexeky 31e794f637 Progress on downloads. Currently working on parsing functions to be run asynchronously 2024-10-18 07:45:09 +11:00
quexeky 943e649fbc Fixed bug with bad initial loading into store instead of auth 2024-10-17 21:14:10 +11:00
DecDuck 1ff74a1bcf beginnings of game state management 2024-10-17 21:05:25 +11:00
DecDuck aae8de56aa small fixes & SSR disabled
SSR was causing weird issues where error pages would flash because the
user wasn't logged in. I'm disabling it for now, but I will eventually
look into ways to fix the issue and re-enable it.
2024-10-17 21:04:32 +11:00
quexeky 30ff908abc Converting DB access to a trait 2024-10-17 19:03:00 +11:00
quexeky 6aee5e3686 Accidentally serialized AppStatus and broke everything :/ 2024-10-17 18:13:27 +11:00
quexeky 9f544eccb0 Semantic naming changes 2024-10-17 17:17:19 +11:00
quexeky a316b8f5e6 Ensured everything is serializing/deserializing to camelCase 2024-10-17 17:07:47 +11:00
quexeky 8b67dc2a7b Re-enabled closing the window and some more renaming 2024-10-16 09:23:00 +11:00
quexeky d329efaefb More refactoring and renaming camelCase struct definitions to snake_case 2024-10-16 09:09:46 +11:00
quexeky 06fb2f7b71 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src-tauri/src/lib.rs
2024-10-16 09:03:25 +11:00
DecDuck 27ee1165a8 more client routes to support Drop app update 2024-10-15 20:05:38 +11:00
DecDuck 0cb6bfb8bf cleanup and game UI beginnings 2024-10-15 20:05:13 +11:00
quexeky de2521bfac Clippy refactoring 2024-10-15 12:43:00 +11:00
quexeky b3446004b1 Progress on refactoring and abiding by cargo clippy 2024-10-15 12:32:04 +11:00
quexeky ccaa0ed23c Updated logging 2024-10-15 11:04:50 +11:00
DecDuck 34b03527bf game version re-ordering 2024-10-14 20:34:23 +11:00
DecDuck 4c4272fe06 slight ui/ux fixes and updates to auth protocol 2024-10-12 17:44:23 +11:00
DecDuck 6897b35904 reorganisation, cleanup and new nonce protocol 2024-10-12 17:34:47 +11:00
DecDuck 02951b909d beginnings of download implementation 2024-10-12 17:34:09 +11:00
DecDuck 8c205e90c7 fixes to store page for mobile clients 2024-10-12 17:33:31 +11:00
DecDuck 865997bf92 upload images to games 2024-10-12 12:09:14 +11:00
DecDuck 308827f042 almst complete admin ui and initial store designs 2024-10-11 22:45:02 +11:00
DecDuck fd39b3453a version importing 2024-10-11 17:16:26 +11:00
DecDuck 37a138aeed completed game importing; partial work on version importing 2024-10-11 00:37:08 +11:00
DecDuck 68236f5112 task API
The Task API allows for an easy way to create long-lived tasks that
require reporting back to user with progress/logs. It will be used in
the upcoming game importing.
2024-10-10 16:13:10 +11:00
DecDuck 96e4554031 patch signin 2024-10-10 13:39:43 +11:00
DecDuck 7a5e01d0ae patch for not draggable windows during setup 2024-10-09 18:02:09 +11:00
DecDuck 0609e116b0 fixed windows issues 2024-10-09 17:55:19 +11:00
DecDuck 4a114d2a79 client now fetches user information from Drop server 2024-10-09 16:52:24 +11:00
DecDuck ba3c480357 admin ui shell 2024-10-09 15:43:55 +11:00
DecDuck 99db921f07 finished object endpoints
Added writing (tested) and deleting (untested) endpoints
2024-10-09 15:08:55 +11:00
DecDuck 661a30107c object storage + full permission system + testing
Object storage now works fully, with the permission system. It still
needs additional external endpoints for updating and deleting objects
from the API, but it is otherwise complete. Further tasks include
writing an S3 adapter.
2024-10-09 14:43:06 +11:00
DecDuck 9b34668e50 object storage interface + utility functions
New ObjectBackend class that requires implementors to specify a few
basic functions, and it handles the permission logic on top of that.
Hopefully there is enough abstraction to suite further use cases!
2024-10-09 13:47:28 +11:00
DecDuck bb2833b79f ci/cd and patches for windows builds 2024-10-09 05:09:48 +11:00
DecDuck 6d32e36b35 update dependencies and add note about optional dependencies 2024-10-09 02:35:59 +11:00
DecDuck e0d797b384 bump @drop/droplet version for windows developers 2024-10-09 02:26:21 +11:00
DecDuck d7ea32d175 compliant with new APIs 2024-10-09 00:37:27 +11:00
DecDuck 82bcaf1943 finalised client APIs and authentication method 2024-10-09 00:37:11 +11:00
DecDuck b39ed30e16 Update README.md 2024-10-09 00:20:07 +11:00
DecDuck a83aa62a55 migrate to new droplet ca system 2024-10-08 21:45:57 +11:00
DecDuck 4d655c42d0 migrate to new droplet ca system 2024-10-08 21:45:44 +11:00
DecDuck 7702db02bf handshakes 2024-10-08 18:08:52 +11:00
DecDuck 567f2aebd1 handshakes 2024-10-08 18:08:34 +11:00
DecDuck 57b6fa872e another stage of client authentication 2024-10-08 16:13:46 +11:00
DecDuck 8896492776 another stage of client authentication 2024-10-08 16:13:28 +11:00
DecDuck 1c63d62e3d client initiate 2024-10-08 13:17:30 +11:00
DecDuck 13bf4fe757 auth initiate, database and more 2024-10-08 13:17:06 +11:00
DecDuck 6ea3f9186f README update 2024-10-08 01:04:03 +11:00
DecDuck 88a07e0723 README update 2024-10-08 00:56:15 +11:00
DecDuck 6c3783380b refactoring 2024-10-08 00:41:05 +11:00
DecDuck c0b2255315 migrate to nuxt and groundwork 2024-10-08 00:39:42 +11:00
DecDuck 5e74a555df ca groundwork 2024-10-07 22:35:54 +11:00
DecDuck d39d6a3374 migrated unpacking to rust zstd to conform with droplet
@drop/droplet now packs with zstd, so converts unpacker.rs to use zstd
2024-10-07 15:10:38 +11:00
DecDuck f1febf8cd8 convert to more sensible permission schema 2024-10-06 13:37:30 +11:00
DecDuck 8e87ad7631 initial commit 2024-10-06 01:10:57 +10:00
semantic-release-bot c35c40630b chore: update version to 0.4.20 2024-10-05 08:28:13 +00:00
vincent-herlemont 9a284d2942 fix: update zerocopy usage in header and wrapper modules to use new traits 2024-10-05 10:25:13 +02:00
DecDuck 94e8ad5c9a more ui 2024-10-04 15:35:03 +10:00
DecDuck 9e731796da ui groundwork 2024-10-04 14:43:02 +10:00
DecDuck 2773c4cc3b metadata engine 2024-10-04 13:01:06 +10:00
renovate[bot] 83de7d88cd fix(deps): update rust crate zerocopy to 0.8.0 2024-10-04 00:25:43 +00:00
DecDuck d0a92b7932 initial work on metadata system 2024-09-29 11:08:49 +10:00
DecDuck ff581f115b initial commit 2024-09-28 19:12:11 +10:00
renovate[bot] b32e231e31 chore(deps): update hustcer/setup-nu action to v3.13 2024-09-07 17:12:22 +00:00
renovate[bot] 9b594afc2b chore(deps): update hustcer/setup-nu action to v3.12 2024-06-29 07:37:20 +00:00
renovate[bot] 938a0d654c chore(deps): update hustcer/setup-nu action to v3.11 2024-05-29 09:46:58 +00:00
semantic-release-bot d62eddb2ae chore: update version to 0.4.19 2024-05-04 22:52:20 +00:00
renovate[bot] 60d38784ac fix(deps): update rust crate zerocopy to 0.7.33 2024-05-04 22:49:30 +00:00
semantic-release-bot c5ed0db762 chore: update version to 0.4.18 2024-05-01 22:50:55 +00:00
renovate[bot] 7d3ede941b fix(deps): update rust crate thiserror to 1.0.59 2024-05-01 22:47:31 +00:00
renovate[bot] 75ca2fb5b1 fix(deps): update rust crate syn to 2.0.60 2024-05-01 22:47:26 +00:00
semantic-release-bot 012fd6cc32 chore: update version to 0.4.17 2024-05-01 19:15:17 +00:00
renovate[bot] fd6bdb1df4 fix(deps): update rust crate serde to 1.0.200 2024-05-01 19:11:07 +00:00
renovate[bot] 591c8f28f2 fix(deps): update rust crate quote to 1.0.36 2024-05-01 19:10:59 +00:00
semantic-release-bot 0db3914398 chore: update version to 0.4.16 2024-05-01 15:30:24 +00:00
renovate[bot] 231200d13f fix(deps): update rust crate postcard to 1.0.8 2024-05-01 15:26:52 +00:00
renovate[bot] 2c8a0ee8d6 fix(deps): update rust crate postcard_1_0 to 1.0.8 2024-05-01 15:26:41 +00:00
semantic-release-bot d4cfedee9e chore: update version to 0.4.15 2024-05-01 13:59:25 +00:00
renovate[bot] 1d15dce922 fix(deps): update rust crate anyhow to 1.0.82 2024-05-01 13:55:59 +00:00
renovate[bot] 71b332d8a0 fix(deps): update rust crate bincode_1_3 to 1.3.3 2024-05-01 13:55:35 +00:00
renovate[bot] 013ddef8f2 chore(deps): update rust crate skeptic to 0.13.7 2024-05-01 10:44:10 +00:00
renovate[bot] 01fcb55425 chore(deps): update rust crate serde_json to 1.0.116 2024-05-01 10:44:04 +00:00
renovate[bot] 9520b2c862 chore(deps): update hustcer/setup-nu action to v3.10 2024-04-27 01:45:57 +00:00
semantic-release-bot 56ab66d4a4 chore: update version to 0.4.14 2024-04-17 04:09:18 +00:00
renovate[bot] 62d7821f96 fix(deps): update rust crate proc-macro2 to 1.0.81 2024-04-17 04:04:31 +00:00
semantic-release-bot 8965cac2b2 chore: update version to 0.4.13 2024-04-15 00:55:50 +00:00
renovate[bot] 46a643350a fix(deps): update rust crate proc-macro2 to 1.0.80 2024-04-15 00:51:29 +00:00
semantic-release-bot 0c70af183f chore: update version to 0.4.12 2024-03-12 05:23:00 +00:00
renovate[bot] 3fdeb797bb fix(deps): update rust crate proc-macro2 to 1.0.79 2024-03-12 05:18:53 +00:00
renovate[bot] 50b25154ef chore(deps): update extractions/setup-just action to v2 2024-02-28 04:53:17 +00:00
renovate[bot] 7931ef2d22 chore(deps): update hustcer/setup-nu action to v3.9 2024-02-07 06:39:35 +00:00
renovate[bot] 1c50a0ab5e chore(deps): update webiny/action-conventional-commits action to v1.3.0 2024-01-26 16:18:16 +00:00
semantic-release-bot 62ef6db5ea chore: update version to 0.4.11 2024-01-21 03:39:40 +00:00
renovate[bot] ebc53cc231 fix(deps): update rust crate proc-macro2 to 1.0.78 2024-01-21 03:35:48 +00:00
semantic-release-bot 5058898c7e chore: update version to 0.4.10 2024-01-06 06:12:35 +00:00
renovate[bot] 9b72e0728f fix(deps): update rust crate proc-macro2 to 1.0.76 2024-01-06 06:09:01 +00:00
semantic-release-bot f3c56c1f2f chore: update version to 0.4.9 2024-01-04 00:39:29 +00:00
renovate[bot] ddfa6fd4d1 fix(deps): update rust crate proc-macro2 to 1.0.75 2024-01-04 00:36:17 +00:00
semantic-release-bot e964fba15b chore: update version to 0.4.8 2024-01-02 06:31:33 +00:00
renovate[bot] b2c122d4fa fix(deps): update rust crate proc-macro2 to 1.0.74 2024-01-02 06:28:00 +00:00
semantic-release-bot cc4029e285 chore: update version to 0.4.7 2024-01-01 01:46:40 +00:00
renovate[bot] 168467a981 fix(deps): update rust crate proc-macro2 to 1.0.73 2024-01-01 01:43:31 +00:00
renovate[bot] 11c7a88a0a fix(deps): update rust crate proc-macro2 to 1.0.72 2023-12-31 05:00:07 +00:00
semantic-release-bot 7241c36fe3 chore: update version to 0.4.6 2023-12-21 20:16:02 +00:00
renovate[bot] 7ad4613e79 fix(deps): update rust crate proc-macro2 to 1.0.71 2023-12-21 20:12:24 +00:00
semantic-release-bot 49357b4354 chore: update version to 0.4.5 2023-12-21 16:44:59 +00:00
renovate[bot] 1ccaa9bfe7 fix(deps): update rust crate zerocopy to 0.7.32 2023-12-21 16:40:43 +00:00
semantic-release-bot ec23f3ae00 chore: update version to 0.4.4 2023-12-20 18:51:14 +00:00
Vincent Herlemont fa34f38442 docs: links for custom serialization examples 2023-12-20 19:47:01 +01:00
semantic-release-bot e73e0ab431 chore: update version to 0.4.3 2023-12-19 18:17:26 +00:00
Michael Martin 5374dd6629 docs: fix typo in README
s/wood/hood/
2023-12-19 19:12:53 +01:00
semantic-release-bot 63e5c33d8f chore: update version to 0.4.2 2023-12-17 17:49:22 +00:00
Vincent Herlemont 1de6743017 fix: move model trait to lib module 2023-12-17 18:45:29 +01:00
semantic-release-bot b3398c6dad chore: update version to 0.4.1 2023-12-17 17:33:03 +00:00
Vincent Herlemont 6e31a2413b fix: re-export model trait 2023-12-17 18:30:11 +01:00
semantic-release-bot 86008b388d chore: update version to 0.4.0 2023-12-17 09:48:54 +00:00
renovate[bot] ce0676e4b4 chore(deps): update hustcer/setup-nu action to v3.8 2023-12-17 09:45:10 +00:00
Vincent Herlemont f7430422c9 ci: cargo test 2023-12-17 10:44:54 +01:00
Vincent Herlemont 003d1f3b1d feat: add native_model_id_str and native_model_version_str 2023-12-17 10:44:54 +01:00
Vincent Herlemont 07c8900dde ci: update build_test_common_os 2023-12-17 10:44:54 +01:00
Vincent Herlemont 052c003c92 ci: update build_test_common_os 2023-12-17 10:44:54 +01:00
Vincent Herlemont 8db7fe7521 ci: update build_test_common_os 2023-12-17 10:44:54 +01:00
Vincent Herlemont 1f0c387b82 test: fix test readme 2023-12-17 10:44:54 +01:00
Vincent Herlemont 954cfa322e perf: refactor bench 2023-12-17 10:44:54 +01:00
Vincent Herlemont 1b3ae4f5f1 test: refactor test 2023-12-17 10:44:54 +01:00
Vincent Herlemont 2f68d495c1 feat: bincode_1_3 by default 2023-12-17 10:44:54 +01:00
Vincent Herlemont f07922cdb4 feat: default postcard 1.0 2023-12-17 10:44:54 +01:00
Vincent Herlemont 39466299ed feat: default bincode 2.0.0-rc.* 2023-12-17 10:44:54 +01:00
Vincent Herlemont 383379fe1e feat: default bincode 1.3.3 2023-12-17 10:44:54 +01:00
Vincent Herlemont ac601f4c98 refactor: rename encode_decode with codec 2023-12-17 10:44:54 +01:00
Vincent Herlemont 789f09fa67 fix: unknown result on macro 2023-12-17 10:44:54 +01:00
Vincent Herlemont fd5bbfd964 feat: add with macro option 2023-12-17 10:44:54 +01:00
semantic-release-bot dc725a3380 chore: update version to 0.3.30 2023-12-14 02:04:40 +00:00
renovate[bot] ccccfd22e8 fix(deps): update rust crate zerocopy to 0.7.31 2023-12-14 02:02:06 +00:00
semantic-release-bot dfb270c16f chore: update version to 0.3.29 2023-12-08 20:00:41 +00:00
renovate[bot] 80c8b3b935 fix(deps): update rust crate zerocopy to 0.7.30 2023-12-08 19:58:04 +00:00
semantic-release-bot 9c2e3493db chore: update version to 0.3.28 2023-12-05 20:20:49 +00:00
renovate[bot] bd4ccf52bf fix(deps): update rust crate zerocopy to 0.7.29 2023-12-05 20:16:39 +00:00
semantic-release-bot 7944fe0f85 chore: update version to 0.3.27 2023-12-01 04:35:47 +00:00
renovate[bot] 8831b7a240 fix(deps): update rust crate zerocopy to 0.7.28 2023-12-01 04:32:42 +00:00
semantic-release-bot e34029e051 chore: update version to 0.3.26 2023-11-30 17:33:03 +00:00
renovate[bot] ea331bb2b9 fix(deps): update rust crate zerocopy to 0.7.27 2023-11-30 17:30:02 +00:00
semantic-release-bot a80148a412 chore: update version to 0.3.25 2023-11-26 04:12:14 +00:00
renovate[bot] b41b833586 fix(deps): update rust crate proc-macro2 to 1.0.70 2023-11-26 04:09:59 +00:00
renovate[bot] a8ad1135cd chore(deps): update webiny/action-conventional-commits action to v1.2.0 2023-11-23 22:50:15 +00:00
semantic-release-bot bcf9910d49 chore: update version to 0.3.24 2023-11-14 23:16:29 +00:00
renovate[bot] 31159307d2 fix(deps): update rust crate zerocopy to 0.7.26 2023-11-14 23:11:37 +00:00
semantic-release-bot 672f961fd9 chore: update version to 0.3.23 2023-11-04 07:45:30 +00:00
renovate[bot] e319f2690f fix(deps): update rust crate zerocopy to 0.7.25 2023-11-04 07:41:47 +00:00
semantic-release-bot 134699d59a chore: update version to 0.3.22 2023-11-03 15:32:39 +00:00
renovate[bot] 26d6280297 fix(deps): update rust crate zerocopy to 0.7.24 2023-11-03 15:28:06 +00:00
semantic-release-bot eb5deba246 chore: update version to 0.3.21 2023-11-02 16:21:12 +00:00
renovate[bot] d20f87055c fix(deps): update rust crate zerocopy to 0.7.23 2023-11-02 16:18:04 +00:00
semantic-release-bot 6ff3ebd059 chore: update version to 0.3.20 2023-10-31 22:30:02 +00:00
renovate[bot] 7e2cd61b36 fix(deps): update rust crate zerocopy to 0.7.21 2023-10-31 22:25:51 +00:00
semantic-release-bot 3d3a994803 chore: update version to 0.3.19 2023-10-29 22:21:57 +00:00
renovate[bot] 9ff2dccd9e fix(deps): update rust crate zerocopy to 0.7.20 2023-10-29 22:17:57 +00:00
semantic-release-bot c935549944 chore: update version to 0.3.18 2023-10-29 18:35:25 +00:00
renovate[bot] 203026e0cf fix(deps): update rust crate zerocopy to 0.7.19 2023-10-29 18:32:18 +00:00
semantic-release-bot 60eb754bf5 chore: update version to 0.3.17 2023-10-27 21:46:42 +00:00
renovate[bot] 1c4fa7336e fix(deps): update rust crate zerocopy to 0.7.18 2023-10-27 21:42:25 +00:00
semantic-release-bot da94128785 chore: update version to 0.3.16 2023-10-27 20:03:15 +00:00
renovate[bot] 00a26a7777 fix(deps): update rust crate zerocopy to 0.7.17 2023-10-27 19:59:20 +00:00
semantic-release-bot f655663787 chore: update version to 0.3.15 2023-10-25 14:27:23 +00:00
renovate[bot] 326efd6c32 fix(deps): update rust crate zerocopy to 0.7.15 2023-10-25 14:23:10 +00:00
semantic-release-bot df4ccfa57e chore: update version to 0.3.14 2023-10-25 00:31:44 +00:00
renovate[bot] 48573bd545 fix(deps): update rust crate zerocopy to 0.7.14 2023-10-25 00:27:35 +00:00
semantic-release-bot c513fbb277 chore: update version to 0.3.13 2023-10-24 21:58:50 +00:00
renovate[bot] 1b980817b7 fix(deps): update rust crate zerocopy to 0.7.13 2023-10-24 21:54:32 +00:00
semantic-release-bot 4918c5853a chore: update version to 0.3.12 2023-10-24 17:40:33 +00:00
renovate[bot] 5aff6d77b7 fix(deps): update rust crate zerocopy to 0.7.12 2023-10-24 17:35:22 +00:00
renovate[bot] 73c4686f27 chore(deps): update actions/setup-node action to v4 2023-10-23 16:37:57 +00:00
semantic-release-bot 56f3aacaa7 chore: update version to 0.3.11 2023-10-12 00:07:01 +00:00
renovate[bot] 870bdd2e7e fix(deps): update rust crate zerocopy to 0.7.11 2023-10-12 00:03:36 +00:00
semantic-release-bot 227cf016a2 chore: update version to 0.3.10 2023-10-11 18:42:08 +00:00
renovate[bot] 153c7a9c18 fix(deps): update rust crate zerocopy to 0.7.10 2023-10-11 18:38:03 +00:00
semantic-release-bot 8fed3c98f8 chore: update version to 0.3.9 2023-10-10 22:51:41 +00:00
renovate[bot] c169f829f2 fix(deps): update rust crate zerocopy to 0.7.9 2023-10-10 22:48:32 +00:00
semantic-release-bot e6b76cbb83 chore: update version to 0.3.8 2023-10-09 01:29:59 +00:00
renovate[bot] 3c50c8f188 fix(deps): update rust crate proc-macro2 to 1.0.69 2023-10-09 01:26:36 +00:00
semantic-release-bot 7bb76ab2bc chore: update version to 0.3.7 2023-10-06 06:44:40 +00:00
renovate[bot] 7996294438 fix(deps): update rust crate proc-macro2 to 1.0.68 2023-10-06 06:41:27 +00:00
semantic-release-bot 9955cc7422 chore: update version to 0.3.6 2023-10-04 22:47:20 +00:00
renovate[bot] 11375d0d03 fix(deps): update rust crate zerocopy to 0.7.8 2023-10-04 22:42:23 +00:00
semantic-release-bot 00899878fb chore: update version to 0.3.5 2023-10-04 04:50:53 +00:00
renovate[bot] c9f122ea84 fix(deps): update rust crate zerocopy to 0.7.7 2023-10-04 04:45:47 +00:00
semantic-release-bot 62b8d66f35 chore: update version to 0.3.4 2023-10-02 22:29:28 +00:00
renovate[bot] e21896aacb fix(deps): update rust crate zerocopy to 0.7.6 2023-10-02 22:24:45 +00:00
renovate[bot] 84841601b4 chore(deps): update actions/checkout digest to 8ade135 2023-09-24 12:49:18 +02:00
semantic-release-bot 10be885293 chore: update version to 0.3.3 2023-09-15 22:46:11 +00:00
renovate[bot] 37d693a90b fix(deps): update rust crate zerocopy to 0.7.5 2023-09-15 22:43:12 +00:00
semantic-release-bot d9e4bdc974 chore: update version to 0.3.2 2023-09-15 19:52:00 +00:00
renovate[bot] e84837c248 fix(deps): update rust crate zerocopy to 0.7.4 2023-09-15 19:47:25 +00:00
semantic-release-bot 47b715be3e chore: update version to 0.3.1 2023-09-13 18:08:38 +00:00
renovate[bot] ca8ebef8a3 fix(deps): update rust crate proc-macro2 to 1.0.67 2023-09-13 18:04:42 +00:00
semantic-release-bot f05bc7a136 chore: update version to 0.3.0 2023-09-04 17:39:36 +00:00
Vincent Herlemont 64301ca301 feat: implement mismatched model id + improvement 2023-09-04 19:35:43 +02:00
renovate[bot] e3ed493a23 chore(deps): update actions/checkout action to v4 2023-09-04 13:06:11 +00:00
semantic-release-bot beb180cf1a chore: update version to 0.2.4 2023-09-04 06:49:09 +00:00
Vincent Herlemont 9d85256115 docs: add concepts section 2023-09-04 08:44:01 +02:00
semantic-release-bot 9fe3d611d9 chore: update version to 0.2.3 2023-09-02 12:20:46 +00:00
Vincent Herlemont 9516b32aeb docs: improve rust docs 2023-09-02 14:17:32 +02:00
Vincent Herlemont 9ab3fdae5a docs: change CI badge name 2023-09-02 14:11:55 +02:00
Vincent Herlemont c1b0a6f917 docs: fix example of setup serialization format 2023-09-02 14:08:22 +02:00
semantic-release-bot 0b0c2ccfd4 chore: update version to 0.2.2 2023-09-02 11:40:01 +00:00
Vincent Herlemont 248869e77f ci: fix ignore temporary files generated by semantic-release/exec 2023-09-02 13:36:34 +02:00
renovate[bot] 5cceb9542e fix(deps): update rust crate zerocopy to 0.7.3 2023-09-02 11:32:40 +00:00
semantic-release-bot 972b2add9c chore: update version to 0.2.1 2023-09-02 11:32:26 +00:00
Vincent Herlemont 1f92ef7b03 docs: fix CI badge 2023-09-02 13:29:08 +02:00
Vincent Herlemont d34d44dfc1 chore: update version to 0.2.0 2023-09-02 13:18:57 +02:00
Vincent Herlemont b465210070 feat: init 2023-09-02 13:12:23 +02:00
Tim Smith c7b823dc10 Remove invalid docs link 2019-01-03 18:13:37 -08:00
Tim Smith fa34497dde Fix travis badge 2019-01-02 15:57:21 -08:00
Jamie Winsor 5325f15339 version bump 0.1.1 2016-03-21 17:25:21 -07:00
Jamie Winsor 29b4a2a405 Merge pull request #1 from chef/extract-bug
Various fixes for restoring files on disk from archive
2016-03-21 17:24:50 -07:00
Jamie Winsor fc8b870317 write prefix for hardlinks on Disk restore 2016-03-21 17:23:00 -07:00
Jamie Winsor 9e3659dcf9 expose ability to set/get filetype of archive entry 2016-03-21 15:58:09 -07:00
Jamie Winsor baa9b408d6 don't close on free - libarchive takes care of this 2016-03-21 13:23:47 -07:00
Jamie Winsor a2e51c7f8b match result code before extracting an error 2016-03-21 13:22:30 -07:00
Jamie Winsor f7cc72e071 prepare for first release 2016-03-17 13:32:37 -07:00
Jamie Winsor ad5ed84d91 fix bug where all data blocks were not extracted to file 2016-03-17 13:17:17 -07:00
Jamie Winsor 39b37933d7 add option for writing an archive's entries with a prefix 2016-01-12 00:00:30 -08:00
Jamie Winsor a069bd2a98 fix segmentation fault
add read_block function to reader
2016-01-11 19:38:01 -08:00
Jamie Winsor a45b168b6c lock to >= 0.2.0 of libc 2016-01-11 19:23:04 -08:00
Jamie Winsor fe0b023a2d implement display trait for archive error and err code 2016-01-09 16:20:12 -08:00
Jamie Winsor 98168ddcf1 Initial commit 2016-01-09 15:40:08 -08:00
1238 changed files with 80167 additions and 4846 deletions
+5 -42
View File
@@ -1,43 +1,6 @@
Dockerfile
.github
.vscode
*.md
/sites
/cli
/desktop
/backend # go backend
#### gitignore below
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
.yarn
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example
.data
# deploy template
deploy-template/*
!deploy-template/compose.yml
# generated prisma client
/prisma/client
/prisma/validate
node_modules
+140
View File
@@ -0,0 +1,140 @@
name: "Build and release desktop"
on:
workflow_dispatch:
inputs:
tagName:
required: false
type: string
description: "tagName to be associated with this release."
release:
types: [published]
# This can be used to automatically publish nightlies at UTC nighttime
# schedule:
# - cron: "0 2 * * *" # run at 2 AM UTC
# This workflow will trigger on each push to the `release` branch to create or update a GitHub release, build your app, and upload the artifacts to the release.
jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: "macos-14" # for Arm based macs (M1 and above).
args: "--target aarch64-apple-darwin"
- platform: "macos-14" # for Intel based macs.
args: "--target x86_64-apple-darwin"
- platform: "ubuntu-22.04" # for Tauri v1 you could replace this with ubuntu-20.04.
args: ""
- platform: "ubuntu-22.04-arm"
args: "--target aarch64-unknown-linux-gnu"
- platform: "windows-latest"
args: ""
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: false
- name: setup node
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: install Rust nightly
uses: dtolnay/rust-toolchain@nightly
with:
# Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
targets: ${{ matrix.platform == 'macos-14' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './desktop/src-tauri -> target'
- name: install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-22.04-arm' # This must match the platform value defined above.
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xdg-utils
# webkitgtk 4.0 is for Tauri v1 - webkitgtk 4.1 is for Tauri v2.
- name: Import Apple Developer Certificate
if: matrix.platform == 'macos-14'
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security set-keychain-settings -t 3600 -u build.keychain
# Add build.keychain to the user keychain search list so that codesign
# (invoked later by tauri-action WITHOUT an explicit --keychain) can
# resolve the signing identity from it.
security list-keychains -d user -s build.keychain $(security list-keychains -d user | tr -d '"')
echo "Created keychain"
curl https://droposs.org/drop.der --output drop.der
# swiftc libs/appletrust/add-certificate.swift
# ./add-certificate drop.der
# rm add-certificate
# echo "Added certificate to keychain using swift util"
## Script is equivalent to:
sudo security authorizationdb write com.apple.trust-settings.admin allow
sudo security add-trusted-cert -d -r trustRoot -k build.keychain -p codeSign -u -1 drop.der
sudo security authorizationdb remove com.apple.trust-settings.admin
security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
echo "Imported certificate"
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
security find-identity -v -p codesigning build.keychain
- name: Verify Certificate
if: matrix.platform == 'macos-14'
run: |
CERT_INFO=$(security find-identity -v -p codesigning build.keychain | grep "Drop OSS")
CERT_ID=$(echo "$CERT_INFO" | awk -F'"' '{print $2}')
echo "CERT_ID=$CERT_ID" >> $GITHUB_ENV
echo "Certificate imported. Using identity: $CERT_ID"
- name: install frontend dependencies
run: pnpm install # change this to npm, pnpm or bun depending on which one you use.
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Do NOT set APPLE_CERTIFICATE / APPLE_CERTIFICATE_PASSWORD here. Doing so
# makes tauri-action import the cert into its own throwaway keychain and
# look up the identity by Apple-only name prefixes (e.g.
# "Developer ID Application:"), which never matches our "Drop OSS" cert
# and fails with "failed to resolve signing identity". Instead we rely on
# the build.keychain prepared above and only pass the resolved identity.
APPLE_SIGNING_IDENTITY: ${{ env.CERT_ID }}
NO_STRIP: true
with:
tagName: ${{ inputs.print_tags || 'v__VERSION__' }} # the action automatically replaces \_\_VERSION\_\_ with the app version.
releaseName: "Auto-release v__VERSION__"
releaseBody: "See the assets to download this version and install. This release was created automatically."
releaseDraft: false
prerelease: true
args: ${{ matrix.args }}
projectPath: './desktop'
+56
View File
@@ -0,0 +1,56 @@
name: Droplet CI
on:
push:
branches: [develop]
paths:
- "libraries/droplet/**"
- "libraries/droplet_types/**"
- "libraries/libarchive/**"
- ".github/workflows/droplet-ci.yml"
pull_request:
branches: [develop]
paths:
- "libraries/droplet/**"
- "libraries/droplet_types/**"
- "libraries/libarchive/**"
- ".github/workflows/droplet-ci.yml"
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
jobs:
ci:
name: Build, Test, Lint
runs-on: ubuntu-latest
defaults:
run:
working-directory: libraries/droplet
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt, clippy
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: "./libraries/droplet -> target"
- name: Install libarchive
run: |
sudo apt-get update
sudo apt-get install -y libarchive-dev
- name: Check formatting
run: cargo fmt --all -- --check
- name: Run Clippy (lint)
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Run tests
run: cargo test --all-features --all --verbose
+100
View File
@@ -0,0 +1,100 @@
name: Deploy website to GitHub Pages
on:
# Runs on pushes targeting the default branch
push:
branches: [develop]
paths:
- "sites/promo/**"
- "sites/docs/**"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- ".github/workflows/pages.yml"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment per the "pages" group, skipping runs queued
# between the in-progress run and the latest queued one. cancel-in-progress defaults
# to false, so in-flight production deployments are allowed to complete.
concurrency: "pages"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "pnpm"
# Only install the promo site (radiant) and docs site (docs-next) and their
# dependencies so the public website deploy stays decoupled from the
# server/desktop build pipelines.
- name: Install dependencies
run: pnpm install --filter radiant... --filter docs-next...
- name: Setup Pages
id: setup_pages
uses: actions/configure-pages@v5
- name: Restore cache
uses: actions/cache@v4
with:
path: |
sites/promo/.next/cache
# Generate a new cache whenever packages or source files change.
key: ${{ runner.os }}-nextjs-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('sites/promo/**.[jt]s', 'sites/promo/**.[jt]sx') }}
# If source files changed but packages didn't, rebuild from a prior cache.
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('pnpm-lock.yaml') }}-
- name: Build promo site with Next.js
working-directory: sites/promo
run: pnpm run build
env:
PAGES_BASE_PATH: ${{ steps.setup_pages.outputs.base_path }}
- name: Build docs site with Astro
working-directory: sites/docs
run: pnpm run build
# Nest the Starlight docs (built with base: "/docs") inside the promo export
# so both ship from a single GitHub Pages deployment at /docs.
- name: Assemble docs into /docs
run: |
rm -rf sites/promo/out/docs
mkdir -p sites/promo/out/docs
cp -r sites/docs/dist/. sites/promo/out/docs/
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: sites/promo/out
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
@@ -1,12 +1,24 @@
name: CI
name: Server CI
on:
push:
branches:
- develop
branches: [develop]
paths:
- "server/**"
- "libraries/base/**"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- ".github/workflows/server-ci.yml"
pull_request:
branches:
- develop
branches: [develop]
paths:
- "server/**"
- "libraries/base/**"
- "package.json"
- "pnpm-lock.yaml"
- "pnpm-workspace.yaml"
- ".github/workflows/server-ci.yml"
permissions:
contents: read
@@ -18,8 +30,6 @@ jobs:
steps:
- name: Check out the repo
uses: actions/checkout@v4
with:
submodules: true
- name: Install pnpm
uses: pnpm/action-setup@v4
@@ -34,6 +44,7 @@ jobs:
run: pnpm install
- name: Typecheck
working-directory: server
run: pnpm run typecheck
lint:
@@ -42,8 +53,6 @@ jobs:
steps:
- name: Check out the repo
uses: actions/checkout@v4
with:
submodules: true
- name: Install pnpm
uses: pnpm/action-setup@v4
@@ -58,4 +67,5 @@ jobs:
run: pnpm install
- name: Lint
working-directory: server
run: pnpm run lint
@@ -1,4 +1,4 @@
name: Release Workflow
name: Build and release server
on:
workflow_dispatch: {}
@@ -29,7 +29,6 @@ jobs:
- name: Check out the repo
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 3 # fix for when this gets triggered by tag
fetch-tags: true
ref: ${{ github.ref }}
+2 -39
View File
@@ -1,39 +1,2 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
.yarn
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example
.data
# deploy template
deploy-template/*
!deploy-template/compose.yml
# generated prisma client
/prisma/client
/prisma/validate
/server/internal/proto
dist/
node_modules/
-6
View File
@@ -1,6 +0,0 @@
[submodule "drop-base"]
path = drop-base
url = https://github.com/Drop-OSS/drop-base.git
[submodule "torrential"]
path = torrential
url = https://github.com/Drop-OSS/torrential.git
+49 -19
View File
@@ -1,13 +1,15 @@
# syntax=docker/dockerfile:1
FROM node:lts-alpine AS base
# Pinned to bookworm so the glibc here matches the torrential build stage
# and the libarchive runtime package is named `libarchive13` (trixie renames it to libarchive13t64).
FROM node:lts-bookworm-slim AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
WORKDIR /app
## so corepack knows pnpm's version
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY . .
## prevent prompt to download
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
## setup for offline
@@ -20,12 +22,18 @@ FROM base AS deps
RUN pnpm install --frozen-lockfile --ignore-scripts
### BUILD TORRENTIAL
FROM rustlang/rust:nightly-alpine AS torrential-build
RUN apk add musl-dev
# Bookworm-pinned to match the runtime image's glibc (a trixie build would not run on bookworm).
FROM rustlang/rust:nightly-bookworm-slim AS torrential-build
## libarchive-dev + pkg-config let libarchive3-sys link libarchive dynamically (glibc).
## protobuf-compiler is kept for parity (torrential's build.rs uses a vendored protoc).
RUN apt-get update && apt-get install -y --no-install-recommends \
pkg-config \
libarchive-dev \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
COPY torrential .
RUN apk add protoc
RUN cargo build --release
COPY . .
RUN cargo build --release --manifest-path ./torrential/Cargo.toml
### BUILD APP
FROM base AS build-system
@@ -34,17 +42,19 @@ ENV NODE_ENV=production
ENV NUXT_TELEMETRY_DISABLED=1
## add git so drop can determine its git ref at build
RUN apk add --no-cache git
RUN apt-get update && apt-get install -y --no-install-recommends git \
&& rm -rf /var/lib/apt/lists/*
## copy deps and rest of project files
COPY --from=deps /app/node_modules ./node_modules
COPY . .
COPY --from=deps /app/node_modules ./node_modules
ARG BUILD_DROP_VERSION
ARG BUILD_GIT_REF
## build
RUN pnpm run postinstall && pnpm run build
RUN pnpm run --filter=drop postinstall && pnpm run --filter=drop build
# create run environment for Drop
@@ -53,23 +63,43 @@ FROM base AS run-system
ENV NODE_ENV=production
ENV NUXT_TELEMETRY_DISABLED=1
# The base stage's `COPY . .` puts the whole repo into the runtime WORKDIR (/app),
# but at runtime only the artifacts copied explicitly below are needed. Drop the
# inherited `torrential` source dir: the service resolves the binary by scanning
# the cwd for `torrential`, and a directory there is spawned as ./torrential and
# fails with EACCES. With it gone, resolution falls through to the `torrential`
# binary installed on PATH (/usr/bin/torrential) below.
RUN rm -rf /app/torrential
# RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn yarn add --network-timeout 1000000 --no-lockfile --ignore-scripts prisma@6.11.1
RUN apk add --no-cache pnpm 7zip nginx
RUN pnpm install prisma@7.3.0
## runtime deps:
## - libarchive13: torrential now links libarchive dynamically (glibc build)
## - p7zip-full: provides the 7z CLI
## - nginx: front-end proxy
## - openssl + ca-certificates: required by Prisma's query engine on Debian
## pnpm itself is provided by corepack (enabled in the base stage)
RUN apt-get update && apt-get install -y --no-install-recommends \
libarchive13 \
p7zip-full \
nginx \
openssl \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN pnpm install prisma@7.7.0 --global
# init prisma to download all required files
RUN pnpm prisma init
COPY --from=build-system /app/prisma.config.ts ./
COPY --from=build-system /app/.output ./app
COPY --from=build-system /app/prisma ./prisma
COPY --from=build-system /app/build ./startup
COPY --from=build-system /app/build/nginx.conf /nginx.conf
COPY --from=torrential-build /build/target/release/torrential /usr/bin/
COPY --from=build-system /app/server/prisma.config.ts ./
COPY --from=build-system /app/server/.output ./app
COPY --from=build-system /app/server/prisma ./prisma
COPY --from=build-system /app/server/build ./startup
COPY --from=build-system /app/server/build/nginx.conf /nginx.conf
COPY --from=torrential-build /build/torrential/target/release/torrential /usr/bin/
ENV LIBRARY="/library"
ENV DATA="/data"
ENV NGINX_CONFIG="/nginx.conf"
# NGINX's port
# Nuxt's port
ENV PORT=4000
CMD ["sh", "/app/startup/launch.sh"]
+2 -2
View File
@@ -6,7 +6,7 @@
# Drop
[![Website](https://img.shields.io/badge/website-000000?style=for-the-badge&logo=About.me&logoColor=white)](https://droposs.org)
[![Docs](https://img.shields.io/badge/DOCS-black?style=for-the-badge&logo=docusaurus)](https://docs.droposs.org/)
[![Docs](https://img.shields.io/badge/DOCS-black?style=for-the-badge&logo=docusaurus)](https://droposs.org/docs)
[![Static Badge](https://img.shields.io/badge/FORUM-blue?style=for-the-badge)](https://forum.droposs.org)
[![GitHub License](https://img.shields.io/badge/AGPL--3.0-red?style=for-the-badge)](LICENSE)
[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/ACq4qZp4a9)
@@ -28,7 +28,7 @@ Drop is an open-source game distribution platform, similar to GameVault or Steam
## Deployment
See our documentation on how to [deploy Drop](https://docs.droposs.org/docs/guides/quickstart) for more information.
See our documentation on how to [deploy Drop](https://droposs.org/docs/admin/quickstart) for more information.
## Contributing
+1 -1
View File
@@ -2,4 +2,4 @@
To report a vulnerability, please DO NOT create an issue for it
as this may lead to the vulnerability being exploited before it
can be fixed. Instead, please email [security@deepcore.dev](mailto:security@deepcore.dev)
can be fixed. Instead, please email [security@droposs.org](mailto:security@droposs.org)
+1
View File
@@ -0,0 +1 @@
/bin
+19
View File
@@ -0,0 +1,19 @@
package core
import (
"context"
"fmt"
"os"
"github.com/jackc/pgx/v5"
)
func connect() {
conn, err := pgx.Connect(context.Background(), os.Getenv("DATABASE_URL"))
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
os.Exit(1)
}
defer conn.Close(context.Background())
}
+10
View File
@@ -0,0 +1,10 @@
module drop/core
go 1.26.1
require (
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/pgx/v5 v5.9.1 // indirect
golang.org/x/text v0.29.0 // indirect
)
+15
View File
@@ -0,0 +1,15 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.9.1 h1:uwrxJXBnx76nyISkhr33kQLlUqjv7et7b9FjCen/tdc=
github.com/jackc/pgx/v5 v5.9.1/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+5
View File
@@ -0,0 +1,5 @@
module drop
go 1.26.1
require github.com/gorilla/mux v1.8.1
+2
View File
@@ -0,0 +1,2 @@
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
+3
View File
@@ -0,0 +1,3 @@
go 1.26.1
use ./core
+9
View File
@@ -0,0 +1,9 @@
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+37
View File
@@ -0,0 +1,37 @@
package main
import (
"fmt"
"log"
"net/http"
"strings"
"github.com/gorilla/mux"
)
func handler(res http.ResponseWriter, req *http.Request) {
fmt.Fprintf(res, "G'day there mate")
}
func routingMiddleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
url := *r.URL
url.Path = strings.TrimSuffix(r.URL.Path, "/")
r.URL = &url
h.ServeHTTP(w, r)
})
}
func main() {
r := mux.NewRouter().StrictSlash(true)
r.Use(routingMiddleware)
r.HandleFunc("/api/v1", handler)
srv := &http.Server{
Addr: ":3433",
Handler: r,
}
log.Printf("starting drop server on :3433")
srv.ListenAndServe()
}
-544
View File
@@ -1,544 +0,0 @@
## Release 0.2.0-beta
### Fixes
- fix recursive dirs util #02d6346
- Fix username length requirement #0a5a649
- remove dynamic imports #0f10626
- fix for missing developers or publishers #25fc957
- split prisma schemas #2859005
- results are returned alphabetically #33d3770
- update prisma schemas #36776cc
- removed global flag #43e32b4
- properly disconnect websockets from task handler #5358f1f
- follow best practices #54c5d55
- future lenience #5c78b20
- fix width of token breaking things #61d88c3
- fixed websocket authentication #62ea9a1
- fix delta manifest generation #6df560c
- admin invitation w/ system user #8463e35
- properly import icons #8945196
- prisma create footprint #952ece8
- game panel now always shows 3 lines exactly #9c2249e
- remove unnecessary import #a361c38
- fix disconnect code #a8f2106
- fix types #b511b40
- add drop-base as git submodule #b75ebd1
- Update README.md with discord link #c6bb21d
- fix expires requirement in the admin endpoint #c7b675f
- fix always being created as admin #c7eb11a
- moved icons and created PlatformClient so we can use the enum on the frontend #cada630
- recurse submodules #db103de
- fix FATAL: "root"... message #dbb315a
- only show versions that are directories #ef8f3ae
### Features
- update prisma & delete games #089c3e0
- manual handshake #12e3125
- fetch game endpoint #1f4d075
- under the hood organisation and consolidation #26a31f6
- 'no images' slide on image carousel #28baabc
- improve feedback when metadata fails #2c19e13
- introduction of 'system user' #2c21a23
- change name, description and icon #2cfe75a
- 'manual' metadata provider #2f52a16
- add disabled state #38fc6b8
- overhauled version importing #39d7ce7
- automatically create library folder if it doesn't exist #39fe9d5
- smoother bar in admin task ui #4488ae2
- add noWrapper option #4f9b949
- add version metadata route #5393db3
- completed admin UI, with minor changes to backend #599da0e
- adjust gradient #5a1f841
- keep track of last connected #69e4c25
- added notification system w/ interwoven refactoring #6e6f09d
- content length header for chunk downloads #76bceb1
- add title to tab #7b0756c
- add button to open in admin panel #7b3b919
- client capability framework + peer API configuration #7d72a86
- customisable image carousel and new layout #937954f
- support more types #9b12d45
- generate a server certificate for mtls APIs #9c4b6f3
- new endpoints, ui and beginnings of main store page #9cbdcbc
- backend #a309651
- more subtle design improvements #a815542
- add aden's carousel pagination design #a86045c
- add header #a8a152e
- client side search #b50e27f
- new ws handler #bc0c47c
- user widget now redirects to actual page #bfafe02
- require lowercase usernames #d7160ab
- more ui improvements #e408ac5
- add modifying game descriptions #e505e58
- mobile nav #e5cf13f
- slightly improved game page #e796b46
- game carousel #ecc819e
- add enum dictionary type #f2e0182
- improved ux #f3ed0f6
- cleanup and raw accessors #f7d767d
- add support for overriding UMU id #fd4a7d1
- add .sh for linux #fe9373a
### Other Changes
- quexeky <git@quexeky.dev>
- fixed manifest generation #03a37f7
- manual ci/cd #03b0b0c
- ability to fetch client certs for p2p #0a715fe
- disable tls in build #0f80fcd
- Updated README.md #17971e0
- Merge pull request #18 from Drop-OSS/develop
- initial work on metadata system #196f87c
- more ui #1bd19ad
- remove log statements #1d5e1bd
- small fixes & SSR disabled #1f575b2
- update information and setup guide #2236622
- metadata engine #22ac7f6
- Update CONTRIBUTING.md #2309407
- slight bug fixes and clean up #24a0d11
- almst complete admin ui and initial store designs #27070b6
- handshakes #2b4382d
- user mobile header #2e44ef3
- more consistent naming for globals #305de9f
- replaced markdown-it with micromark #31e8359
- fixes to store page for mobile clients #328b9ba
- game version re-ordering #329c74d
- verbose yarn install #36568c3
- patch for no version check in manifest generation #395219d
- migrate bcrypt to bcryptjs #3a51c9c
- added download chunk endpoint #3dd6062
- Update README.md #425934d
- build only ci #4273a20
- object storage + full permission system + testing #435551c
- rename admin socket session map #44c6028
- bump droplet and add vue carousel #46551f9
- version importing #46c8f0c
- back to yarn, with nuxt telemetry force disabled #46d35ad
- finished object endpoints #486bce8
- update dependencies and add note about optional dependencies #4fa771a
- use configuration from docs for ci/cd #52315d0
- slight fixes to register logic #583301f
- removed yarn.lock #584bcf1
- Version bump #5f29c28
- immutable application settings framework #5fe2036
- fixed docker daemon location #62a111b
- copy autodevops configuration #6328c24
- Delete .gitlab-ci.yml #69f341b
- admin ui shell #6b5e48d
- bump @drop/droplet version for windows developers #6ba5cdd
- Add LICENSE #6e2dc89
- custom dind #716eac7
- task API #718f5ba
- use gitlab ci variable declaration #7194d35
- move icons into dedicated folder #74fa671
- another stage of client authentication #7523e53
- refactoring #7869043
- moved windows logo into logos dir #789d3ba
- updated text colours across app #7a88f4c
- starting docs infra #7d2a1c6
- more cleaning #7e17626
- slight patch to rename query to be more consistent #7f4db0c
- move to raw docker #803752e
- server side and user client side completed for registration #848a611
- beginnings of download implementation #8674ac7
- more consistent naming for object handler #87230fb
- use autodevops build stage #886beb6
- Updated tailwind config #88c95d6
- change name of store file #8999303
- split prisma schemas #9011cf5
- client initiate #909432a
- more client routes to support Drop app update #91b7e10
- additional polish and QoL features #93bc143
- upload images to games #9b7ee4e
- migrate to pnpm due to ci/cd issues with yarn #9cb2d6d
- run yarn install in CI/CD non interactively #a208fbe
- completed game importing; partial work on version importing #a7c33e7
- remove canvas from dependencies #a8f58eb
- fix registry authentication #ad25d3e
- consolidate type utils #adb4b73
- Updated README.md #b0ef675
- add proper carousel to store page #b2ab827
- move to yarn v2 #b744671
- remove client API deadweight #b9ae26c
- add expires field #be6c30d
- ca groundwork #bfafd2a
- cleanup & polish #c355f6f
- remove bcrypt (debug) #c3914cc
- non rounded bottom #c4391d3
- failed gracefully on invalid chunk index #c4a3e4e
- update deploy template #c4a419f
- migrate to new droplet ca system #c4d8113
- docker based deployment #c5d00b4
- updated CONTRIBUTING.md #cd0d2bf
- update prisma version #ce0a9ab
- README update #ceacd84
- patch metadata handler #cf578bd
- Added SECURITY.md #d3d93b0
- finalised client APIs and authentication method #d4e2dc8
- Update README.md #db916bf
- object storage interface + utility functions #de388a9
- initial commit #e1a789f
- fixed task system #e1c1d7e
- Update file chunk.get.ts #e4339c3
- ui groundwork #e52f072
- Update changelog #eadcaa1
- check for no version in manifest generation #eb3f9f9
- break into single column store on lg devices #ecb381e
- better server side signin redirects #ef13b68
- patch signin #f3672f8
_changelog generated by_ [go-conventional-commits](https://github.com/joselitofilho/go-conventional-commits)
## Release 0.2.0-beta
### Fixes
- fix recursive dirs util #02d6346
- Fix username length requirement #0a5a649
- remove dynamic imports #0f10626
- fix for missing developers or publishers #25fc957
- split prisma schemas #2859005
- results are returned alphabetically #33d3770
- update prisma schemas #36776cc
- removed global flag #43e32b4
- properly disconnect websockets from task handler #5358f1f
- follow best practices #54c5d55
- future lenience #5c78b20
- fix width of token breaking things #61d88c3
- fixed websocket authentication #62ea9a1
- fix delta manifest generation #6df560c
- admin invitation w/ system user #8463e35
- properly import icons #8945196
- prisma create footprint #952ece8
- game panel now always shows 3 lines exactly #9c2249e
- remove unnecessary import #a361c38
- fix disconnect code #a8f2106
- fix types #b511b40
- add drop-base as git submodule #b75ebd1
- Update README.md with discord link #c6bb21d
- fix expires requirement in the admin endpoint #c7b675f
- fix always being created as admin #c7eb11a
- moved icons and created PlatformClient so we can use the enum on the frontend #cada630
- recurse submodules #db103de
- fix FATAL: "root"... message #dbb315a
- only show versions that are directories #ef8f3ae
### Features
- update prisma & delete games #089c3e0
- manual handshake #12e3125
- fetch game endpoint #1f4d075
- under the hood organisation and consolidation #26a31f6
- 'no images' slide on image carousel #28baabc
- improve feedback when metadata fails #2c19e13
- introduction of 'system user' #2c21a23
- change name, description and icon #2cfe75a
- 'manual' metadata provider #2f52a16
- add disabled state #38fc6b8
- overhauled version importing #39d7ce7
- automatically create library folder if it doesn't exist #39fe9d5
- smoother bar in admin task ui #4488ae2
- add noWrapper option #4f9b949
- add version metadata route #5393db3
- completed admin UI, with minor changes to backend #599da0e
- adjust gradient #5a1f841
- keep track of last connected #69e4c25
- added notification system w/ interwoven refactoring #6e6f09d
- content length header for chunk downloads #76bceb1
- add title to tab #7b0756c
- add button to open in admin panel #7b3b919
- client capability framework + peer API configuration #7d72a86
- customisable image carousel and new layout #937954f
- support more types #9b12d45
- generate a server certificate for mtls APIs #9c4b6f3
- new endpoints, ui and beginnings of main store page #9cbdcbc
- backend #a309651
- more subtle design improvements #a815542
- add aden's carousel pagination design #a86045c
- add header #a8a152e
- client side search #b50e27f
- new ws handler #bc0c47c
- user widget now redirects to actual page #bfafe02
- require lowercase usernames #d7160ab
- more ui improvements #e408ac5
- add modifying game descriptions #e505e58
- mobile nav #e5cf13f
- slightly improved game page #e796b46
- game carousel #ecc819e
- add enum dictionary type #f2e0182
- improved ux #f3ed0f6
- cleanup and raw accessors #f7d767d
- add support for overriding UMU id #fd4a7d1
- add .sh for linux #fe9373a
### Other Changes
- quexeky <git@quexeky.dev>
- fixed manifest generation #03a37f7
- manual ci/cd #03b0b0c
- ability to fetch client certs for p2p #0a715fe
- disable tls in build #0f80fcd
- Updated README.md #17971e0
- Merge pull request #18 from Drop-OSS/develop
- initial work on metadata system #196f87c
- more ui #1bd19ad
- remove log statements #1d5e1bd
- small fixes & SSR disabled #1f575b2
- update information and setup guide #2236622
- metadata engine #22ac7f6
- Update CONTRIBUTING.md #2309407
- slight bug fixes and clean up #24a0d11
- almst complete admin ui and initial store designs #27070b6
- handshakes #2b4382d
- user mobile header #2e44ef3
- more consistent naming for globals #305de9f
- replaced markdown-it with micromark #31e8359
- fixes to store page for mobile clients #328b9ba
- game version re-ordering #329c74d
- verbose yarn install #36568c3
- patch for no version check in manifest generation #395219d
- migrate bcrypt to bcryptjs #3a51c9c
- added download chunk endpoint #3dd6062
- Update README.md #425934d
- build only ci #4273a20
- object storage + full permission system + testing #435551c
- rename admin socket session map #44c6028
- bump droplet and add vue carousel #46551f9
- version importing #46c8f0c
- back to yarn, with nuxt telemetry force disabled #46d35ad
- finished object endpoints #486bce8
- update dependencies and add note about optional dependencies #4fa771a
- use configuration from docs for ci/cd #52315d0
- slight fixes to register logic #583301f
- removed yarn.lock #584bcf1
- Version bump #5f29c28
- immutable application settings framework #5fe2036
- fixed docker daemon location #62a111b
- copy autodevops configuration #6328c24
- Delete .gitlab-ci.yml #69f341b
- admin ui shell #6b5e48d
- bump @drop/droplet version for windows developers #6ba5cdd
- Add LICENSE #6e2dc89
- custom dind #716eac7
- task API #718f5ba
- use gitlab ci variable declaration #7194d35
- move icons into dedicated folder #74fa671
- another stage of client authentication #7523e53
- refactoring #7869043
- moved windows logo into logos dir #789d3ba
- updated text colours across app #7a88f4c
- starting docs infra #7d2a1c6
- more cleaning #7e17626
- slight patch to rename query to be more consistent #7f4db0c
- move to raw docker #803752e
- server side and user client side completed for registration #848a611
- beginnings of download implementation #8674ac7
- more consistent naming for object handler #87230fb
- use autodevops build stage #886beb6
- Updated tailwind config #88c95d6
- change name of store file #8999303
- split prisma schemas #9011cf5
- client initiate #909432a
- more client routes to support Drop app update #91b7e10
- additional polish and QoL features #93bc143
- upload images to games #9b7ee4e
- migrate to pnpm due to ci/cd issues with yarn #9cb2d6d
- run yarn install in CI/CD non interactively #a208fbe
- completed game importing; partial work on version importing #a7c33e7
- remove canvas from dependencies #a8f58eb
- fix registry authentication #ad25d3e
- consolidate type utils #adb4b73
- Updated README.md #b0ef675
- add proper carousel to store page #b2ab827
- move to yarn v2 #b744671
- remove client API deadweight #b9ae26c
- add expires field #be6c30d
- ca groundwork #bfafd2a
- cleanup & polish #c355f6f
- remove bcrypt (debug) #c3914cc
- non rounded bottom #c4391d3
- failed gracefully on invalid chunk index #c4a3e4e
- update deploy template #c4a419f
- migrate to new droplet ca system #c4d8113
- docker based deployment #c5d00b4
- updated CONTRIBUTING.md #cd0d2bf
- update prisma version #ce0a9ab
- README update #ceacd84
- patch metadata handler #cf578bd
- Added SECURITY.md #d3d93b0
- finalised client APIs and authentication method #d4e2dc8
- Update README.md #db916bf
- object storage interface + utility functions #de388a9
- initial commit #e1a789f
- fixed task system #e1c1d7e
- Update file chunk.get.ts #e4339c3
- ui groundwork #e52f072
- Update changelog #eadcaa1
- check for no version in manifest generation #eb3f9f9
- break into single column store on lg devices #ecb381e
- better server side signin redirects #ef13b68
- patch signin #f3672f8
_changelog generated by_ [go-conventional-commits](https://github.com/joselitofilho/go-conventional-commits)
## Release 0.1.0-beta
### Fixes
- remove dynamic imports #0f10626
- fix for missing developers or publishers #25fc957
- split prisma schemas #2859005
- results are returned alphabetically #33d3770
- properly disconnect websockets from task handler #5358f1f
- follow best practices #54c5d55
- future lenience #5c78b20
- fixed websocket authentication #62ea9a1
- fix delta manifest generation #6df560c
- admin invitation w/ system user #8463e35
- properly import icons #8945196
- prisma create footprint #952ece8
- game panel now always shows 3 lines exactly #9c2249e
- remove unnecessary import #a361c38
- fix types #b511b40
- fix expires requirement in the admin endpoint #c7b675f
- moved icons and created PlatformClient so we can use the enum on the frontend #cada630
- only show versions that are directories #ef8f3ae
### Features
- update prisma & delete games #089c3e0
- fetch game endpoint #1f4d075
- under the hood organisation and consolidation #26a31f6
- introduction of 'system user' #2c21a23
- automatically create library folder if it doesn't exist #39fe9d5
- smoother bar in admin task ui #4488ae2
- add version metadata route #5393db3
- completed admin UI, with minor changes to backend #599da0e
- keep track of last connected #69e4c25
- added notification system w/ interwoven refactoring #6e6f09d
- content length header for chunk downloads #76bceb1
- add title to tab #7b0756c
- add button to open in admin panel #7b3b919
- client capability framework + peer API configuration #7d72a86
- generate a server certificate for mtls APIs #9c4b6f3
- new endpoints, ui and beginnings of main store page #9cbdcbc
- more subtle design improvements #a815542
- add header #a8a152e
- client side search #b50e27f
- new ws handler #bc0c47c
- user widget now redirects to actual page #bfafe02
- require lowercase usernames #d7160ab
- more ui improvements #e408ac5
- slightly improved game page #e796b46
- game carousel #ecc819e
- add enum dictionary type #f2e0182
- cleanup and raw accessors #f7d767d
- add support for overriding UMU id #fd4a7d1
### Other Changes
- quexeky <git@quexeky.dev>
- fixed manifest generation #03a37f7
- manual ci/cd #03b0b0c
- ability to fetch client certs for p2p #0a715fe
- disable tls in build #0f80fcd
- Updated README.md #17971e0
- initial work on metadata system #196f87c
- more ui #1bd19ad
- remove log statements #1d5e1bd
- small fixes & SSR disabled #1f575b2
- update information and setup guide #2236622
- metadata engine #22ac7f6
- Update CONTRIBUTING.md #2309407
- slight bug fixes and clean up #24a0d11
- almst complete admin ui and initial store designs #27070b6
- handshakes #2b4382d
- user mobile header #2e44ef3
- more consistent naming for globals #305de9f
- replaced markdown-it with micromark #31e8359
- fixes to store page for mobile clients #328b9ba
- game version re-ordering #329c74d
- verbose yarn install #36568c3
- patch for no version check in manifest generation #395219d
- migrate bcrypt to bcryptjs #3a51c9c
- added download chunk endpoint #3dd6062
- Update README.md #425934d
- build only ci #4273a20
- object storage + full permission system + testing #435551c
- rename admin socket session map #44c6028
- bump droplet and add vue carousel #46551f9
- version importing #46c8f0c
- back to yarn, with nuxt telemetry force disabled #46d35ad
- finished object endpoints #486bce8
- update dependencies and add note about optional dependencies #4fa771a
- use configuration from docs for ci/cd #52315d0
- slight fixes to register logic #583301f
- removed yarn.lock #584bcf1
- Version bump #5f29c28
- immutable application settings framework #5fe2036
- fixed docker daemon location #62a111b
- copy autodevops configuration #6328c24
- Delete .gitlab-ci.yml #69f341b
- admin ui shell #6b5e48d
- bump @drop/droplet version for windows developers #6ba5cdd
- Add LICENSE #6e2dc89
- task API #718f5ba
- use gitlab ci variable declaration #7194d35
- move icons into dedicated folder #74fa671
- another stage of client authentication #7523e53
- refactoring #7869043
- moved windows logo into logos dir #789d3ba
- updated text colours across app #7a88f4c
- starting docs infra #7d2a1c6
- more cleaning #7e17626
- slight patch to rename query to be more consistent #7f4db0c
- move to raw docker #803752e
- server side and user client side completed for registration #848a611
- beginnings of download implementation #8674ac7
- more consistent naming for object handler #87230fb
- use autodevops build stage #886beb6
- Updated tailwind config #88c95d6
- change name of store file #8999303
- split prisma schemas #9011cf5
- client initiate #909432a
- more client routes to support Drop app update #91b7e10
- additional polish and QoL features #93bc143
- upload images to games #9b7ee4e
- migrate to pnpm due to ci/cd issues with yarn #9cb2d6d
- run yarn install in CI/CD non interactively #a208fbe
- completed game importing; partial work on version importing #a7c33e7
- remove canvas from dependencies #a8f58eb
- fix registry authentication #ad25d3e
- consolidate type utils #adb4b73
- Updated README.md #b0ef675
- add proper carousel to store page #b2ab827
- move to yarn v2 #b744671
- remove client API deadweight #b9ae26c
- add expires field #be6c30d
- ca groundwork #bfafd2a
- cleanup & polish #c355f6f
- remove bcrypt (debug) #c3914cc
- non rounded bottom #c4391d3
- failed gracefully on invalid chunk index #c4a3e4e
- update deploy template #c4a419f
- migrate to new droplet ca system #c4d8113
- docker based deployment #c5d00b4
- updated CONTRIBUTING.md #cd0d2bf
- update prisma version #ce0a9ab
- README update #ceacd84
- patch metadata handler #cf578bd
- Added SECURITY.md #d3d93b0
- finalised client APIs and authentication method #d4e2dc8
- Update README.md #db916bf
- object storage interface + utility functions #de388a9
- initial commit #e1a789f
- fixed task system #e1c1d7e
- Update file chunk.get.ts #e4339c3
- ui groundwork #e52f072
- check for no version in manifest generation #eb3f9f9
- break into single column store on lg devices #ecb381e
- better server side signin redirects #ef13b68
- patch signin #f3672f8
_changelog generated by_ [go-conventional-commits](https://github.com/joselitofilho/go-conventional-commits)
+1
View File
@@ -0,0 +1 @@
use flake
+4
View File
@@ -0,0 +1,4 @@
/target
logs/
.vscode
.direnv
+3396
View File
File diff suppressed because it is too large Load Diff
+27
View File
@@ -0,0 +1,27 @@
[package]
name = "downpour"
version = "0.1.0"
edition = "2024"
[dependencies]
anyhow = "1.0.100"
async-trait = "0.1.89"
chrono = "0.4.43"
clap = { version = "4.5.54", features = ["derive"] }
console = "0.16.2"
dialoguer = "0.12.0"
dirs = "6.0.0"
droplet-rs = { path = "../libraries/droplet" }
fern = { version = "0.7.1", features = ["colored"] }
futures = "0.3.31"
indicatif = "0.18.3"
log = "0.4.29"
opendal = { version = "0.55.0", features = ["services-s3"] }
rand = "0.9.2"
reqwest = { version = "0.13.1", features = ["json"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.148"
tokio = { version = "1.48.0", features = ["fs", "macros"] }
tokio-util = { version = "0.7.18", features = ["compat"] }
url = "2.5.8"
webbrowser = "1.0.6"
+3
View File
@@ -0,0 +1,3 @@
# CLI (`downpour`)
The cli way to access Drop. Used for admin tasks that require local access, like uploading game content.
+96
View File
@@ -0,0 +1,96 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1768564909,
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1768704795,
"narHash": "sha256-Y33TAp2BHEcuspYvcmBXXD0qdvjftv73PwyKTDOjoSY=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "4b7472a78857ac789fb26616040f55cfcbd36c6e",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
+52
View File
@@ -0,0 +1,52 @@
{
description = "Drop-OSS app development environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs =
{
self,
nixpkgs,
flake-utils,
rust-overlay,
}:
flake-utils.lib.eachDefaultSystem (
system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs {
inherit system overlays;
};
libraries = with pkgs; [
glib
glibc
openssl
];
in
{
devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
pkg-config
git
rust-bin.nightly.latest.default
rust-analyzer
cargo-expand
];
buildInputs = libraries;
shellHook = ''
export LD_LIBRARY_PATH="${
pkgs.lib.makeLibraryPath libraries
}:$LD_LIBRARY_PATH"
echo "Downpour development environment loaded"
'';
};
}
);
}
+2
View File
@@ -0,0 +1,2 @@
[toolchain]
channel = "nightly"
+10
View File
@@ -0,0 +1,10 @@
# Downpour CLI spec
`downpour [command] --opts`
## Commands:
- new <path/s3 name> <public endpoint> - creates/initalizes a depot at the endpoint. Creates manifest.json and speedtest
- connect <s3 endpoint> <key> <secret> [name] - connects to an s3 endpoint and saves the endpoint to some sort of credentials file. Name is either as provided or the hostname of the endpoint
- upload <game id> <localpath> <path/s3 name> - uploads game as described before. Should fail if depot isn't initialized with new from above
- copy <game id> <version id> <src path/s3 name> <dest path/s3 name> - copies between two depots
- mark [exists/absent] <game id> <version id> <path/s3 name> - modifies depot's manifest.json to show content exists or is absent without copying (for third party copies)
- rename <public endpoint> <new public endpoint> - renames an endpoint [NEEDS API ROUTES - can't do yet]
- delete <public endpoint> - delete an endpoint [NEEDS API ROUTES - can't do yet]
+69
View File
@@ -0,0 +1,69 @@
use clap::{Args, Parser, Subcommand, ValueEnum};
use crate::{commands::connect::config_option::ConfigOptionCli, interactive_variable};
#[derive(Parser)]
#[command(version, about, long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
/// Specify data file path
#[arg(short, long)]
pub data: Option<String>,
}
#[derive(Subcommand)]
pub enum Commands {
/// Configures downpour endpoints
Connect {
#[arg(short, long)]
name: Option<String>,
#[command(subcommand)]
option: ConfigOptionCli,
},
/// Uploads new game version to depot
Upload {
#[clap(flatten)]
info: UploadInfoCli,
#[arg(short, long)]
/// Alias of a given connection
name: Option<String>,
},
}
#[derive(Args)]
pub struct UploadInfo {
pub path: String,
pub game_id: String,
pub version_id: String,
}
#[derive(Args)]
pub struct UploadInfoCli {
/// Relative path to new version files
#[arg(short, long, default_value_t = String::from("."))]
pub path: String,
/// ID of game to attach to
#[arg(short, long)]
pub game_id: Option<String>,
/// Version ID to attach to
#[arg(short, long)]
pub version_id: Option<String>,
}
impl UploadInfoCli {
pub fn interactive_configure(self) -> UploadInfo {
let path = self.path;
interactive_variable!(self, game_id, "Game ID");
interactive_variable!(self, version_id, "Version ID");
UploadInfo {
path,
game_id,
version_id,
}
}
}
#[derive(ValueEnum, Copy, Clone, Debug, PartialEq, Eq)]
pub enum UploadStyle {
S3,
}
+152
View File
@@ -0,0 +1,152 @@
use crate::{
commands::connect::{
config_option::{ConfigOption, ConfigOptionCli},
configurable::Configure,
speedtest::{SPEEDTEST_PATH, Speedtest},
},
manifest::DepotManifest,
};
use dialoguer::{Confirm, theme::ColorfulTheme};
use futures::AsyncWriteExt;
use indicatif::{ProgressBar, ProgressStyle};
use log::{debug, info};
use opendal::Operator;
use serde::{Deserialize, Serialize};
use std::{collections::HashMap, fs, ops::Not};
use tokio_util::compat::FuturesAsyncWriteCompatExt;
const CONFIG_DIR: &str = "downpour/config.json";
#[derive(Serialize, Deserialize)]
pub struct Config {
configurations: HashMap<String, ConfigOption>,
active: Option<String>,
}
impl Config {
pub fn new() -> Self {
Self {
configurations: HashMap::new(),
active: None,
}
}
pub fn exists(&self, name: &String) -> bool {
self.configurations.contains_key(name)
}
pub fn save(&self) -> anyhow::Result<()> {
let json = serde_json::to_string(self)?;
let save_path = dirs::config_dir()
.expect("Apparently your home directory doesn't exist") // Should probably formalise that error
.join(CONFIG_DIR);
fs::create_dir_all(save_path.parent().unwrap())?;
fs::write(save_path, json)?;
Ok(())
}
pub fn read() -> Self {
let save_path = dirs::config_dir()
.expect("Apparently your home directory doesn't exist") // Should probably formalise that error
.join(CONFIG_DIR);
if fs::exists(&save_path)
.unwrap_or_else(|_| panic!("Could not read save path {:#?}", &save_path))
{
serde_json::from_str(&fs::read_to_string(save_path).unwrap()).unwrap()
} else {
Config::new()
}
}
pub fn add_item(&mut self, name: String, object: ConfigOption) {
if matches!(object, ConfigOption::S3(..)) {
self.active = Some(name.clone())
}
self.configurations.insert(name, object);
self.save().expect("Failed to save config");
}
pub fn get_active(&self) -> Option<&ConfigOption> {
if let Some(active) = &self.active {
self.configurations.get(active)
} else {
None
}
}
pub fn get<T: AsRef<str>>(&self, name: T) -> Option<&ConfigOption> {
self.configurations.get(name.as_ref())
}
}
pub async fn manage_configuration(
config: &mut Config,
name: Option<String>,
option: ConfigOptionCli,
) -> anyhow::Result<()> {
let mut name = name;
if let Some(name) = &name
&& config.exists(name)
{
let confirm = Confirm::with_theme(&ColorfulTheme::default())
.with_prompt(format!(
"An entry already exists with the name \"{}\". Would you like to overwrite it?",
name
))
.interact()?;
if !confirm {
return Err(anyhow::anyhow!("User cancelled action"));
}
}
let config_option = match option {
ConfigOptionCli::S3(s3_config_cli) => s3_config_cli.clone().configure(&mut name).await?,
};
let name = name.expect("Default name was not provided by ConfigOption. This is a bug");
config.add_item(name, config_option.clone());
let operator = config_option.build()?;
generate_manifest(&operator).await?;
info!("Finished uploading manifest");
generate_speedtest(&operator).await?;
info!("Finished uploading speedtest");
Ok(())
}
async fn generate_speedtest(operator: &Operator) -> anyhow::Result<()> {
// Workaround to operator.exists("...") also logging a 404 warning
let lister = operator.list_with(SPEEDTEST_PATH).limit(1).await?;
if lister.is_empty().not() {
info!("Speedtest already exists on Depot. Skipping speedtest upload...");
return Ok(());
}
let mut writer = operator
.writer(SPEEDTEST_PATH)
.await?
.into_futures_async_write()
.compat_write();
let progress_bar = ProgressBar::new(10_000).with_style(
ProgressStyle::default_bar()
.template("[{elapsed_precise}] [ETA {eta}] {bar} {percent_precise}%")
.unwrap(),
);
let mut reader = Speedtest::new(|progress| {
let progress_int = (progress * 100f32).round() as u64;
progress_bar.set_position(progress_int);
});
let written = tokio::io::copy(&mut reader, &mut writer).await?;
progress_bar.finish();
debug!("Wrote {} bytes to {:?}", written, operator.info());
writer.into_inner().close().await?;
debug!("Closed writer");
Ok(())
}
async fn generate_manifest(operator: &Operator) -> anyhow::Result<()> {
let lister = operator.list_with("manifest.json").limit(1).await?;
if lister.is_empty().not() {
info!("Manifest already exists on Depot. Skipping manifest upload...");
return Ok(());
}
let data = DepotManifest::new();
operator
.write("manifest.json", serde_json::to_string(&data)?)
.await?;
Ok(())
}
+27
View File
@@ -0,0 +1,27 @@
use clap::Subcommand;
use opendal::{Operator, layers::LoggingLayer};
use serde::{Deserialize, Serialize};
use crate::{
commands::connect::s3::{S3Config, S3ConfigCli},
operator_builder::OperatorBuilder,
};
#[derive(Subcommand, Clone)]
pub enum ConfigOptionCli {
// Connect to any S3-compatible endpoint
S3(S3ConfigCli),
}
#[derive(Serialize, Deserialize, Clone)]
pub enum ConfigOption {
S3(S3Config),
}
impl ConfigOption {
pub fn build(&self) -> anyhow::Result<Operator> {
Ok(match self {
ConfigOption::S3(s3_config) => s3_config.build()?,
}
.layer(LoggingLayer::default()))
}
}
+5
View File
@@ -0,0 +1,5 @@
use crate::commands::connect::config_option::ConfigOption;
pub trait Configure {
async fn configure(self, name: &mut Option<String>) -> anyhow::Result<ConfigOption>;
}
+47
View File
@@ -0,0 +1,47 @@
use std::str::FromStr;
use dialoguer::{Input, theme::ColorfulTheme};
#[macro_export]
macro_rules! interactive_variable {
($value:ident, $var:ident, $prompt:expr) => {
let $var = if let Some($var) = $value.$var {
$var
} else {
$crate::commands::connect::interactive::query_variable($prompt).unwrap()
};
};
}
#[macro_export]
macro_rules! interactive_optional_variable {
($value:ident, $var:ident, $prompt:expr) => {
let $var = if let Some($var) = $value.$var {
Some($var)
} else {
$crate::commands::connect::interactive::query_optional_variable($prompt).unwrap()
};
};
}
pub fn query_variable<T: Clone + FromStr + ToString>(prompt: impl ToString) -> dialoguer::Result<T>
where
<T as FromStr>::Err: ToString,
{
Input::with_theme(&ColorfulTheme::default())
.with_prompt(prompt.to_string())
.interact_text()
}
pub fn query_optional_variable<T: Clone + FromStr + ToString>(
prompt: impl ToString,
) -> dialoguer::Result<Option<T>>
where
<T as FromStr>::Err: ToString,
{
let input: T = Input::with_theme(&ColorfulTheme::default())
.with_prompt(prompt.to_string())
.allow_empty(true)
.interact_text()?;
if input.to_string().is_empty() {
return Ok(None);
}
Ok(Some(input))
}
+7
View File
@@ -0,0 +1,7 @@
pub mod config;
pub mod configurable;
pub mod s3;
#[macro_use]
pub mod interactive;
pub mod config_option;
pub mod speedtest;
+67
View File
@@ -0,0 +1,67 @@
use clap::Args;
use opendal::Operator;
use serde::{Deserialize, Serialize};
use crate::{
commands::connect::{config_option::ConfigOption, configurable::Configure},
interactive_variable,
operator_builder::OperatorBuilder,
};
#[derive(Args, Clone)]
pub struct S3ConfigCli {
key_id: Option<String>,
secret_key: Option<String>,
endpoint: Option<String>,
region: Option<String>,
bucket_name: Option<String>,
root: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct S3Config {
key_id: String,
secret_key: String,
endpoint: String,
region: String,
bucket_name: String,
root: Option<String>,
}
impl Configure for S3ConfigCli {
async fn configure(self, name: &mut Option<String>) -> anyhow::Result<ConfigOption> {
interactive_variable!(self, key_id, "S3 Key ID");
interactive_variable!(self, secret_key, "S3 Secret Key");
interactive_variable!(self, region, "S3 Region");
interactive_variable!(self, bucket_name, "S3 Bucket Name");
interactive_variable!(self, endpoint, "S3 Endpoint");
if let None = name {
*name = Some(endpoint.clone());
}
Ok(ConfigOption::S3(S3Config {
secret_key,
key_id,
region,
bucket_name,
endpoint,
root: self.root,
}))
}
}
impl OperatorBuilder for S3Config {
fn build(&self) -> anyhow::Result<Operator> {
let builder = opendal::services::S3::default()
.access_key_id(&self.key_id)
.secret_access_key(&self.secret_key)
.region(&self.region)
.endpoint(&self.endpoint)
.root(self.root.as_deref().unwrap_or("/"))
.bucket(&self.bucket_name)
.disable_config_load();
let op: Operator = Operator::new(builder)?.finish();
Ok(op)
}
}
+41
View File
@@ -0,0 +1,41 @@
use rand::{RngCore, SeedableRng, rng, rngs::StdRng};
use tokio::io::AsyncRead;
#[derive(Clone, Debug)]
pub struct Speedtest<F: Fn(f32)> {
core: rand::rngs::StdRng,
to_write: usize,
callback: Box<F>,
}
pub const SPEEDTEST_BYTES: usize = 64 * 1024 * 1024;
pub const SPEEDTEST_PATH: &str = "speedtest";
impl<F: Fn(f32)> AsyncRead for Speedtest<F> {
fn poll_read(
self: std::pin::Pin<&mut Self>,
_cx: &mut std::task::Context<'_>,
buf: &mut tokio::io::ReadBuf<'_>,
) -> std::task::Poll<std::io::Result<()>> {
let mut s = self;
let to_write = buf.remaining().min(s.to_write);
let filled = {
let fill_slice = buf.initialize_unfilled_to(to_write);
s.core.fill_bytes(fill_slice);
fill_slice.len()
};
s.to_write = s.to_write.saturating_sub(filled);
(s.callback)((1f32 - (s.to_write as f32 / SPEEDTEST_BYTES as f32)) * 100f32);
buf.advance(filled);
std::task::Poll::Ready(Ok(()))
}
}
impl<F: Fn(f32)> Speedtest<F> {
pub fn new(callback: F) -> Self {
Self {
core: StdRng::from_rng(&mut rng()),
to_write: SPEEDTEST_BYTES,
callback: Box::new(callback),
}
}
}
+2
View File
@@ -0,0 +1,2 @@
pub mod connect;
pub mod upload;
+79
View File
@@ -0,0 +1,79 @@
use std::path::Path;
use crate::{
cli::UploadInfo,
commands::connect::{config::Config, config_option::ConfigOption},
manifest::{ClosureFactory, CompressionOption, DepotManifest, generate_v2_manifest},
operator_builder::OperatorBuilder,
};
use futures::AsyncWriteExt;
use log::info;
use opendal::{FuturesAsyncWriter, Operator};
use tokio_util::compat::{Compat, FuturesAsyncWriteCompatExt};
pub async fn upload(
upload_info: &UploadInfo,
config: Config,
name: &Option<String>,
) -> anyhow::Result<()> {
let game_id = upload_info.game_id.clone();
let path = upload_info.path.clone();
let version_id = upload_info.version_id.clone();
let operator = get_operator(config, name)?;
let mut existing_depot_manifest = get_depot_manifest(&operator).await?;
info!("Uploading chunks");
let v2_manifest = generate_v2_manifest(
Path::new(&path),
ClosureFactory::new(
async move |id: String| {
info!("Uploading chunk id {id}");
let writer = operator
.writer(&format!("{game_id}/{version_id}/{id}"))
.await
.unwrap()
.into_futures_async_write()
.compat_write();
writer
},
|writer: Compat<FuturesAsyncWriter>| async {
writer.into_inner().close().await.unwrap();
},
),
)
.await?;
info!("Finished uploading chunks");
existing_depot_manifest.append(
upload_info.game_id.to_string(),
upload_info.version_id.to_string(),
CompressionOption::None,
);
Ok(())
}
async fn get_depot_manifest(operator: &Operator) -> Result<DepotManifest, anyhow::Error> {
let existing_depot_manifest = operator.read("manifest.json").await?.to_bytes();
let existing_depot_manifest: DepotManifest =
serde_json::from_slice(existing_depot_manifest.as_ref())?;
Ok(existing_depot_manifest)
}
fn get_operator(config: Config, name: &Option<String>) -> anyhow::Result<Operator> {
let operator = match if let Some(name) = name {
config
.get(name)
.ok_or(anyhow::anyhow!("Name does not exist"))?
} else {
config.get_active().ok_or(anyhow::anyhow!(
"No active connection set. Please specify with --name"
))?
} {
ConfigOption::S3(s3_config) => s3_config.build()?,
};
Ok(operator)
}
+1
View File
@@ -0,0 +1 @@
pub mod interface;
+53
View File
@@ -0,0 +1,53 @@
use fern::colors::{Color, ColoredLevelConfig};
use log::LevelFilter;
use std::env;
use std::fs;
use std::io;
pub fn configure_logging() -> anyhow::Result<()> {
let log_level = env::var("RUST_LOG")
.unwrap_or_else(|_| "info".to_string())
.parse::<LevelFilter>()?;
let log_dir = env::var("LOG_FILE_DIR").unwrap_or_else(|_| "logs".to_string());
fs::create_dir_all(&log_dir)?;
let colors = ColoredLevelConfig::new()
.error(Color::Red)
.warn(Color::Yellow)
.info(Color::Blue)
.debug(Color::Green)
.trace(Color::Magenta);
fern::Dispatch::new()
.chain(
fern::Dispatch::new()
.format(move |out, message, record| {
out.finish(format_args!(
"[{}] {}: {}",
chrono::Local::now().format("%H:%M:%S%.3f"),
colors.color(record.level()),
message
))
})
.chain(io::stdout()),
)
.chain(
fern::Dispatch::new()
.format(|out, message, record| {
out.finish(format_args!(
"[{}] {} {} - {}",
chrono::Local::now().format("%Y-%m-%d %H:%M:%S%.3f"),
record.level(),
record.target(),
message
))
})
.chain(fern::log_file(format!("{}/app.log", log_dir))?),
)
.level(log_level)
.apply()?;
Ok(())
}
+34
View File
@@ -0,0 +1,34 @@
#![feature(async_fn_traits)]
use crate::commands::connect::config::manage_configuration;
use crate::{
cli::{Cli, Commands},
commands::connect::config::Config,
commands::upload,
};
use clap::Parser;
mod cli;
mod commands;
mod logging;
mod manifest;
mod operator_builder;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
crate::logging::configure_logging()?;
let cli = Cli::parse();
let mut config = Config::read();
match cli.command {
Commands::Connect { name, option } => {
manage_configuration(&mut config, name, option).await?
}
Commands::Upload { info, name } => {
let info = info.interactive_configure();
upload::interface::upload(&info, config, &name).await?;
}
};
Ok(())
}
+114
View File
@@ -0,0 +1,114 @@
use std::{collections::HashMap, path::Path};
use async_trait::async_trait;
use droplet_rs::manifest::{Manifest, ManifestWriterFactory, generate_manifest_rusty};
use indicatif::{ProgressBar, ProgressStyle};
use log::info;
use serde::{Deserialize, Serialize};
use tokio::io::AsyncWrite;
#[derive(Serialize, Deserialize)]
pub struct DepotManifest {
content: HashMap<String, DepotManifestGameData>,
}
#[derive(Serialize, Deserialize)]
struct DepotManifestGameData {
version_id: String,
compression: CompressionOption,
}
#[derive(Serialize, Deserialize)]
pub enum CompressionOption {
None,
Gzip,
Zstd,
}
impl DepotManifest {
pub fn new() -> Self {
Self {
content: HashMap::new(),
}
}
pub fn append(&mut self, game_id: String, version_id: String, compression: CompressionOption) {
self.content.insert(
game_id,
DepotManifestGameData {
version_id,
compression,
},
);
}
}
pub struct ClosureFactory<Writer, Factory, Closer>
where
Writer: AsyncWrite + Unpin,
Factory: AsyncFn(String) -> Writer,
Closer: AsyncFn(Writer),
{
writer: Factory,
closer: Closer,
}
#[async_trait]
impl<
W: AsyncWrite + Unpin + Send + Sync,
F: AsyncFn(String) -> W + Send + Sync + 'static,
C: AsyncFn(W) + Send + Sync,
> ManifestWriterFactory for ClosureFactory<W, F, C>
where
for<'a> F::CallRefFuture<'a>: Send,
for<'b> C::CallRefFuture<'b>: Send,
{
type Writer = W;
async fn create(&self, id: String) -> anyhow::Result<Self::Writer> {
let func = &self.writer;
let output = func(id).await;
Ok(output)
}
async fn close(&self, writer: Self::Writer) -> anyhow::Result<()> {
let func = &self.closer;
func(writer).await;
Ok(())
}
}
impl<
W: AsyncWrite + Unpin + Send + Sync,
F: AsyncFn(String) -> W + Send + Sync + 'static,
C: AsyncFn(W) + Sync,
> ClosureFactory<W, F, C>
where
for<'a> F::CallRefFuture<'a>: Send,
for<'b> C::CallRefFuture<'b>: Send,
{
pub fn new(f: F, c: C) -> Self {
Self {
writer: f,
closer: c,
}
}
}
pub async fn generate_v2_manifest<Factory>(dir: &Path, factory: Factory) -> anyhow::Result<Manifest>
where
Factory: ManifestWriterFactory,
{
let progress_bar = ProgressBar::new(10_000).with_style(
ProgressStyle::default_bar()
.template("[{elapsed_precise}] [ETA {eta}] {bar} {percent_precise}%")
.unwrap(),
);
generate_manifest_rusty(
dir,
|progress| {
let progress_int = (progress * 100f32).round() as u64;
progress_bar.set_position(progress_int);
},
|log| progress_bar.suspend(|| info!("{}", log)),
Some(&factory),
None,
)
.await
}
+5
View File
@@ -0,0 +1,5 @@
use opendal::Operator;
pub trait OperatorBuilder {
fn build(&self) -> anyhow::Result<Operator>;
}
View File
+34
View File
@@ -0,0 +1,34 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.nuxt
.output
src-tauri/flamegraph.svg
src-tauri/perf*
/*.AppImage
/squashfs-root
/target/
+31
View File
@@ -0,0 +1,31 @@
stages:
- build
build-linux:
stage: build
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/rustlang/rust:nightly
script:
- apt-get update -y
- apt-get install yarnpkg libsoup-3.0-0 libsoup-3.0-dev libatk-adaptor libgtk-3-dev libjavascriptcoregtk-4.1-dev libwebkit2gtk-4.1-dev -y
- yarnpkg
- export
- export RUST_LOG=warn
- yarnpkg tauri build
- cp src-tauri/target/release/bundle/deb/*.deb .
- cp src-tauri/target/release/bundle/rpm/*.rpm .
- cp src-tauri/target/release/bundle/appimage/*.AppImage .
artifacts:
paths:
- "*.{deb,rpm,AppImage}"
build-windows:
stage: build
tags:
- windows
script:
- yarn
- yarn tauri build
- cp src-tauri/target/release/bundle/nsis/*.exe .
artifacts:
paths:
- "*.exe"
+1
View File
@@ -0,0 +1 @@
23
+7
View File
@@ -0,0 +1,7 @@
{
"recommendations": [
"Vue.volar",
"tauri-apps.tauri-vscode",
"rust-lang.rust-analyzer"
]
}
+15
View File
@@ -0,0 +1,15 @@
# How to create Flamegraph
Run this in `src-tauri`:
```
WEBKIT_DISABLE_DMABUF_RENDERER=1 CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph --release
```
You can leave out `WEBKIT_DISABLE_DMABUF_RENDERER=1` if you're not on NVIDIA/Linux
And then run this in the root dir:
```
yarn dev --port 1432
```
And then do what you want, and it'll create the flamegraph for you
View File
+3
View File
@@ -0,0 +1,3 @@
# Desktop
The official desktop client for Drop.
+48
View File
@@ -0,0 +1,48 @@
import fs from "fs";
import process from "process";
import childProcess from "child_process";
import createLogger from "pino";
const OUTPUT = "./.output";
const logger = createLogger({ transport: { target: "pino-pretty" } });
async function spawn(exec, opts) {
const output = childProcess.spawn(exec, { ...opts, shell: true });
output.stdout.on("data", (data) => {
process.stdout.write(data);
});
output.stderr.on("data", (data) => {
process.stderr.write(data);
});
return await new Promise((resolve, reject) => {
output.on("error", (err) => reject(err));
output.on("exit", () => resolve());
});
}
const views = fs.readdirSync(".").filter((view) => {
const expectedPath = `./${view}/package.json`;
return fs.existsSync(expectedPath);
});
fs.mkdirSync(OUTPUT, { recursive: true });
for (const view of views) {
const loggerChild = logger.child({});
process.chdir(`./${view}`);
loggerChild.info(`Install deps for "${view}"`);
await spawn("pnpm install");
loggerChild.info(`Building "${view}"`);
await spawn("pnpm run build", {
env: { ...process.env, NUXT_APP_BASE_URL: `/${view}/` },
});
process.chdir("..");
fs.cpSync(`./${view}/.output/public`, `${OUTPUT}/${view}`, {
recursive: true,
});
}
+463
View File
@@ -0,0 +1,463 @@
## Release 0.2.0-beta
### Fixes
- Re-enabled killing games #005bab2
- fixed queue manipulation and waiting for downloads #01260f0
- fix logic error in detecting dir #04368ff
- absolute executable invoke #17759c4
- don't crash download manager if multiple errors come in #21204de
- clear stale data before requesting new #327628b
- fixed completed indexes #39f2ebd
- add file & line to console logs #4d8eadc
- Games not launching due to string semantics #4ef49cc
- Added error handling for chunk request errors #4fc0855
- Chunk counting logic error #5ba151f
- modal stack doesn't cover whole app #5db9ae5
- use set_file_name instead of pushing to strings #60d0a48
- use of completed signal, and pause/resuming #64d7f64
- add message about nonce expiration #6a8d0af
- Added "LIbrary Failed to Update" content to recover from library load fail #76bae3d
- Restored RUST_LOG env functionality #7a0cf4f
- initialise doesn't recreate default install dir #7a3841b
- update routes for new server #7ab53f3
- use vendored flag #7c8089e
- fix poorly designed parsing for executables with spaces #7c90d2b
- assorted fixes #89ea34c
- Added Settings component #8aad64f
- windows build #8d9234f
- fix ugly scrollbars on edge webview #95f2174
- windows shadow #9a8cc59
- add better error message #9af0d08
- Broken command invoke logic in settings/downloads.vue #9e29aa7
- Accidentally was attempting to lock onto something that was already in scope #9e82a0b
- fix incorrect error assumptions & update types #a17311a
- Re-enabled uninstalling apps #a56ee25
- types #af056c0
- fix other metadata endpoints #c2f54c1
- Re-enabled deep links #c3f6222
- added console as an appender #d12bf15
- remove unnecessary unstable feature #d5ac1b0
- fix install button #d7b0302
- stop loading on error #d83aae6
- use unix timestamp to avoid invalid characters in filename #dafce24
- Renamed game_id to id #dceaa56
- use chrono library to generate timestamps #e22e6d8
- clear stale data before requesting new #e72662c
- fix scrollbars on edge webview #f09605a
- update readme instructions #f0c47d8
- Adding usize to completed_contexts_lock instead of &usize #f508186
### Features
- Game kill tauri command #01e6162
- add debug page #02f8591
- Add signout functionality (#16) #0a0d9d6
- queue and library UIs #0a20139
- add note about more install dirs #139bc0c
- Using SerializeDisplay for better error management with Result #170fde5
- add pre-launch log to file #17f8d76
- Added option to change root directory #1aa52c0
- add speed and time remaining information #1f899ec
- lockless tracking of downloaded chunks #2183585
- quit button #239b8d5
- use shift or DEBUG RUST_LOG to show Debug Info #245a84d
- Added database corruption dialog #25ba200
- only allow downloads for supported platforms #269dcbb
- add installed ui in the library menu #2c8164e
- added file-based logging #2d4a7e8
- automatically fetch remote data if not available #2dedfbb
- Added database recovery #32ae7d5
- ability to add more download dirs #384f7a5
- re-enable checksums #3ca87fc
- background processes and close/open menu #3d60fd5
- launch games with log files #3f71149
- Download cancelling #450bca9
- refactoring and error message #469a2d6
- Added UI to change download threads #4e93eb4
- Made save button include user feedback & only allow numeric characters #53234d2
- download widget and queue fix #532d13e
- Pausing and resuming game downloads #55b7921
- Allow settings to update UI using fetch_settings command #5bb04da
- temporary queue ui and flamegraph instructions #5cbeb3b
- Added DownloadThreadControl struct #5e05e68
- Added max_download_threads setting and separated settings from db #5ea47d7
- Added generic download manager #6159319
- Added AgentInterfaceData to get information about all downloads in queue #63c3cc1
- debug queue interface #671d45f
- reduce scope of download agent #6a38ea3
- Added multi-argument game launch and setup support #6ad3837
- shared child with stop command #6b96e40
- Added function to take and set any game state #6bc6482
- Added line numbers to file logging and highlighting to console #7c3140e
- Separated chunk updates into individual counters #7d3c601
- Ensure that any database issues are resolved by standalone functions #7d4651d
- ui to install games #8670bca
- Implemented spawning with umu (using umu-wrapper-lib) #88b2505
- offer manual signin #949acfc
- better process management, including running state #a135b13
- Added Download Manager #a1ada07
- retry connnection on server unavailable #a53d838
- finish download dir CRUD interface #a580a46
- better download manager errors + modal #ad92dbe
- syncs state to disk to persist across reboots #b556842
- prevent default context menu and emit event on elements #c560656
- initial creation and logo update #d9a51cf
- Added manifest.json utility for persistent download progress #d9d0122
- game uninstalling & partial compat #dd7f567
- combined db and download interface improvements #de52dac
- update db state with ui and emit events #e4df4eb
- Generic function to set download state #f10d92d
- Convert DownloadThreadControlFlag to AtomicBool #f25bfed
- add note about more install dirs #f4ac1c8
- Added rolling progress window #fd30b3e
### Other Changes
- quexeky <git@quexeky.dev>
- Convert DATA_ROOT_DIR to Mutex #00b7179
- Converting DB access to a trait #01b092c
- Updated changelog #022330b
- Progress on cleanup and exit #0381b8b
- library ui #03fa364
- Scoping changes and removing qualifications #046ba64
- Moved all files relevant to game downloads to their own directory #06d1e9e
- SLowly integrating game_download into the FE. Started with using the manifest minimal example in the server (#1) #07379b2
- Ran cargo clippy & moved DownloadManagerInterface #075d6ec
- Made logging systems match #0a1dddf
- Some easy cleanup of the download manager #0a2ac25
- client now fetches user information from Drop server #0c0cfeb
- Included in AppStatus (Also trying to link to Issue #1)
- Accidentally serialized AppStatus and broke everything :/ #10791ed
- Removed debugging statements #10c8344
- Wrappers are the bane of my existence. Also here's the download cancelling logic. #13df631
- Merge branch 'error-handling' #1520471
- Updated README.md #165a967
- Removed unnecessary dependencies #1724449
- merge(download-manager) -> 'main' #172d6b0
- More refactoring and renaming camelCase struct definitions to snake_case #1742793
- General cleanup #182361e
- Delete pages/library.vue #1861659
- progress on more precise download control #18b9149
- Allowing some dead code features because they are there for future use (potentially) #191e62c
- Ensure that Downloadable is also send and sync #1a89135
- I think that download queuing is working #1ab61c8
- auth initiate, database and more #22b1aee
- Update .gitlab-ci.yml" #2307704
- More fleshing out on how specifically game downloads will work (#1) #23137dd
- Removed utils.rs #270bc8b
- Fixing some references to "id" vs "game_id" #27e5a8e
- More cleanup after cargo clippy #2822b7a
- Updated contributing link #2aa5b9c
- More fleshing out on how specifically game downloads will work #2b90de9
- Cleaning up downloads playing and pausing #2c7b5fb
- fixed multi-chunk downloads #2ec351f
- Clippy refactoring #2efe304
- remove unpacker mod statement #32067c0
- Progress on adding tools #3299c71
- Fixed bug with bad initial loading into store instead of auth #3923acf
- add nvm rc #3ccd444
- partial download manager #3dbf5ab
- Update .gitlab-ci.yml with artifacts #3e10f17
- Removed tools/ #3eda979
- Downloads should be fixed now #403ca65
- transient vs synced state now defined #42c0198
- added adenmgb's autostart feature #472eb1d
- better download defaults #4779383
- Progress on downloads. Currently working on parsing functions to be run asynchronously #496c6a5
- Ran cargo clippy & cargo fmt #4983b25
- handshakes #4bb33c8
- Convert DOWNLOAD_MAX_THREADS to const #4fc13a1
- Merge branch 'downloads' #50ed841
- Moved generateGameMeta.ts to composables, using PathBuf instead of String for install_dirs #50f37fd
- Added time debugging and fixed logging formatting #5243694
- Clippy changes #553bc37
- Queue is running game downloads sequentially now #5564d23
- migrate to new droplet ca system #556898f
- Add LICENSE #57a5737
- ran cargo clippy & cargo fmt #5e3d26b
- my own take on some BASED design decisions #5ed0833
- cleanup and game UI beginnings #5ef6b8e
- Progress on terminator #5f5cbd0
- Implement better error system and segregate errors and commands (#23) #604d5b5
- moved to completed index arr to help serialization #64ebc19
- Ran cargo clippy & cargo fmt #653717e
- Removed all references to anything outside of the DownloadManager #6568faa
- Merge remote-tracking branch 'origin/main' #68ca4a7
- swap file name and to binary encoding #694f2fd
- chore(polish & cleanup) #6cc0c67
- Update .gitlab-ci.yml #6d7630e
- Moved some variable declarations outside of the spawned download thread #6ea4cf2
- Encoding game IDs and versions #6ef444e
- restructing and renaming #7049673
- Converted to md5 #706f525
- Merge branch 'main' into downloads #714b968
- Semantic naming changes #725f16b
- Abstracted queue system #76b0975
- Moved manifest and stored_manifest to download_manager" #78149bb
- README update #78fc668
- Ensured everything is serializing/deserializing to camelCase #7a95b7f
- fixed some of quexeky's BASED design decisions #7e3da04
- Progress checker works #7fec00d
- Progress on refactoring and abiding by cargo clippy #816b427
- Added GAME_PAUSE_CHECK_INTERVAL value #8204795
- Ran cargo clippy & fmt #82804eb
- update metadata #85a0899
- Renamed most instances of "game" outside of actual game downloads #881fcc6
- Debugging & starting work on parsing manifest #89d2814
- slight ui/ux fixes and updates to auth protocol #8a2d23d
- Removed Arc requirement for DownloadableMetadata #8be1dd4
- compliant with new APIs #8f6f184
- Ran cargo clippy & cargo fmt #9272970
- Added rolling_progress_updates.rs #9369ff1
- Add files via upload #93b8b83
- More refining info!() statements #94cf678
- fixed windows issues #959dad3
- Starting p2p progress #97bb1fa
- Game downloads from the client are working (multithreaded) by parsing in gameID, GameVersion, and maxThreads from FE (#1) #984472e
- Version bump & appimage build #9897698
- Some progress on thread terminations #99beca4
- rename files to what they contain #99c8b39
- Created separate function to generate requests #9a184a8
- cleanup of lib and toml #9b1cfa7
- refactor for generic way to implement cross platform launchers #9ea2aa4
- Updated logging format #a213765
- fix(windows build) #a24cc8a
- Added ToolDownloadAgent #a2e63aa
- copy direct to disk #a628fc1
- Moved manifest and stored_manifest to download_manager #a846eed
- adds nvm rc! #a881d8e
- Reordered DownloadThreadControlFlag to agree with From<bool> #ab606e8
- ci/cd and patches for windows builds #ac1c3b6
- patch for not draggable windows during setup #ac66b20
- another stage of client authentication #ae4c65b
- Renamed GameDonwloadError to ApplicationDownloadError and moved #aed58e4
- Progress on write speeds & added debug statements #b065e10
- Updated logging #b3963b6
- Created file settings.rs #b47b7ea
- Added Downloadable trait and replaced references to GameDownloadAgent #b4d70a3
- Update .gitlab-ci.yml #b6a54c0
- Moved download manager to separate directory #b6c64e5
- Ran cargo fmt #b8cf44c
- Imported appropriate logging macros #b99ff67
- Merge branch 'main' into download-manager #bb60942
- Ran cargo clippy & cargo fmt #bd3deac
- beginnings of game state management #bf46dec
- Update Cargo.toml #c1fb39e
- migrated unpacking to rust zstd to conform with droplet #c46c54b
- More progress on checksums #c51e761
- Delete pages/library.vue #c722a54
- Merge branch 'downloads' (again) #c748aec
- migrate to nuxt and groundwork #c957744
- More debugging because apparently checksums are the bane of my existence. But it works and I was just an idiot #c9d9d2e
- Fully separate & generic download manager #cac612b
- Progress on rolling progress window #cf19477
- Ensured that all logs start with lowercase capital and have no trailing punctuation #cfc9d13
- Validated that loading data works #d21b1d2
- Mostly finished with checksums. Just merging main in at the same time #d39e7cb
- Ran cargo clippy #dcb1564
- Add files via upload #dcb2c0f
- Theoretically adding queue support and optimistic manifest downloading (#1). Needs tests when actual functions are implemented #dcd8fa8
- Merge remote-tracking branch 'origin/downloads' into downloads #dd23ca8
- Debugging line #ddc585d
- Re-enabled closing the window and some more renaming #defba51
- drop no longer freaks out if server is unavailable on startup #df88395
- Apply stashed changes #e0ea8c9
- Merge remote-tracking branch 'origin/downloads' into downloads #e4e605b
- convert to more sensible permission schema #e504c00
- Update on GameDownload #e71e4cf
- reorganisation, cleanup and new nonce protocol #e828bca
- rustix fs feature #e9805a8
- Added manage_go_signal command #ea70ec9
- Drop will no longer crash when the server goes down #eb3311a
- Made all errors type-based #ec2f414
- Added description on how the DownloadManager works #f029cbf
- Using more appropriate logging statements #f183a9d
- remove unnecessary compat code (#20) #f1c8bbf
- Manifests are now being parsed successfully #f28c880
- Removed tests/ #f29e989
- I think that downloads are working. Need to test and set decent file locations now #f388237
- Just debugging tauri's damn Sync command features #f60ca2b
- fixes and patches for merged changes #f6476bc
- Added manage_queue_signal #f64782e
- initial commit #f6cd7c3
- Update .gitlab-ci.yml #fc6bab9
_changelog generated by_ [go-conventional-commits](https://github.com/joselitofilho/go-conventional-commits)
## Release 0.1.0-beta
### Fixes
- fixed queue manipulation and waiting for downloads #01260f0
- fix logic error in detecting dir #04368ff
- absolute executable invoke #17759c4
- Chunk counting logic error #5ba151f
- use of completed signal, and pause/resuming #64d7f64
- initialise doesn't recreate default install dir #7a3841b
- use vendored flag #7c8089e
- windows build #8d9234f
- windows shadow #9a8cc59
- types #af056c0
- added console as an appender #d12bf15
- remove unnecessary unstable feature #d5ac1b0
- use unix timestamp to avoid invalid characters in filename #dafce24
- use chrono library to generate timestamps #e22e6d8
- fix scrollbars on edge webview #f09605a
- update readme instructions #f0c47d8
### Features
- queue and library UIs #0a20139
- add pre-launch log to file #17f8d76
- Added option to change root directory #1aa52c0
- quit button #239b8d5
- only allow downloads for supported platforms #269dcbb
- added file-based logging #2d4a7e8
- automatically fetch remote data if not available #2dedfbb
- ability to add more download dirs #384f7a5
- background processes and close/open menu #3d60fd5
- launch games with log files #3f71149
- Download cancelling #450bca9
- refactoring and error message #469a2d6
- download widget and queue fix #532d13e
- Pausing and resuming game downloads #55b7921
- temporary queue ui and flamegraph instructions #5cbeb3b
- Added DownloadThreadControl struct #5e05e68
- Added AgentInterfaceData to get information about all downloads in queue #63c3cc1
- debug queue interface #671d45f
- reduce scope of download agent #6a38ea3
- Added function to take and set any game state #6bc6482
- Separated chunk updates into individual counters #7d3c601
- ui to install games #8670bca
- Added Download Manager #a1ada07
- retry connnection on server unavailable #a53d838
- finish download dir CRUD interface #a580a46
- syncs state to disk to persist across reboots #b556842
- prevent default context menu and emit event on elements #c560656
- initial creation and logo update #d9a51cf
- Added manifest.json utility for persistent download progress #d9d0122
- combined db and download interface improvements #de52dac
- update db state with ui and emit events #e4df4eb
- Generic function to set download state #f10d92d
- Convert DownloadThreadControlFlag to AtomicBool #f25bfed
### Other Changes
- quexeky <git@quexeky.dev>
- Convert DATA_ROOT_DIR to Mutex #00b7179
- Converting DB access to a trait #01b092c
- Scoping changes and removing qualifications #046ba64
- SLowly integrating game_download into the FE. Started with using the manifest minimal example in the server (#1) #07379b2
- Ran cargo clippy & moved DownloadManagerInterface #075d6ec
- Made logging systems match #0a1dddf
- client now fetches user information from Drop server #0c0cfeb
- Included in AppStatus (Also trying to link to Issue #1)
- Accidentally serialized AppStatus and broke everything :/ #10791ed
- Removed debugging statements #10c8344
- Wrappers are the bane of my existence. Also here's the download cancelling logic. #13df631
- Merge branch 'error-handling' #1520471
- Removed unnecessary dependencies #1724449
- merge(download-manager) -> 'main' #172d6b0
- More refactoring and renaming camelCase struct definitions to snake_case #1742793
- progress on more precise download control #18b9149
- Allowing some dead code features because they are there for future use (potentially) #191e62c
- I think that download queuing is working #1ab61c8
- auth initiate, database and more #22b1aee
- More fleshing out on how specifically game downloads will work (#1) #23137dd
- Removed utils.rs #270bc8b
- Fixing some references to "id" vs "game_id" #27e5a8e
- Updated contributing link #2aa5b9c
- More fleshing out on how specifically game downloads will work #2b90de9
- Cleaning up downloads playing and pausing #2c7b5fb
- fixed multi-chunk downloads #2ec351f
- Clippy refactoring #2efe304
- remove unpacker mod statement #32067c0
- Fixed bug with bad initial loading into store instead of auth #3923acf
- partial download manager #3dbf5ab
- Downloads should be fixed now #403ca65
- transient vs synced state now defined #42c0198
- better download defaults #4779383
- Progress on downloads. Currently working on parsing functions to be run asynchronously #496c6a5
- Ran cargo clippy & cargo fmt #4983b25
- handshakes #4bb33c8
- Convert DOWNLOAD_MAX_THREADS to const #4fc13a1
- Merge branch 'downloads' #50ed841
- Added time debugging and fixed logging formatting #5243694
- Clippy changes #553bc37
- Queue is running game downloads sequentially now #5564d23
- migrate to new droplet ca system #556898f
- Add LICENSE #57a5737
- ran cargo clippy & cargo fmt #5e3d26b
- my own take on some BASED design decisions #5ed0833
- cleanup and game UI beginnings #5ef6b8e
- moved to completed index arr to help serialization #64ebc19
- Ran cargo clippy & cargo fmt #653717e
- Merge remote-tracking branch 'origin/main' #68ca4a7
- swap file name and to binary encoding #694f2fd
- chore(polish & cleanup) #6cc0c67
- Encoding game IDs and versions #6ef444e
- restructing and renaming #7049673
- Converted to md5 #706f525
- Merge branch 'main' into downloads #714b968
- Semantic naming changes #725f16b
- Abstracted queue system #76b0975
- README update #78fc668
- Ensured everything is serializing/deserializing to camelCase #7a95b7f
- fixed some of quexeky's BASED design decisions #7e3da04
- Progress checker works #7fec00d
- Progress on refactoring and abiding by cargo clippy #816b427
- Added GAME_PAUSE_CHECK_INTERVAL value #8204795
- Debugging & starting work on parsing manifest #89d2814
- slight ui/ux fixes and updates to auth protocol #8a2d23d
- compliant with new APIs #8f6f184
- fixed windows issues #959dad3
- Starting p2p progress #97bb1fa
- Game downloads from the client are working (multithreaded) by parsing in gameID, GameVersion, and maxThreads from FE (#1) #984472e
- Some progress on thread terminations #99beca4
- rename files to what they contain #99c8b39
- cleanup of lib and toml #9b1cfa7
- Updated logging format #a213765
- fix(windows build) #a24cc8a
- copy direct to disk #a628fc1
- Reordered DownloadThreadControlFlag to agree with From<bool> #ab606e8
- ci/cd and patches for windows builds #ac1c3b6
- patch for not draggable windows during setup #ac66b20
- another stage of client authentication #ae4c65b
- Progress on write speeds & added debug statements #b065e10
- Updated logging #b3963b6
- Created file settings.rs #b47b7ea
- Ran cargo fmt #b8cf44c
- Merge branch 'main' into download-manager #bb60942
- Ran cargo clippy & cargo fmt #bd3deac
- beginnings of game state management #bf46dec
- Update Cargo.toml #c1fb39e
- migrated unpacking to rust zstd to conform with droplet #c46c54b
- More progress on checksums #c51e761
- Merge branch 'downloads' (again) #c748aec
- migrate to nuxt and groundwork #c957744
- More debugging because apparently checksums are the bane of my existence. But it works and I was just an idiot #c9d9d2e
- Validated that loading data works #d21b1d2
- Mostly finished with checksums. Just merging main in at the same time #d39e7cb
- Theoretically adding queue support and optimistic manifest downloading (#1). Needs tests when actual functions are implemented #dcd8fa8
- Merge remote-tracking branch 'origin/downloads' into downloads #dd23ca8
- Debugging line #ddc585d
- Re-enabled closing the window and some more renaming #defba51
- drop no longer freaks out if server is unavailable on startup #df88395
- Merge remote-tracking branch 'origin/downloads' into downloads #e4e605b
- convert to more sensible permission schema #e504c00
- Update on GameDownload #e71e4cf
- reorganisation, cleanup and new nonce protocol #e828bca
- rustix fs feature #e9805a8
- Drop will no longer crash when the server goes down #eb3311a
- Made all errors type-based #ec2f414
- Added description on how the DownloadManager works #f029cbf
- Manifests are now being parsed successfully #f28c880
- I think that downloads are working. Need to test and set decent file locations now #f388237
- Just debugging tauri's damn Sync command features #f60ca2b
- fixes and patches for merged changes #f6476bc
- initial commit #f6cd7c3
_changelog generated by_ [go-conventional-commits](https://github.com/joselitofilho/go-conventional-commits)
+5
View File
@@ -0,0 +1,5 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M4 13.5C4 11.0008 5.38798 8.76189 7.00766 7C8.43926 5.44272 10.0519 4.25811 11.0471 3.5959C11.6287 3.20893 12.3713 3.20893 12.9529 3.5959C13.9481 4.25811 15.5607 5.44272 16.9923 7C18.612 8.76189 20 11.0008 20 13.5C20 17.9183 16.4183 21.5 12 21.5C7.58172 21.5 4 17.9183 4 13.5Z"
stroke="#60a5fa" stroke-width="2" />
</svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,72 @@
import Foundation
import Security
enum SecurityError: Error {
case generalError
}
func deleteCertificateFromKeyChain(_ certificateLabel: String) -> Bool {
let delQuery: [NSString: Any] = [
kSecClass: kSecClassCertificate,
kSecAttrLabel: certificateLabel,
]
let delStatus: OSStatus = SecItemDelete(delQuery as CFDictionary)
return delStatus == errSecSuccess
}
func saveCertificateToKeyChain(_ certificate: SecCertificate, certificateLabel: String) throws {
SecKeychainSetPreferenceDomain(SecPreferencesDomain.system)
deleteCertificateFromKeyChain(certificateLabel)
let setQuery: [NSString: AnyObject] = [
kSecClass: kSecClassCertificate,
kSecValueRef: certificate,
kSecAttrLabel: certificateLabel as AnyObject,
kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked,
kSecAttrCanSign: true as AnyObject,
]
let addStatus: OSStatus = SecItemAdd(setQuery as CFDictionary, nil)
guard addStatus == errSecSuccess else {
throw SecurityError.generalError
}
var status = SecTrustSettingsSetTrustSettings(certificate, SecTrustSettingsDomain.admin, nil)
}
func getCertificateFromString(stringData: String) throws -> SecCertificate {
if let data = NSData(base64Encoded: stringData, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) {
if let certificate = SecCertificateCreateWithData(kCFAllocatorDefault, data) {
return certificate
}
}
throw SecurityError.generalError
}
if CommandLine.arguments.count != 2 {
print("Usage: \(CommandLine.arguments[0]) [cert.file]")
print("Usage: \(CommandLine.arguments[0]) --version")
exit(1)
}
if (CommandLine.arguments[1] == "--version") {
let version = "dev"
print(version)
exit(0)
} else {
let fileURL = URL(fileURLWithPath: CommandLine.arguments[1])
do {
let certData = try Data(contentsOf: fileURL)
let certificate = SecCertificateCreateWithData(nil, certData as CFData)
if certificate != nil {
try? saveCertificateToKeyChain(certificate!, certificateLabel: "DropOSS")
exit(0)
} else {
print("ERROR: Unknown error while reading the \(CommandLine.arguments[1]) file.")
}
} catch {
print("ERROR: Unexpected error while reading the \(CommandLine.arguments[1]) file. \(error)")
}
}
exit(1)
+51
View File
@@ -0,0 +1,51 @@
<template>
<NuxtLoadingIndicator color="#2563eb" />
<NuxtLayout class="select-none w-screen h-screen">
<NuxtPage />
<ModalStack />
</NuxtLayout>
</template>
<script setup lang="ts">
import "~/composables/downloads.js";
import { invoke } from "@tauri-apps/api/core";
import { useAppState } from "./composables/app-state.js";
import {
initialNavigation,
setupHooks,
} from "./composables/state-navigation.js";
import { listen } from "@tauri-apps/api/event";
import type { AppState } from "./types.js";
const router = useRouter();
const state = useAppState();
async function fetchState() {
try {
state.value = JSON.parse(await invoke("fetch_state"));
if (!state.value)
throw createError({
statusCode: 500,
statusMessage: `App state is: ${state.value}`,
fatal: true,
});
} catch (e) {
console.error("failed to parse state", e);
throw e;
}
}
await fetchState();
listen("update_state", (event) => {
state.value = event.payload as AppState;
});
setupHooks();
initialNavigation(state);
useHead({
title: "Drop",
});
</script>
+85
View File
@@ -0,0 +1,85 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
html,
body {
-ms-overflow-style: none; /* IE and Edge /
scrollbar-width: none; / Firefox */
overscroll-behavior: none;
}
/* Hide scrollbar for Chrome, Safari and Opera */
html::-webkit-scrollbar {
display: none;
}
$motiva: (
("MotivaSansThin.ttf", "ttf", 100, normal),
("MotivaSansLight.woff.ttf", "woff", 300, normal),
("MotivaSansRegular.woff.ttf", "woff", 400, normal),
("MotivaSansMedium.woff.ttf", "woff", 500, normal),
("MotivaSansBold.woff.ttf", "woff", 600, normal),
("MotivaSansExtraBold.ttf", "woff", 700, normal),
("MotivaSansBlack.woff.ttf", "woff", 900, normal)
);
$helvetica: (
("Helvetica.woff", "woff", 400, normal),
("Helvetica-Oblique.woff", "woff", 400, italic),
("Helvetica-Bold.woff", "woff", 600, normal),
("Helvetica-BoldOblique.woff", "woff", 600, italic),
("helvetica-light-587ebe5a59211.woff2", "woff2", 300, normal)
);
@each $file, $format, $weight, $style in $motiva {
@font-face {
font-family: "Motiva Sans";
src: url("/fonts/motiva/#{$file}") format($format);
font-weight: $weight;
font-style: $style;
}
}
@each $file, $format, $weight, $style in $helvetica {
@font-face {
font-family: "Helvetica";
src: url("/fonts/helvetica/#{$file}") format($format);
font-weight: $weight;
font-style: $style;
}
}
@font-face {
font-family: "Inter";
src: url("/fonts/inter/InterVariable.ttf");
font-style: normal;
}
@font-face {
font-family: "Inter";
src: url("/fonts/inter/InterVariable-Italic.ttf");
font-style: italic;
}
/* ===== Scrollbar CSS ===== */
/* Firefox */
* {
scrollbar-width: 4px;
scrollbar-color: #52525b #00000000;
}
/* Chrome, Edge, and Safari */
*::-webkit-scrollbar {
width: 4px;
}
*::-webkit-scrollbar-track {
background: transparent;
}
*::-webkit-scrollbar-thumb {
background-color: #52525b;
border-radius: 10px;
border: 3px solid #52525b;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 MiB

@@ -0,0 +1,30 @@
<script setup lang="ts">
import { StarIcon } from "@heroicons/vue/24/solid";
import { invoke } from "@tauri-apps/api/core";
const props = defineProps<{
path?: string;
}>();
const model = defineModel<string | undefined>({ required: true });
const isDefault = computed(() => props.path == model.value);
async function setDefault() {
if (!props.path) return;
await invoke("set_default", { path: props.path });
model.value = props.path;
}
</script>
<template>
<button
:class="['p-0.5 rounded-full', isDefault ? 'bg-blue-500' : 'bg-zinc-800']"
@click="setDefault"
:disabled="!props.path"
>
<StarIcon
:class="['size-[0.7rem]', isDefault ? 'text-zinc-100' : 'text-zinc-100']"
/>
</button>
</template>
@@ -0,0 +1,106 @@
<template>
<ModalTemplate :model-value="true">
<template #default
><div class="flex items-start gap-x-3">
<img :src="useObject(game.mIconObjectId)" class="size-12" />
<div class="mt-3 text-center sm:mt-0 sm:text-left">
<h3 class="text-base font-semibold text-zinc-100">
Missing required dependency "{{ game.mName }}"
</h3>
<div class="mt-2">
<p class="text-sm text-zinc-400">
To launch this game, you need to have "{{ game.mName }}" ({{
version.displayName ?? version.versionPath
}}) installed.
</p>
</div>
</div>
</div>
<InstallDirectorySelector
:install-dirs="installDirs"
v-model="installDir"
/>
<div v-if="installError" class="mt-1 rounded-md bg-red-600/10 p-4">
<div class="flex">
<div class="flex-shrink-0">
<XCircleIcon class="h-5 w-5 text-red-600" aria-hidden="true" />
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-red-600">
{{ installError }}
</h3>
</div>
</div>
</div>
</template>
<template #buttons>
<LoadingButton
@click="() => install()"
:loading="installLoading"
:disabled="installLoading"
type="submit"
class="ml-2 w-full sm:w-fit"
>
Install
</LoadingButton>
<button
type="button"
class="mt-3 inline-flex w-full justify-center rounded-md bg-zinc-800 px-3 py-2 text-sm font-semibold text-zinc-100 shadow-sm ring-1 ring-inset ring-zinc-700 hover:bg-zinc-900 sm:mt-0 sm:w-auto"
@click="cancel"
ref="cancelButtonRef"
>
Cancel
</button>
</template>
</ModalTemplate>
</template>
<script setup lang="ts">
import { invoke } from "@tauri-apps/api/core";
import { XCircleIcon } from "@heroicons/vue/24/solid";
const model = defineModel<{ gameId: string; versionId: string }>({
required: true,
});
const { game, status } = await useGame(model.value.gameId);
const versionOptions = await invoke<Array<VersionOption>>(
"fetch_game_version_options",
{
gameId: game.id,
}
);
const version = versionOptions.find(
(v) => v.versionId === model.value.versionId
)!;
const installDirs = await invoke<string[]>("fetch_download_dir_stats");
const installDir = ref(0);
function cancel() {
// @ts-expect-error
model.value = undefined;
}
const installError = ref<string | undefined>();
const installLoading = ref(false);
async function install() {
try {
installLoading.value = true;
await invoke("download_game", {
gameId: game.id,
versionId: model.value.versionId,
installDir: installDir.value,
targetPlatform: version.platform,
});
cancel();
} catch (error) {
installError.value = (error as string).toString();
}
installLoading.value = false;
}
</script>
@@ -0,0 +1,141 @@
<template>
<Listbox
as="div"
v-model="model.overrideHandler"
class="mt-6"
v-if="handlers.length > 1"
>
<ListboxLabel class="block text-sm/6 font-medium text-white"
>Launch method</ListboxLabel
>
<div class="relative mt-2">
<ListboxButton
class="grid w-full cursor-default grid-cols-1 rounded-md bg-white/5 py-1.5 pr-2 pl-3 text-left text-white outline-1 -outline-offset-1 outline-white/10 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-500 sm:text-sm/6"
>
<span
v-if="currentHandler"
class="col-start-1 row-start-1 truncate pr-6"
>{{ currentHandler.name }}</span
>
<span
v-else
class="col-start-1 row-start-1 truncate pr-6 italic text-zinc-400"
>Automatic</span
>
<ChevronUpDownIcon
class="col-start-1 row-start-1 size-5 self-center justify-self-end text-zinc-400 sm:size-4"
aria-hidden="true"
/>
</ListboxButton>
<transition
leave-active-class="transition ease-in duration-100"
leave-from-class=""
leave-to-class="opacity-0"
>
<ListboxOptions
class="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-zinc-800 py-1 text-base outline-1 -outline-offset-1 outline-white/10 sm:text-sm"
>
<ListboxOption
as="template"
:value="undefined"
v-slot="{ active, selected }"
>
<li
:class="[
active ? 'bg-blue-500 text-white outline-hidden' : 'text-white',
'relative cursor-default py-2 pr-9 pl-3 select-none',
]"
>
<span
:class="[
selected ? 'font-semibold' : 'font-normal',
'block truncate italic',
]"
>Automatic</span
>
<span class="block truncate text-xs text-zinc-400"
>Pick the best method for this game.</span
>
<span
v-if="selected"
:class="[
active ? 'text-white' : 'text-blue-400',
'absolute inset-y-0 right-0 flex items-center pr-4',
]"
>
<CheckIcon class="size-5" aria-hidden="true" />
</span>
</li>
</ListboxOption>
<ListboxOption
as="template"
v-for="handler in handlers"
:key="handler.id"
:value="handler.id"
v-slot="{ active, selected }"
>
<li
:class="[
active ? 'bg-blue-500 text-white outline-hidden' : 'text-white',
'relative cursor-default py-2 pr-9 pl-3 select-none',
]"
>
<span
:class="[
selected ? 'font-semibold' : 'font-normal',
'block truncate',
]"
>{{ handler.name }}</span
>
<span class="block truncate text-xs text-zinc-400">{{
handler.description
}}</span>
<span
v-if="selected"
:class="[
active ? 'text-white' : 'text-blue-400',
'absolute inset-y-0 right-0 flex items-center pr-4',
]"
>
<CheckIcon class="size-5" aria-hidden="true" />
</span>
</li>
</ListboxOption>
</ListboxOptions>
</transition>
</div>
<p class="mt-2 text-sm text-zinc-400">
Override how this game is launched.
</p>
</Listbox>
</template>
<script setup lang="ts">
import { invoke } from "@tauri-apps/api/core";
import {
Listbox,
ListboxButton,
ListboxLabel,
ListboxOption,
ListboxOptions,
} from "@headlessui/vue";
import { ChevronUpDownIcon } from "@heroicons/vue/16/solid";
import { CheckIcon } from "@heroicons/vue/20/solid";
import type { GameVersion } from "~/types";
type ProcessHandlerOption = { id: string; name: string; description: string };
const model = defineModel<GameVersion["userConfiguration"]>({ required: true });
const props = defineProps<{ gameId: string }>();
const handlers = await invoke<ProcessHandlerOption[]>("get_process_handlers", {
id: props.gameId,
});
const currentHandler = computed(() =>
handlers.find((v) => v.id == model.value.overrideHandler),
);
</script>
@@ -0,0 +1,41 @@
<template>
<div>
<label for="launch" class="block text-sm/6 font-medium text-zinc-100"
>Launch string template</label
>
<div class="mt-2">
<input
type="text"
name="launch"
id="launch"
class="block w-full rounded-md bg-zinc-800 px-3 py-1.5 text-base text-zinc-100 outline-1 -outline-offset-1 outline-zinc-800 placeholder:text-zinc-400 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-600 sm:text-sm/6"
placeholder="{}"
aria-describedby="launch-description"
v-model="model.launchTemplate"
/>
</div>
<p class="mt-2 text-sm text-zinc-400" id="launch-description">
Override the launch string. Passed to system's default shell, and replaces
"{}" with the command to start the game.
<span class="font-semibold text-zinc-200"
>Leaving it blank will cause the game not to start.</span
>
</p>
<ProtonSelector v-model="model" v-if="$props.protonEnabled" />
<HandlerSelector v-model="model" :game-id="$props.gameId" />
</div>
</template>
<script setup lang="ts">
import type { GameVersion } from "~/types";
import ProtonSelector from "./ProtonSelector.vue";
import HandlerSelector from "./HandlerSelector.vue";
const model = defineModel<GameVersion["userConfiguration"]>({ required: true });
const props = defineProps<{
protonEnabled: boolean;
gameId: string;
}>();
</script>
@@ -0,0 +1,189 @@
<template>
<Listbox
as="div"
v-model="model.overrideProtonPath"
class="mt-6"
>
<ListboxLabel class="block text-sm/6 font-medium text-white"
>Proton override</ListboxLabel
>
<div class="relative mt-2">
<ListboxButton
class="grid w-full cursor-default grid-cols-1 rounded-md bg-white/5 py-1.5 pr-2 pl-3 text-left text-white outline-1 -outline-offset-1 outline-white/10 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-500 sm:text-sm/6"
>
<span
v-if="currentProtonPath"
class="col-start-1 row-start-1 truncate pr-6"
>{{ currentProtonPath.name }} ({{ currentProtonPath.path }})</span
>
<span
v-else
class="col-start-1 row-start-1 truncate pr-6 italic text-zinc-400"
>No override configured</span
>
<ChevronUpDownIcon
class="col-start-1 row-start-1 size-5 self-center justify-self-end text-zinc-400 sm:size-4"
aria-hidden="true"
/>
</ListboxButton>
<transition
leave-active-class="transition ease-in duration-100"
leave-from-class=""
leave-to-class="opacity-0"
>
<ListboxOptions
class="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-zinc-800 py-1 text-base outline-1 -outline-offset-1 outline-white/10 sm:text-sm"
>
<ListboxOption
as="template"
:value="undefined"
v-slot="{ active, selected }"
>
<li
:class="[
active ? 'bg-blue-500 text-white outline-hidden' : 'text-white',
'relative cursor-default py-2 pr-9 pl-3 select-none',
]"
>
<span
:class="[
selected ? 'font-semibold' : 'font-normal',
'block truncate italic',
]"
>Use global default</span
>
<span
v-if="selected"
:class="[
active ? 'text-white' : 'text-blue-400',
'absolute inset-y-0 right-0 flex items-center pr-4',
]"
>
<CheckIcon class="size-5" aria-hidden="true" />
</span>
</li>
</ListboxOption>
<h1 class="text-white text-sm font-semibold bg-zinc-900 py-2 px-2">
Auto-discovered
</h1>
<ListboxOption
as="template"
v-if="protonPaths.autodiscovered.length > 0"
v-for="proton in protonPaths.autodiscovered"
:key="proton.path"
:value="proton.path"
v-slot="{ active, selected }"
>
<li
:class="[
active ? 'bg-blue-500 text-white outline-hidden' : 'text-white',
'relative cursor-default py-2 pr-9 pl-3 select-none',
]"
>
<span
:class="[
selected ? 'font-semibold' : 'font-normal',
'block truncate',
]"
>{{ proton.name }} ({{ proton.path }})</span
>
<span
v-if="selected"
:class="[
active ? 'text-white' : 'text-blue-400',
'absolute inset-y-0 right-0 flex items-center pr-4',
]"
>
<CheckIcon class="size-5" aria-hidden="true" />
</span>
</li>
</ListboxOption>
<li v-else class="italic text-zinc-400 py-2 pr-9 pl-3">
No auto-discovered layers.
</li>
<h1 class="text-white text-sm font-semibold bg-zinc-900 py-2 px-2">
Manually added
</h1>
<ListboxOption
as="template"
v-if="protonPaths.custom.length > 0"
v-for="proton in protonPaths.custom"
:key="proton.path"
:value="proton.path"
v-slot="{ active, selected }"
>
<li
:class="[
active ? 'bg-blue-500 text-white outline-hidden' : 'text-white',
'relative cursor-default py-2 pr-9 pl-3 select-none',
]"
>
<span
:class="[
selected ? 'font-semibold' : 'font-normal',
'block truncate',
]"
>{{ proton.name }} ({{ proton.path }})</span
>
<span
v-if="selected"
:class="[
active ? 'text-white' : 'text-blue-400',
'absolute inset-y-0 right-0 flex items-center pr-4',
]"
>
<CheckIcon class="size-5" aria-hidden="true" />
</span>
</li>
</ListboxOption>
<li v-else class="italic text-zinc-400 py-2 pr-9 pl-3">
No manually added layers.
</li>
</ListboxOptions>
</transition>
</div>
<p class="mt-2 text-sm text-zinc-400" id="launch-description">
Override the Proton layer used to launch this game. You can add or remove
your custom Proton layer paths in
<PageWidget to="/settings/compat">
<WrenchIcon class="size-3" />
Settings </PageWidget
>.
</p>
</Listbox>
</template>
<script setup lang="ts">
import { invoke } from "@tauri-apps/api/core";
import type { ProtonPath } from "~/composables/game";
import {
Listbox,
ListboxButton,
ListboxLabel,
ListboxOption,
ListboxOptions,
} from "@headlessui/vue";
import { ChevronUpDownIcon } from "@heroicons/vue/16/solid";
import { CheckIcon } from "@heroicons/vue/20/solid";
import { WrenchIcon } from "@heroicons/vue/24/solid";
import type { GameVersion } from "~/types";
const model = defineModel<GameVersion["userConfiguration"]>({ required: true });
const protonPaths = await invoke<{
autodiscovered: ProtonPath[];
custom: ProtonPath[];
default?: string;
}>("fetch_proton_paths");
const currentProtonPath = computed(
() =>
protonPaths.autodiscovered.find(
(v) => v.path == model.value.overrideProtonPath,
) ??
protonPaths.custom.find((v) => v.path == model.value.overrideProtonPath),
);
</script>
@@ -0,0 +1,36 @@
<template>
<div class="space-y-8">
<div class="flex flex-row items-center justify-between">
<div>
<h3 class="text-sm font-medium leading-6 text-zinc-100">
Enable update checks
</h3>
<p class="mt-1 text-sm leading-6 text-zinc-400">
Drop will automatically check for updates from your server
</p>
</div>
<Switch
v-model="model.enableUpdates"
:class="[
model.enableUpdates ? 'bg-blue-600' : 'bg-zinc-700',
'relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out',
]"
>
<span
:class="[
model.enableUpdates ? 'translate-x-5' : 'translate-x-0',
'pointer-events-none relative inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out',
]"
/>
</Switch>
</div>
</div>
</template>
<script setup lang="ts">
import { Switch } from "@headlessui/vue";
import type { GameVersion } from '~/types';
const model = defineModel<GameVersion["userConfiguration"]>({ required: true });
</script>
@@ -0,0 +1,142 @@
<template>
<ModalTemplate size-class="max-w-4xl" v-model="open">
<template #default>
<div class="flex flex-row gap-x-4 min-h-96">
<nav class="flex flex-1 flex-col" aria-label="Sidebar">
<ul role="list" class="-mx-2 space-y-1">
<li v-for="(tab, tabIdx) in tabs" :key="tab.name">
<button
@click="() => (currentTabIndex = tabIdx)"
:class="[
tabIdx == currentTabIndex
? 'bg-zinc-800 text-zinc-100'
: 'text-zinc-400 hover:bg-zinc-800 hover:text-zinc-100',
'transition w-full group flex gap-x-3 rounded-md p-2 text-sm/6 font-semibold',
]"
>
<component
:is="tab.icon"
:class="[
tabIdx == currentTabIndex
? 'text-zinc-100'
: 'text-gray-400 group-hover:text-zinc-100',
'size-6 shrink-0',
]"
aria-hidden="true"
/>
{{ tab.name }}
</button>
</li>
</ul>
</nav>
<div class="border-l-2 border-zinc-800 w-full grow pl-4">
<component
v-model="configuration"
:is="tabs[currentTabIndex]?.page"
:proton-enabled="protonEnabled"
:game-id="props.gameId"
/>
</div>
</div>
<div v-if="saveError" class="mt-5 rounded-md bg-red-600/10 p-4">
<div class="flex">
<div class="flex-shrink-0">
<XCircleIcon class="h-5 w-5 text-red-600" aria-hidden="true" />
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-red-600">
{{ saveError }}
</h3>
</div>
</div>
</div>
</template>
<template #buttons>
<LoadingButton
@click="() => save()"
:loading="saveLoading"
type="submit"
class="ml-2 w-full sm:w-fit"
>
Save
</LoadingButton>
<button
@click="() => (open = false)"
type="button"
class="mt-3 inline-flex w-full justify-center rounded-md bg-zinc-800 px-3 py-2 text-sm font-semibold text-zinc-100 shadow-sm ring-1 ring-inset ring-zinc-700 hover:bg-zinc-900 sm:mt-0 sm:w-auto"
ref="cancelButtonRef"
>
Cancel
</button>
</template>
</ModalTemplate>
</template>
<script setup lang="ts">
import type { Component } from "vue";
import {
RocketLaunchIcon,
ServerIcon,
TrashIcon,
XCircleIcon,
} from "@heroicons/vue/20/solid";
import Launch from "./GameOptions/Launch.vue";
import Updates from "./GameOptions/Updates.vue";
import { invoke } from "@tauri-apps/api/core";
import { ArrowPathIcon } from "@heroicons/vue/24/solid";
import type { GameVersion } from "~/types";
const appState = useAppState();
const open = defineModel<boolean>();
const props = defineProps<{ gameId: string }>();
const game = await useGame(props.gameId);
const configuration: Ref<GameVersion["userConfiguration"]> = ref(game.version.value!.userConfiguration);
const hasWindows = !!(
game.version.value!.setups.find((v) => v.platform === "Windows") ??
game.version.value!.launches.find((v) => v.platform === "Windows")
);
const protonEnabled = !!(
appState.value!.umuState !== "NotNeeded" && hasWindows
);
const tabs: Array<{ name: string; icon: Component; page: Component }> = [
{
name: "Launch",
icon: RocketLaunchIcon,
page: Launch,
},
{
name: "Updates",
icon: ArrowPathIcon,
page: Updates,
},
{
name: "Storage",
icon: ServerIcon,
page: h("div"),
},
];
const currentTabIndex = ref(0);
const saveLoading = ref(false);
const saveError = ref<undefined | string>();
async function save() {
saveLoading.value = true;
saveError.value = undefined;
try {
await invoke("update_game_configuration", {
gameId: game.game.id,
options: configuration.value,
});
open.value = false;
saveError.value = undefined;
} catch (e) {
saveError.value = (e as unknown as string).toString();
}
saveLoading.value = false;
}
</script>
@@ -0,0 +1,232 @@
<template>
<!-- Do not add scale animations to this: https://stackoverflow.com/a/35683068 -->
<div class="inline-flex divide-x divide-zinc-900">
<button
type="button"
@click="() => fetchStatusStyleData($props.status).action()"
:class="[
fetchStatusStyleData($props.status).style,
showDropdown ? 'rounded-l-md' : 'rounded-md',
'inline-flex uppercase font-display items-center gap-x-2 px-4 py-3 text-md font-semibold shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2',
]"
>
<component
:is="fetchStatusStyleData($props.status).icon"
class="-mr-0.5 size-5"
aria-hidden="true"
/>
{{ fetchStatusStyleData($props.status).buttonName }}
</button>
<Menu
v-if="showDropdown"
as="div"
class="relative inline-block text-left grow"
>
<div class="h-full">
<MenuButton
:class="[
fetchStatusStyleData($props.status).style,
'inline-flex w-full h-full justify-center items-center rounded-r-md px-1 py-2 text-sm font-semibold shadow-sm group',
'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2',
]"
>
<ChevronDownIcon class="size-5" aria-hidden="true" />
</MenuButton>
</div>
<transition
enter-active-class="transition ease-out duration-100"
enter-from-class="transform opacity-0 scale-95"
enter-to-class="transform opacity-100 scale-100"
leave-active-class="transition ease-in duration-75"
leave-from-class="transform opacity-100 scale-100"
leave-to-class="transform opacity-0 scale-95"
>
<MenuItems
class="absolute right-0 z-[500] mt-2 w-32 origin-top-right rounded-md bg-zinc-900 shadow-lg ring-1 ring-zinc-100/5 focus:outline-none"
>
<div class="py-1">
<MenuItem v-slot="{ active }">
<button
@click="() => emit('install')"
:class="[
active
? 'bg-zinc-800 text-zinc-100 outline-none'
: 'text-zinc-400',
'w-full px-4 py-2 text-sm inline-flex justify-between',
]"
>
Install
<ArrowDownTrayIcon class="size-5" />
</button>
</MenuItem>
<MenuItem v-if="showOptions" v-slot="{ active }">
<button
@click="() => emit('options')"
:class="[
active
? 'bg-zinc-800 text-zinc-100 outline-none'
: 'text-zinc-400',
'w-full px-4 py-2 text-sm inline-flex justify-between',
]"
>
Options
<Cog6ToothIcon class="size-5" />
</button>
</MenuItem>
<MenuItem v-slot="{ active }">
<button
@click="() => emit('uninstall')"
:class="[
active
? 'bg-zinc-800 text-zinc-100 outline-none'
: 'text-zinc-400',
'w-full inline-flex px-4 py-2 text-sm justify-between',
]"
>
Uninstall
<TrashIcon class="size-5" />
</button>
</MenuItem>
</div>
</MenuItems>
</transition>
</Menu>
</div>
</template>
<script setup lang="ts">
import {
ArrowDownTrayIcon,
ChevronDownIcon,
PlayIcon,
QueueListIcon,
ServerIcon,
StopIcon,
WrenchIcon,
} from "@heroicons/vue/20/solid";
import type { Component } from "vue";
import {
type EmptyGameStatusEnum,
InstalledType,
type GameStatus,
} from "~/types.js";
import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/vue";
import { Cog6ToothIcon, TrashIcon } from "@heroicons/vue/24/outline";
import { ArrowsRightLeftIcon, ArrowUpTrayIcon } from "@heroicons/vue/24/solid";
const props = defineProps<{ status: GameStatus }>();
const emit = defineEmits<{
(e: "install"): void;
(e: "launch"): void;
(e: "queue"): void;
(e: "uninstall"): void;
(e: "kill"): void;
(e: "options"): void;
(e: "resume"): void;
}>();
interface StatusStyleData {
style: string;
buttonName: string;
icon: Component;
action: () => void;
}
function fetchStatusStyleData(status: GameStatus): StatusStyleData {
if (status.type === "Installed") {
if (status.install_type.type === InstalledType.Installed) {
return {
style:
"bg-green-600 text-white hover:bg-green-500 focus-visible:outline-green-600 hover:bg-green-500",
buttonName: "Play",
icon: PlayIcon,
action: () => emit("launch"),
};
}
if (status.install_type.type === InstalledType.SetupRequired) {
return {
style:
"bg-yellow-600 text-white hover:bg-yellow-500 focus-visible:outline-yellow-600 hover:bg-yellow-500",
buttonName: "Setup",
icon: WrenchIcon,
action: () => emit("launch"),
};
}
if (status.install_type.type === InstalledType.PartiallyInstalled) {
return {
style:
"bg-blue-600 text-white hover:bg-blue-500 focus-visible:outline-blue-600 hover:bg-blue-500",
buttonName: "Resume",
icon: ArrowDownTrayIcon,
action: () => emit("resume"),
};
}
throw "Non-exhaustive install type: " + JSON.stringify(status.install_type);
}
return {
style: styles[status.type],
buttonName: buttonNames[status.type],
icon: buttonIcons[status.type],
action: buttonActions[status.type],
};
}
const showDropdown = computed(() => props.status.type === "Installed");
const showOptions = computed(
() =>
showDropdown.value &&
props.status.type === "Installed" &&
props.status.install_type.type !== InstalledType.PartiallyInstalled,
);
const styles: { [key in EmptyGameStatusEnum]: string } = {
Remote:
"bg-blue-600 text-white hover:bg-blue-500 focus-visible:outline-blue-600 hover:bg-blue-500",
Queued:
"bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:outline-zinc-700 hover:bg-zinc-700",
Downloading:
"bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:outline-zinc-700 hover:bg-zinc-700",
Validating:
"bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:outline-zinc-700 hover:bg-zinc-700",
Updating:
"bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:outline-zinc-700 hover:bg-zinc-700",
Uninstalling:
"bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:outline-zinc-700 hover:bg-zinc-700",
Running:
"bg-zinc-800 text-white hover:bg-zinc-700 focus-visible:outline-zinc-700 hover:bg-zinc-700",
};
const buttonNames: { [key in EmptyGameStatusEnum]: string } = {
Remote: "Install",
Queued: "Queued",
Downloading: "Downloading",
Validating: "Validating",
Updating: "Updating",
Uninstalling: "Uninstalling",
Running: "Stop",
};
const buttonIcons: { [key in EmptyGameStatusEnum]: Component } = {
Remote: ArrowDownTrayIcon,
Queued: QueueListIcon,
Downloading: ArrowDownTrayIcon,
Validating: ServerIcon,
Updating: ArrowDownTrayIcon,
Uninstalling: TrashIcon,
Running: StopIcon,
};
const buttonActions: { [key in EmptyGameStatusEnum]: () => void } = {
Remote: () => emit("install"),
Queued: () => emit("queue"),
Downloading: () => emit("queue"),
Validating: () => emit("queue"),
Updating: () => emit("queue"),
Uninstalling: () => {},
Running: () => emit("kill"),
};
</script>
+97
View File
@@ -0,0 +1,97 @@
<template>
<div class="h-16 bg-zinc-950 flex flex-row justify-between">
<div class="flex flex-row grow items-center pl-5 pr-2 py-3">
<div class="inline-flex items-center gap-x-10">
<NuxtLink to="/store">
<Wordmark class="h-8 mb-0.5" />
</NuxtLink>
<nav class="inline-flex items-center mt-0.5">
<ol class="inline-flex items-center gap-x-6">
<NuxtLink
v-for="(nav, navIdx) in navigation"
:class="[
'transition uppercase font-display font-semibold text-md',
navIdx === currentNavigation
? 'text-zinc-100'
: 'text-zinc-400 hover:text-zinc-200',
]"
:href="nav.route"
>
{{ nav.label }}
</NuxtLink>
</ol>
</nav>
</div>
<div
@mousedown="() => window.startDragging()"
class="flex cursor-pointer grow h-full"
/>
<div class="inline-flex items-center">
<ol class="inline-flex gap-3">
<HeaderProtonSupportWidget />
<HeaderQueueWidget :object="currentQueueObject" />
<li v-for="(item, itemIdx) in quickActions">
<HeaderWidget
@click="item.action"
:notifications="item.notifications"
>
<component class="h-5" :is="item.icon" />
</HeaderWidget>
</li>
<OfflineHeaderWidget v-if="state?.status === AppStatus.Offline" />
<HeaderUserWidget />
</ol>
</div>
</div>
<WindowControl />
</div>
</template>
<script setup lang="ts">
import { BellIcon, UserGroupIcon } from "@heroicons/vue/16/solid";
import { AppStatus, type NavigationItem, type QuickActionNav } from "../types";
import HeaderWidget from "./HeaderWidget.vue";
import { getCurrentWindow } from "@tauri-apps/api/window";
const window = getCurrentWindow();
const state = useAppState();
const navigation: Array<NavigationItem> = [
{
prefix: "/store",
route: "/store",
label: "Store",
},
{
prefix: "/library",
route: "/library",
label: "Library",
},
{
prefix: "/community",
route: "/community",
label: "Community",
},
{
prefix: "/news",
route: "/news",
label: "News",
},
];
const { currentNavigation } = useCurrentNavigationIndex(navigation);
const quickActions: Array<QuickActionNav> = [
{
icon: UserGroupIcon,
action: async () => {},
},
{
icon: BellIcon,
action: async () => {},
},
];
const queue = useQueueState();
const currentQueueObject = computed(() => queue.value.queue.at(0));
</script>
+5
View File
@@ -0,0 +1,5 @@
<template>
<button class="transition h-full aspect-square text-zinc-300 hover:bg-zinc-800 hover:text-zinc-100 p-[1.1rem]">
<slot />
</button>
</template>
@@ -0,0 +1,24 @@
<template>
<NuxtLink
v-if="onLinux"
to="/settings/compat"
>
<HeaderWidget :problem="protonError">
<img
src="/proton-logo.png"
class="relative z-50 size-5 brightness-[30%]"
/>
</HeaderWidget>
</NuxtLink>
</template>
<script setup lang="ts">
const appState = useAppState();
const onLinux = appState.value?.umuState !== "NotNeeded";
const paths = onLinux ? await useProtonPaths() : undefined;
const protonError = computed(
() =>
appState.value?.umuState === "NotInstalled" || !paths?.data.value.default,
);
</script>
@@ -0,0 +1,26 @@
<script setup lang="ts">
import { ArrowDownTrayIcon } from "@heroicons/vue/20/solid";
const props = defineProps<{ object?: QueueState["queue"][0] }>();
</script>
<template>
<NuxtLink
to="/queue"
class="transition inline-flex items-center cursor-pointer rounded-sm px-4 py-1.5 bg-zinc-900 hover:bg-zinc-800 relative"
>
<ArrowDownTrayIcon
:class="[
'h-5 z-50',
props.object
? 'text-white hover:text-zinc-300'
: 'text-zinc-600 hover:text-zinc-300',
]"
/>
<div
v-if="props.object?.dl_progress"
class="transition-all absolute left-0 top-0 bottom-0 bg-blue-600 z-10"
:style="{ width: `${props.object.dl_progress * 99 + 1}%` }"
/>
</NuxtLink>
</template>
@@ -0,0 +1,113 @@
<template>
<Menu v-if="state?.user" as="div" class="relative inline-block">
<MenuButton>
<HeaderWidget>
<div class="inline-flex items-center text-zinc-300 hover:text-white">
<img :src="profilePictureUrl" class="w-5 h-5 rounded-sm" />
<span class="ml-2 text-sm font-bold">{{
state.user.displayName
}}</span>
<ChevronDownIcon class="ml-3 h-4" />
</div>
</HeaderWidget>
</MenuButton>
<transition
enter-active-class="transition ease-out duration-100"
enter-from-class="transform opacity-0 scale-95"
enter-to-class="transform opacity-100 scale-100"
leave-active-class="transition ease-in duration-75"
leave-from-class="transform opacity-100 scale-100"
leave-to-class="transform opacity-0 scale-95"
>
<MenuItems
class="absolute bg-zinc-900 right-0 top-10 z-50 w-56 origin-top-right focus:outline-none shadow-md"
>
<div class="flex-col gap-y-2">
<NuxtLink
to="/id/me"
class="transition inline-flex items-center w-full py-3 px-4 hover:bg-zinc-800"
>
<div class="inline-flex items-center text-zinc-300">
<img :src="profilePictureUrl" class="w-5 h-5 rounded-sm" />
<span class="ml-2 text-sm font-bold">{{
state.user.displayName
}}</span>
</div>
</NuxtLink>
<div class="h-0.5 rounded-full w-full bg-zinc-800" />
<div class="flex flex-col mb-1">
<MenuItem v-if="state.user.admin" v-slot="{ active }">
<a
:href="adminUrl"
target="_blank"
:class="[
active ? 'bg-zinc-800 text-zinc-100' : 'text-zinc-400',
'transition block px-4 py-2 text-sm',
]"
>
Admin Dashboard
</a>
</MenuItem>
<MenuItem
v-for="(nav, navIdx) in navigation"
v-slot="{ active, close }"
>
<button
@click="() => navigate(close, nav)"
:href="nav.route"
:class="[
active ? 'bg-zinc-800 text-zinc-100' : 'text-zinc-400',
'transition text-left block px-4 py-2 text-sm',
]"
>
{{ nav.label }}
</button>
</MenuItem>
</div>
</div>
</MenuItems>
</transition>
</Menu>
</template>
<script setup lang="ts">
import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/vue";
import { ChevronDownIcon } from "@heroicons/vue/16/solid";
import type { NavigationItem } from "../types";
import HeaderWidget from "./HeaderWidget.vue";
import { useAppState } from "~/composables/app-state";
import { invoke } from "@tauri-apps/api/core";
const open = ref(false);
const router = useRouter();
router.afterEach(() => {
open.value = false;
});
const state = useAppState();
const profilePictureUrl: string = await useObject(
state.value?.user?.profilePictureObjectId ?? ""
);
const adminUrl: string = await invoke("gen_drop_url", {
path: "/admin",
});
function navigate(close: () => any, to: NavigationItem) {
close();
router.push(to.route);
}
const navigation: NavigationItem[] = [
{
label: "App settings",
route: "/settings",
prefix: "",
},
{
label: "Quit Drop",
route: "/quit",
prefix: "",
},
];
</script>
+34
View File
@@ -0,0 +1,34 @@
<template>
<div
:class="[
'transition inline-flex items-center cursor-pointer rounded-sm px-4 py-1.5 text-zinc-600 hover:text-zinc-300 relative',
props.notifications !== undefined
? 'bg-blue-400'
: props.problem !== undefined && props.problem
? 'bg-red-400'
: 'bg-zinc-900 hover:bg-zinc-800',
]"
>
<slot />
<div
v-if="props.notifications !== undefined"
class="text-zinc-900 absolute top-0 right-0 translate-x-[30%] translate-y-[-30%] text-xs bg-blue-400 rounded-full w-3.5 h-3.5 text-center"
>
{{ props.notifications }}
</div>
<div
v-else-if="props.problem !== undefined && props.problem"
class="text-zinc-100 absolute top-0 right-0 translate-x-[30%] translate-y-[-30%] text-sm bg-red-400 rounded-full w-5 h-5 text-center"
>
!
</div>
</div>
</template>
<script setup lang="ts">
const props = defineProps<{
notifications?: number;
problem?: boolean;
class?: string;
}>();
</script>
@@ -0,0 +1,171 @@
<template>
<div
class="grid min-h-full grid-cols-1 grid-rows-[1fr,auto,1fr] lg:grid-cols-[max(50%,36rem),1fr]"
>
<header
class="mx-auto w-full max-w-7xl px-6 pt-6 sm:pt-10 lg:col-span-2 lg:col-start-1 lg:row-start-1 lg:px-8"
>
<Logo class="h-10 w-auto sm:h-12" />
</header>
<main
class="mx-auto w-full max-w-7xl px-6 py-24 sm:py-32 lg:col-span-2 lg:col-start-1 lg:row-start-2 lg:px-8"
>
<div class="max-w-lg">
<slot />
<div class="mt-10">
<div>
<div v-if="loading" role="status">
<svg
aria-hidden="true"
class="w-5 h-5 text-transparent animate-spin fill-white"
viewBox="0 0 100 101"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z"
fill="currentColor"
/>
<path
d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z"
fill="currentFill"
/>
</svg>
<span class="sr-only">Loading...</span>
</div>
<span class="inline-flex gap-x-8 items-center" v-else>
<button
@click="() => authWrapper_wrapper()"
:disabled="loading"
class="px-3 py-1 inline-flex items-center gap-x-2 bg-zinc-700 rounded text-sm text-left font-semibold leading-7 text-white"
>
Sign in with your browser <ArrowTopRightOnSquareIcon class="size-4" />
</button>
<NuxtLink href="/auth/code" class="text-zinc-100 text-sm hover:text-zinc-300">
Use a code &rarr;
</NuxtLink>
</span>
</div>
<div class="mt-5" v-if="offerManual">
<h1 class="text-zinc-100 font-semibold">Having trouble?</h1>
<p class="mt-1 text-zinc-400 text-sm">
You can manually enter the token from your web browser.
</p>
<div class="inline-flex gap-x-1 mt-2 w-full">
<input
id="token"
name="token"
type="text"
autocomplete="token"
required
class="grow block w-full rounded-md border-0 py-1.5 px-3 shadow-sm bg-zinc-950/20 text-zinc-300 ring-1 ring-inset ring-zinc-800 placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-blue-600 sm:text-sm sm:leading-6"
v-model="manualToken"
/>
<LoadingButton
:loading="manualLoading"
@click="() => continueManual_wrapper()"
class="w-fit"
>
Submit
</LoadingButton>
</div>
</div>
<div v-if="error" class="mt-5 rounded-md bg-red-600/10 p-4">
<div class="flex">
<div class="flex-shrink-0">
<XCircleIcon class="h-5 w-5 text-red-600" aria-hidden="true" />
</div>
<div class="ml-3">
<h3 class="text-sm font-medium text-red-600">
{{ error }}
</h3>
</div>
</div>
</div>
</div>
</div>
</main>
<footer class="self-end lg:col-span-2 lg:col-start-1 lg:row-start-3">
<div class="border-t border-blue-600 bg-zinc-900 py-10">
<nav
class="mx-auto flex w-full max-w-7xl items-center gap-x-4 px-6 text-sm leading-7 text-zinc-400 lg:px-8"
>
<a href="#">Documentation</a>
<svg
viewBox="0 0 2 2"
aria-hidden="true"
class="h-0.5 w-0.5 fill-zinc-700"
>
<circle cx="1" cy="1" r="1" />
</svg>
<a href="#">Troubleshooting</a>
<svg
viewBox="0 0 2 2"
aria-hidden="true"
class="h-0.5 w-0.5 fill-zinc-700"
>
<circle cx="1" cy="1" r="1" />
</svg>
<NuxtLink to="/setup/server">Switch instance</NuxtLink>
</nav>
</div>
</footer>
<div
class="hidden lg:relative lg:col-start-2 lg:row-start-1 lg:row-end-4 lg:block"
>
<img
src="@/assets/wallpaper.jpg"
alt=""
class="absolute inset-0 h-full w-full object-cover"
/>
</div>
</div>
</template>
<script setup lang="ts">
import { XCircleIcon } from "@heroicons/vue/16/solid";
import { ArrowTopRightOnSquareIcon } from "@heroicons/vue/20/solid";
import { invoke } from "@tauri-apps/api/core";
const loading = ref(false);
const error = ref<string | undefined>();
let offerManualTimeout: NodeJS.Timeout | undefined;
const offerManual = ref(false);
const manualToken = ref("");
const manualLoading = ref(false);
async function auth() {
await invoke("auth_initiate");
}
function authWrapper_wrapper() {
error.value = undefined;
loading.value = true;
auth().catch((e) => {
loading.value = false;
error.value = e;
if (offerManualTimeout) clearTimeout(offerManualTimeout);
});
offerManualTimeout = setTimeout(() => {
offerManual.value = true;
}, 2000);
}
async function continueManual() {
await invoke("manual_recieve_handshake", { token: manualToken.value });
}
function continueManual_wrapper() {
loading.value = true;
continueManual()
.catch((e) => {
error.value = e;
})
.finally(() => {
loading.value = false;
});
}
</script>
@@ -0,0 +1,87 @@
<template>
<Listbox as="div" v-model="installDir">
<ListboxLabel class="block text-sm/6 font-medium text-zinc-100"
>Install to</ListboxLabel
>
<div class="relative mt-2">
<ListboxButton
class="relative w-full cursor-default rounded-md bg-zinc-800 py-1.5 pl-3 pr-10 text-left text-zinc-100 shadow-sm ring-1 ring-inset ring-zinc-700 focus:outline-none focus:ring-2 focus:ring-blue-600 sm:text-sm/6"
>
<span class="block truncate">{{ installDirs[installDir] }}</span>
<span
class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"
>
<ChevronUpDownIcon class="h-5 w-5 text-gray-400" aria-hidden="true" />
</span>
</ListboxButton>
<transition
leave-active-class="transition ease-in duration-100"
leave-from-class="opacity-100"
leave-to-class="opacity-0"
>
<ListboxOptions
class="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-zinc-900 py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm"
>
<ListboxOption
as="template"
v-for="(dir, dirIdx) in installDirs"
:key="dir"
:value="dirIdx"
v-slot="{ active, selected }"
>
<li
:class="[
active ? 'bg-blue-600 text-white' : 'text-zinc-300',
'relative cursor-default select-none py-2 pl-3 pr-9',
]"
>
<span
:class="[
selected ? 'font-semibold text-zinc-100' : 'font-normal',
'block truncate',
]"
>{{ dir }}</span
>
<span
v-if="selected"
:class="[
active ? 'text-white' : 'text-blue-600',
'absolute inset-y-0 right-0 flex items-center pr-4',
]"
>
<CheckIcon class="h-5 w-5" aria-hidden="true" />
</span>
</li>
</ListboxOption>
</ListboxOptions>
</transition>
</div>
<div class="text-zinc-400 text-sm mt-2">
Add more install directories in
<PageWidget to="/settings/downloads">
<WrenchIcon class="size-3" />
Settings
</PageWidget>
</div>
</Listbox>
</template>
<script setup lang="ts">
import {
Listbox,
ListboxButton,
ListboxLabel,
ListboxOption,
ListboxOptions,
} from "@headlessui/vue";
import {
CheckIcon,
ChevronUpDownIcon,
WrenchIcon,
} from "@heroicons/vue/20/solid";
const installDir = defineModel<number>({ required: true });
const { installDirs } = defineProps<{ installDirs: string[] }>();
</script>
+367
View File
@@ -0,0 +1,367 @@
<template>
<div class="flex flex-col h-full">
<div class="mb-3 inline-flex gap-x-2">
<div
class="relative transition-transform duration-300 hover:scale-105 active:scale-95"
>
<div
class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"
>
<MagnifyingGlassIcon
class="h-5 w-5 text-zinc-400"
aria-hidden="true"
/>
</div>
<input
type="text"
v-model="searchQuery"
class="block w-full rounded-lg border-0 bg-zinc-800/50 py-2 pl-10 pr-3 text-zinc-100 placeholder:text-zinc-500 focus:bg-zinc-800 focus:ring-2 focus:ring-inset focus:ring-blue-500 sm:text-sm sm:leading-6"
placeholder="Search library..."
/>
</div>
<button
@click="() => calculateGames(true, true)"
class="p-1 flex items-center justify-center transition-transform duration-300 size-10 hover:scale-110 active:scale-90 rounded-lg bg-zinc-800/50 text-zinc-100"
>
<ArrowPathIcon class="size-4" />
</button>
</div>
<TransitionGroup
name="list"
tag="ul"
class="flex flex-col gap-y-1.5 h-full"
>
<Disclosure
as="div"
v-for="(nav, navIndex) in filteredNavigation"
:key="nav.id"
:class="['first:pt-0 last:pb-0', nav.tools && !filteredNavigation[navIndex - 1].tools ? 'mt-auto' : '']"
v-slot="{ open }"
:default-open="nav.deft"
>
<dt>
<DisclosureButton
class="flex w-full items-center justify-between text-left text-gray-900 dark:text-white"
>
<span class="text-sm font-semibold font-display">{{
nav.name
}}</span>
<span class="ml-6 relative flex size-4">
<MinusIcon class="absolute inset-0 size-4" aria-hidden="true" />
<MinusIcon
:class="[
!open ? 'rotate-90' : 'rotate-0',
'transition-all absolute inset-0 size-4',
]"
aria-hidden="true"
/>
</span>
</DisclosureButton>
</dt>
<DisclosurePanel as="dd" class="mt-2 flex flex-col gap-y-1.5">
<NuxtLink
v-for="item in nav.items"
:key="nav.id"
:class="[
'transition-all duration-300 rounded-lg flex items-center px-1 py-0.5 hover:scale-105 active:scale-95 hover:shadow-lg hover:shadow-zinc-950/50',
currentNavigation == item.id
? 'bg-zinc-800 text-zinc-100 shadow-md shadow-zinc-950/20'
: item.isInstalled.value
? 'text-zinc-300 hover:bg-zinc-800/90 hover:text-zinc-200'
: 'text-zinc-500 hover:bg-zinc-800/70 hover:text-zinc-300',
]"
:href="item.route"
>
<div class="flex items-center w-full gap-x-2">
<div
class="flex-none transition-transform duration-300 hover:-rotate-2"
>
<img
class="size-6 object-cover bg-zinc-900 rounded transition-all duration-300 shadow-sm"
:src="useObject(item.icon)"
alt=""
/>
</div>
<div class="truncate flex flex-col">
<p class="text-sm whitespace-nowrap font-display font-semibold">
{{ item.label }}
</p>
<p
class="truncate text-[10px] font-bold uppercase font-display"
:class="[
getGameStatusStyleText(games[item.id].status.value)[0],
]"
>
{{ getGameStatusStyleText(games[item.id].status.value)[1] }}
</p>
</div>
</div>
</NuxtLink>
<span v-if="nav.items.length == 0" class="text-xs text-zinc-500 mx-auto"
>No games in this category</span
>
</DisclosurePanel>
</Disclosure>
</TransitionGroup>
<div
v-if="loading"
class="h-full grow flex p-8 justify-center text-zinc-100"
>
<div role="status">
<svg
aria-hidden="true"
class="w-6 h-6 text-transparent animate-spin fill-zinc-600"
viewBox="0 0 100 101"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z"
fill="currentColor"
/>
<path
d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z"
fill="currentFill"
/>
</svg>
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { Disclosure, DisclosureButton, DisclosurePanel } from "@headlessui/vue";
import {
ArrowPathIcon,
MagnifyingGlassIcon,
MinusIcon,
PlusIcon,
} from "@heroicons/vue/20/solid";
import { invoke } from "@tauri-apps/api/core";
import {
type EmptyGameStatusEnum,
InstalledType,
type Collection as Collection,
type Game,
type GameStatus,
} from "~/types";
import { TransitionGroup } from "vue";
import { listen } from "@tauri-apps/api/event";
// Style information
const gameStatusTextStyle: { [key in EmptyGameStatusEnum]: string } = {
Downloading: "text-zinc-400",
Validating: "text-blue-300",
Running: "text-blue-500",
Remote: "text-zinc-700",
Queued: "text-zinc-400",
Updating: "text-zinc-400",
Uninstalling: "text-zinc-100",
};
const gameStatusText: { [key in EmptyGameStatusEnum]: string } = {
Remote: "Not installed",
Queued: "Queued",
Downloading: "Downloading...",
Validating: "Validating...",
Updating: "Updating...",
Uninstalling: "Uninstalling...",
Running: "Running",
};
function getGameStatusStyleText(status: GameStatus): [string, string] {
if (status.type === "Installed") {
if (status.install_type.type === InstalledType.Installed) {
return ["text-green-500", "Installed"];
}
if (status.install_type.type === InstalledType.PartiallyInstalled) {
return ["text-gray-400", "Partially installed"];
}
if (status.install_type.type === InstalledType.SetupRequired) {
return ["text-yellow-500", "Setup required"];
}
throw (
"Non-exhaustive installed type, missing: " +
JSON.stringify(status.install_type)
);
}
return [gameStatusTextStyle[status.type], gameStatusText[status.type]];
}
const router = useRouter();
const searchQuery = ref("");
const loading = ref(false);
const games: {
[key: string]: { game: Game; status: Ref<GameStatus, GameStatus> };
} = {};
const collections: Ref<Collection[]> = ref([]);
async function calculateGames(clearAll = false, forceRefresh = false) {
try {
await calculateGamesLogic(clearAll, forceRefresh);
} catch (e) {
createModal(
ModalType.Notification,
{
title: "Failed to fetch library",
description: `Drop encountered an error while fetching your library: ${e}`,
},
(_, c) => c(),
);
}
loading.value = false;
}
type FetchLibraryResponse = {
library: Game[];
collections: Collection[];
other: Game[];
missing: Game[];
};
async function calculateGamesLogic(clearAll = false, forceRefresh = false) {
if (clearAll) {
collections.value = [];
loading.value = true;
}
// If we update immediately, the navigation gets re-rendered before we
// add all the necessary state, and it freaks tf out
const library = await invoke<FetchLibraryResponse>("fetch_library", {
hardRefresh: forceRefresh,
});
const allGames = [
...library.library,
...library.collections
.map((e) => e.entries)
.flat()
.map((e) => e.game),
...library.other,
...library.missing,
].filter((v, i, a) => a.indexOf(v) === i);
for (const game of allGames) {
if (games[game.id]) continue;
games[game.id] = await useGame(game.id);
}
const libraryCollection = {
id: "library",
name: "Library",
isDefault: true,
entries: library.library.map((e) => ({ gameId: e.id, game: e })),
} satisfies Collection;
const otherCollection = {
id: "other",
name: "Tools & Launchers",
isDefault: false,
isTools: true,
entries: library.other.map((v) => ({ gameId: v.id, game: v })),
} satisfies Collection;
const missingCollection = {
id: "missing",
name: "Delisted",
isDefault: false,
isTools: true,
entries: library.missing.map((v) => ({ gameId: v.id, game: v })),
};
loading.value = false;
collections.value = [
libraryCollection,
...library.collections,
...(library.other.length > 0 ? [otherCollection] : []),
...(library.missing.length > 0 ? [missingCollection] : []),
];
}
// Wait up to 300 ms for the library to load, otherwise
// show the loading state while we while
await new Promise<void>((r) => {
let hasResolved = false;
const resolveFunc = () => {
if (!hasResolved) r();
hasResolved = true;
};
calculateGames(true).then(resolveFunc);
setTimeout(resolveFunc, 300);
});
const navigation = computed(() =>
collections.value.map((collection) => {
const items = collection.entries.map(({ game }) => {
const status = games[game.id].status;
const isInstalled = computed(() => status.value.type != "Remote");
const item = {
label: game.mName,
route: `/library/${game.id}`,
prefix: `/library/${game.id}`,
icon: game.mIconObjectId,
isInstalled,
id: game.id,
type: game.type,
};
return item;
});
return {
id: collection.id,
name: collection.name,
deft: collection.isDefault,
tools: collection.isTools ?? false,
items,
};
}),
);
const route = useRoute();
const currentNavigation = computed(() => {
return route.path.slice("/library/".length);
});
const filteredNavigation = computed(() => {
if (!searchQuery.value)
return navigation.value.map((e, i) => ({ ...e, index: i }));
const query = searchQuery.value.toLowerCase();
return navigation.value
.map((c) => ({
...c,
items: c.items.filter((nav) => nav.label.toLowerCase().includes(query)),
}))
.filter((e) => e.items.length > 0);
});
listen("update_library", async (event) => {
console.log("Updating library");
let oldNavigation = currentNavigation.value;
await calculateGames(false, true);
if (oldNavigation !== currentNavigation.value) {
router.push("/library");
}
});
</script>
<style scoped>
.list-move,
.list-enter-active,
.list-leave-active {
transition: all 0.3s ease;
}
.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(-30px);
}
.list-leave-active {
position: absolute;
}
</style>
+7
View File
@@ -0,0 +1,7 @@
<template>
<svg class="text-blue-400" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M4 13.5C4 11.0008 5.38798 8.76189 7.00766 7C8.43926 5.44272 10.0519 4.25811 11.0471 3.5959C11.6287 3.20893 12.3713 3.20893 12.9529 3.5959C13.9481 4.25811 15.5607 5.44272 16.9923 7C18.612 8.76189 20 11.0008 20 13.5C20 17.9183 16.4183 21.5 12 21.5C7.58172 21.5 4 17.9183 4 13.5Z"
stroke="currentColor" stroke-width="2" />
</svg>
</template>
+16
View File
@@ -0,0 +1,16 @@
<template>
<div
class="h-16 cursor-pointer flex flex-row items-center justify-between bg-zinc-950"
>
<div class="px-5 py-3 grow" @mousedown="() => window.startDragging()">
<Wordmark class="mt-1" />
</div>
<WindowControl />
</div>
</template>
<script setup lang="ts">
import { getCurrentWindow } from "@tauri-apps/api/window";
const window = getCurrentWindow();
</script>
@@ -0,0 +1,23 @@
<script setup lang="ts">
import { ArrowDownTrayIcon, CloudIcon } from "@heroicons/vue/20/solid";
import { invoke } from "@tauri-apps/api/core";
async function checkOffline() {
const isOffline = await invoke("check_online");
}
</script>
<template>
<button
@click="checkOffline"
class="transition inline-flex items-center rounded-sm px-4 py-1.5 bg-zinc-900 text-sm text-zinc-400 gap-x-2"
>
<div class="relative">
<CloudIcon class="h-5 z-50 text-zinc-500" />
<div
class="absolute rounded-full left-1/2 top-1/2 -translate-y-[45%] -translate-x-1/2 w-[2px] h-6 rotate-[45deg] bg-zinc-400 z-50"
/>
</div>
Offline
</button>
</template>
+7
View File
@@ -0,0 +1,7 @@
<template>
<NuxtLink
class="inline-flex items-center gap-x-2 px-1 py-0.5 rounded bg-blue-900 text-zinc-100 hover:bg-blue-800"
>
<slot />
</NuxtLink>
</template>
+24
View File
@@ -0,0 +1,24 @@
<template>
<HeaderButton v-if="showMinimise" @click="() => minimise()">
<MinusIcon />
</HeaderButton>
<HeaderButton @click="() => close()">
<XMarkIcon />
</HeaderButton>
</template>
<script setup lang="ts">
import { MinusIcon, XMarkIcon } from "@heroicons/vue/16/solid";
import { getCurrentWindow } from "@tauri-apps/api/window";
const window = getCurrentWindow();
const showMinimise = await window.isMinimizable();
async function close() {
await window.close();
}
async function minimise() {
await window.minimize();
}
</script>
+11
View File
@@ -0,0 +1,11 @@
<template>
<div class="inline-flex justify-center items-center gap-x-1 -mb-1 relative">
<svg aria-hidden="true" viewBox="0 0 418 42" class="absolute inset-0 h-full w-full fill-blue-300/30 scale-75"
preserveAspectRatio="none">
<path
d="M203.371.916c-26.013-2.078-76.686 1.963-124.73 9.946L67.3 12.749C35.421 18.062 18.2 21.766 6.004 25.934 1.244 27.561.828 27.778.874 28.61c.07 1.214.828 1.121 9.595-1.176 9.072-2.377 17.15-3.92 39.246-7.496C123.565 7.986 157.869 4.492 195.942 5.046c7.461.108 19.25 1.696 19.17 2.582-.107 1.183-7.874 4.31-25.75 10.366-21.992 7.45-35.43 12.534-36.701 13.884-2.173 2.308-.202 4.407 4.442 4.734 2.654.187 3.263.157 15.593-.78 35.401-2.686 57.944-3.488 88.365-3.143 46.327.526 75.721 2.23 130.788 7.584 19.787 1.924 20.814 1.98 24.557 1.332l.066-.011c1.201-.203 1.53-1.825.399-2.335-2.911-1.31-4.893-1.604-22.048-3.261-57.509-5.556-87.871-7.36-132.059-7.842-23.239-.254-33.617-.116-50.627.674-11.629.54-42.371 2.494-46.696 2.967-2.359.259 8.133-3.625 26.504-9.81 23.239-7.825 27.934-10.149 28.304-14.005.417-4.348-3.529-6-16.878-7.066Z" />
</svg>
<Logo class="h-6" />
<span class="text-blue-400 font-display font-bold text-xl uppercase">Drop</span>
</div>
</template>
+3
View File
@@ -0,0 +1,3 @@
import type { AppState } from "~/types";
export const useAppState = () => useState<AppState | undefined>("state");
@@ -0,0 +1,32 @@
import type { RouteLocationNormalized } from "vue-router";
import type { NavigationItem } from "~/types";
export const useCurrentNavigationIndex = (
navigation: Array<NavigationItem>
) => {
const router = useRouter();
const route = useRoute();
const currentNavigation = ref(-1);
function calculateCurrentNavIndex(to: RouteLocationNormalized) {
const validOptions = navigation
.map((e, i) => ({ ...e, index: i }))
.filter((e) => to.fullPath.startsWith(e.prefix));
const bestOption = validOptions
.sort((a, b) => b.route.length - a.route.length)
.at(0);
return bestOption?.index ?? -1;
}
currentNavigation.value = calculateCurrentNavIndex(route);
router.afterEach((to) => {
currentNavigation.value = calculateCurrentNavIndex(to);
});
return {currentNavigation, recalculateNavigation: () => {
currentNavigation.value = calculateCurrentNavIndex(route);
}};
};
+54
View File
@@ -0,0 +1,54 @@
import { listen } from "@tauri-apps/api/event";
import type { DownloadableMetadata } from "~/types";
export type QueueState = {
queue: Array<{
meta: DownloadableMetadata;
status: string;
dl_progress: number | null;
dl_current: number;
dl_max: number;
disk_progress: number | null;
disk_current: number;
disk_max: number;
}>;
status: string;
};
export type StatsState = {
speed: number; // Bytes per second
time: number; // Seconds,
};
export const useQueueState = () =>
useState<QueueState>("queue", () => ({ queue: [], status: "Unknown" }));
export const useStatsState = () =>
useState<StatsState>("stats", () => ({ speed: 0, time: 0 }));
listen("update_queue", (event) => {
const queue = useQueueState();
queue.value = event.payload as QueueState;
});
listen("update_stats", (event) => {
const stats = useStatsState();
stats.value = event.payload as StatsState;
});
export const useDownloadHistory = () =>
useState<Array<number>>("history", () => []);
export function formatKilobytes(bytes: number): string {
const units = ["K", "M", "G", "T", "P"];
let value = bytes;
let unitIndex = 0;
const scalar = 1000;
while (value >= scalar && unitIndex < units.length - 1) {
value /= scalar;
unitIndex++;
}
return `${value.toFixed(1)} ${units[unitIndex]}`;
}
+95
View File
@@ -0,0 +1,95 @@
import { invoke } from "@tauri-apps/api/core";
import { listen } from "@tauri-apps/api/event";
import type {
Game,
GameStatus,
GameStatusEnum,
GameVersion,
RawGameStatus,
} from "~/types";
const gameRegistry: { [key: string]: { game: Game; version: Ref<GameVersion | undefined> } } =
{};
const gameStatusRegistry: { [key: string]: Ref<GameStatus> } = {};
export const parseStatus = (status: RawGameStatus): GameStatus => {
console.log(status[0]);
if (status[0]) {
return status[0];
}
if (status[1]) {
return status[1];
}
throw new Error("No game status: " + JSON.stringify(status));
};
export const useGame = async (gameId: string) => {
if (!gameRegistry[gameId]) {
const data: {
game: Game;
status: RawGameStatus;
version?: GameVersion;
} = await invoke("fetch_game", {
gameId,
});
gameRegistry[gameId] = { game: data.game, version: ref(data.version) };
if (!gameStatusRegistry[gameId]) {
gameStatusRegistry[gameId] = ref(parseStatus(data.status));
listen(`update_game/${gameId}`, (event) => {
const payload: {
status: RawGameStatus;
version?: GameVersion;
} = event.payload as any;
gameStatusRegistry[gameId].value = parseStatus(payload.status);
/**
* I am not super happy about this.
*
* This will mean that we will still have a version assigned if we have a game installed then uninstall it.
* It is necessary because a flag to check if we should overwrite seems excessive, and this function gets called
* on transient state updates.
*/
if (payload.version) {
gameRegistry[gameId].version.value = payload.version;
}
});
}
}
const game = gameRegistry[gameId];
const status = gameStatusRegistry[gameId];
return { ...game, status };
};
export type LaunchResult =
| { result: "Success" }
| { result: "InstallRequired"; data: [string, string] };
export type VersionOption = {
versionId: string;
displayName?: string;
versionPath: string;
platform: string;
size: {
installSize: number;
downloadSize: number;
};
requiredContent: Array<{
gameId: string;
versionId: string;
name: string;
iconObjectId: string;
shortDescription: string;
size: {
installSize: number;
downloadSize: number;
};
}>;
};
export type ProtonPath = {
path: string;
name: string;
};
@@ -0,0 +1,9 @@
import { type DownloadableMetadata, DownloadableType } from '~/types'
export default function generateGameMeta(gameId: string, version: string): DownloadableMetadata {
return {
id: gameId,
version,
downloadType: DownloadableType.Game
}
}
+32
View File
@@ -0,0 +1,32 @@
import { invoke } from "@tauri-apps/api/core";
interface ProtonPaths {
data: Ref<{
autodiscovered: ProtonPath[];
custom: ProtonPath[];
default?: string;
}>;
refresh: () => Promise<void>;
}
const protonPaths = useState<ProtonPaths["data"]["value"]>(
"proton_paths",
undefined,
);
export const useProtonPaths = async (): Promise<ProtonPaths> => {
const refresh = async () => {
protonPaths.value = await invoke("fetch_proton_paths");
};
if (protonPaths.value)
return {
data: protonPaths,
refresh,
};
await refresh();
return {
data: protonPaths,
refresh,
};
};
@@ -0,0 +1,93 @@
import { invoke } from "@tauri-apps/api/core";
import { listen } from "@tauri-apps/api/event";
import { data } from "autoprefixer";
import { AppStatus, type AppState } from "~/types";
export function setupHooks() {
const router = useRouter();
const state = useAppState();
listen("auth/processing", (event) => {
router.push("/auth/processing");
});
listen("auth/failed", (event) => {
router.push(
`/auth/failed?error=${encodeURIComponent(event.payload as string)}`
);
});
listen("auth/finished", async (event) => {
router.push("/library");
state.value = JSON.parse(await invoke("fetch_state"));
});
listen("download_error", (event) => {
createModal(
ModalType.Notification,
{
title: "Drop encountered an error while downloading",
description: `Drop encountered an error while downloading your game: "${(
event.payload as unknown as string
).toString()}"`,
buttonText: "Close",
},
(e, c) => c()
);
});
// This is for errors that (we think) aren't our fault
listen("launch_external_error", (event) => {
createModal(
ModalType.Confirmation,
{
title: "Did something go wrong?",
description:
"Drop detected that something might've gone wrong with launching your game. Do you want to open the log directory?",
buttonText: "Open",
},
async (e, c) => {
if (e == "confirm") {
await invoke("open_process_logs", { gameId: event.payload });
}
c();
}
);
});
/*
document.addEventListener("contextmenu", (event) => {
event.target?.dispatchEvent(new Event("contextmenu"));
event.preventDefault();
});
*/
}
export function initialNavigation(state: ReturnType<typeof useAppState>) {
if (!state.value)
throw createError({
statusCode: 500,
statusMessage: "App state not valid",
fatal: true,
});
const router = useRouter();
switch (state.value.status) {
case AppStatus.NotConfigured:
router.push({ path: "/setup" });
break;
case AppStatus.SignedOut:
router.push("/auth");
break;
case AppStatus.SignedInNeedsReauth:
router.push("/auth/signedout");
break;
case AppStatus.ServerUnavailable:
router.push("/error/serverunavailable");
break;
default:
router.push("/library");
}
}
+5
View File
@@ -0,0 +1,5 @@
import { convertFileSrc } from "@tauri-apps/api/core";
export const useObject = (id: string) => {
return convertFileSrc(id, "object");
};
+91
View File
@@ -0,0 +1,91 @@
<template>
<NuxtLayout name="default">
<div
class="grid min-h-full grid-cols-1 grid-rows-[1fr,auto,1fr] lg:grid-cols-[max(50%,36rem),1fr]"
>
<header
class="mx-auto w-full max-w-7xl px-6 pt-6 sm:pt-10 lg:col-span-2 lg:col-start-1 lg:row-start-1 lg:px-8"
>
<Logo class="h-10 w-auto sm:h-12" />
</header>
<main
class="mx-auto w-full max-w-7xl px-6 py-24 sm:py-32 lg:col-span-2 lg:col-start-1 lg:row-start-2 lg:px-8"
>
<div class="max-w-lg">
<p class="text-base font-semibold leading-8 text-blue-600">
{{ error?.statusCode }}
</p>
<h1
class="mt-4 text-3xl font-bold font-display tracking-tight text-zinc-100 sm:text-5xl"
>
Oh no!
</h1>
<p
v-if="message"
class="mt-3 font-bold text-base leading-7 text-red-500"
>
{{ message }}
</p>
<p class="mt-6 text-base leading-7 text-zinc-400">
An error occurred while responding to your request. If you believe
this to be a bug, please report it. Try signing in and see if it
resolves the issue.
</p>
<div class="mt-10">
<!-- full app reload to fix errors -->
<a
href="/store"
class="text-sm font-semibold leading-7 text-blue-600"
><span aria-hidden="true">&larr;</span> Back to store</a
>
</div>
</div>
</main>
<footer class="self-end lg:col-span-2 lg:col-start-1 lg:row-start-3">
<div class="border-t border-zinc-700 bg-zinc-900 py-10">
<nav
class="mx-auto flex w-full max-w-7xl items-center gap-x-4 px-6 text-sm leading-7 text-zinc-400 lg:px-8"
>
<NuxtLink href="/docs">Documentation</NuxtLink>
<svg
viewBox="0 0 2 2"
aria-hidden="true"
class="h-0.5 w-0.5 fill-zinc-600"
>
<circle cx="1" cy="1" r="1" />
</svg>
<a href="https://discord.gg/NHx46XKJWA" target="_blank"
>Support Discord</a
>
</nav>
</div>
</footer>
<div
class="hidden lg:relative lg:col-start-2 lg:row-start-1 lg:row-end-4 lg:block"
>
<img
src="@/assets/wallpaper.jpg"
alt=""
class="absolute inset-0 h-full w-full object-cover"
/>
</div>
</div>
</NuxtLayout>
</template>
<script setup lang="ts">
import type { NuxtError } from "#app";
const props = defineProps({
error: Object as () => NuxtError,
});
const statusCode = props.error?.statusCode;
const message =
props.error?.statusMessage ||
props.error?.message ||
"An unknown error occurred.";
console.error(props.error);
</script>
+82
View File
@@ -0,0 +1,82 @@
<template>
<div class="flex flex-col bg-zinc-900 overflow-hidden h-screen">
<NuxtErrorBoundary>
<Header class="select-none" />
<div class="relative grow overflow-y-auto">
<slot />
</div>
<template #error="{ error }">
<MiniHeader />
<div class="relative grow overflow-y-auto bg-zinc-950">
<div
class="grid min-h-full grid-cols-1 grid-rows-[1fr,auto,1fr] lg:grid-cols-[max(50%,36rem),1fr]"
>
<header
class="mx-auto w-full max-w-7xl px-6 pt-6 sm:pt-10 lg:col-span-2 lg:col-start-1 lg:row-start-1 lg:px-8"
>
<Logo class="h-10 w-auto sm:h-12" />
</header>
<main
class="mx-auto w-full max-w-7xl px-6 py-24 sm:py-32 lg:col-span-2 lg:col-start-1 lg:row-start-2 lg:px-8"
>
<div class="max-w-lg">
<h1
class="mt-4 text-3xl font-bold font-display tracking-tight text-zinc-100 sm:text-5xl"
>
Unrecoverable error
</h1>
<p class="mt-6 text-base leading-7 text-zinc-400">
Drop encountered an error that it couldn't handle. Please
restart the application and file a bug report.
</p>
<p class="mt-3 text-sm font-monospace text-zinc-500">
Error: {{ error }}
</p>
</div>
</main>
<footer
class="self-end lg:col-span-2 lg:col-start-1 lg:row-start-3"
>
<div class="border-t border-blue-600 bg-zinc-900 py-10">
<nav
class="mx-auto flex w-full max-w-7xl items-center gap-x-4 px-6 text-sm leading-7 text-zinc-400 lg:px-8"
>
<a href="#">Documentation</a>
<svg
viewBox="0 0 2 2"
aria-hidden="true"
class="h-0.5 w-0.5 fill-zinc-700"
>
<circle cx="1" cy="1" r="1" />
</svg>
<a href="#">Troubleshooting</a>
<svg
viewBox="0 0 2 2"
aria-hidden="true"
class="h-0.5 w-0.5 fill-zinc-700"
>
<circle cx="1" cy="1" r="1" />
</svg>
<NuxtLink to="/setup/server">Switch instance</NuxtLink>
</nav>
</div>
</footer>
<div
class="hidden lg:relative lg:col-start-2 lg:row-start-1 lg:row-end-4 lg:block"
>
<img
src="@/assets/wallpaper.jpg"
alt=""
class="absolute inset-0 h-full w-full object-cover"
/>
</div>
</div>
</div>
</template>
</NuxtErrorBoundary>
</div>
</template>
<script setup lang="ts">
const queueState = useQueueState();
</script>
+8
View File
@@ -0,0 +1,8 @@
<template>
<div class="flex flex-col bg-zinc-950 overflow-hidden h-screen">
<MiniHeader />
<div class="relative grow overflow-y-auto">
<slot />
</div>
</div>
</template>
+22
View File
@@ -0,0 +1,22 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: "2024-04-03",
postcss: {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
},
css: ["~/assets/main.scss"],
ssr: false,
devtools: false,
extends: [["../../libraries/base"]],
app: {
baseURL: "/main",
}
});
+41
View File
@@ -0,0 +1,41 @@
{
"name": "view",
"private": true,
"version": "0.3.4",
"type": "module",
"scripts": {
"build": "nuxt generate",
"dev": "nuxt dev",
"postinstall": "nuxt prepare",
"tauri": "tauri",
"typecheck": "nuxt typecheck"
},
"dependencies": {
"@headlessui/vue": "^1.7.23",
"@heroicons/vue": "^2.1.5",
"@nuxtjs/tailwindcss": "^6.12.2",
"@tauri-apps/api": "^2.9.1",
"@tauri-apps/plugin-dialog": "^2.6.0",
"@tauri-apps/plugin-os": "^2.3.2",
"@tauri-apps/plugin-shell": "^2.3.3",
"@types/node": "^25.5.0",
"koa": "^2.16.1",
"markdown-it": "^14.1.0",
"micromark": "^4.0.1",
"nuxt": "^4.4.8",
"scss": "^0.2.4",
"vue-router": "latest",
"vuedraggable": "^4.1.0"
},
"devDependencies": {
"@tailwindcss/forms": "^0.5.9",
"@tailwindcss/typography": "^0.5.15",
"@types/markdown-it": "^14.1.2",
"autoprefixer": "^10.4.20",
"postcss": "^8.4.47",
"sass-embedded": "^1.79.4",
"tailwindcss": "^3.4.13",
"typescript": "^5.8.3",
"vue-tsc": "^2.2.10"
}
}
+37
View File
@@ -0,0 +1,37 @@
<template>
<div class="min-h-full w-full flex items-center justify-center">
<div class="flex flex-col items-center">
<div class="text-center">
<h1 class="text-3xl font-semibold font-display leading-6 text-zinc-100">
Device authorization
</h1>
<div class="mt-4">
<p class="text-sm text-zinc-400 max-w-md mx-auto">
Open Drop on another one of your devices, and use your account
dropdown to "Authorize client", and enter the code below.
</p>
<div
class="mt-8 flex items-center justify-center gap-x-5 text-8xl font-bold text-zinc-100"
>
<span v-for="letter in code.split('')">{{ letter }}</span>
</div>
</div>
<div class="mt-10 flex items-center justify-center gap-x-6">
<NuxtLink href="/auth" class="text-sm font-semibold text-blue-600"
><span aria-hidden="true">&larr;</span> Use a different method
</NuxtLink>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { invoke } from "@tauri-apps/api/core";
const code = await invoke<string>("auth_initiate_code");
definePageMeta({
layout: "mini",
});
</script>
+34
View File
@@ -0,0 +1,34 @@
<template>
<div class="min-h-full w-full flex items-center justify-center">
<div class="flex flex-col items-center">
<XCircleIcon class="h-12 w-12 text-red-600" aria-hidden="true" />
<div class="mt-3 text-center sm:mt-5">
<h1 class="text-3xl font-semibold font-display leading-6 text-zinc-100">
Authentication failed
</h1>
<div class="mt-4">
<p class="text-sm text-zinc-400 max-w-sm">
Drop encountered an error while connecting to your instance. Error:
{{ message }}
</p>
</div>
<div class="mt-10 flex items-center justify-center gap-x-6">
<NuxtLink href="/auth" class="text-sm font-semibold text-zinc-100"
><span aria-hidden="true">&larr;</span> Back to authentication
</NuxtLink>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { XCircleIcon } from "@heroicons/vue/16/solid";
const route = useRoute();
const message = route.query.error ?? "An unknown error occurred";
definePageMeta({
layout: "mini",
});
</script>
+18
View File
@@ -0,0 +1,18 @@
<template>
<InitiateAuthModule>
<h1
class="mt-4 text-3xl font-bold font-display tracking-tight text-zinc-100 sm:text-5xl"
>
Sign in to Drop
</h1>
<p class="mt-6 text-base leading-7 text-zinc-400">
To get started, sign in to your Drop instance by clicking below.
</p>
</InitiateAuthModule>
</template>
<script setup lang="ts">
definePageMeta({
layout: "mini",
});
</script>
+41
View File
@@ -0,0 +1,41 @@
<template>
<div class="min-h-full w-full flex items-center justify-center">
<div class="flex flex-col items-center">
<div role="status">
<svg
aria-hidden="true"
class="w-12 h-12 text-transparent animate-spin fill-blue-600"
viewBox="0 0 100 101"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z"
fill="currentColor"
/>
<path
d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z"
fill="currentFill"
/>
</svg>
<span class="sr-only">Loading...</span>
</div>
<div class="mt-4 text-center sm:mt-5">
<h1 class="text-3xl font-semibold font-display leading-6 text-zinc-100">
Connecting to instance...
</h1>
<div class="mt-4">
<p class="text-sm text-zinc-400 max-w-sm">
Connecting to Drop server and fetching application information...
</p>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
definePageMeta({
layout: "mini",
});
</script>

Some files were not shown because too many files have changed in this diff Show More