* refactor: store DB version inside `versions` table
* tests: update search_library db file
* chore: add copyright info to library constants.py
* fix: only backup db if loaded version is lower
* chore: mark Preferences as @deprecated
commit c1346e7df36b137cf88be284a96329fee9605a6a
Author: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
Date: Sat Aug 23 18:04:58 2025 -0700
docs: update DB v100 with tag_parents flip
commit 7e5d9381759b000533c809df9d9bc4f9d984e363
Author: HeikoWasTaken <heikowastaken@protonmail.com>
Date: Sun Aug 24 00:31:21 2025 +0100
fix: swap IDs in parent_tags DB table (#998)
* fix: reorder child and parent IDs in TagParent constructor call
* feat: add db10 migration
* fix: SQL query returning parent IDs instead of children IDs
* fix: stop assigning child tags as parents
* fix: select and remove parent tags, instead of child tags
* test/fix: correctly reorder child/parent args in broken test
* fix: migrate json subtags as parent tags, instead of child tags (I see where it went wrong now lol)
* fix: query parent tags instead of children
* refactor: scooching this down below db9 migrations
* test: add DB10 migration test
---------
Co-authored-by: heiko <heiko_was_taken@protonmail.com>
commit 1ce02699ad9798800f9d98832b2a6377e3d79ed4
Author: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
Date: Sat Aug 23 14:47:39 2025 -0700
feat: add db minor versioning, bump to 100
* feat: add `.ts_ignore` pattern ignoring system
* fix: add wcmatch dependency
* search: add ".TemporaryItems" to GLOBAL_IGNORE
* add `desktop.ini` and `.localized` to global ignore
* add ".fhdx" and ".ts" filetypes
* chore: remove logging statement
* chore: format with ruff
* feat: use ripgrep for scanning if available
* docs: add ignore.md
* search: remove ts_ignore filtering on queries
* feat: detect if files are added but ignored
* fix: render edges on all unlinked thumbs
* perf: don't search for cached unlinked thumbs
* fix(ui): ensure newlines in file stats
* fix: use ignore_to_glob for wcmatch
* fix(tests): remove inconsistent test
The test hinged on the timing of refresh_dir()'s yield's rather than actual values
* ui: change ignored icon and color
* refactor: basic split
* fix: renaming and usage test didn't work for the tests
* fix: tests
* refactor: restructuring
* refactor: further separation and lots of related changes
* refactor: remove last reference to a widget from controller
* refactor: address todo
* fix: failing tests and mypy compaint
* refactor: move control logic to controller
* refactor: more readable button style
* fix: set_selection was called with invalid argument
* fix: incorrect qt enum accesses
* refactor: clean up main_window.py and reenable ruff checks for it
* refactor: completely reorganise main_window.py
* refactor: factor out regions into separate methods
* refactor: move preview_panel to MainWindow
* refactor: move file menu construction to MainMenuBar
* refactor: move edit menu construction to MainMenuBar
* refactor: move view menu construction to MainMenuBar
* refactor: move tools menu construction to MainMenuBar
* refactor: move macros menu construction to MainMenuBar
* refactor: move help menu construction to MainMenuBar
* refactor: move ui construction code out of QtDriver and into MainWindow
* fix: remove unnecessary imports
* fix: tests were failing
* refactor: store browsing history for navigation purposes
* refactor: remove page_size from FilterState
* refactor: move on from the term "filter" in favor of "BrowsingState"
* fix: refactors didn't propagate to the tests
* fix: ruff complaints
* fix: remaing refactoring errors
* fix: navigation works again
* fix: also store and restore query
* feat: add tab widget
* refactor: move languages dict to translations.py
* refactor: move build of Settings Modal to SettingsPanel class
* feat: hide title label
* feat: global settings class
* fix: initialise settings
* fix: properly store grid files changes
* fix: placeholder text for library settings
* feat: add ui elements for remaining global settings
* feat: add page size setting
* fix: version mismatch between pydantic and typing_extensions
* fix: update test_driver.py
* fix(test_file_path_options): replace patch with change of settings
* feat: setting for dark mode
* fix: only show restart_label when necessary
* fix: change modal from "done" type to "Save/Cancel" type
* feat: add test for GlobalSettings
* docs: mark roadmap item as completed
* fix(test_filepath_setting): Mock the app field of QtDriver
* Update src/tagstudio/main.py
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
* fix: address review suggestions
* fix: page size setting
* feat: change dark mode option to theme dropdown
* fix: test was expecting wrong behaviour
* fix: test was testing for correct behaviour, fix behaviour instead
* fix: test fr fr
* fix: tests fr fr fr
* fix: tests fr fr fr fr
* fix: update test
* fix: tests fr fr fr fr fr
* fix: select all was selecting hidden entries
* fix: create more thumbitems as necessary
Fixes: #200Fixes: #365Fixes: #512Fixes: #800
fix(pyproject): resolve mix-up of mypy and pytest
chore(ci): remove legacy scripts
chore: format with new mypy rules; fix translation test
wip(ci/mypy): remove config flag
fix(pyinstaller): use correct dict access
fix(resources): usage in ts_qt.py
feat(nix/package): validate tests with pytest hook
fix(nix/package): remove old dependency patch
feat(nix): support Darwin
fix(nix/package): move check deps to checkInputs
fix(nix/shell): typo
fix(nix/shell): correctly wrap Python with Qt args
fix(pyproject): specify mypy-extensions
feat(nix/package): provide pillow-jxl-plugin
nix(nix/package): split into multiple files, allow overriding of JXL and vtf2img
fix(nix/shell): provide FFmpeg on runtime
feat(flake): output pillow-jxl-plugin and vtf2img
fix(nix/package): load pipewire
feat(nix/package): run tests on pillow-jxl-plugin
fix: remove extra noqa comment
docs: update installation docs
docs: shrink table size on docs site
nit(nix/package): pipewire not needed in buildInputs
docs: update commands, environment, setup
fix: use consistent possessives
chore: format with prettier, add ignore flags
fix(pyinstaller): consume from pyproject
Revert "fix(pyinstaller): consume from pyproject"
This reverts commit 398cd4e5630a3e83d22d15286d7ac59b4c07c5d6.
refactor: use icon from resource manager
Also fixes incorrect path currently used in ts_qt.py.
nix(pyinstaller): replace use of sys.platform with platform.system
docs: add build section
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>