* Add `is_hidden` field to the `tags` table
* Add hidden checkbox to the edit tag panel
* Fix formatting
* Exclude hidden tags from search results
* Fix formatting (I should probably actually check before committing? lmao?)
* Bit of cleanup
* Add toggle for excluding hidden entries below search bar
* That might be important maybe
* Update Save Format Changes page in docs (and include updated test database)
* Simplify query and invert name+logic
* chore: remove unused code, tweak strings
---------
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
* 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
* 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>
* ui: show more informative library error messages
* tests: add sqlite db migration tests
* tests: fix and refactor migration tests
* fix: apply db8 schema changes before repairing db6
* docs: add save file format change log
* chore: remove db version explanations from docstrings