Space-menu parity + self-update (#82–#88, #91)#93
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)mutedSpacesinAccordSettings; gated in both the notification gate (spaceMuted) and the message-SFX path. Mute/Unmute tile in the menu. Muted spaces still show unread badges, like Discord.createInvites) that reuses an existing invite or mints a default 7-day one, then copies<baseUrl>/invite/<code>.leaveMe(..., deleteData: true)(mirrors Privacy & Data).hiddenSpaces; hidden spaces are filtered from the rail and restored via a "N hidden" affordance + sheet. Resolves the open question: it hides locally, it is not a leave.Self-update
UpdateInstallerdownloads 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.dmgw/xattr -cr)..apkand launches the system installer via aFileProvidercontent URI through a method channel (MainActivity.kt); addsREQUEST_INSTALL_PACKAGES, the provider +provider_paths.xml, and routes the user to grant "install unknown apps" when needed.web/index.htmlwatches 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_controllerorchestrates 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 (nodart:ioon web).#86 Migration (code parts)
docs/MIGRATION.mddocuments the hard-cutover plan and the artifact/updater contract.release.ymlnow generatesSHA256SUMS.txt, which also backs the self-update integrity check.DaccordProject/daccordat0.2.0. The remaining repo-move/announcement steps are manual ops, tracked in the doc.Tests
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 analyze→flutter 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