Commit graph

6332 commits

Author SHA1 Message Date
Lukas Brübach
34ef3c1f8b
[DeckShare] Forward a dependency's cancellation as the owner's own 2026-09-20 19:42:14 +02:00
Lukas Brübach
d4a73b6d4a
[DeckShare] End the open-shared-deck files with a trailing newline 2026-09-20 19:42:14 +02:00
Lukas Brübach
210a0fa76a
[DeckShare] Open shared decks via links with a gated preview flow
- Serialized url-chain dispatcher in IntentUrlParser; queue-drained
  urlChainFinished(bool) drives the startup auto-connect fallback
- Open-shared-deck intent with sequential download state machine,
  15s per-item timeout, partial-success offer, livable Cancel via
  ApplicationModal dlg_login_prompt interactive fallback
- Preview dialog: download progress label, share vocab sweep,
  palette-highlight selection frame, Space/Enter keyboard toggle,
  NoFocus checkbox, double-click tile opens immediately
- Confirm-before-server-migration with one-shot restore to the
  previous server on failed/cancelled chains (statusChanged settle
  deferral), hostname-only identity comparisons
- Skip credential link when already connected; arrow-key navigation
  in FlowWidget; card glows use palette highlight
- Address code-review M1-M4 and UI/UX QA blockers 1-2
2026-09-20 19:42:14 +02:00
Lukas Brübach
c4ffc789cd
[DeckShare] Resolve the stable server client in the deck editor gate
actShareDeck went through tabSupervisor->getClient(), which hands back a
LocalClient while an offline game is running. LocalClient never sets its status,
so a logged-in user could not share from the deck editor during a local game,
and got a misleading "You must be connected" message. Expose the supervisor's
stable remote client and use it for the gate and the dialog, matching the other
share tabs.
2026-09-20 19:42:12 +02:00
Lukas Brübach
64335328c3
[DeckShare] Restore the banner-text doc comment
Re-add the doc block above refreshBannerCardText() that was removed as part of
the share-selection work; it documents the coupling to refreshBannerCardToolTip.
2026-09-20 19:42:12 +02:00
Lukas Brübach
bda4aeef46
[DeckShare] Explain why a blank deck cannot be shared
A blank deck exited the share flow silently. The menu only disables the entry
via setSaveStatus(), a different predicate, so the path is reachable (e.g. add a
card and remove it again). Mirror the not-logged-in branch with a short
information dialog.
2026-09-20 19:42:12 +02:00
Lukas Brübach
26b17f8435
[DeckShare] Wire the status-changed handler after shareBar exists
handleConnectionChanged() dereferences shareBar->isVisible(), but the connection
was set up before shareBar was constructed and shareBar had no in-class
initializer. On any status change delivered before construction the slot read an
indeterminate pointer. Seed the connection (and the initial share availability)
after shareBar exists and give shareBar a = nullptr initializer.
2026-09-20 19:42:12 +02:00
Lukas Brübach
2cf03124de
[DeckShare] Abandon an in-flight tile share on cancel
exitShareMode() left shareTimeoutTimer running and did not abandon the pending
Command_DeckShareCreate, so a timer pop or a late success still reported the
share after the user cancelled. Stop the timer and ignore stale responses via a
sequence number, mirroring the tree tab.
2026-09-20 19:42:12 +02:00
Lukas Brübach
02f2f20356
[DeckShare] Abandon an in-flight tree share on cancel
Leaving share mode never stopped the timeout timer, and a late response still
ran shareFromTreeFinished, copying the link and announcing success for a share
the user backed out of. Stopping the timer and tracking the outstanding request
by sequence number means a stale reply (or a timed-out one) after cancel is
ignored, and cancelling + re-entering share mode can no longer confuse the two
requests.
2026-09-20 19:42:12 +02:00
Lukas Brübach
ffa3971e90
[DeckShare] Keep the share selection consistent with the visible decks
Filtered-out previews are hidden but kept alive, so selectedFilePaths() counted
them in the share and the selection highlight. Only decks the user can see are
now shared, and a deck that stops matching the filters is deselectd as the deck
pass runs, keeping the %n count and the highlight in sync with the screen.
2026-09-20 19:42:12 +02:00
Lukas Brübach
f74a957059
[DeckShare] Resolve the share theme icon through themePixmap
QPixmap("theme:icons/share") has no file extension, so ThemeManager::assetPath()
is bypassed and the pixmap is always null. Use themePixmap(QStringLiteral("icons/share"))
like every other toolbar action, so the .svg (and dark/light variants) resolves.
2026-09-20 19:42:12 +02:00
Lukas Brübach
9b60e8e7e1
[DeckShare] Include the network settings header used by the share timeout 2026-09-20 19:42:12 +02:00
Lukas Brübach
b7fd53768c
[DeckShare] Keep the settings include in the project include block 2026-09-20 19:42:12 +02:00
Lukas Brübach
75352a00a5
[DeckShare] End the share-related headers and sources with a trailing newline 2026-09-20 19:42:12 +02:00
Lukas Brübach
4721404e8b
[DeckShare] Let the share bar owners supply the hint text 2026-09-20 19:42:12 +02:00
Lukas Brübach
3199a4821a
[DeckShare] Forward retranslateUi to the visual deck storage widget 2026-09-20 19:42:12 +02:00
Lukas Brübach
60d1ce2b89
[DeckShare] Retranslate the share button tooltip with the storage widget 2026-09-20 19:42:12 +02:00
Lukas Brübach
29947d1429
[DeckShare] Join the selected-count label with a non-translatable separator 2026-09-20 19:42:12 +02:00
Lukas Brübach
2b9fdc054f
[DeckShare] Provide the full share hint in each plural form 2026-09-20 19:42:12 +02:00
Lukas Brübach
6fa4a2eb0c
[DeckShare] Recover the share controls when the server never answers 2026-09-20 19:42:12 +02:00
Lukas Brübach
34be334b06
[DeckShare] Replace the duplicate computeColorIdentity with the shared getDeckColorIdentity 2026-09-20 19:42:12 +02:00
Lukas Brübach
949d75b2bd
[DeckShare] Build share links with QUrl and QUrlQuery for percent-encoding 2026-09-20 19:42:12 +02:00
Lukas Brübach
9335adb1b6
[DeckShare] Format share expiry with the locale-aware short format 2026-09-20 19:42:12 +02:00
Lukas Brübach
4168d329de
[DeckShare] Drop includes left unused by the share-response extraction 2026-09-20 19:42:12 +02:00
Lukas Brübach
a5b2114296
[DeckShare] Extract the share-creation response handling into DeckShareUtils 2026-09-20 19:42:12 +02:00
Lukas Brübach
4b870fdf06
[DeckShare] Use the stable server client for the visual deck storage tab 2026-09-20 19:42:12 +02:00
Lukas Brübach
bb06de724f
[DeckShare] Fix share-link expiry build on the minimum-supported Qt
QTimeZone::UTC (the Initialization enum) only exists since Qt 6.7, so
Debian 12 and Ubuntu 24.04 (Qt 6.4) fail to compile the share-link expiry
handling in the share dialog and the two deck-storage tabs. Mirror the
existing games_model guard and fall back to Qt::UTC on older Qt.
2026-09-20 19:42:12 +02:00
Lukas Brübach
0276eb303e
[DeckShare] Address review findings and harden the share flows
Gate every share entry point on login, de-duplicate the share-link and
color-identity logic behind DeckShareUtils and an injected querier, and
replace the silent tray/status-bar notices with always-visible dialogs.

- abstract_tab_deck_editor: explain that sharing requires a connection
  instead of silently doing nothing when logged out
- tab_deck_storage: disable the share action on disconnect, reject
  folder/deck mixes and the root folder with clear warnings, re-enable
  Create on every entry/response so a dropped connection cannot leave
  the button disabled
- tab_deck_storage_visual: same login gate for the context-menu entry,
  visible success/error dialogs, and a symmetric in-flight guard
- getDeckColorIdentity now takes a CardDatabaseQuerier, dropping the
  CardDatabaseManager singleton access and enabling unit tests
2026-09-20 19:42:12 +02:00
Lukas Brübach
d91fe34d20
[DeckShare] Create temporary share links for local and server decks 2026-09-20 19:42:12 +02:00
Lukas Brübach
45fec7fc74
[VDS] Address second round of review nits 2026-09-20 19:42:11 +02:00
Lukas Brübach
8d28a393d7
[VDS] Address review: dead code, chip reparenting, filter signal and sort fast-path 2026-09-20 19:42:11 +02:00
Lukas Brübach
b38e9e4564
[VDS] Decouple tag filter and fix reordered-chips crash 2026-09-20 19:42:11 +02:00
Lukas Brübach
6fe6a75f8f
Address second round of deck share review comments 2026-09-20 19:42:11 +02:00
Lukas Brübach
02b4e8d13d
Document transaction teardown in deck share rollback paths 2026-09-20 19:42:11 +02:00
Lukas Brübach
b7e4afa399
Address server review comments for deck share links 2026-09-20 19:42:11 +02:00
Lukas Brübach
5d0a23dffb
[Server] Add deck share links and public deck visibility 2026-09-20 19:42:11 +02:00
tooomm
b3c426cd43
Alphabetical ordering of Qt modules/packages (#7334)
* ordering

* Update docker-release.yml

* Revert "Update docker-release.yml"

This reverts commit e908d92184.
2026-09-20 19:24:55 +02:00
tooomm
c97e1c4149
Add back dir location (#7335) 2026-09-20 17:52:56 +02:00
tooomm
ec41c103d1
[CI] Utilize version resolution in install-qt-action + cache with full version key (#6993)
* Direct wildcard resolution in action + cache with version key

* add back space

* Delete .ci/resolve_latest_aqt_qt_version.sh

* Disable Qt slimming and manual caching (use build-in fat caching)

* cleanup

* Re-add resolve_latest_aqt_qt_version.sh
2026-09-20 16:53:10 +02:00
tooomm
d9cd2d1750
[CI] Only save caches from master (#7186)
* Save caches only from master

* Save cache only from master

* Update desktop-build.yml
2026-09-20 16:15:24 +02:00
tooomm
1405952f1b
Space quantity + unit (#7328) 2026-09-20 06:44:31 +02:00
BruebachL
db2e159dca
[Game] Allow judges to enter any game regardless of restrictions (#7315)
Some checks are pending
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (actions) (push) Waiting to run
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 26 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker / Servatrice (arm) (push) Waiting to run
Build Docker / Servatrice (x86) (push) Waiting to run
Build Docker / Publish multi-platform Servatrice image (push) Blocked by required conditions
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:39:52 +02:00
BruebachL
cb19922e55
[DeckList] Extract deck metadata element readers (#7325)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:05 +02:00
BruebachL
ec39ec611b
[DeckList] Extract deck root seeking and body reading in XML load (#7324)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:05 +02:00
BruebachL
662f1b79cc
[DeckList] Extract board-zone pruning in node deletion (#7323)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:05 +02:00
BruebachL
eb1e34c5a6
[DeckList] Extract recursive card traversal helpers (#7322)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:04 +02:00
BruebachL
dce9efcaa3
[DeckList] Extract deck-hash encoding helpers (#7321)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:04 +02:00
BruebachL
c45cb8ac32
[DeckList] Extract deck-node sort helpers (#7320)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:03 +02:00
BruebachL
1a6d9d7749
[DeckList] Extract card parsing from zone XML reader (#7319)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:03 +02:00
BruebachL
faffb5a837
[DeckList] Extract sideboard-plan move parsing into a helper (#7318)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
2026-09-19 10:35:03 +02:00