commit afa292990671b64dc2598a4d390e8557bfe173d4
parent c122f9035d95123d9f479a49dc896b45d6c7b4b9
Author: Michael Camilleri <[email protected]>
Date: Tue, 16 Jun 2026 23:49:15 +0900
Clarify removed-puzzle announcements on the Game List
This commit fixes the Game List announcement row showing a white strip
around the banner by giving the row's parent stack the same grouped
background as the list content.
The removed-share copy is now shorter and aligned with the open-puzzle
removal wording: unavailable share links show 'Puzzle Removed' with
'This puzzle was removed.', while other share-link accept failures use
the existing 'Accepting Failed' language. The pending-sync reassurance
keeps its body but now appears under 'Puzzle Unavailable', and Debug
builds force the removed-puzzle banner so the Game List treatment can be
checked directly.
Co-Authored-By: Codex GPT 5.5 <[email protected]>
Diffstat:
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/Crossmate/CrossmateApp.swift b/Crossmate/CrossmateApp.swift
@@ -537,9 +537,9 @@ struct RootView: View {
id: "share-link-join-failed",
scope: .global,
severity: gone ? .warning : .error,
- title: gone ? "Puzzle Unavailable" : "Couldn't Join Puzzle",
+ title: gone ? "Puzzle Removed" : "Accepting Failed",
body: gone
- ? "This puzzle is no longer available — the person who shared it deleted or left the game."
+ ? "This puzzle was removed."
: error.localizedDescription,
dismissal: .manual
))
@@ -547,6 +547,16 @@ struct RootView: View {
}
}
await services.start(appDelegate: appDelegate)
+#if DEBUG
+ services.announcements.post(Announcement(
+ id: "debug-share-link-join-failed",
+ scope: .global,
+ severity: .warning,
+ title: "Puzzle Removed",
+ body: "This puzzle was removed.",
+ dismissal: .manual
+ ))
+#endif
}
.onOpenURL { url in
if let id = services.importService.importGame(from: url) {
@@ -965,7 +975,6 @@ private struct PuzzleDisplayView: View {
for announcement in OpenPuzzleBanner.announcements(for: openState) {
services.announcements.post(announcement)
}
-
if isShared && preferences.isICloudSyncEnabled {
services.syncMonitor.note(
"PuzzleDisplay[\(gameID.uuidString.prefix(8))]: loaded shared roster"
diff --git a/Crossmate/Services/AnnouncementCenter.swift b/Crossmate/Services/AnnouncementCenter.swift
@@ -119,7 +119,7 @@ extension Announcement {
id: "share-join-pending-sync",
scope: .global,
severity: .info,
- title: "Almost There",
+ title: "Puzzle Unavailable",
body: "This puzzle is still syncing and will appear in your list shortly.",
dismissal: .transient(after: 6)
)
diff --git a/Crossmate/Views/GameList/GameListView.swift b/Crossmate/Views/GameList/GameListView.swift
@@ -68,6 +68,7 @@ struct GameListView: View {
}
content(usesRoomierType: usesRoomierType(for: geometry.size))
}
+ .background(Color(.systemGroupedBackground))
.animation(.easeInOut(duration: 0.3), value: announcements.currentGlobal())
}
.navigationTitle("")