MTGProxyPrinter

Timeline
Login

Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

348 check-ins using file build_MTGProxyPrinter_packages.bat version 5d769b4af5

2026-08-29
09:36
CardDatabase: Re-phrase find_created_token() comments, update method signature Leaf check-in: 938a8c4806 user: thomas tags: automatic_token_handling
09:34
tests/json_samples/___README.txt: Update content Leaf check-in: fd570eca88 user: thomas tags: trunk
2026-08-28
15:16
CardDatabase: Honor the preferred language in find_related_token(). This currently does nothing, because Scryfall only has English token. check-in: 2c7e57b2ac user: thomas tags: automatic_token_handling
12:06
Document: Docstring update for find_relevant_index_ranges() check-in: ce642d1ef1 user: thomas tags: trunk
11:53
Document: Fixed crash in get_empty_card_for_size() caused by excessive parameters passed to Card(). This was triggered when adding a blank spot to the current page or when loading a document with blank spots. check-in: 8334519ba6 user: thomas tags: trunk
2026-08-23
12:21
Fixed typo in the changelog check-in: eae3697a46 user: thomas tags: automatic_token_handling
12:02
StreamTask: Remove the no longer used json_path argument and attribute check-in: 63379b6c79 user: thomas tags: automatic_token_handling
11:56
DatabaseImportTask: Refactor and fix _get_related_cards(). It now correctly handles token created by the Undercity check-in: b7848d67ed user: thomas tags: automatic_token_handling
2026-08-22
16:06
Update code comments check-in: 00ed2099ba user: thomas tags: automatic_token_handling
14:40
Adjust the logic to skip token already present in the input data set, and do not recurse across Card→Card relations. The latter prevents adding tokens created by indirect card connections. check-in: 58db7b1239 user: thomas tags: automatic_token_handling
2026-08-21
21:49
Add unit tests for CardDatabase.find_created_token() check-in: f08b62b501 user: thomas tags: automatic_token_handling
2026-08-20
18:15
Fix syntax error that wasn't highlighted by the IDE… check-in: c1c0d46e74 user: thomas tags: automatic_token_handling
18:01
Continued implementing find_created_token(). The method now contains actual logic. It gathers input oracle_ids in a temporary table, then computes the set of result tokes and markers. The transitive search still walks over card to card relationships, so it still finds additional tokens it should not actually find check-in: 3081e80d03 user: thomas tags: automatic_token_handling
2026-08-14
20:29
Add WIP query for finding all tokens for a card or list of cards check-in: d754e66028 user: thomas tags: automatic_token_handling
18:36
DeckImportWizard/SummaryPage: Implement card removal via context menu. check-in: eaafa75db1 user: thomas tags: trunk
17:53
CardListTableView: Fix wrong values in logging output in _on_selection_changed() check-in: 5c03d39232 user: thomas tags: trunk
11:10
Tests: Add unit tests for AsyncTask base behavior regarding task cancelation Leaf check-in: c1ad9f006d user: thomas tags: refactor_task_cancel_interface
09:51
AsyncTask: Implement the first batch of the refactoring TODO: Introduce TaskCanceled exception, the @cancelable decorator for run(), add method raise_if_canceled() that wraps raising TaskCanceled if cancel() was called, and rewrite can_cancel() to report True iff run() is wrapped in @cancelable. check-in: b293f61ccd user: thomas tags: refactor_task_cancel_interface
2026-08-13
22:07
Create new branch named "refactor_task_cancel_interface" check-in: b03ea0e21f user: thomas tags: refactor_task_cancel_interface
22:02
SetDataImportTask: Optimize set symbol downloads. Try reading MTGSet symbols from the database or from a local cache first, before downloading them from Scryfall. This avoids repeated downloads of the same file. On a full database population, this cuts downloads down from 1050 to 360 in August 2026. check-in: 2453bafaad user: thomas tags: trunk
13:25
Pytest 10 compatibility: No longer use generator expressions for test case parametrization. Wrap those in list() or otherwise refactor to not use them check-in: afcfdf58ca user: thomas tags: trunk
13:14
Update dependencies; allow Pytest 10 Closed-Leaf check-in: a68c6d2125 user: thomas tags: pytest10_compat
13:11
test_deck_import_wizard.py: Pytest 10 compatibility check-in: 3d7bf4e34a user: thomas tags: pytest10_compat
13:07
test_decklist_downloader.py: Pytest 10 compatibility check-in: b4144d002c user: thomas tags: pytest10_compat
12:59
test_save_file_schema.py: Pytest 10 compatibility check-in: d52e0b28a1 user: thomas tags: pytest10_compat
12:58
test_settings.py: Pytest 10 compatibility check-in: 5a27df7202 user: thomas tags: pytest10_compat
2026-08-12
09:34
test_ui_files.py: Pytest 10 compatibility check-in: 90704ce296 user: thomas tags: pytest10_compat
09:32
test_card_info_downloader.py: Pytest 10 compatibility check-in: 4c8c0845df user: thomas tags: pytest10_compat
09:27
test_argument_parser.py: Pytest 10 compatibility check-in: c3f2eb2bf9 user: thomas tags: pytest10_compat
09:19
test_page_scene.py: Pytest 10 compatibility check-in: 7a9689bebb user: thomas tags: pytest10_compat
09:13
test_document_loader.py: Pytest 10 compatibility check-in: a09031108d user: thomas tags: pytest10_compat
09:10
test_carddb.py: Pytest 10 compatibility check-in: 02d3d4682a user: thomas tags: pytest10_compat
2026-08-10
21:19
test_action_move_cards.py: Pytest 10 compatibility check-in: 3daed2e2cf user: thomas tags: pytest10_compat
21:18
test_action_move_page.py: Deduplicate code by encapsulating it in a helper function. Add docstrings. Replace test generator with a static list check-in: ee4281a4f2 user: thomas tags: pytest10_compat
20:55
test_action_move_cards.py: Pytest 10 compatibility check-in: 8291d695e7 user: thomas tags: pytest10_compat
20:53
test_tappedout_csv_parser.py: Pytest 10 compatibility check-in: 7e41274d71 user: thomas tags: pytest10_compat
20:51
test_scryfall_csv_parser.py: Pytest 10 compatibility check-in: 8331856138 user: thomas tags: pytest10_compat
20:49
test_printing_filter_updater.py: Pytest 10 compatibility check-in: fe391b97d5 user: thomas tags: pytest10_compat
20:22
Drop ijson from the dependencies. Replace all usages with the standard library, and remove all mentions throughout the project check-in: 149154a242 user: thomas tags: trunk
18:50
Remove now-unused dependency ijson from the dependency list, documentation, and the tox compatibility validation. Closed-Leaf check-in: 1178d26720 user: thomas tags: drop_ijson_dependency
18:43
Port MoxfieldDownloader from ijson to json check-in: 0ce164a8e8 user: thomas tags: drop_ijson_dependency
18:19
TCGPlayerDownloader: Fixed iterating the cards dict, by properly using .items() on it. Also fixed a wrong type annotation in the API response modelling check-in: b7af51f952 user: thomas tags: drop_ijson_dependency
18:11
Port ArchidektDownloader from ijson to json check-in: 017a8c9cf3 user: thomas tags: drop_ijson_dependency
2026-08-09
23:14
Port the TCGPlayerDownloader from ijson to json. Also add some TypedDicts documenting the API response format check-in: 529f517dc3 user: thomas tags: drop_ijson_dependency
22:50
Port ManaboxApp downloader from ijson to json check-in: 5921ca74d0 user: thomas tags: drop_ijson_dependency
22:36
Add a helper method DownloaderBase.read_json_from_url(), which encapsulates reading the URL and decoding to dict. This avoids duplicating the decoding boilerplate whereever JSON is read. check-in: 06ec02bd2b user: thomas tags: drop_ijson_dependency
22:22
Replace ijson with json in update_checker.py check-in: ff8370e9af user: thomas tags: drop_ijson_dependency
18:11
StreamTask: Properly shut down the queue in cancel() using the designated method for this. scripts/benchmark_card_data_import.py: Fix deadlock when cancelling via Ctrl+C, by cancelling the FileStreamTask when receiving a KeyboardInterrupt. check-in: f8252c22df user: thomas tags: trunk
2026-07-31
18:38
Release v0.36.0 check-in: cf6ad7bb93 user: thomas tags: trunk, release, v0.36.0
18:36
Fixed dependency mismatch in pyproject.toml check-in: 5bc8bf30ff user: thomas tags: trunk
18:14
Implement set preference weights. Additional fixes to prepare the release of v0.36.0 check-in: 66f9c41f15 user: thomas tags: trunk
15:19
Disable additional tests for the disabled downloaders Closed-Leaf check-in: 99dcced445 user: thomas tags: prepare_release
14:59
Disable currently broken deck list downloaders MTGTop8Downloader and MtgDecksNetDownloader. These require rework, including cloudflare bypasses for MTGTop8 check-in: 31ca4808ee user: thomas tags: prepare_release
14:43
MeteredSeekableHTTPFile: Perform a required not-None check in read() check-in: 2aa4341381 user: thomas tags: prepare_release
14:43
Fix for failing resources test on Windows platforms check-in: cfb1efdf58 user: thomas tags: prepare_release
13:30
[PATCH] updated scryfall bulk data download check-in: 992ca95ffd user: davidwestenberger tags: prepare_release
13:27
Drop Support for PySide 6.7 (for now). multiData() uses QModelRoleDataSpan, which is present since Qt 6.0, but somehow isn't availabel in 6.7: ImportError: cannot import name 'QModelRoleDataSpan' from 'PySide6.QtCore' check-in: 9a9d4f4829 user: thomas tags: prepare_release
13:26
Python 3.11 compatibility fix check-in: 0c699379a7 user: thomas tags: prepare_release
13:25
Ensure PyTest 10 compatibility: Wrap all generators in test parameters in list() to avoid deprecated code paths to be removed in PyTest 10 Edit: Why is this empty? check-in: 61c06057f6 user: thomas tags: prepare_release
2026-07-30
23:17
Dependencies: Add test environment for Qt 6.11. Ensure Qt 6.7-6.9 get a suitable base python version check-in: d0b08b31f4 user: thomas tags: prepare_release
21:49
Add missing test data file check-in: 72cedf110d user: thomas tags: prepare_release
10:32
Fixes for failing tests check-in: 917ddb35a1 user: thomas tags: prepare_release
10:05
Dependencies: Specify pytest < 10, based on emitted deprecation warnings. check-in: 66449e4468 user: thomas tags: prepare_release
09:02
PrintingPreferencePage: Replaced defunct unit tests with new tests verifying UI behavior check-in: d8a53477f6 user: thomas tags: prepare_release
2026-07-29
18:05
Fix Scryfall API bulk data import failure, caused by API restructuring and switching to [JSONL](https://jsonltools.com/what-is-jsonl) format. Switched away from ijson, and use the standard library json module for per-line parsing, because ijson doesn't yet support JSONL (it chokes on the newline item delimiter). check-in: 3147256b62 user: thomas tags: prepare_release
2026-07-27
21:16
Printing filters: Added 3 new filters, general promo cards, pre-release promo cards, and WPN promo pack cards. check-in: 63a345801d user: thomas tags: prepare_release
15:15
Implement per-set preference weights. Store all filters and weights in the settings file. Use the weights to select the initial printing in the AddCardWidget check-in: cf4e21a6f3 user: thomas tags: prepare_release
15:12
Implement per-set preference weights. Store all filters and weights in the settings file. Use the weights to select the initial printing in the AddCardWidget Closed-Leaf check-in: 757a440424 user: thomas tags: bogus
15:04
Refactored CardDatabase.find_sets_matching(), which now works as intended. Closed-Leaf check-in: 87bc65bdb1 user: thomas tags: set_preference_weights
14:37
AddCardWidget: First implementation for automatically selecting the set containing the highest preference score printing. check-in: d5d0f0db95 user: thomas tags: set_preference_weights
14:18
AddCardWidget: Implement selecting the first collector number of a printing with the highest preference score among printings in the selected set. check-in: 73ac88045a user: thomas tags: set_preference_weights
14:13
PrintingPreferenceUpdater: Fixed AttributeError. Use the passed CardDatabase for lookups check-in: b0b72695f1 user: thomas tags: set_preference_weights
11:20
CardDatabase: Optimize get_available_collector_numbers_for_card_in_set() SQL query, replacing compound query with a plain one that doesn't require DISTINCT. check-in: a84f49e8a7 user: thomas tags: set_preference_weights
09:50
CardDatabase: Optimize get_available_sets_for_card(). Found a single and performant query, instead of a compound UNION ALL query. check-in: 8feaf2d451 user: thomas tags: set_preference_weights
2026-07-26
20:17
MTGSetTreeFilterModel: Wrap filter change signals in helper methods for de-duplication check-in: 93669df2e3 user: thomas tags: set_preference_weights
16:03
settings_window_pages.py: Solved most linter warnings check-in: ef2db8bed5 user: thomas tags: set_preference_weights
15:58
Fixed NameError caused by incomplete refactoring Closed-Leaf check-in: 894ef5640c user: thomas tags: bogus
15:54
settings_window_pages.py: Solved all linter warnings check-in: 3d4b418b21 user: thomas tags: bogus
15:30
Implement MTGSetTreeFilterModel(QSortFilterProxyModel), and use it as a filter model for the set filter view. It automatically hides all non-changed rows when highlighting changed settings to only show relevant data to the user check-in: 3cb6f72f1b user: thomas tags: set_preference_weights
11:33
Update changelog check-in: 74f501edd9 user: thomas tags: set_preference_weights
10:22
Printing preference weights and set preference weights are now stored in MTGProxyPrinter.ini. With this, the CardDatabase no longer holds parts of the application configuration. check-in: 16932e5eb2 user: thomas tags: set_preference_weights
09:26
PrintingPreferencePage: Additional UI touch-ups. Alternating column colors, adjust column widths. Models: Also assign the ModelColumns enums to the model class space for easier access and less ambiguity when used from outside the model class Closed-Leaf check-in: 9b2e4639a7 user: thomas tags: printing_weights_in_settings_ini
09:02
PrintingFilterModel: Fixed TypeError in save(). With this, saving to the configuration file works as intended check-in: 60dd4f9eaa user: thomas tags: printing_weights_in_settings_ini
2026-07-25
08:30
Implement writing all set filters, set preference weights, printing filters and printing preference weights to MTGProxyPrinter.ini check-in: bbd40869fd user: thomas tags: printing_weights_in_settings_ini
2026-07-24
21:28
PrintingPreferenceUpdater: Implemented reading the set preference weights from the settings. The new set preference weights parameter in __init__ is now optional, and when not given, the updater takes the values from the configuration file. check-in: 1c313d38fe user: thomas tags: printing_weights_in_settings_ini
12:49
CardDatabase: Update the EvaluatePrintingFilters view to also consider the set_preference_weight check-in: 75e27c4d09 user: thomas tags: printing_weights_in_settings_ini
12:39
PrintingFilterModel: Minor refactoring and renaming variables check-in: 64a05cba3e user: thomas tags: printing_weights_in_settings_ini
08:13
Settings migration: Migrate section card-filter to printing-filter, aligning wtih printing-weights. Remove settings key prefix "hide-" and "hidden-", so that printing-filter and printing-weights share the same settings keys. Add a CardDatabase migration step performing the key update in the PrintingFilters database table. When updating from 0.35, both database and settings migrations run before the PrintingFilterUpdater runs maintenance tasks at startup. check-in: 5246a130a3 user: thomas tags: printing_weights_in_settings_ini
07:28
Remove the defaultdict settings.CARD_FILTER_DEFAULT_WEIGHTS. Replace that with reading the weights from the regular settings ConfigParser. check-in: a09f847143 user: thomas tags: printing_weights_in_settings_ini
2026-07-23
21:28
Introduce printing-weights settings section, which will hold the printing preference weights. This will unify how settings are stored and keeps everything user-configurable via MTGProxyPrinter.ini, and not rely on the CardDatabase check-in: 23927e2e24 user: thomas tags: printing_weights_in_settings_ini
18:11
PrintingPreferenceUpdater: Fix column name in SQL UPDATE statement check-in: c307d01ba8 user: thomas tags: set_preference_weights
17:44
Implemented saving set preference weights check-in: 3ed79ce6a2 user: thomas tags: set_preference_weights
08:51
MTGSetTreeModel: Refactored index walking into a private method check-in: 33e288b460 user: thomas tags: set_preference_weights
08:42
Wire up saving the weights from the MTGSetTreeModel. Actual data gathering not yet implemented. check-in: cf3f2f5ef1 user: thomas tags: set_preference_weights
2026-07-22
21:42
MTGSetTreeModel: Implement highlight_differing_settings() and clear_highlight(). check-in: 164d34a48b user: thomas tags: set_preference_weights
20:46
MTGSetTreeModel: Fix index(). The method has to return valid indices for all columns of child nodes. check-in: 3f9b773fec user: thomas tags: set_preference_weights
20:04
MTGSetTreeModel: Fixed bug in parent(). With this, clicking child items no longer throws exceptions. check-in: 2e90ff2b68 user: thomas tags: set_preference_weights
2026-07-21
14:28
MTGSetTreeModel: Fix header texts. Fix setData() for the IsHidden column. Toggling Visible/Hidden works check-in: c84bf91db0 user: thomas tags: set_preference_weights
14:06
MTGSetTreeModel: Translation support for the IsHidden column text values check-in: ce0ae41624 user: thomas tags: set_preference_weights
14:03
PrintingPreferencePage: Integrate the MTGSetTreeModel check-in: 1c7a1e352c user: thomas tags: set_preference_weights
14:02
MTGSetTreeModel: Several fixes causing infinite loops. Simplify flags(). Implement loading data from the CardDatabase check-in: fff94a1d2c user: thomas tags: set_preference_weights
14:01
CardDatabase.get_all_sets(): Use a recursive CTE to return sets in tree order. The set tree is nested 3 layers deep, so this sort order allows for easy population of the MTGSetTree model check-in: e6d970f85d user: thomas tags: set_preference_weights
13:59
PrintingPreferencePage: Remove UI stretch to have an equal space distribution between both views on the page check-in: eb7d89dccd user: thomas tags: set_preference_weights
2026-07-20
08:11
SetContainer: Moved data() into the MTGSetTreeModel. MTGSetTreeModel: Implemented setData() check-in: 1a54db287a user: thomas tags: set_preference_weights
07:33
MTGSetTreeModel: Implemented populating the data from the CardDatabase. check-in: 29a8f88723 user: thomas tags: set_preference_weights
07:25
PrintingFilterUpdater: Added a TODO for a potential optimization check-in: 4de165ddf0 user: thomas tags: set_preference_weights
2026-07-19
21:27
CardDatabase: Fix find_sets_matching() no longer reading the icon_svg. Add test case verifying that the SVG is properly read from the database. check-in: 8b079defad user: thomas tags: set_preference_weights
21:10
DatabaseImportTask: Some micro-optimizations check-in: a2ab40d4e8 user: thomas tags: set_preference_weights
21:09
Update the database schema documentation for version 36 check-in: eb9035dedc user: thomas tags: set_preference_weights
20:23
Refactor SetIconImportTask, rename to SetDataImportTask. The task now also updates the parent_set_code column from the /sets API end point. Encapsulate network-touching code in two private functions to ease testing, by providing easy mock targets. check-in: 50c4dafa68 user: thomas tags: set_preference_weights
20:17
SQLite converters: Simplify BOOLEAN_INTEGER converter check-in: 54425be58b user: thomas tags: set_preference_weights
2026-07-16
21:34
MTGSet: Made the release date, hidden and preference score parameters optional. These are unset in the normal CardDatabase use. These parameters are currently unused everywhere, except for planned use by the set preference logic in the settings, which will get a getter that reads all data from the database. check-in: f0e4db4ccd user: thomas tags: set_preference_weights
17:26
Database schema: Fix MTGSet set_preference_score trigger after column rename in [ce19f079ebd8f62c] check-in: 159f2687bf user: thomas tags: set_preference_weights
2026-07-15
17:52
Extend MTGSet for fields for release date, is_hidden field, preference score field and the optional parent set code. check-in: 287219c47a user: thomas tags: set_preference_weights
2026-07-14
21:27
Fixed a few linter warnings check-in: a90b7a607f user: thomas tags: set_preference_weights
21:08
Fixed accidental copy&paste issue check-in: 12500b0fb6 user: thomas tags: set_preference_weights
18:20
Tests: Fixed most linter warnings in tests/model/test_carddb.py check-in: 1f9417632b user: thomas tags: set_preference_weights
18:19
CardDatabase: Rename MTGSet preference weight column to avoid a name collision check-in: ce19f079eb user: thomas tags: set_preference_weights
18:00
MTGSetTreeModel: Improve createIndex() annotation. check-in: 96607cd33e user: thomas tags: set_preference_weights
18:00
CardDatabase: Fix or suppress all linter warnings check-in: 7f2b90e6e2 user: thomas tags: set_preference_weights
16:00
Add WIP Qt model class MTGSetTreeModel. It can hold a tree of MTG sets, and is intended to hold regular sets as root nodes and associated child sets, like the token set or promo cards set, as child nodes. Model depth is at most 2 layers, as child sets cannot have further children. Editing via setData() is not yet implemented. check-in: fad4cc5442 user: thomas tags: set_preference_weights
15:03
PrintingPreferencePage: Add stub _get_new_set_weights() check-in: 11032f4fd5 user: thomas tags: set_preference_weights
14:48
CardDatabase: Add parent/child relation to the CardDatabase MTGSet table schema check-in: 1571843dd1 user: thomas tags: set_preference_weights
2026-07-13
13:24
PrintingPreferenceUpdater: Add ability to update MTGSet preference weights check-in: 4122225f36 user: thomas tags: set_preference_weights
2026-07-12
14:16
CardDatabase: Add MTGSet.printing_preference_weight column. Add Trigger to automatically adjust Printing.preference_score. This will be used for setting a per-set preference score. The set hiding logic will be amended with new syntax <set_code>:<weight> to support setting the score via user interface. check-in: fd2101dfa3 user: thomas tags: set_preference_weights
2026-07-08
20:02
SetIconImportTask: Strip the cache key from file names. It refreshes daily, enforcing daily re-downloads. Just perform the update based on the base file name alone. check-in: f7388ec8fd user: thomas tags: trunk
19:09
FileDownloadTask: Made task cancelable. check-in: 18f4a5f87b user: thomas tags: trunk
18:57
VerticalAddCardWidget: Set top and bottom layout margins to zero. This visually aligns the top and bottom with the left and right columns. Bottom icons are no longer on different heights check-in: 4c846ca6e2 user: thomas tags: trunk
16:47
Add "Delete cards" action to the PageCardTableView context menu. Users expect it to be there, so it was finally added. check-in: 669f345562 user: thomas tags: trunk
2026-07-05
16:59
Changelog: Fixed release dates check-in: 627f5996f8 user: thomas tags: trunk
16:57
Changelog: Add missing entry for 0.35.2 check-in: b3b326a0a7 user: thomas tags: trunk
16:51
Case insensitive card name search, plus a few other minor improvements check-in: 5d451e2bc2 user: thomas tags: trunk
16:50
Implement case-insensitive card search by leveraging the filtering capabilities provided by Qt. Removed the manual filtering capabilities of the CardDatabase. Closed-Leaf check-in: 9642b89db7 user: thomas tags: refactor_card_database_schema
15:43
Fixed SegmentationFault in the test suite Closed-Leaf check-in: 4b2e711489 user: thomas tags: case_insensitive_card_search
15:34
Fixed failing tests for the AddCardWidget check-in: 2ee7f68083 user: thomas tags: case_insensitive_card_search
2026-06-13
17:57
Update changelog to reflect the new case-insensitive behavior check-in: fd1b1afa62 user: thomas tags: case_insensitive_card_search
17:57
CardDatabase: Removed obsolete filter parameter for get_card_names() and find_sets_matching(). check-in: c7117923ab user: thomas tags: case_insensitive_card_search
17:15
Also use Qt-based filtering for MTG sets for consistency. check-in: 47162fca1d user: thomas tags: case_insensitive_card_search
00:01
AddCardWidget: Implement card name filtering using a QSortFilterProxyModel, instead of a database query per key stroke. Filtering is now performed by Qt code. It is case insensitive, and a bit more lax than before, because it now matches if the search term is contained in any name, instead of a prefix match. check-in: e09e9802a8 user: thomas tags: case_insensitive_card_search
2026-06-03
15:35
ImageDatabase: Update to schema version 4: Create directories for custom image overrides. check-in: 61eaabaa96 user: thomas tags: trunk
13:08
Fixed an outdated docstring check-in: 4de5b4785e user: thomas tags: refactor_card_database_schema
2026-05-29
14:10
Import fixes from trunk check-in: 7b26d09e30 user: thomas tags: refactor_card_database_schema
14:03
4 Python 3.11 compatibility fixes check-in: f9d25acf1e user: thomas tags: trunk
12:15
Fix linter warnings check-in: 0a774b76ac user: thomas tags: trunk
2026-05-28
13:44
Fixed PrintingFilterUpdater trying to insert None values into a NOT NULL column. check-in: c3d88208b5 user: thomas tags: trunk
2026-05-20
11:15
CardDatabase: Add required database indices to speed up card name translation check-in: 7fb5adf562 user: thomas tags: trunk
11:14
Fix linter warnings check-in: 8e75d00248 user: thomas tags: trunk
2026-05-15
12:38
Fix issues introduced by the last merge. Actually use the preference score in CardDatabase queries. Completes [710580ea6bda1973]. check-in: 8878dea68f user: thomas tags: trunk
12:37
CardDatabase: Implement choosing printings by their preference score by updating the relevant database queries to sort by the score. check-in: 0011d36715 user: thomas tags: refactor_card_database_schema
12:07
PrintingFilterPage: Fix highlighting changed settings. check-in: 88aca07cf4 user: thomas tags: refactor_card_database_schema
12:06
Update shellscript shebangs to not hard-code the bash installation bath check-in: db71f3d6a0 user: thomas tags: refactor_card_database_schema
2026-05-13
14:07
Merge fork check-in: e4b1272e50 user: thomas tags: trunk
13:29
Fixed typo on the GeneralSettingsPage check-in: f12e062f44 user: thomas tags: trunk
12:02
Settings: Add disambiguations to all translatable strings. check-in: b9274b280c user: thomas tags: refactor_card_database_schema
11:44
Rename HidePrintingsPage to PrintingPreferencesPage. check-in: e39e8b1dfd user: thomas tags: refactor_card_database_schema
11:36
PrintingFilterUpdater: Populate PrintingFilter.printing_preference_weight with the default values stored in settings.CARD_FILTER_DEFAULT_WEIGHTS dict. check-in: 389377a5dd user: thomas tags: refactor_card_database_schema
09:17
Merge with trunk check-in: f20330ecc7 user: thomas tags: refactor_card_database_schema
2026-05-12
21:30
Corrected some style warnings check-in: 70c21880bf user: thomas tags: trunk
17:31
Optimize CardDataImport worker, saving ~3% execution time. check-in: 5249cc3982 user: thomas tags: trunk
14:59
Use a list[str] for applying printing filters, instead of a dict[str, bool]. This shaves off a significant amount of time in _insert_or_update_card_filters() Closed-Leaf check-in: fde7f1946f user: thomas tags: optimize_card_data_import
14:29
Optimize _get_card_filter_data() by re-using the same dict instance. Runtime under profiling: 35s → 21s check-in: b4eed8aca1 user: thomas tags: optimize_card_data_import
14:27
Rework the database schema for efficiency and new features. Fixes [a71e49c25c756573] check-in: 410721173c user: thomas tags: trunk
13:41
Fix importing reversible cards check-in: ea09b5bc19 user: thomas tags: refactor_card_database_schema
13:41
Add line-profiler as a development environment dependency. check-in: d468e3e9bb user: thomas tags: refactor_card_database_schema
13:40
scripts/benchmark_card_data_import.py: Fix the benchmark script. Prevent it from fetching the set symbols from the Scryfall API. check-in: dc52873de4 user: thomas tags: refactor_card_database_schema
12:27
Fixed inaccurate type annotations check-in: 59d9fea55b user: thomas tags: refactor_card_database_schema
2026-05-11
22:15
Fixed a bunch of failing tests check-in: 9d7db22697 user: thomas tags: refactor_card_database_schema
21:43
HTTPFile: Use relative imports. check-in: e4e0a8f665 user: thomas tags: trunk
21:42
Cleanup unused stuff check-in: f55ee74310 user: thomas tags: trunk
12:57
Prevent the test suite from importing the MTG set symbols. Mock mtg_proxy_printer.async_tasks.card_info_downloader.SetIconImportTask.run() to avoid network access check-in: eb8abe2f15 user: thomas tags: refactor_card_database_schema
12:47
Prevent AttributeError in the card_db fixture check-in: 05cb46f35d user: thomas tags: refactor_card_database_schema
12:12
Tests: Clean up unused parameters and type hinting warnings check-in: 50ea001781 user: thomas tags: refactor_card_database_schema
11:35
Fixed the tests check-in: a019a130cc user: thomas tags: refactor_card_database_schema
11:20
Add card filters for full-art cards, textless cards, and low-resolution cards check-in: 146ec3af7a user: thomas tags: refactor_card_database_schema
11:09
CardDataType: Update literals check-in: 60ee61ae93 user: thomas tags: refactor_card_database_schema
09:20
Add tests verifying PrintingPreferenceUpdater only updating relevant printings. check-in: e00d33b9c2 user: thomas tags: refactor_card_database_schema
2026-05-10
18:29
Add Universes Beyond card filter. Implements [4a93c27272f949ba]. check-in: fc240607d4 user: thomas tags: refactor_card_database_schema
17:00
Add changelog entry check-in: 517222420e user: thomas tags: refactor_card_database_schema
16:12
Update the Print hiding UI to use a table model, and integrate the printing preference weights. Completes [e405fc5c924cf576] check-in: 4571d20b4e user: thomas tags: refactor_card_database_schema
15:59
Add PrintingPreferenceUpdater(AsyncTask) class for updating the printing preferences in the card database. This runs as an AsyncTask to be able to be scheduled while a card data update runs Closed-Leaf check-in: 4aca6e50f6 user: thomas tags: refactor_print_hiding_ui
14:57
Database schema: Add trigger to automatically update Printing.preference_score whenever a PrintingFilter.printing_preference_weight is updated check-in: ddc6aadb12 user: thomas tags: refactor_print_hiding_ui
2026-05-09
21:13
PrintingFilterModel: Implement reading the filter weights from the card database. This needs unit tests. check-in: 70cb43f8b3 user: thomas tags: refactor_print_hiding_ui
20:49
Place the main thread's CardDatabase instance into a global CardDatabase attribute as a singleton. This allows easier access from UI classes created by Qt code. check-in: 7399528a00 user: thomas tags: refactor_print_hiding_ui
20:40
PrintingFilterModel: Save a reference to the CardDatabase instance Closed-Leaf check-in: 4f518c4d7e user: thomas tags: carddb_singleton
20:29
Removed a lot of instances where the CardDatabase is passed down, in favor of using the global Singleton check-in: 8c2594cebf user: thomas tags: carddb_singleton
00:31
Introduce class attribute CardDatabase.main_instance, which holds the singleton primary card database instance used by the main thread logic. It allows access without needing to pass it around everywhere check-in: d9f5299512 user: thomas tags: carddb_singleton
00:22
PrintingFilterModel: Disable printing weights for the "funny" card filter. There are no "funny" and "non-funny" printings of the same card, so it doesn't make sense as a weight. check-in: 9be6313dae user: thomas tags: refactor_print_hiding_ui
2026-05-08
23:32
PrintingFilterModel: When setting the preference weights from the UI, also set the DisplayRole check-in: 658923fa2b user: thomas tags: refactor_print_hiding_ui
23:28
HidePrintingsPage: Adjust the description text. Add some paddings to the table header cells check-in: f0f2f2dafc user: thomas tags: refactor_print_hiding_ui
22:37
PrintingFilterModel: Set appropriate table headers and update the filter UI strings, removing "Hide" in display texts. check-in: ec2a3e5a37 user: thomas tags: refactor_print_hiding_ui
22:36
PrintingFilterPage: Show the table header and allow edit triggers for the printing filter table view check-in: 2ef568f6d7 user: thomas tags: refactor_print_hiding_ui
20:15
PrintingFilterModel: Add display text "Hidden"/"Visible" to the is_hidden column cells. check-in: 8243ad3ee6 user: thomas tags: refactor_print_hiding_ui
16:24
Fix most of the issues with the PrintingFilterModel. Content is rendered again. check-in: 19765b9e5d user: thomas tags: refactor_print_hiding_ui
13:09
WIP Rework of the PrintingFilterModel into a 4 column model supporting both print hiding and print score values check-in: c44d9c5956 user: thomas tags: refactor_print_hiding_ui
2026-05-05
12:51
PrintingFilterModel: Adjust the "banned due to racism" Scryfall query to match the new one. check-in: 23fe950125 user: thomas tags: refactor_print_hiding_ui
12:38
Merge with refactor_card_database_schema. check-in: 6dd32819a2 user: thomas tags: refactor_print_hiding_ui
12:20
Implement [2e40cfd0ff8baee0], showing MTG set symbols in the UI where appropriate. Fetch the icons from the Scryfall CDN during card data imports. check-in: 1302b184ad user: thomas tags: refactor_card_database_schema
10:12
Rewritten set symbol downloads to support icon updates. Store the icon file name and cache key in the database, and compare them during the update to find updated symbols. Closed-Leaf check-in: 398679c6f4 user: thomas tags: show_set_icons
08:29
Add changelog entry check-in: b14864488b user: thomas tags: show_set_icons
08:28
Document: Show the MTG set symbols in the Set column check-in: 4b291a92f0 user: thomas tags: show_set_icons
08:28
Keep the MTG set symbol aspect ratio check-in: c58e7163d6 user: thomas tags: show_set_icons
2026-05-04
17:23
Add changelog entry Closed-Leaf check-in: 92c93df50f user: thomas tags: bogus
17:23
Document: Show the MTG set symbols in the Set column check-in: 8dca7dd2c4 user: thomas tags: bogus
17:21
Keep the MTG set symbol aspect ratio check-in: a0d86c9476 user: thomas tags: bogus
17:07
Implement showing MTG set symbols in the UI where appropriate. Fetch the icons from the Scryfall CDN during card data imports. Implements [2e40cfd0ff8baee0]. check-in: ae0bbaa8c8 user: thomas tags: bogus
17:04
SetEditorDelegate: Show set symbols in the set choice dropdown editor check-in: 682ccfd6bb user: thomas tags: show_set_icons
16:56
CardListModel: Show the set symbol in the Set column check-in: d6e5097a08 user: thomas tags: show_set_icons
16:45
Fix CardDatabase.find_sets_matching() with back face names check-in: f6114901fa user: thomas tags: show_set_icons
16:28
Database schema: Store set icon SVGs as blobs. The Qt API expects them as bytes, so never decode to utf-8, and always keep them as bytes/BLOB. check-in: c867bd68fa user: thomas tags: show_set_icons
15:16
Fix SetIconImportTask integration. It now properly fetches missing set icons. check-in: 526afe852b user: thomas tags: show_set_icons
14:05
Run the SetIconImportTask as part of the card database update check-in: 4ef3837f98 user: thomas tags: show_set_icons
13:35
SetIconImportTask: Extend logic with progress reporting check-in: 99a6753255 user: thomas tags: show_set_icons
13:28
Implement class SetIconImportTask(DownloaderBase), implementing the task for fetching the MTG set SVG icons from the Scryfall CDN. check-in: 32435ebeba user: thomas tags: show_set_icons
11:40
Implement an SVG icon engine, and use it to render the MTG set symbol as a QIcon check-in: 1a3a07d274 user: thomas tags: show_set_icons
11:05
Update some outdated copyright headers check-in: fbac4160a1 user: thomas tags: refactor_card_database_schema
11:05
CardDatabase: Fix match statement in get_oracle_id(). check-in: d661cf243a user: thomas tags: refactor_card_database_schema
08:26
Merge fork on trunk check-in: 3b08fdfa49 user: thomas tags: trunk
2026-04-30
12:08
Fix packaging environments: Fix environment name mismatch. Add the Windows build cleanup script to the allowed external commands check-in: 483891acf5 user: thomas tags: trunk
2026-04-14
20:34
MeteredSeekableHTTPFile: Refactorings. Fix parameter defaults not matching the base API. Refactored _urlopen() to not access the file attribute directly, getting rid of the file attribute being Optional[]. Replaced deprecated calls to file.info(). check-in: 0c1fd638ce user: thomas tags: trunk
2026-04-11
12:33
DatabaseImportTask: Insert or update the Card.english_name column during data imports check-in: 6e3b5afb58 user: thomas tags: refactor_card_database_schema
00:01
CardDatabase migrations: Fix migration script to v35. Card.english_name computation was broken, causing exceptions check-in: a635ee0e24 user: thomas tags: refactor_card_database_schema
2026-04-10
12:48
Database schema: Sync documentation and implementation. Add Card.english_name column, which holds the canonical English card name. This helps card translations, because some non-English cards use the English name as a fallback, and those need to be filtered out. check-in: 5b452a1f54 user: thomas tags: refactor_card_database_schema
12:42
CardDatabase: Extend translate_cards() to also accept a list of target languages, and do an element-wise translation if such a list is passed in. check-in: 9ed61bcf64 user: thomas tags: refactor_card_database_schema
2026-03-31
11:48
WIP started rewriting the CSV deck list parsers to use a multi-step process. Implemented is conversion into CardIdentificationData instances. This will be used to batch individual operations to reduce number of card database calls. check-in: f5b3b7ca34 user: thomas tags: refactor_card_database_schema
2026-03-30
22:32
CacheCleanupWizard: Refactor CardFilterPage.initializePage() and add_row() to batch the card translations into the preferred language. All translations are now performed in a single query, using the new batch-processing capability of the CardDatabase.translate_card_names() method. This brings down the translation runtime from ~8s to 0.3s for a moderate number of cards on the system. check-in: 642f1d9740 user: thomas tags: refactor_card_database_schema
19:30
Fix card database migrations. Recreate the FilterAppliesTo table to update the foreign key references. Otherwise using a migrated database crashes during use. check-in: e7250081d4 user: thomas tags: refactor_card_database_schema
19:29
Improve a comment check-in: 1a355223c8 user: thomas tags: refactor_card_database_schema
2026-03-29
19:24
CardDatabase: Refactored translate_card_name() to work with lists. Renamed to translate_card_names() to indicate the change. check-in: addc87915b user: thomas tags: refactor_card_database_schema
18:34
CardDatabase: Refactored translate_card_name() SQL code. All parameters except for the target language are now passed via a table expression at the top. The source_context now carries a row number column that is passed through. Runtime increases to ~110ms-150ms/translation. This design allows easy extension to pull the data from a temporary table and perform multiple translations in one step. check-in: 0b269e0168 user: thomas tags: refactor_card_database_schema
12:59
CardDatabase: Further optimizations for card name translations. By JOINing only the required parts, the runtime is down to ~70ms/translation. This is still potentially 7+ seconds for a Commander deck, but better than the previous 100+ seconds. check-in: be1c58afe6 user: thomas tags: refactor_card_database_schema
11:58
Optimize card name translation, reducing runtime by 90%, from ~1500ms/translation to ~150ms/translation. In a query SELECT a FROM foo GROUP BY a LIMIT 1, the group by clause has no effect. Dropping it allows for a more efficient query plan without sacrificing correctness. check-in: be62b00e75 user: thomas tags: refactor_card_database_schema
11:55
Fixed ImageKey quality formatting and parameter use check-in: b384ccb8a0 user: thomas tags: refactor_card_database_schema
11:54
Tests: Fixed SQL error in _assert_printing_face_contains() check-in: 89a4804064 user: thomas tags: refactor_card_database_schema
11:33
CardDatabase: Fixed use of outdated % wildcards. Add tests for previously untested find_sets_matching(). check-in: 41260e50e4 user: thomas tags: refactor_card_database_schema
10:14
Fix missing ; in the database schema check-in: 4fb95f447a user: thomas tags: refactor_card_database_schema
10:12
Add a database index speeding up card lookup by name. Switch from ASCII-case-insensitive LIKE matching to GLOB. This updates the wildcard character to *. Case sensitive LIKE is deprecated, but sensitivity allows using the same index for both GLOB matches and equality (=) matches. check-in: ce0f9979c8 user: thomas tags: refactor_card_database_schema
2026-03-28
21:12
CardDatabase: Refactor SQL generation in get_cards_from_data() check-in: cdd682128e user: thomas tags: refactor_card_database_schema
21:07
CardDatabase: Deprecate a method used to partition the image database content. check-in: ef61dec8b8 user: thomas tags: refactor_card_database_schema
21:04
Fixed failing tests check-in: c72ae9d1bc user: thomas tags: refactor_card_database_schema
20:28
Database schema: Fixed inconsistencies in the migration from v34. Also reformat table definitions for better readability. check-in: ee70bc8254 user: thomas tags: refactor_card_database_schema
19:20
ProgressBarManager: Connect request_register_subtask() to add_task() via a blocking connection. This ensures that the UI logic actually runs, even if the thread calling hogs 100% of the CPU time on GIL-enabled interpreters check-in: 6c615877dc user: thomas tags: refactor_card_database_schema
13:42
Fixed database migration to v35. The migration no longer drops all data. Refactored MigrationScript, adding optional boolean parameter disable_foreign_keys. Migrations that need disabled checks now use this, instead of putting the 3 required PRAGMA statements into the statement list. check-in: 7ec210f394 user: thomas tags: refactor_card_database_schema
12:58
Merged in refactor_card_database_schema branch. This feature branch will be the base for incorporating the printing preference configuration. The list holding the printing filter booleans can also hold the preference values as an additional column. check-in: bc8f4c5367 user: thomas tags: refactor_print_hiding_ui
12:50
Synced with trunk check-in: 52c39d5018 user: thomas tags: refactor_print_hiding_ui
10:35
Implement the static part of migrations for version 34 to 35. This still needs additional semantic work, like fetching the set scryfall id from the API. check-in: b8bea7ed27 user: thomas tags: refactor_card_database_schema
10:33
Database schema: Declare MigratedPrintings.performed_at as an INTEGER_TIMESTAMP. check-in: 942eb56ce8 user: thomas tags: refactor_card_database_schema
2026-03-27
19:53
Database schema: Replace boolean PrintingFace.currently_downloaded with download_status. By not restricting to a pure boolean, the column can hold additional data, like the image resolution, or if there is a custom card override in place. check-in: 3adb7e9e52 user: thomas tags: refactor_card_database_schema
13:22
Fixed test isolation. Shared Card instances contaminated other tests, because they got mutated. check-in: 9afe7276b2 user: thomas tags: refactor_card_database_schema
12:56
Fixed test test_get_replacement_card_for_unknown_printing by removing now-invalid test cases check-in: bc460cc147 user: thomas tags: refactor_card_database_schema
12:50
Fixed broken test test_get_cards_from_data_order_by_print_count_enabled check-in: 976650cdab user: thomas tags: refactor_card_database_schema
11:49
Tests: Add tests for the DatabaseImportTask, directly testing the correctness of the RemovedPrinting data. check-in: a826ab6a90 user: thomas tags: refactor_card_database_schema
11:48
CardDataType: Specify fixed sets of choices for some keys in the API card data by listing them using typing.Literal[]. check-in: adde1bd191 user: thomas tags: refactor_card_database_schema
10:07
Tests: Fixed test_is_removed_printing() for new semantics, which no longer treat hidden printings as "removed". This was still a remnant from times where hidden cards were skipped completely during import. check-in: cd6f41e364 user: thomas tags: refactor_card_database_schema
09:58
Fixed the related cards search to find both sides of double-faced results. check-in: d844626800 user: thomas tags: refactor_card_database_schema
2026-03-26
23:01
CardDatabase: Add method get_oracle_id(self, scryfall_id: UUID) -> UUID | None. Returns the oracle_id for the given scryfall id. Looks up from RemovedPrintings first, then from Printing. ScryfallCSVParser: Use CardDatabase.get_oracle_id() to look up hidden printings. This fixes failing tests for this parser. check-in: b46ce0c0c5 user: thomas tags: refactor_card_database_schema
22:30
CSV deck list parsers: Refactored ScryfallCSVParser.parse_cards_from_line(), de-duplicating card translation code. Declare the available columns via TypedDict classes, which allows checking column access via the type checker. check-in: e27a9be586 user: thomas tags: refactor_card_database_schema
2026-03-25
14:37
Remove bool() calls where booleans are now automatically converted from int via the registered sqlite converter for BOOLEAN_INTEGER columns. check-in: 87d375965c user: thomas tags: refactor_card_database_schema
2026-03-24
22:50
CardDatabase: Fix is_valid_and_unique_card() and add note that this isn't covered by unit tests check-in: 38da84de54 user: thomas tags: refactor_card_database_schema
22:33
CardDatabase: Port get_all_cards_from_image_cache() check-in: 6f1fef792c user: thomas tags: refactor_card_database_schema
22:17
Revert fiddling with the row_factory within application code. Put a work-around in helpers.py that avoids using sqlite3.Row in the DatabaseImportWorker. Many simple fixes across the test suite. Most tests pass again. check-in: 2afff5dc1b user: thomas tags: refactor_card_database_schema
10:11
DatabaseImportWorker: Reset the row_factory of passed_in databases, because the code is incompatible with Row as the factory. Pattern matching code relies on the db returning tuples. check-in: c5c98531f5 user: thomas tags: refactor_card_database_schema
07:06
Re-activate test_updates_changed_value_on_re_import test cases disabled during a debugger session. check-in: 6968dc325c user: thomas tags: refactor_card_database_schema
2026-03-23
21:45
Tests: Adjust test for is_removed_printing(). New semantics no longer consider a hidden printing to be "removed". check-in: a6ed184920 user: thomas tags: refactor_card_database_schema
21:36
CardDatabase: Remove deprecation note and outdated comments in is_dfc(). The method is used by the document loader before Card instances are constructed. check-in: 651875afc6 user: thomas tags: refactor_card_database_schema
21:20
Fixed several additional broken locations. Failing tests are down to 30 check-in: f16b5956fa user: thomas tags: refactor_card_database_schema
21:04
Database schema: Add the usage_count column to the printing views check-in: 3b0b955bf6 user: thomas tags: refactor_card_database_schema
20:38
CardDatabase: Port translate_card_name() check-in: 33d9e4daa3 user: thomas tags: refactor_card_database_schema
20:14
CardDatabase: Port guess_language_from_name() and actually fix _read_optional_scalar_from_db() check-in: 8ac00aaace user: thomas tags: refactor_card_database_schema
20:04
CardDatabase: Fix _read_optional_scalar_from_db(), which stopped working with sqlite3.Row row factory. check-in: cb6654f650 user: thomas tags: refactor_card_database_schema
19:45
CardDatabase: Ported _translate_card() check-in: e8d9728208 user: thomas tags: refactor_card_database_schema
19:17
CardDatabase.find_sets_matching: Also read the set icons of found sets check-in: e41e68b11b user: thomas tags: refactor_card_database_schema
19:15
CardDatabase: Use sqlite3.Row as the row factory. This allows indexing via column names and avoids brittle tuple unpacking. check-in: f8c0006a83 user: thomas tags: refactor_card_database_schema
17:05
PrintCountUpdater: Fixed _update_image_usage() check-in: fab6b8078c user: thomas tags: refactor_card_database_schema
13:40
CardInfoDownloader: Micro-optimization: using () instead of tuple() saves 10 ns per invocation, as determined using timeit. With 500k cards, this saves whopping 5ms. check-in: 904d1eb292 user: thomas tags: refactor_card_database_schema
13:27
DatabaseImportWorker: Implement updating Card.is_card column, in case the is_card property needs amendments over time check-in: cfefdd14e3 user: thomas tags: refactor_card_database_schema
13:26
CardDatabase: Fix get_basic_land_oracle_ids() to properly handle non-cards named like basic lands, like Art-Series cards for basic land artworks. check-in: 190343352a user: thomas tags: refactor_card_database_schema
12:45
Add JSON sample for a basic land art series card check-in: 8077181119 user: thomas tags: refactor_card_database_schema
08:28
Removed now-unused SetWackinessScore enum check-in: 85725b85fa user: thomas tags: refactor_card_database_schema
08:02
DatabaseImportWorker: Unify SQL statement indention style check-in: 309745b488 user: thomas tags: refactor_card_database_schema
00:04
DatabaseImportTask: Shave off ~1s execution time during an import by not explicitly verifying that Scryfall only returns syntactically valid UUIDs in UUID fields. check-in: 8cb6a177ad user: thomas tags: refactor_card_database_schema
2026-03-22
23:17
scripts/benchmark_card_data_import.py: Update profiled functions check-in: c0e1b8f407 user: thomas tags: refactor_card_database_schema
22:50
DatabaseImportWorker: All remaining tests pass. Importing from a card data stream works again. check-in: e164871b4f user: thomas tags: refactor_card_database_schema
21:42
Fixed tests for RelatedCards. Removed test_set_wackiness_score, because the tested column was removed. Updated list of database tables checked in assert_model_is_empty(). check-in: 962044f76d user: thomas tags: refactor_card_database_schema
21:36
PrintingFilterUpdater: Fixed flip in boolean condition leading to premature aborting the set filter update. This now works correctly. check-in: 5b789f0589 user: thomas tags: refactor_card_database_schema
20:50
Database schema: Fixed wrong reference in table FilterAppliesTo. check-in: 6f835fdef2 user: thomas tags: refactor_card_database_schema
20:37
DatabaseImportTask: Refactored _get_card_faces(). Now returns a single card face for cards with only one side, even if it has multiple faces. check-in: 0ce3e59d12 user: thomas tags: refactor_card_database_schema
20:34
tests/test_printing_filter_updater.py: Ported tests check-in: 19e60d7a91 user: thomas tags: refactor_card_database_schema
20:33
tests/helpers.py: Removed asserts checking that the card data import does not emit Qt error signals. check-in: ceb1370a2d user: thomas tags: refactor_card_database_schema
19:53
Tests: Adjust face data name extraction to use "Front // Back" for all non-DFC cards with multiple faces. check-in: e60428c082 user: thomas tags: refactor_card_database_schema
17:47
Port _assert_visible_printings_contains. First tests start to pass check-in: 587b464867 user: thomas tags: refactor_card_database_schema
17:33
Fixed timezone conversion issues in SQL (unixepoch() needs the 'utc' time zone specified to match the Python datetime semantics) and many failures in assert statements check-in: b7c78832cf user: thomas tags: refactor_card_database_schema
15:33
Continue porting the tests check-in: d2828ec3b2 user: thomas tags: refactor_card_database_schema
14:06
test_card_info_downloader: Removed validation methods for removed database tables check-in: a8605d92c1 user: thomas tags: refactor_card_database_schema
13:48
PrintingFilterUpdater: Fixed remaining runtime errors. With this, the importer no longer crashes immediately. check-in: aa77c6faa8 user: thomas tags: refactor_card_database_schema
13:41
DatabaseImportTask: Completed port of _insert_or_update_printing_faces(). Removed _clean_unused_data(). check-in: 6780db68d3 user: thomas tags: refactor_card_database_schema
12:15
DatabaseImportTask: Partial port of _insert_printing_faces(). Renamed to _insert_or_update_printing_faces(). Removed obsolete _insert_face_name(). check-in: eb9ca469c4 user: thomas tags: refactor_card_database_schema
08:50
Rewrite _read_optional_scalar_from_db() to use a match statement. Also now raise a RuntimeError, if the non-NULL query result is not a scalar value. check-in: 2ed5f7ec41 user: thomas tags: refactor_card_database_schema
08:36
DatabaseImportTask:._insert_or_update_printing: Also set Printing.is_dfc, instead of using the default value. is_dfc can be trivially computed from the JSON data. check-in: be0fb492a3 user: thomas tags: refactor_card_database_schema
2026-03-21
22:15
DatabaseImportTask: Port _update_card_filters(), and rename to _insert_or_update_card_filters. check-in: 5f1daabb75 user: thomas tags: refactor_card_database_schema
22:00
Database schema: Re-ordered CREATE statements to match the v34 order, reducing the diff size with trunk. check-in: dbd631b4e3 user: thomas tags: refactor_card_database_schema
21:48
PrintingFilterUpdater: Ported the rest of the logic. check-in: 1aae95d90b user: thomas tags: refactor_card_database_schema
20:19
PrintingFilterUpdater: Renamed an internal variable check-in: d79a5a6819 user: thomas tags: refactor_card_database_schema
19:29
PrintingFilterUpdater: Replace QCoreApplication.translate() with self.tr(). check-in: e3aaa67056 user: thomas tags: refactor_card_database_schema
19:26
Database schema: Add missing default value for MTGSet.set_filter_active check-in: 686adb21c6 user: thomas tags: refactor_card_database_schema
19:18
DatabaseImportTask: Fixed SQL syntax error in _insert_card() check-in: 82e33ceaff user: thomas tags: refactor_card_database_schema
19:10
DatabaseImportTask: Port and refactor _handle_printing(). Replaced _is_printing_present() content with a single query check-in: 957dfb501e user: thomas tags: refactor_card_database_schema
14:57
DatabaseImportWorker: Add helper method _read_optional_scalar_from_db, copied from CardDatabase. Use it to fetch scalar query results. check-in: 7cd4e37dc2 user: thomas tags: refactor_card_database_schema
14:48
DatabaseImportWorker: Update _insert_set(). check-in: 0bb0957e3b user: thomas tags: refactor_card_database_schema
14:38
DatabaseImportWorker: Handle Card.is_card column in _insert_card(). check-in: 3ba9ecc5d9 user: thomas tags: refactor_card_database_schema
14:24
DatabaseImportWorker: Removed obsolete _insert_language() check-in: 2f24030990 user: thomas tags: refactor_card_database_schema
13:59
Reinstate the RemovedPrintings table. Its purpose is storing valid printings that are unacceptable for semantic reasons and can't be imported. This is distinct from MigratedPrintings, which tracks printings removed or merged by Scryfall check-in: 23cae27ab4 user: thomas tags: refactor_card_database_schema
13:22
tests.helpers: Replace functools.lru_cache with cache, and qtbot.assertNotEmitted with qtbot.assert_not_emitted check-in: ff2d96e16f user: thomas tags: refactor_card_database_schema
13:19
DB schema: Fix logic and syntax errors. check-in: 5f6a9aaf19 user: thomas tags: refactor_card_database_schema
12:47
CardDatabase: Adjust already ported methods for the switch from is_hidden to is_visible. check-in: e13bf8c540 user: thomas tags: refactor_card_database_schema
12:47
v35 migration script: Add the Printing.is_dfc column. Re-formats. check-in: 161227a3c7 user: thomas tags: refactor_card_database_schema
12:06
DB schema: Fixed Printing.is_visible default value, which should be TRUE. Updated view EvaluatePrintingFilters to also consider MTGSet.set_filter_active. check-in: 685795574d user: thomas tags: refactor_card_database_schema
10:42
Add card database model, to be opened with Navicat Data Modeler. Temporarily add a WIP database migration script. Once the schema v35 is finalized and the migrations completed, the steps will be moved into the carddb_migrations module. check-in: d0ddaf42b9 user: thomas tags: refactor_card_database_schema
09:56
DB schema: Rename is_hidden to is_visible. Add Printing.is_dfc boolean cache column. Add views EvaluatePrintingFilters, AllPrintings, VisiblePrintings check-in: ff5f4b5c95 user: thomas tags: refactor_card_database_schema
2026-03-20
23:27
CardDatabase: Port get_basic_land_oracle_ids check-in: d26af3c8be user: thomas tags: refactor_card_database_schema
23:27
Schema: Re-add forgotten collector_number column to Printing. check-in: 8488e57d38 user: thomas tags: refactor_card_database_schema
18:10
CardDatabase: Ported two methods to schema 35 check-in: 663c1a001b user: thomas tags: refactor_card_database_schema
17:23
DB schema: Rename DisplayFilters to PrintingFilters, and PrintingDisplayFilter to FilterAppliesTo. Add MTGSet.set_filter_active column check-in: ee12dfffb8 user: thomas tags: refactor_card_database_schema
14:53
Update schema to support printing migrations via the Scryfall Migrations API. check-in: 09ee0ee0f4 user: thomas tags: refactor_card_database_schema
2026-03-19
20:28
Fixed obviously broken things in the database schema that slipped through. check-in: cc5456a3bd user: thomas tags: refactor_card_database_schema
20:09
Packaging: Exclude ijson.dump from built Windows packages. The module includes a CLI module that isn't needed when used purely as a library check-in: 1b10896536 user: thomas tags: trunk
19:49
WIP rework of the card database schema. Reduced complexity. Removed some not well working parts, like he wackiness score, which will be replaced by another concept. Currently missing all views and indices. Indices will come back after evaluating performance issues. check-in: 590dbd5446 user: thomas tags: refactor_card_database_schema
2026-03-14
22:35
Import changes from trunk Leaf check-in: 7b6d8909d4 user: thomas tags: pyside6_deploy_support
15:19
Fixed SegmentationFault in PageRenderer during unit tests using PySide6 >= 6.10.1 check-in: b1c4d3f48d user: thomas tags: trunk
14:56
Updated the build system, integrating both cx_Freeze and tox config into pyproject.toml. Fixed project dependencies. Added tox environments verifying compatibility across dependency versions. check-in: 63142ede17 user: thomas tags: trunk
14:00
Dependencies: Do not include the hard cap <= 6.10.0 on PySide6 Closed-Leaf check-in: 202c0f19a6 user: thomas tags: repository_cleanup
13:48
Fix dependencies: Tests reveal minimum required versions for Pint and PyHamcrest do not match the recorded values, so adjust the dependencies accordingly. check-in: b6780b446f user: thomas tags: repository_cleanup
12:57
tox: Ensure that the generate_development_environment does not hold the tests label, so that it is not executed as a unit tests environment check-in: 62a82b7383 user: thomas tags: repository_cleanup
12:04
Fix create_development_environment.bat. Because Windows doesn't allow in-place environment replacement, use a temporary bootstrap environment to create the full one with tox. check-in: 64c3828459 user: thomas tags: repository_cleanup
09:23
tox: Also do a version sweep for cx_Freeze, ensuring all versions marked as supported generate working builds. check-in: 2f5d87bc87 user: thomas tags: repository_cleanup
02:09
tox: Add environment test_cx_freeze_build to the default environment list check-in: 8e58cf6b61 user: thomas tags: repository_cleanup
02:04
Remove the now-unused scripts/rebuild_requirements.py script. check-in: 84680b5225 user: thomas tags: repository_cleanup
02:03
tox: Integrate project development venv generation. This replaces most of the logic in the create_development_environment scripts with a tox environment run. check-in: 541711060f user: thomas tags: repository_cleanup
01:35
pyproject.toml: Use dependency groups instead of installable "extras" to manage packaging and testing dependencies. Since modern tox can read those, this also drops the requirement for requirements.txt generation, thus also drop use of pip-tools. check-in: 7cf6a4c6ff user: thomas tags: repository_cleanup
2026-03-13
18:57
tox: Use label "tests" instead of "test". Update the runner scripts to use the label instead of the default environment list check-in: effaffcce9 user: thomas tags: repository_cleanup
18:52
Drop support for ijson 3.2.0. Add tox environments testing oldest supported versions for everyting not thoroughly tested. This ensures that minimum version requirements aren't accidentally violated and can be updated when newer functionality is used in the code. check-in: c836b8b1a1 user: thomas tags: repository_cleanup
13:35
tox: Add description to the test_cx_freeze_build environment check-in: ddfdbed3d4 user: thomas tags: repository_cleanup
13:30
tox: Fixed Qt factors. Names may not contain dots, so use underscores to separate major and minor Qt versions. check-in: a38fc6e90d user: thomas tags: repository_cleanup
13:10
tox: Generate some linear dependency version sweeps. The environments get generated, but aren't yet functional. check-in: 1f26e8413f user: thomas tags: repository_cleanup
10:10
Import test fix from trunk check-in: b684e08245 user: thomas tags: repository_cleanup
08:28
Pass required environment variables to test environments, to prevent crashes in Qt. check-in: c3360f612d user: thomas tags: repository_cleanup
08:16
Set minimum required tox version to 4.41, which added package = "deps-only". All prior versions cannot parse the current tox configuration. check-in: 963aff93ff user: thomas tags: repository_cleanup
2026-03-12
20:01
Port the cx_Freeze build test tox environment check-in: cf08f4a7cf user: thomas tags: repository_cleanup
19:16
Rename packaging environment, update the packaging scripts to use the new names check-in: 57c5fe4e2a user: thomas tags: repository_cleanup