feat(ui): delegate install lifecycle to the peer

Remove the Tauri-side whole-game backup and unpack flow. The Tauri shell now
provides an injected unrar sidecar implementation and lets the peer own
install, update, uninstall, rollback, and recovery decisions.

Route install commands by local state: missing version.ini fetches from peers,
downloaded archives without local/ send InstallGame directly, and already
installed games are left to the Play action. Updates request a fresh download
and uninstalls forward UninstallGame. The UI mirrors peer operation events for
downloading, installing, updating, and uninstalling.

Render installed-but-not-downloaded games as LocalOnly and surface the local
version for downloaded-but-not-installed games. Add a secondary uninstall
affordance that does not change the main Install/Open action.

Test Plan:
- just fmt
- just clippy
- just test
- just build

Refs: PLAN.md
This commit is contained in:
2026-05-15 18:20:45 +02:00
parent 6c8a2bb9f0
commit c5dfbf99a0
3 changed files with 399 additions and 256 deletions
@@ -74,6 +74,29 @@ h1.align-center {
font-size: 0.9em;
}
.badges {
display: flex;
min-height: 24px;
gap: 6px;
justify-content: center;
align-items: center;
padding: 0 10px 8px;
}
.badge {
border: 1px solid #4866b9;
border-radius: 4px;
color: #D5DBFE;
font-size: 12px;
line-height: 1;
padding: 5px 7px;
}
.badge.local-only {
border-color: #8b6f2a;
color: #f1d58a;
}
.desc-text {
text-align: left;
}
@@ -127,6 +150,24 @@ h1.align-center {
transform: none;
}
.uninstall-button {
align-self: center;
width: 34px;
height: 34px;
margin: 6px 0 0;
border-radius: 50%;
border: 1px solid #6c2942;
background: #2a0714;
color: #ffb4c8;
font-weight: bold;
cursor: pointer;
}
.uninstall-button:hover {
border-color: #ff6d9d;
background: #4d1025;
}
@keyframes flicker {
0% { opacity: 1; }
50% { opacity: 0.8; }