* feat: split wrapper command on linux
* feat: use code from #3900
* feat: also use shlex on Windows
* feat: add a version number to global settings
* feat(app): add settings v2, where wrapper command are split
* Reapply "refactor(app): reduce tech debt by eliminating `wry` fork (#4500)"
This reverts commit 2535156dac.
* test: temporarily replace ad link by something with sound
* Revert "test: temporarily replace ad link by something with sound"
This reverts commit 74bb7eecb7cc7b17ccfd6b2e20c24eeec38ac363.
* Reapply "test: temporarily replace ad link by something with sound"
This reverts commit f1b0e9f2c4a30f789099048e98ffa91ff376f571.
* test: also disable ads init muting script for good measure
* Revert "test: also disable ads init muting script for good measure"
This reverts commit 4ac7a81e1780f13c976d033c420bfe1d5db9c298.
* Revert "Reapply "test: temporarily replace ad link by something with sound""
This reverts commit c5f1b9f242f5c7f56b40f21b586e8b484c7eb3c5.
* start with analytics v2
* the big ass SQL query™
* downloads and views analytics working
* Implement analytics bucketing API
* allow filtering by monetization
* Use a new format for project metrics and bucketing
* revenue API works
* Add country data to analytics API
* Add checks for number of slices and time slice resolution
* work on docs
* wip: fix tests and add docs
* Fix tests
* Fix tests
* Uncomment crates
* feat: frontend CLAUDE.md (#4433)
* Slight tweaks to time slicing logic
* More tweaks
* Fix error messages
* Fix sqlx cache
---------
Co-authored-by: Calum H. <contact@cal.engineer>
* Replace actix tracing with custom error tracing
* Fix logging
* wip: JSON logging
* Use LABRINTH_FORMAT to change to JSON output
* sqlx fix?
* CI fix
* Add tracing span info to HTTP requests
* Merge Result and Option error wrapping
* Add http.authorized to tracing
* Make theseus capable of logging messages from the `log` crate
* Move update checking entirely into JS and open a modal if an update is available
* Fix formatjs on Windows and run formatjs
* Add in the buttons and body
* Fix lint
* Show update size in modal
* Fix update not being rechecked if the update modal was directly dismissed
* Slight UI tweaks
* Fix lint
* Implement skipping the update
* Implement the Update Now button
* Implement updating at next exit
* Turn download progress into an error bar on failure
* Restore 5 minute update check instead of 30 seconds
* Fix PendingUpdateData being seen as a unit struct
* Fix lint
* Make CI also lint updater code
* feat: create AppearingProgressBar component
* feat: polish update available modal
* feat: add error handling
* Open changelog with tauri-plugin-opener
* Run intl:extract
* Update completion toasts (#3978)
* Use single LAUNCHER_USER_AGENT constant for all user agents
* Fix build on Mac
* Request the update size with HEAD instead of GET
* UI tweaks
* lint
* Fix lint
* fix: hide modal header & add "Hide update reminder" button w/ tooltip
* Run intl:extract
* fix: lint issues
* fix: merge issues
* notifications.js no longer exists
* Add metered network checking
* Add a timeout to macOS is_network_metered
* Fix tauri.conf.json
* vibe debugging
* Set a dispatch queue
* Have a popup that asks you if you'd like to disable automatic file downloads if you're on a metered network
* Move UpdateModal to modal package
* Fix lint
* Add a toggle for automatic downloads
* Fix type
Co-authored-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
Signed-off-by: Josiah Glosson <soujournme@gmail.com>
* Redo updating UI and experience
* lint
* fix unlistener issue
* remove unneeded translation keys
* Fix expose issue
* temp disable cranelift, tweak some messages
* change version back
* Clean up App.vue
* move toast to top right
* update reload icon
* Fixed the bug!!!!!!!!!!!!
* improve messages
* intl:extract
* Add liquid glass icon file
* not you!
* use dependency injection
* lint on apple icon
* Fix imports, move download size to button
* change update check back to 5 mins
* lint + move to providers
* intl:extract
---------
Signed-off-by: Cal H. <hendersoncal117@gmail.com>
Signed-off-by: Josiah Glosson <soujournme@gmail.com>
Co-authored-by: Calum <calum@modrinth.com>
Co-authored-by: Prospector <prospectordev@gmail.com>
Co-authored-by: Cal H. <hendersoncal117@gmail.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
Co-authored-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
* Ensure that fetch errors are properly propagated
* Handle user not found errors better in add_friend
* Cargo fmt
* Introduce new LabrinthError returnable by fetch_advanced
* Allow enter key to send a friend request
* Reapply "Implement a more robust IPC system between the launcher and client (#4159)"
This reverts commit e25d726da4.
* Put game JAR and theseus JAR ahead of other JARs in classpath
* Fix 1.17-1.20 Forge by forcefully removing Multi-Release manifest entry
* Fix formatting
---------
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
* Detection of protocol versions before 18w47b
* Refactor old_protocol_versions into protocol_version
* Ping servers closer to how a client of an instance's version would ping a server
* Allow pinging legacy servers from a modern profile in the same way a modern client would
* Ping 1.4.2 through 1.5.2 like a Vanilla client in those versions would when in such an instance
* fix(app-frontend): do not emit exceptions when no loaders are available
* refactor(app): simplify Microsoft login code without functional changes
* feat(app): external browser auth flow for Modrinth account login
* chore: address Clippy lint
* chore(app/oauth_utils): simplify `handle_reply` error handling according to review
* chore(app-lib): simplify `Url` usage out of MC auth module
We standarized on using `rustls` as a TLS implementation across the
monorepo, which is written in Rust and has better ergonomics,
integration with the Rust ecosystem, and consistent behavior among
platforms. However, the Labrinth Clickhouse client was the last
remaining exception to this, using the native, OS-provided TLS
implementation, which on Linux is OpenSSL and requires developers and
Docker images to install OpenSSL development packages to build Labrinth,
in addition to introducing an additional runtime dependency to Labrinth.
Let's make the process of building Labrinth slightly simpler by
switching such client to `rustls` as well, which results in finally
using the same TLS implementation for everything, a simplified build and
distribution process, less transitive dependencies, and potentially
smaller binaries (since `rustls` was already being pulled in for, e.g.,
the SMTP client).
* feat(ci): clean up app release build workflow, set app versions to match tag's
* feat(ci): rename Theseus build workflow, add new release workflow
* chore(ci): minor tweaks to `theseus-build` workflow
* chore: update workflow reference in comments
* chore: typo fix and formatting tidyups
* refactor(theseus): extend auth subsystem to fetch complete user profiles
* chore: fix new `prettier` lints
* chore: document differences between similar `Credentials` methods
* chore: remove dead `profile_run_credentials` plugin command
* feat(app): skin selector backend
* enh(app/skin-selector): better DB intension through deferred FKs, further PNG validations
* chore: fix comment typo spotted by Copilot
* fix: less racy auth token refresh logic
This may help with issues reported by users where the access token is
invalid and can't be used to join servers over long periods of time.
* tweak(app-lib): improve consistency of skin field serialization case
* fix(app-lib/minecraft_skins): fix custom skin removal from DB not working
* Begin skins frontend
* Cape preview
* feat: start on SkinPreviewRenderer
* feat: setting for nametag
* feat: hide nametag setting (sql)
* fix: positioning of meshes
* fix: lighting
* fix: allow dragging off-bounds
* fix: better color mapping
* feat: hide nametag setting (impl)
* feat: Start on edit modal + cape button cleanup + renderer fixes
* feat: Finish new skin modal
* feat: finish cape modal
* feat: skin rendering on load
* fix: logic for Skins.vue
* fix: types
* fix: types (for modal + renderer)
* feat: Editing?
* fix: renderer not updating variant
* fix: mojang username not modrinth username
* feat: batched skin rendering - remove vzge references (apart from capes, wip)
* feat: fix sizing on SkinButton and SkinLikeButton, also implement bust positioning
* feat: capes in preview renderer & baked renders
* fix: lint fixes
* refactor: Start on cleanup and polish
* fix: hide error notification when logged out
* revert: .gltf formatting
* chore(app-frontend): fix typos
* fix(app-lib): delay account skin data deletion to next reboot
This gives users an opportunity to not unexpectedly lose skin data in
case they log off on accident.
* fix: login button & provide/inject AccountsCard
* polish: skin buttons
* fix: imports
* polish: use figma values
* polish: tweak underneath shadow
* polish: cursor grab
* polish: remove green bg from CapeLikeTextButton when selected.
* polish: modal tweaks
* polish: grid tweaks + start on upload skin modal
* polish: drag and drop file flow
* polish: button positioning in SkinButton
* fix: lint issues
* polish: deduplicate model+cape stuff and fix layout
* fix: lint issues
* fix: camel case requirement for make-default
* polish: use indexed db to persist skin previews
* fix: lint issues
* polish: add skin icon sizing
* polish: theme fixes
* feat: animation system for skin preview renderer
* feat(app/minecraft_skins): save current custom external skin when equipping skins
* fix: cape button & dynamic nametag sizing
* feat(theseus): add `normalize_skin_texture` Tauri command
This command lets the app frontend opt in to normalizing the texture of
any skin, which may be in either the legacy 64x32 or newer 64x64 format,
to the newer 64x64 format for display purposes.
* chore: Rust build fixes
* feat: start impl of skin normalization on frontend
* feat(theseus): change parameter type of `normalize_skin_texture` Tauri command
* fix: normalization
* fix(theseus): make new `normalize_skin_texture` command usable
* feat: finish normalization impl
* fix: vueuse issue
* fix: use optimistic approach when changing skins/capes.
* fix: nametag cleanup + scroll fix
* fix: edit modal computedAsync not fast enough for skin preview renderer
* feat: classic player model animations
* chore: fix new Clippy lint
* fix(app-lib): actually delete custom skins with no cape overrides
* fix(app-lib): handle repeated addition of the same skin properly
* refactor(app-lib): simplify DB connection logic a little
* fix: various improvements
* feat: slim animations
* fix: z-fighting on models
* fix: shading + lighting improvements
* fix: shadows
* fix: polish
* fix: polish
* fix: accounts card not having the right head
* fix: lint issues
* fix: build issue
* feat: drag and drop func
* fix: temp disable drag and drop in the modal
* Revert "fix: temp disable drag and drop in the modal"
This reverts commit 33500c564e3f85e6c0a2e83dd9700deda892004d.
* fix: drag and drop working
* fix: lint
* fix: better media queries
* feat(app/skins): revert current custom external skin storing on equip
This reverts commit 0155262ddd081c8677654619a09e814088fdd8b0.
* regen pnpm lock
* pnpm fix
* Make default capes a little more clear
* Lint
---------
Co-authored-by: Alejandro González <me@alegon.dev>
Co-authored-by: Prospector <prospectordev@gmail.com>
* Create get_resource_file macro to get an embedded resource
If the tauri feature is enabled, the resource will be loaded from Tauri resources.
If the tauri feature is disabled, the resource will be extracted to a temp directory.
* Wrap process execution to inject system properties through stdin
* Pass the time values as ISO 8601 datetimes
* Remove entirely internal modrinth.process.uuid
* Redo Java version checking somewhat and fix a few bugs with it
* Fix game launch with early access versions of Java
* Format Java code
* Fix modrinth.profile.modified being the same as modrinth.profile.created
* Revert to manually extracting class files
* Put all ID types in the labrinth::models::ids, and reduce code duplication with them
* Rewrite labrinth::database::models::ids and rename most DB interface ID structs to be prefixed with DB
* Run sqlx prepare
---------
Co-authored-by: Alejandro González <7822554+AlexTMjugador@users.noreply.github.com>
* chore: undo unintended updater `zip` feature drop, tweak comment
* fix: correct unintended regression on version and project validation
This was caused by a mistake when coalescing mostly copied and pasted
`RE_URL_SAFE` regexes into one.
* chore: inherit dependencies from workspace, optimize some deps out
* Update bitflags from 2.9.0 to 2.9.1
* Fix temp directory leak in check_java_at_filepath
* Fix build
* Fix lint
* chore(app-lib): refactor overkill `futures` executor usage to Tokio MPSC
* chore: fix Clippy lint
* tweak: optimize out dependency on OpenSSL source build
Contrary to what I expected before, this was caused due to the Tauri
updater plugin using a different TLS stack than everything else.
* chore(labrinth): drop now unused dependency
* Update zip because 2.6.1 got yanked
* Downgrade weezl to 0.1.8
* Mention that p256 is also a blocker for rand 0.9
* chore: sidestep GitHub review requirements
* chore: sidestep GitHub review requirements (2)
* chore: sidestep GitHub review requirements (3)
---------
Co-authored-by: Josiah Glosson <soujournme@gmail.com>
* Update some Labrinth dependencies
* Update some Labrinth dependencies
* Update some Labrinth dependencies
* Update zip in Labrinth
* Update itertools in Labrinth
* Update validator in labrinth
* Update thiserror in labrinth
* Update rust_decimal, redis, and deadpool-redis in labrinth
* Update totp-rs and spdx in labrinth
* Update maxminddb and tar in labrinth
* Update sentry and sentry-actix in labrinth
* Update image in labrinth
* Update lettre in labrinth
* Update derive-new and rust_iso3166 in labrinth
* Update async-stripe and json-patch in labrinth
* Update clap and iana-time-zone in labrinth
* Update labrinth to Rust 2024
* Cargo fmt
* Just do a full cargo update
* Update daedelus to Rust 2024
* Update daedelus_client to Rust 2024
* Set the formatting edition to 2024
* Fix formatting
IntelliJ messed up my formatting
* chore(theseus): significantly cleanup MacOS-specific code
* fix(labrinth): only use jemalloc allocator for Linux targets
The upstream crate asserts that its tests only pass for Linux targets,
and there's little point in supporting other OS for now since practical
Labrinth deployments run under a Linux environment anyway. This change
made it easier for me to cross-compile Labrinth.
* chore(theseus): tweak traffic lights pos according to c39bb78e38
As far as I understand it, that PR introduced the seemingly ad-hoc
additions of 6 and 12 units to the traffic light position calculations,
not directly modifying the `const` values introduced by
d6a72fbfc4.
* fix: re-enable app window shadows on Linux
* chore: log `window.set_shadow` errors
* chore: trigger CI