* fix: drop type_key column from text_fields and datetime_fields tables
* fix: commit empty DB_VERSION 200 library
* fix: use recommended renaming order for field tables
* doc: add REUSE comment headers
* doc: add REUSE comment headers for mkDocs overrides
The original license text was moved to the LICENSES directory
and the MIT license identifier was used since only encoding differences
to the MIT license were present.
Further, the existing copyright notice was moved to SPDX-FileCopyrightText
and one for the TagStudio Contributors was added since the files are not
entirely the same as the originals in the mkdocs-material project.
* doc: add license information files for the translations
* doc: add licence file for oxanium font
As stated on [Google Fonts](https://fonts.google.com/specimen/Oxanium/license), this font is licensed under OFL-1.1.
* doc: re-license flow_layout.py to GPL-3.0-only
This is possible because the Qt example this is based on can be licensed
under BSD-3-Clause which is GPL-3.0 compatible.
* doc: add REUSE comment header for singleton.py
Comparing our implementation with the one it is based on, they really
don't have much more in common than the general idea of the
implementation, which afaik can't be copyrighted.
* doc: Add REUSE comment header for blender_renderer.py
We can plainly license this under GPL-3.0 according to https://www.blender.org/about/license/
* doc: add REUSE comment headers to vendored files
* doc: add REUSE comment header for rounded_pixmap_style.py
Source of name for copyright notice:
Answer by eyllanesc: https://stackoverflow.com/users/6622587/eyllanesc
Profile links to Github: https://github.com/eyllanesc
Stackoverflow licensing: https://stackoverflow.com/help/licensing
* doc: add REUSE comment headers
* doc: add license information file for icon_mono.svg
* doc: add REUSE comment header for files in .github
* doc: add REUSE.toml to give license information for various files without spamming .license files
* fix: use type parameter instead of subclass
* doc: add entries for remaining files in REUSE.toml
According to info from github comment by CyanVoxel: https://github.com/TagStudioDev/TagStudio/pull/1361#issuecomment-4423632570
* ci: add REUSE check workflow
Src: 'https://reuse.software/dev/#github-actions'
* doc: add missing license
* doc: fix license for material-design-icons
* license: change license to MIT for two files only changes by Computerdores and CyanVoxel
* doc: remove unnecessary .license files
* doc: fix incorrect license entries
* doc: add missing license doc
* perf: create sqlite indexes for common columns
* perf: optimize Library.search_tags
* fix(tag_search): do ordering before applying limit
* tag_search: order shorter tag names first
* update tests
* cleanup
* tag_search: use same sorting order when returning all tags
* use dict for deduplicating tags
* fix(tag_search): return descendants instead of ancestors
* perf(tag_search): remove slow calls to method `Library.tags`
* feat: add test for failing GitHub API call.
* fix: don't raise exceptions in get_most_recent_release_version.
* style: apply ruff.
* That not should not have been there.
* refactor: cleanup parameters of open_library and open_sqlite_library
* doc: notes on what tables are affected by which migration steps
* refactor(migration order): move DBv6 repairs
* refactor(migration order): move DBv8 repairs
* refactor(migration order): move DBv9 repairs
* refactor(migration order): move DBv100 repairs
* refactor(migration order): move DBv102 repairs
* refactor: merge migration methods
* doc: final comment changes
* fix: query tag ids independent of future DB changes
* feat: remove preferences table
* refactor: various references to LibraryPrefs
* fix: update josn migration UI
* refactor: remove last vestiges of preferences table
* fix: remove newly unnecessary translations
* doc: document library format changes
* refactor: merge the two methods used for migration 104
* fix: typo in sql statement
* fix: add back support for preferences table in get_version
* fix: properly remove directory in test
* fix: incorrect schema check in get_version
* fix: update search lib via migration
* fix: update assert in test
* fix: ignore element order in assert in test
* fix: use correct path
* fix: better test output
---------
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
* 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>
* perf: remove unnecessary path conversions
* perf: search_library if no limit set don't do extra count
* perf: improve responsiveness of ui when rendering thumbnails
* feat: infinite scrolling thumbnail grid
* fix: update tests
* perf: don't run update for thumb grid if rows haven't changed
* fix: update blank thumbnails on initial page load
* fix: do partial updates when selecting items
* fix: remove badges on loading thumbnails
* fix: move all extra item_thumbs off screen
* load a few hidden rows when scrolling
* cleanup
* update imports
* remove todo
* support pagination
* allow setting page_size to 0 for no limit
* add ui setting for infinite scrolling
* undo render thread affinity changes
* always load a few off-screen rows
* 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>