Skip to content

Space-menu parity + self-update (#82–#88, #91)#93

Merged
krazyjakee merged 1 commit into
masterfrom
feat/issues-82-91
Jun 9, 2026
Merged

Space-menu parity + self-update (#82–#88, #91)#93
krazyjakee merged 1 commit into
masterfrom
feat/issues-82-91

Conversation

@krazyjakee

Copy link
Copy Markdown
Contributor

Resolves the space context-menu parity items and the desktop/Android/web self-update work in one PR. (Per request, #89 iOS and #90 signing are out of scope.)

Space context menu (accord_home_rail.dart)

Self-update

  • Self-update: in-place binary swap + relaunch on desktop (Windows/macOS/Linux) #87 Desktop in-place swapUpdateInstaller downloads the platform asset (progress), verifies SHA-256, extracts the whole bundle tree (fixes the Godot flat-copy bug), and a detached per-OS helper renames→swaps→relaunches with rollback (Windows .zip, Linux .tar.gz, macOS .dmg w/ xattr -cr).
  • Self-update: in-app APK download + install on Android #88 Android — downloads the .apk and launches the system installer via a FileProvider content URI through a method channel (MainActivity.kt); adds REQUEST_INSTALL_PACKAGES, the provider + provider_paths.xml, and routes the user to grant "install unknown apps" when needed.
  • Web: auto-refresh to new build via service worker (currently manual) #91 Webweb/index.html watches the service worker for a newly-deployed build and exposes a bridge; an in-app "reload to update" banner replaces the manual-refresh guidance.
  • update_controller orchestrates phases (download → verify → install) and progress; the Updates page shows a progress bar, live button label, and errors. The installer is split into io / stub via conditional export so the web build still compiles (no dart:io on web).

#86 Migration (code parts)

  • docs/MIGRATION.md documents the hard-cutover plan and the artifact/updater contract.
  • release.yml now generates SHA256SUMS.txt, which also backs the self-update integrity check.
  • The updater already targets DaccordProject/daccord at 0.2.0. The remaining repo-move/announcement steps are manual ops, tracked in the doc.

Tests

  • Extended the notification-gate test (muted space suppresses even mentions) and the settings round-trip test (mutedSpaces/hiddenSpaces).

Validation note

Per the local environment constraint, I did not run the Flutter toolchain locally (the repo's pinned beta SDK requires a newer macOS than this machine). CI (ci.yml: build_runner → flutter analyzeflutter test) is the validation gate. No new codegen is required — no @riverpod/serializer signatures changed.

The native swap (desktop) and APK-install (Android) paths are inherently per-platform and untestable in CI; they're structured faithfully to the Godot spec and should get an on-device pass before a release relies on them.

Closes #82
Closes #83
Closes #84
Closes #85
Closes #87
Closes #88
Closes #91
Addresses #86

🤖 Generated with Claude Code

Resolves a batch of feature-parity and distribution issues (#82#88, #91).

Space context menu (#82#85):
- #82 Mute server: per-space notification suppression (mutedSpaces in
  AccordSettings), gated in the notification + sound paths; Mute/Unmute tile.
- #83 Copy server link: quick tile that reuses/mints an invite, gated on
  createInvites.
- #84 Leave & delete data: destructive tile next to Leave server, owner-guarded.
- #85 Remove server: client-side hiddenSpaces hides a space from the rail
  without leaving; restore via a "hidden servers" affordance.

Self-update:
- #87 Desktop in-place swap: download → SHA-256 verify → extract whole bundle
  tree → detached helper renames/relaunches with rollback (Win/macOS/Linux).
- #88 Android: download APK + system installer via FileProvider + a method
  channel; REQUEST_INSTALL_PACKAGES + provider paths.
- #91 Web: service-worker update detection in index.html + in-app reload prompt.
- update_controller orchestrates phases/progress; UI shows progress + errors.
  The installer is split io/stub via conditional export so web still compiles.

#86 Migration: docs/MIGRATION.md (hard-cutover plan) + SHA256SUMS.txt generated
in release.yml (also backs the self-update integrity check).

Tests: extend notification-gate and settings round-trip coverage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@krazyjakee krazyjakee merged commit 833d516 into master Jun 9, 2026
5 checks passed
@krazyjakee krazyjakee deleted the feat/issues-82-91 branch June 9, 2026 19:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment