cmdReplaySubmitCode dereferenced userInfo without an authentication
guard, allowing an unauthenticated connection with a valid replay code
to segfault the server. Add the same authState != PasswordRight guard
used by all other replay handlers, and gate session command dispatch on
a pre-auth whitelist so future handlers cannot be reached before login.
Took 2 minutes
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* Add animations toggles for the life counter and battlefield
Per-effect toggles plus Enable/Disable-all buttons: a life-counter
flash on loss and a crimson battlefield shimmer on damage.
Took 24 seconds
* Animate life changes with a counter flash and battlefield shimmer
- Life loss/gain pulses the player life counter with a brief flash
- The battlefield table zone shimmers crimson on damage
- Respects the per-effect animation toggles
Both effects drive their decay from GameScene's shared animation timer
through the IAnimatedItem interface (QElapsedTimer based), instead of
owning per-item QTimers.
Took 8 minutes
* Revert unintentional cherry picks
Took 2 minutes
* Lambda to re-use path calculation.
Took 8 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* Introduce generic IAnimatedItem interface for scene animations
GameScene's shared 10ms animation timer previously only knew about
CardItems (cardsToAnimate). Generalize it so any scene item can tick on
the shared timer instead of owning its own QTimer:
- New IAnimatedItem interface with a single animationEvent() tick.
- GameScene tracks animated items in a QHash keyed by QObject and
auto-unregisters items when they are destroyed, so an item deleted
mid-animation (concede, removePlayer, deleteLater) can never leave a
dangling pointer in the set.
- GameScene::~GameScene disconnects incoming connections before the
animation timer is deleted; all timer stops are null-guarded so
destruction ordering no longer matters.
- AbstractCardItem implements IAnimatedItem with a no-op tick so the
existing tap-animation registration path keeps working; CardItem
overrides it with the real rotate animation.
Took 5 minutes
* Add Enable/Disable all animations buttons to settings
The animation settings group gets two push buttons that toggle every
per-effect animation checkbox at once. The base branch carries the
buttons and the shared slots; per-effect toggles (life counter,
battlefield, arrow draw) are added by the feature branches on top.
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Chat] Scroll chat view to bottom when loading chat history (#2725)
Took 4 minutes
Took 38 seconds
* Harden scrolling to bottom
Took 11 minutes
* Implement stick-to-bottom flag
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* Add card completion popups to chats and search fields
Completes @mention and [[card]] in chat, and card names in the deck
editor, EDHREC, Archidekt, card art rules, and user card settings
searches. Pops up a styled list with mana pips and a card image
preview, flipping the list order when the popup opens above the text
field.
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [UserList] Bulk load to prevent hang on connect, fix multi-monitor positioning
Took 48 minutes
* Extract slot to method
Took 10 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [DeckEditor] Use CommanderSpellbook.com to estimate bracket if format is 'commander'
Took 2 minutes
Took 16 minutes
* Convert json data holder to structs, rename variables, extract widget
- Extract bracket estimation UI from DeckEditorDeckDockWidget into a
new CommanderBracketWidget
- Move CommanderSpellbook integration settings from CardsDisplaySettings
to DeckEditorSettings (matching the settings refactor on master)
- Rename CommanderSpellbook integration variables to drop the redundant
'DeckEditor' prefix
Took 4 minutes
# Commit time for manual adjustment:
# Took 6 minutes
# Commit time for manual adjustment:
# Took 8 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Settings] Shuffle some settings around
Took 21 minutes
Took 1 hour 25 minutes
* [Settings] Camel case everything
* Revert debug schema change
* Add new classes
* Fix card counters writing to global
* Fix CI tests
* Fix Windows CI
* interface() is a protected keyword for MSVC
Took 5 minutes
Took 5 seconds
* [Settings] Keep menu settings on the appearance settings page
Leave the 'Menu settings' group box on the appearance settings page for
now; relocating it to the user interface settings page will be done in a
separate PR.
Took 6 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Settings] Implement search
Took 38 minutes
Took 8 seconds
Took 9 minutes
Took 5 seconds
Took 44 seconds
Took 25 seconds
* Comments
Took 23 minutes
Took 15 seconds
* Comments
Took 1 hour 14 minutes
* Minor fixes to search
Took 13 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Chat] Don't tag cards that have no match in the database (#2217)
Took 6 minutes
Took 4 minutes
* Highlight not found but attempted tag
Took 6 minutes
* Change color to not be server message color
Took 3 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [CI] Remove Qt5
Took 10 minutes
Took 9 minutes
* Revert CI failure and fix up comments
Took 4 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Application] Add single instance guard and mime types.
Took 2 hours 39 minutes
Took 18 minutes
Took 5 minutes
Took 12 seconds
Took 11 seconds
* Rework
Took 30 minutes
Took 50 seconds
* Only enforce single instance if launched with arguments.
Took 5 minutes
* Prototype intents
Took 53 minutes
Took 6 seconds
* Connect/disconnect and join game/room intents.
Took 3 hours 14 minutes
Took 2 seconds
Took 15 seconds
* Fix include.
Took 1 minute
Took 23 seconds
Took 2 seconds
* Mac handling.
Took 10 minutes
Took 12 seconds
Took 3 minutes
* Lint.
Took 3 minutes
* Rebase.
Took 3 minutes
Took 17 seconds
* Implement UrlSchemeEventFilter
Took 10 minutes
Took 7 seconds
* Qt Moc
Took 3 minutes
* Modern PList.
Took 21 minutes
Took 1 minute
* Debug output.
Took 6 minutes
Took 19 minutes
* Watch file:// prefix.
Took 15 minutes
Took 7 seconds
* Better handler.
Took 6 minutes
* Don't store reference in member
Took 5 minutes
* Move impl to cpp, fix lifetime issues.
Took 11 minutes
Took 2 minutes
* Better single-instance handoff, url intent harded
copy game link context-menu
Polish for installers
Took 35 minutes
Took 8 seconds
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
The getUserInfo command for a user that is not currently online returned
the full database record, including the account id, the email address
and the stored client id, to any logged-in requester. Mirror the
redaction already applied to online users via copyUserInfo(): the id and
email are only ever exposed to the account owner, and the client id only
to moderators.
The buddy/ignore add-to-list event likewise returned the target user's
email address and client id to the requester. The list entry only needs
the public profile fields, so strip the email and client id from it as
well.
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [ConnectDialog] Focus login field after selecting a server (#3346)
Took 12 minutes
* [UpdateDialog] Center update message boxes over the main window (#3538)
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Card Database] Improve loading times through binary cache
Took 10 minutes
Took 9 minutes
Took 16 seconds
* [Card Database] Remove lib qt include
Took 18 minutes
Took 14 seconds
* Downgrade to 6.3 datastream
Took 5 minutes
* go up to 6.4 datastream
Took 1 minute
* Address comments
* Small bug fixes
Took 20 minutes
Took 10 seconds
* More fixes.
Took 4 minutes
Took 4 seconds
* Even more fixes.
Took 11 minutes
Took 4 seconds
* More fixes.
Took 6 minutes
Took 26 seconds
Took 8 minutes
* Namespace instead of class
Took 6 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Networking] Doxygen
* Lint cause my autolinter is broken lol
* Update.
* Update Doxyfile
Co-authored-by: tooomm <tooomm@users.noreply.github.com>
* Alphabetical ordering
Co-authored-by: tooomm <tooomm@users.noreply.github.com>
* Add new card art rule comment
* move filter program into doxygen folder
* [Networking] Doxygen
Took 49 seconds
* [Networking] Doxygen
Took 2 hours 0 minutes
Took 58 minutes
Took 8 seconds
Took 29 seconds
Took 4 minutes
Took 1 minute
Took 4 minutes
* [Networking] Fix Doxyfile
Took 2 hours 0 minutes
Took 58 minutes
Took 8 seconds
Took 29 seconds
Took 4 minutes
Took 1 minute
Took 6 minutes
* [Networking] Fix Doxyfile
Took 2 hours 0 minutes
Took 58 minutes
Took 8 seconds
Took 29 seconds
Took 4 minutes
Took 1 minute
Took 3 minutes
* [Networking] Fix Doxyfile again
Took 2 hours 0 minutes
Took 58 minutes
Took 8 seconds
Took 29 seconds
Took 4 minutes
Took 1 minute
Took 2 minutes
---------
Co-authored-by: Lukas Brübach <lukas.bruebach@bdosecurity.de>
Co-authored-by: tooomm <tooomm@users.noreply.github.com>
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [Settings] Split cache_settings into multiple files
Took 9 minutes
Took 4 minutes
* [Settings] Fwd declare settings classes in cache_settings
Took 15 minutes
* Fix oracle includes.
Took 8 minutes
* Address comments, fix windows CI
Took 8 minutes
* fix copy constructor visibility
Took 3 minutes
* lint
Took 2 minutes
* Fix native format tests.
Took 5 minutes
* Remove test header guard
Took 4 seconds
* Remove tests invalid in CI environ
Took 24 seconds
* Adjust to rebase.
Took 11 minutes
* Change settings file name.
Took 8 minutes
---------
Co-authored-by: Lukas Brübach <lukas.bruebach@bdosecurity.de>
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
* [PaletteEditor] Ensure directory is writeable, don't fall back to alternate palette.
Took 17 minutes
* [ThemeManager] Extract system theme dir path resolution to helper, use it in default palette fetching
Took 8 minutes
* [ThemeManager] Expose styling again
Took 3 minutes
* [ThemeManager] Capture app palette before theme is applied for reverting
* [ThemeManager] Simply delete custom palette instead of reverting to default
* [ThemeManager] Generate and apply immediately on change.
* [PaletteEditor] Block grid signals during initial loading.
Took 5 minutes
* Address comments
Took 8 minutes
* Seed accent from scheme on reset and revert
Took 2 minutes
---------
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>