<feed xmlns='http://www.w3.org/2005/Atom'>
<title>DropOut/src-tauri/src/core, branch dev</title>
<subtitle>This is a new Minecraft launcher that is currently in development. It is designed to be a modern, fast and efficient launcher. It is written in Rust. Aims to be a Reproducible Minecraft Workspace Manager.</subtitle>
<id>https://git.hydroroll.team/DropOut/atom?h=dev</id>
<link rel='self' href='https://git.hydroroll.team/DropOut/atom?h=dev'/>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/'/>
<updated>2026-01-18T06:27:45Z</updated>
<entry>
<title>feat(backend): enhance instance management for editor support</title>
<updated>2026-01-18T06:27:45Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T06:27:45Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=6fdb730c323bcb1b052a2f9b13034603cbaf1e4d'/>
<id>urn:sha1:6fdb730c323bcb1b052a2f9b13034603cbaf1e4d</id>
<content type='text'>
- Sync instance.version_id after start_game, install_fabric, install_forge
- Add jvm_args_override and memory_override to Instance struct
- Add file management commands: list_instance_directory, delete_instance_file, open_file_explorer
- Support per-instance settings overrides (Java args, memory)
</content>
</entry>
<entry>
<title>feat(migration): implement shared cache migration with SHA1 dedup</title>
<updated>2026-01-18T05:43:12Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T05:43:12Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=17e8dd78ca5b7aae9baa4f86d38fa755c8af21c5'/>
<id>urn:sha1:17e8dd78ca5b7aae9baa4f86d38fa755c8af21c5</id>
<content type='text'>
- Add migrate_to_shared_caches() with hard link preference
- SHA1-based deduplication across all instances
- Copy fallback for cross-filesystem scenarios
- Auto-enable use_shared_caches after successful migration
- UI shows statistics: moved files, hardlinks/copies, MB saved
</content>
</entry>
<entry>
<title>fix(ci): improve pre-commit fmt hook configuration</title>
<updated>2026-01-18T05:34:52Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T05:34:52Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=02520ca62ac5e508e8748b2445171be64f459b6c'/>
<id>urn:sha1:02520ca62ac5e508e8748b2445171be64f459b6c</id>
<content type='text'>
- Add pass_filenames: false to fmt hook
- Add -- separator for cargo fmt args
- Manually format code with cargo fmt
</content>
</entry>
<entry>
<title>fix(java): handle build metadata and underscore formats in version parsing</title>
<updated>2026-01-18T04:20:42Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T04:20:42Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=373fb81604451f085bf9fbccf9251acb17e400a9'/>
<id>urn:sha1:373fb81604451f085bf9fbccf9251acb17e400a9</id>
<content type='text'>
Update parse_java_version() to properly handle:
- Build metadata (strip '+' and everything after)
- Trailing garbage (strip '-' and everything after, e.g. -Ubuntu)
- Underscore version separators (1.8.0_411 -&gt; 1.8.0.411)

This ensures Java versions are correctly parsed on all platforms:
- Old format: 1.8.0_411 (Java 8 update 411)
- New format: 21.0.3+13-Ubuntu (Java 21 with build metadata)
- Short format: 17.0.1 (Java 17 update 1).
</content>
</entry>
<entry>
<title>fix(manifest): add find_root_version for nested inheritance resolution</title>
<updated>2026-01-18T04:19:43Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T04:19:43Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=76086e65a7caf1bb8aa54a9404c70a714bc00da8'/>
<id>urn:sha1:76086e65a7caf1bb8aa54a9404c70a714bc00da8</id>
<content type='text'>
Add find_root_version() function to walk the inheritance chain and find
the root vanilla Minecraft version from a modded version (Fabric/Forge).

This is useful for determining which vanilla version's client.jar should
be used when launching modded versions, as modded versions inherit from
vanilla versions but don't contain their own client.jar.

The function follows the inheritsFrom field recursively until reaching
a version without a parent (the root vanilla version).
</content>
</entry>
<entry>
<title>fix(rules): add architecture and version checks to library rule matching</title>
<updated>2026-01-18T04:19:00Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T04:19:00Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=af7f8aec576b34d11bf136a75542822a74d7f335'/>
<id>urn:sha1:af7f8aec576b34d11bf136a75542822a74d7f335</id>
<content type='text'>
Complete the rule_matches function to properly evaluate:
- OS name (already working: osx/macos, linux, windows)
- Architecture (arch field): match against env::consts::ARCH
- OS version (version field): accept all versions for now (conservative)

This ensures that architecture-specific libraries (e.g. natives-arm64)
are correctly filtered based on the current platform.
</content>
</entry>
<entry>
<title>fix(downloader): use proper atomic ordering for thread-safe progress tracking</title>
<updated>2026-01-18T04:17:56Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T04:17:56Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=e7d683d79bec482a13c821f8c1da3c8c1d719d1b'/>
<id>urn:sha1:e7d683d79bec482a13c821f8c1da3c8c1d719d1b</id>
<content type='text'>
Replace Ordering::Relaxed with appropriate synchronization:
- Ordering::AcqRel for fetch_add operations that modify shared state
- Ordering::Acquire for loads that depend on other thread's writes
- Ordering::Release for stores that other threads may read

This ensures visibility of downloaded bytes and completed files across
concurrent download tasks without data races.
</content>
</entry>
<entry>
<title>fix(auth): add token expiry check in start_game</title>
<updated>2026-01-18T04:16:55Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T04:16:55Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=1021c921c5690ceb800c03140de0723f3338e121'/>
<id>urn:sha1:1021c921c5690ceb800c03140de0723f3338e121</id>
<content type='text'>
Check if the Microsoft account token is expired before attempting to
launch the game. If expired, attempt to refresh using the refresh_token.
If refresh fails, return an error instructing the user to login again.

Also removed #[allow(dead_code)] from is_token_expired since it's
now actively used.
</content>
</entry>
<entry>
<title>fix(instance): copy directory BEFORE creating metadata in duplicate_instance</title>
<updated>2026-01-18T04:16:05Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T04:16:05Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=079ee0a6611499db68d1eb4894fab64739d5d2e7'/>
<id>urn:sha1:079ee0a6611499db68d1eb4894fab64739d5d2e7</id>
<content type='text'>
Prevent race condition in duplicate_instance by copying the source
game directory BEFORE creating and saving the new instance metadata.
This ensures that if the copy fails, no orphaned metadata is created.

Also copy the icon_path from source instance to maintain visual consistency.
</content>
</entry>
<entry>
<title>fix(auth): prevent infinite recursion in get_client()</title>
<updated>2026-01-18T04:13:49Z</updated>
<author>
<name>HsiangNianian</name>
<email>i@jyunko.cn</email>
</author>
<published>2026-01-18T04:13:49Z</published>
<link rel='alternate' type='text/html' href='https://git.hydroroll.team/DropOut/commit/?id=723738e5308b0195ad715e0fa49f19db754753c6'/>
<id>urn:sha1:723738e5308b0195ad715e0fa49f19db754753c6</id>
<content type='text'>
The fallback in the reqwest client builder was calling get_client()
recursively, which would cause a stack overflow if Client::builder()
failed. Now uses reqwest::Client::new() as the fallback.

Also fixed User-Agent to be platform-agnostic.

Reviewed-by: Claude Opus 4.5
</content>
</entry>
</feed>
