MTGProxyPrinter

Timeline
Login

Timeline

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

164 check-ins using file mtg_proxy_printer/print.py version c68e5ac818

2025-05-01
13:41
Cleaned up unused imports and fixed a few style issues raised by the linter. check-in: acabdfdb85 user: thomas tags: trunk
13:00
Updated language handling. Add partial French translation. Languages now show their completion in the settings window. check-in: 8c3f5d90ba user: thomas tags: trunk
12:59
Add changelog entry Closed-Leaf check-in: 2d9b732017 user: thomas tags: additional_languages
12:32
Implemented showing translation progress for all enabled languages. The progress is read from the translated XML files and stored as a resource file to have the values avalable in compiled distributions check-in: 156b300a5b user: thomas tags: additional_languages
11:19
Also include the French translation when compiling the resources. check-in: 6ba38ae2b9 user: thomas tags: additional_languages
2025-04-30
17:47
Enable French translation, which is partially available on Crowdin check-in: e5e999d70e user: thomas tags: additional_languages
17:39
Implement a custom card import dialog, improving the custom card workflow. Implements [98e234e07306a6b8], [ffbeb9a7d48cd007] check-in: 32022ea7c8 user: thomas tags: trunk
17:29
Fix failing tests Closed-Leaf check-in: cab293fb6d user: thomas tags: custom_card_import_dialog
17:12
When cards are selected in the CardListTable, clicking the "set copies" button in the custom card import dialog only sets the copy value of selected rows. When nothing is selected, it sets the value for all rows. check-in: b0ea5dc09a user: thomas tags: custom_card_import_dialog
16:45
Update translations from crowdin. Includes translations for the new import dialog. check-in: c7b12c6b20 user: thomas tags: custom_card_import_dialog
16:44
scripts/update_translations.py: Re-enable downloading translations when calling the script with "download". This was accidentally disabled in [9d6c0fd1e31023ee]. check-in: 5bdb8e1bb3 user: thomas tags: custom_card_import_dialog
16:36
SetEditorWidget: Remove "translate" flag for labels only containing parenthesis check-in: 8896a960a3 user: thomas tags: custom_card_import_dialog
16:35
Remove unused import check-in: 70c3c80044 user: thomas tags: custom_card_import_dialog
16:02
Implement propagating edits of custom cards from the CustomCardImportDialog to the Document. Propagating edits are put on the undo stack individually and can be reverted. check-in: 6a9e923bae user: thomas tags: custom_card_import_dialog
15:39
Merge with trunk check-in: da453793dd user: thomas tags: custom_card_import_dialog
15:29
Merge with trunk (Edit: A stash/pop cycle seems to have cleared that this is a merge Leaf check-in: 36d32abd8f user: thomas tags: bogus
15:14
Formalize SQL query and parameter types. State that cached_dedent() propagates LiteralString via a type variable. check-in: 643c7f4f91 user: thomas tags: trunk
14:41
Fix environment-altering side-effect in test_settings.py. A test altered the global settings, causing tests that rely on specific default page layout settings to fail. check-in: 65f34c7bf4 user: thomas tags: trunk
2025-04-29
16:52
Adjust tests for 4 document actions. Leaf check-in: cd87d586c3 user: thomas tags: optimize_test_memory_use
16:18
Adjust tests/decklist_parser to the new fixture style check-in: c8ae1ccee0 user: thomas tags: optimize_test_memory_use
14:00
WIP replace yielding pytest fixtures with returning zero-argument callables. This pulls object instantiation from fixture to test code. With this, the test environment can no longer hold references to objects throughout the test suite execution check-in: 7b88759bc1 user: thomas tags: optimize_test_memory_use
2025-04-26
12:22
Updated project metadata in pyproject.toml according to [https://packaging.python.org/en/latest/guides/writing-pyproject-toml/] check-in: 236ffe53b0 user: thomas tags: trunk
11:54
Scripts: Refactored rebuild_requirements.py to not use map, instead use ThreadPoolExecutor.submit() and wait() check-in: dd26849b3f user: thomas tags: trunk
2025-04-25
11:56
Tests: Add fixture page_layout, returning a PageLayoutSettings instance created from settings. Use it everywhere, where code previously explicitly instantiated a PageLayuoutSettings. Validate the instance against the default settings. check-in: bd1ca5c600 user: thomas tags: custom_card_import_dialog
11:37
Remove a broken test case and add additional validation to test_page_layout_compute_page_row_count(). Somewhere, a test alters the document settings without changing them back check-in: dfab6f5fde user: thomas tags: custom_card_import_dialog
2025-04-24
08:53
scripts/update_translations.py: Remove locales that cannot be enabled, because their value is not registered as a valid choice in the settings validation code. check-in: 9d6c0fd1e3 user: thomas tags: custom_card_import_dialog
2025-04-23
21:55
Fixed remaining failing document loader tests. check-in: 807ee85c4e user: thomas tags: custom_card_import_dialog
15:22
CardDatabase: Use relative imports for typing and pathlib imports. Tighten the db_path type annotation from "str" to Literal[":memory:"] for in-memory databases check-in: 24eea93a04 user: thomas tags: custom_card_import_dialog
15:21
DocumentLoader: Worker: Open a CardDatabase instance in __init__(). Copy the database from the parent, if it runs during unit tests. check-in: 512de63fb3 user: thomas tags: custom_card_import_dialog
14:50
Tests: Refactor save file creation code. Use a helper function to populate the save file data, instead of running SQL queries in each test function that requires creating save data. check-in: 7d0ed2eb21 user: thomas tags: custom_card_import_dialog
14:49
Register sqlite adapters for CardSize, CardSizes and CardType enums. check-in: cda943fc09 user: thomas tags: custom_card_import_dialog
2025-04-22
20:19
Fix failing test test_subsequent_save_updates_settings(). Reduced the scope, only testing what the name states check-in: 30d05cf717 user: thomas tags: custom_card_import_dialog
20:00
Use document-v7 in test_action_save_document.py and introduce some tighter signal timeouts in tests check-in: 05b9bb9b8e user: thomas tags: custom_card_import_dialog
09:59
Fixed imports in tests, round 2 check-in: e56c4a03f1 user: thomas tags: custom_card_import_dialog
09:57
Fix bad import check-in: fa56612fb9 user: thomas tags: custom_card_import_dialog
09:02
Add tests for ConfigParser.get_quantity() and SectionProxy.get_quantity(). check-in: ca20d3b916 user: thomas tags: custom_card_import_dialog
08:47
Refactored Card/CheckCard/CustomCard.requested_page_type(). Replace hard-coded magic numbers with use of the CardSizes enum that contains the image dimensions. check-in: 3851652812 user: thomas tags: custom_card_import_dialog
07:24
Don't use hamcrest matcher anything(), since the value matcher of hasproperty() is optional check-in: 6e2deb8ef6 user: thomas tags: custom_card_import_dialog
07:22
Ensure attribute compatibility between Card, and CustomCard/CheckCard check-in: e9ff57312c user: thomas tags: custom_card_import_dialog
2025-04-21
14:33
test_card.py : Silence unused variable warnings check-in: 2b2c9063f3 user: thomas tags: custom_card_import_dialog
14:14
Add Tests for CheckCard. Fix CheckCard.corner_color() and missing CheckCard.set_code check-in: 795559fc6f user: thomas tags: custom_card_import_dialog
11:54
CardDatabase: No longer supply an empty oracle_id when constructing a CustomCard, as that is now a read-only property check-in: 3bbdfb2a35 user: thomas tags: custom_card_import_dialog
11:52
Add tests for Card and CustomCard classes. Implement CustomCard.oracle_id, returning the empty string. check-in: 642da37028 user: thomas tags: custom_card_import_dialog
2025-04-19
11:14
Fixed imports in moved test modules check-in: 536cd9f854 user: thomas tags: custom_card_import_dialog
11:12
Move test modules for model modules into tests/model/ check-in: 62cd609f29 user: thomas tags: custom_card_import_dialog
2025-04-17
16:22
CardListModel: Do not overwrite the card image tooltip with an oversized warning tooltip, if the custom card is oversized check-in: d1a1c6f9e2 user: thomas tags: custom_card_import_dialog
16:14
Remove an unused function from ui/common.py check-in: e380b47cc6 user: thomas tags: custom_card_import_dialog
15:59
Cleaned up some imports and use from imports to shorten typing annotations. Renamed get_image_for_tooltip_display() to get_card_image_tooltip(). Refactored image scaling in get_card_image_tooltip() to use a better-suited overload that requires less parameters for the same effect check-in: b7c6e5cdd7 user: thomas tags: custom_card_import_dialog
2025-04-14
15:24
Implement a shared custom card registry in the CardDatabase class. check-in: 4b6b452415 user: thomas tags: custom_card_import_dialog
2025-04-13
16:12
DocumentLoader: Add a TODO check-in: 0c1b9f3264 user: thomas tags: custom_card_import_dialog
16:05
DocumentLoader: Close the save file db as soon as possible, or when validating data fails. This ensures that SQLite journal files don't stick around longer than needed and releases database locks early. The same document can now be loaded multiple times in a row without hitting a "database is locked" error. check-in: f8b3ef3ac8 user: thomas tags: custom_card_import_dialog
2025-04-12
17:55
Reworked handling custom cards. Introduced class CustomCard, holding custom cards. It keeps the original file in memory as a plains bytes sequence and loads it in the size determined by the card size attribute. This avoids re-encoding the file for saving purposes. The user file is kept untouched. check-in: af561c08a0 user: thomas tags: custom_card_import_dialog
16:40
DocumentLoader: Directly unpack a tuple, instead of assigning it first check-in: 21f7478ac1 user: thomas tags: custom_card_import_dialog
16:39
Fixed broken Card.image_file() property check-in: 05307855c7 user: thomas tags: custom_card_import_dialog
16:33
Rewritten ActionSaveDocument: Reworked saving custom card images, now storing the original, unaltered image file. check-in: f5bae255c5 user: thomas tags: custom_card_import_dialog
14:08
DocumentLoader: Remove remaining reference to CustomCardData.oversized column. Harden the type validator by checking that deserialized document dimensions are lengths. check-in: 68fc88155f user: thomas tags: custom_card_import_dialog
14:05
CustomCard: Declare as a dataclasses class check-in: f1b732290f user: thomas tags: custom_card_import_dialog
13:14
Implement class CustomCard, which will be used to hold custom cards. It stores the supplied image in a dedicated attribute, so that the pixmap used for rendering can be freely set to any supported size without having to do re-scaling passes that degrade quality over time. check-in: 7ac8f1cc7b user: thomas tags: custom_card_import_dialog
12:50
Moved Card, CheckCard, MTGSet and related type definitions from carddb.py into a dedicated module card.py check-in: f5c32b4505 user: thomas tags: custom_card_import_dialog
12:05
Save file format: Remove is_oversized column from CustomCardData. check-in: 813e0e7609 user: thomas tags: custom_card_import_dialog
08:32
CardDatabase: Refactored some parts of the code. Replaced "result=run_query(); return result" with "return run_query()" in multiple places. Extend a few comments check-in: a5bd928aff user: thomas tags: trunk
2025-04-11
21:49
CardDatabase: Introduce method _read_scalar_list_from_db(query, parameters) which runs the query and returns a list of scalar items. To be used for queries that return a result set with 1 column and multiple rows. Internally unpacks the 1-tuples returned by SQLite. check-in: 1f6477927e user: thomas tags: trunk
21:22
CardDatabase: Unify wording by replacing set_abbr with set_code check-in: 8577578460 user: thomas tags: trunk
20:47
PageScene.on_data_changed(): Do not re-draw custom cards when editing their properties. check-in: d91380b4a3 user: thomas tags: custom_card_import_dialog
13:48
Optimized updating the page overview when renaming custom cards. check-in: de3fad2611 user: thomas tags: custom_card_import_dialog
13:40
Update the full page overview when renaming custom cards. This keeps the page overview in sync. check-in: c4f53f3c9b user: thomas tags: custom_card_import_dialog
13:10
Moved to_list_of_ranges() from card_actions.py to natsort.py to make it available outside of the document controller modules. Properly signal data changes for all copies when editing custom cards. The page display still needs further fixes check-in: d45ecff50a user: thomas tags: custom_card_import_dialog
2025-04-10
11:55
Replace the fancy multi selection behavior of the page content table with the default behavior of needing Ctrl to select multiple. check-in: 8c09f16da0 user: thomas tags: custom_card_import_dialog
11:46
Renamed ComboBoxItemDelegate to CollectorNumberEditorDelegate and handle collector number editing for custom cards. Removed subclasses DocumentComboBoxItemDelegate and CardListComboBoxItemDelegate. Removed outdated tests. check-in: 1ba1688f46 user: thomas tags: custom_card_import_dialog
11:24
Removed dead code from ComboBoxItemDelegate. Functionality of the removed parts is provided by other, dedicated delegate classes. check-in: c2f4c57455 user: thomas tags: custom_card_import_dialog
2025-04-09
18:12
Add Card.is_custom_card property. It defines in one place how a custom card is identified, by having an empty oracle_id field. Avoids littering the code-base with "not card.oracle_id" statements. check-in: d11b61da21 user: thomas tags: custom_card_import_dialog
11:44
LanguageEditorDelegate: Improve variable naming check-in: 134d0c5865 user: thomas tags: custom_card_import_dialog
11:32
Extract index to Document instance resolution into a function. This is used by multiple item delegates to access the base Document instance from a given QModelIndex. Add additional docstrings. check-in: b39ed360ee user: thomas tags: custom_card_import_dialog
2025-04-08
21:50
Add LanguageEditorDelegate class, implementing language selector for official cards and a language editor for custom cards. check-in: f5ebfa43dd user: thomas tags: custom_card_import_dialog
21:28
Reworked how item delegates are stored. Since they are not accessed after creation and only kept as attributes to prevent the garbage collector from collecting them, put all into a tuple. check-in: 5fbda4453a user: thomas tags: custom_card_import_dialog
13:52
Extract editing custom cards into a dedicated document action ActionEditCustomCard. This makes it possible to undo/redo edits to custom cards. check-in: 74ed86293b user: thomas tags: custom_card_import_dialog
13:34
Move PageColumns enum to document_page.py. This de-couples the enum from Document, and allows importing it for use in document actions. check-in: e32d2314cd user: thomas tags: custom_card_import_dialog
13:31
Fix bad import in a test module check-in: 33e82fd3d0 user: thomas tags: custom_card_import_dialog
2025-04-07
13:53
Document: Update the parent page when changing a custom card name. check-in: a3961bbbd9 user: thomas tags: custom_card_import_dialog
13:45
CustomCardImportDialog: Removed the unused QLabel. Reworded the "Add cards" button to "Load images", and switched the icon to an "import" icon. Moved the Ok button to the bottom. This reduces confusion, as the top "add" button did not accept the dialog previously. check-in: 90b1f2d5de user: thomas tags: custom_card_import_dialog
13:02
Document: Implement editing custom cards. check-in: b706dfef58 user: thomas tags: custom_card_import_dialog
12:21
Add two tests for the CustomCardSetEditor. check-in: 81e8c2b4f6 user: thomas tags: custom_card_import_dialog
10:47
Add unit tests for BoundedCopiesSpinboxDelegate check-in: 89e5ef1d59 user: thomas tags: custom_card_import_dialog
09:51
Disable pytest timeouts check-in: 0e1776beb5 user: thomas tags: custom_card_import_dialog
09:04
Ensure compatibility with the deck list import wizard. Both use the CardListModel and CardListTableView. So internally distinguish between custom cards and official cards in the SetEditorDelegate and use the appropriate editor for each kind of card. check-in: dc1289e21e user: thomas tags: custom_card_import_dialog
08:16
Implement writing the set for DFC check cards check-in: 906da3a391 user: thomas tags: custom_card_import_dialog
08:13
Implement a code editor for MTG sets. Set it as the item delegate for the Set column in the CardListTableView. Fix data() for retrieving the set in EditRole. Implement writing the set to the Card instance check-in: 2da89391a0 user: thomas tags: custom_card_import_dialog
07:43
Add requirements*.txt to the ignore glob check-in: 697cd395bd user: thomas tags: custom_card_import_dialog
2025-04-06
22:27
CustomCardImportDialog: The "Remove selected" button now removes only the selected cards, instead of everything. Dialog buttons are now disabled, if clicking them would do nothing. So the "Delete selected" button is only active, if cards are selected. The Ok button is only active if the table is non-empty. check-in: 317df9d635 user: thomas tags: custom_card_import_dialog
18:02
Add changelog entry check-in: fc938eff47 user: thomas tags: custom_card_import_dialog
17:45
Set the dialog window size to 900x500. check-in: d8bb73a742 user: thomas tags: custom_card_import_dialog
17:44
CustomCardImportDialog: Add spinbox to specify the target copy count when clicking the set copies button. check-in: 5e5ef08041 user: thomas tags: custom_card_import_dialog
17:31
Implemented setting all copy values to 1 and clearing the custom card table when clicking the delete button check-in: cd2a7d62f7 user: thomas tags: custom_card_import_dialog
17:29
MainWindow: Unify handling of dialogs and wizards. check-in: 88be39f16f user: thomas tags: custom_card_import_dialog
11:34
Implemented opening the custom card import wizard from an action in the main window check-in: 03c67497e2 user: thomas tags: custom_card_import_dialog
11:18
CustomCardImportDialog: Implemented adding images via a button and file selector. check-in: 1bc680fd48 user: thomas tags: custom_card_import_dialog
2025-04-04
12:46
Implement CustomCardImportDialog.accept(). Request applying an ActionImportDeckList when accepting the dialog. Connect that to document.apply(). Accepting the custom card import dialog now adds the imported custom cards to the document. check-in: d09f174082 user: thomas tags: custom_card_import_dialog
12:15
Add delegate class CardSideSelectionDelegate. This improves display of sides when editing the Side column check-in: a07615fedc user: thomas tags: custom_card_import_dialog
12:04
Rename SpinboxItemDelegate to BoundedCopiesSpinboxDelegate which better reflects the use of the class. check-in: a60db985d0 user: thomas tags: custom_card_import_dialog
11:36
CardListModel now uses get_image_for_tooltip_display() to show images of custom cards via tooltips when hovering over the card name column check-in: 84283babeb user: thomas tags: custom_card_import_dialog
11:35
Moved get_image_for_tooltip_display() from cache_cleanup_wizard.py to common.py check-in: 48c7027eb5 user: thomas tags: custom_card_import_dialog
11:02
Initialize the custom card name to the file name stem. check-in: 96ff305bc5 user: thomas tags: custom_card_import_dialog
10:58
Add additional Card attributes to the object hash. Includes the Image URI which also holds the file path for custom cards. This allows the model to deduplicate cards based on the file path. check-in: 0574a81d27 user: thomas tags: custom_card_import_dialog
09:53
Extend the CardListModel to allow editing columns of custom cards. check-in: b5540b8327 user: thomas tags: custom_card_import_dialog
2025-04-03
15:35
Move the creation of the sort model into the CardListTableView. Use the CardListTableView class in the CustomCardImportDialog. That ensures that the copies column is in a valid range. check-in: ddf5312527 user: thomas tags: custom_card_import_dialog
15:23
Add CardListTableView class, subclassing QTableView. This encapuslates the logic used to manage a card list in a class. Replace the plain QTableView in the deck list import wizard with the new class. check-in: a99a0cbbcd user: thomas tags: custom_card_import_dialog
14:20
Remove unused attributes in the PageConfigWidget and PageConfigContainer classes. check-in: 2cbbc31007 user: thomas tags: trunk
2025-04-02
22:24
Adjusted internals of the CustomCardImportDialog. It now has an actual model class to hold the cards, and displays them via the connected table view. check-in: f3099f5e2d user: thomas tags: custom_card_import_dialog
22:19
Implemented showing the CustomCardImportDialog when dropping images onto the main window. check-in: 31735059ed user: thomas tags: custom_card_import_dialog
2025-04-01
20:51
Merge with trunk. check-in: d8a4c9160d user: thomas tags: custom_card_import_dialog
13:36
Break long lines in README.md check-in: a0bb946382 user: thomas tags: trunk
12:39
Implemented saving custom cards in the native save file format. Major improvement for custom card support. Implements [cae9d1f2f56ad944]. check-in: 3467478e43 user: thomas tags: trunk
12:37
Add changelog entry Closed-Leaf check-in: 9b8e196b3f user: thomas tags: save_custom_cards
12:24
Reworked creation of requirements*.txt files. Run the creation in parallel, reducing runtime from ~17s to ~7s. check-in: 61bfa050ae user: thomas tags: trunk
11:22
Perform additional database validation steps when opening document save files. Don't run PRAGMA integrity_check on the CardDatabase file, as that can take 30s, balooning application startup time. check-in: 6ada69b429 user: thomas tags: save_custom_cards
10:55
Remove MIN_SUPPORTED_SQLITE_VERSION constants in the code base. Remove SQLite library version checks from database validation logic. Centralize the version check in sqlite_helpers.py and run it during module import. This reduces complexity. check-in: e665f1db06 user: thomas tags: save_custom_cards
10:42
Support loading empty documents. check-in: 5e84be640d user: thomas tags: save_custom_cards
2025-03-31
10:28
Fix test_unknown_save_version_raises_exception() check-in: c5b964d0f2 user: thomas tags: save_custom_cards
2025-03-29
14:33
Fixed outdated mock path, fixing most of the failing document loader tests. check-in: a6733d995f user: thomas tags: save_custom_cards
14:23
Further fixes for the test suite. check-in: 3bfed0b5c5 user: thomas tags: save_custom_cards
12:11
Adjusted test cases check-in: e3325f9751 user: thomas tags: save_custom_cards
08:06
Implemented saving empty slots. Required relaxing the constraints on the scryfall_id and custom_card_id in the Card table check-in: 6b3e3ab95f user: thomas tags: save_custom_cards
2025-03-28
23:34
Implemented loading empty cards. check-in: efe940969f user: thomas tags: save_custom_cards
14:57
Merge with trunk check-in: ce96e05fe9 user: thomas tags: save_custom_cards
14:48
Extracted the page card table view into a dedicated class. This moves most of the logic out of CentralWidget, as most of the present logic dealt with the table custom context menu. check-in: 67360d8140 user: thomas tags: trunk
13:22
Restore connection from delete_selected_images_button to page_card_table_view.delete_selected_images. Closed-Leaf check-in: 94178036d9 user: thomas tags: extract_page_card_table_view_class
13:16
Fix segmentation fault happening when clicking a row in the PageCardTableView. Connect the selectionChanged signal to a Slot method instead of a lambda, which resolves the crash. And an additional bit of code cleanup. check-in: 3851dc7bd8 user: thomas tags: extract_page_card_table_view_class
12:56
Dev environment: create_development_environment scripts now echo that creating requirements.txt will take a while before generating them. check-in: 5ac4445565 user: thomas tags: extract_page_card_table_view_class
12:55
Minor clean-up in WizardBase._set_default_size() check-in: 6e2775b89b user: thomas tags: extract_page_card_table_view_class
12:11
Move tests for the PageCardTableView into a dedicated module. Remove dependency on the main_window fixture for these tests, which speeds up the execution. check-in: 8ba7aebe03 user: thomas tags: extract_page_card_table_view_class
11:24
Use functools.cache for cached_dedent(), if it is available. check-in: 14030e571e user: thomas tags: extract_page_card_table_view_class
11:16
Run PRAGMA integrity_check during validate_database_schema() check-in: 656e6c5f26 user: thomas tags: save_custom_cards
2025-03-27
22:39
Use the new PageCardTableView class in the CentralWidget UI files. Fix a @Slot() decorator check-in: 3d696d39ae user: thomas tags: extract_page_card_table_view_class
22:28
Moved additional components. Add the page_card_table_view.py module that should have been added in the last check-in. check-in: f7157d11eb user: thomas tags: extract_page_card_table_view_class
22:13
Extract the PageCardTableView as a dedicated class. Most of the CentralWidget logic is related to setting up the page card table view, and its custom context menu. Encapsulate all that in a dedicated class. check-in: 436980c684 user: thomas tags: extract_page_card_table_view_class
14:49
Adjust test_save_migration() and schema validation testing for the proper target schema version check-in: e27771c553 user: thomas tags: save_custom_cards
14:26
Fix the registered adapter for TIMESTAMP. Fixes Python warning. check-in: 8ac57a45c5 user: thomas tags: save_custom_cards
14:24
Fix card database migration code. Replace the implicit and deprecated SQL TIMESTAMP converter with an explicit one. Adjust the code to handle getting datetime instances directly from the database. check-in: 9b2b20c59b user: thomas tags: save_custom_cards
2025-03-26
19:14
Implemented loading document-v7, including custom cards. The implementation is not yet tested and hardened against bad save data. A first round-trip save/load cycle worked. check-in: fb701aeb1e user: thomas tags: save_custom_cards
19:12
Schema change: Declare boolean columns with type BOOLEAN_INTEGER and register a converter to bool. check-in: e5a4811447 user: thomas tags: save_custom_cards
13:45
DocumentLoader: Use from imports for typing imports check-in: 65dc5fdea9 user: thomas tags: save_custom_cards
12:55
Only VACUUM the save file, if the number of free database pages exceed 10% of the total page count. check-in: a11d99e3d7 user: thomas tags: save_custom_cards
2025-03-25
18:47
Tests: Validate that save file migration scripts set the user_version pragma to the correct value check-in: 05f4f9695e user: thomas tags: save_custom_cards
18:38
Implemented saving document version 7, including custom cards. check-in: 440b2139f7 user: thomas tags: save_custom_cards
18:37
Fixed _migrate_6_to_7() not updating the user_version field. check-in: c1f731a4cc user: thomas tags: save_custom_cards
2025-03-23
16:12
Add table Page to the document save file. Allows storing the image size of the page, to support sizes of blanks check-in: 0cf4256c7d user: thomas tags: save_custom_cards
16:02
MagicWorkstationDeckListParser: Improve parser compatibility, by also allowing single space characters between the sideboard note and the number of copies. Ensures compatibility with mwDeck files obtained from [https://mtgen.net] check-in: 639a73228d user: thomas tags: trunk
15:45
README: Fix link to the XMage homepage, as the project switched the domain check-in: 9ac5254edf user: thomas tags: trunk
13:05
Partial, complete rewrite of the document loader logic. The document save file format needs additional amendments to support storing size information for pages. As of now, blank slots cause issues, because they don't contain image size information, and thus cannot be loaded. check-in: b28103889c user: thomas tags: save_custom_cards
2025-03-22
23:09
Partial implementation for loading document settings from document-v7 save files. check-in: 9af679f0dc user: thomas tags: save_custom_cards
22:43
Written save file migration code from document-v6 to document-v7 check-in: fcffce34ff user: thomas tags: save_custom_cards
22:42
Save file schema: The DocumentSettings value column must allow empty strings to support empty document titles. check-in: e6ad8fccd3 user: thomas tags: save_custom_cards
13:50
Save file schema: Add missing type column to the Card table. This is still required to distinguish regular cards from DFC check cards check-in: d0787d4316 user: thomas tags: save_custom_cards
12:56
Import unit tests from trunk check-in: 7fe861fc68 user: thomas tags: save_custom_cards
12:52
Implement test for _migrate_5_to_6(). Cleaned up imports. check-in: 516971ed14 user: thomas tags: trunk
11:38
Add test module tests/test_save_file_migrations.py. Contains tests verifying the correctness of the save file migration. Currently validates database schema. Partially validates data migration. check-in: 13b830d80f user: thomas tags: trunk
09:26
Ignore the translation sources file, which is automatically generated by the translation tools check-in: 9956d1c88c user: thomas tags: trunk
09:24
Add draft for a custom card import dialog. It is supposed to allow setting data like number of copies, card name, etc when dropping images. And also allow loading images to make the feature accessible without drag&drop by adding a menu entry for it. check-in: 8255a732f1 user: thomas tags: custom_card_import_dialog
09:21
Improve save schema comments and constraint descriptions. check-in: 93d7c47220 user: thomas tags: save_custom_cards
2025-03-21
14:29
Add draft for document save file version 7. It allows storing custom cards in a table, together with metadata like set, name, etc for future use. Document settings are set to TEXTual column type affinity to avoid coercing document tiles like "01.0" to "1". Dimensional settings, like margings are moved into the DocumentDimensions table, which will be converted to pint Quantities on the fly. check-in: 23395ea245 user: thomas tags: save_custom_cards
13:17
Move ImageKey and CacheContent dataclasses from imagedb.py into a separate module. This avoids a cyclic import work-around. check-in: bf9caa9e7d user: thomas tags: trunk
2025-03-20
14:42
MeteredSeekableHTTPFile: Fix a few static analysis warnings. Add comments explaining whence flag values in the code. check-in: 0444b622e8 user: thomas tags: trunk
14:25
Moved document saving logic from a Document method into a dedicated save Action class to encapsulate the functionality. Moved the PageLayoutSettings from document_loader.py into a dedicated module to reduce the interdependencies. This reduces the likelihood of cyclic imports. check-in: 1b919d949b user: thomas tags: trunk
14:09
Moved the PageLayoutSettings class from document_loader.py into a dedicated module. This decouples the class from the document loader and reduces import graph complexity. Closed-Leaf check-in: 0bd41d28f3 user: thomas tags: document_save_action