* updated parents and aliases to use the flowLaout in the build tag panel
added shortcuts for adding and removing aliases and updated the alias ui
to always show remove button and not cover alias
aliases use flowlayout
wrote test for buildTagPanel removeSelectedAlias
parent tags now use flowlayout in build tag panel
moved buttons for adding aliases and parents to be at the end of the
flowLayout
* added aliases and subtags to search results
* aliases now use a table, removed unnecessary keyboard shortcuts
* reverted subtags to regular list from flowlayout
* chor remove redundant lambda
* feat: added display names for tags
* fix: aliases table enter/return and backspace work as expected, display names work as expected, adding aliases outputs them in order
* format
* fix: add parent button on build tag panel
* fix: empty aliases where not being removed all the time
* fix: alias name changes would be discarded when a new alias was created or an alias was removed
* fix: removed display names, as they didn't display properly and should be added in a different PR
* fix: mypy
* fix: added missing session.expunge_all
session.expunge_all() on line 621 was removed, added it back.
* fix: parent_tags relationship in Tag class
parent_tags primaryJoin and secondaryJoin where in the wrong order. They have been switched back to the proper order.
* fix: pillow_jxl import was missing
* fix: ruff
* fix: type hint fixes
* fix: fix the type hint fixes
---------
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
* feat: implement search equivalence of "jpg" and "jpeg" filetypes in an extensible manner
* docs: update completion for search features on roadmap
* fix: move FILETYPE_EQUIVALENTS to media_types.py
* [feat] can now add a new tag from the tag library panel
* [feat] can remove tags from the tag library panel
[fix] library panel updates tag list when a new tag is create
* [test] added test for library->remove_tag
* [fix] type error
* removed redundant lambda
Co-authored-by: VasigaranAndAngel <72515046+VasigaranAndAngel@users.noreply.github.com>
* fix: tags with a reserved id could be edited or removed, now they cannot.
* fix: when a tag is removed or edited the preivew panel will update to reflect the changes
Co-authored-by: Sean Krueger <skrueger2270@gmail.com>
* fix: mypy check
* fix: aliases and subtags not being removed from DB when tag they reference was removed.
* feat: added a confirmation message box when removing tags.
* fix: mypy
---------
Co-authored-by: VasigaranAndAngel <72515046+VasigaranAndAngel@users.noreply.github.com>
Co-authored-by: Sean Krueger <skrueger2270@gmail.com>
* fix: bug where preview_panel tag was out of date compared to tag in database after edits where made using the tagDatabasePanel
* fix: changes made in the preview panel are saved to the database
* feat: Drag and drop files in and out of TagStudio (#153)
* Ability to drop local files in to TagStudio to add to library
* Added renaming option to drop import
* Improved readability and switched to pathLib
* format
* Apply suggestions from code review
Co-authored-by: yed podtrzitko <yedpodtrzitko@users.noreply.github.com>
* Revert Change
* Update tagstudio/src/qt/modals/drop_import.py
Co-authored-by: yed podtrzitko <yedpodtrzitko@users.noreply.github.com>
* Added support for folders
* formatting
* Progress bars added
* Added Ability to Drag out of window
* f
* format
* Ability to drop local files in to TagStudio to add to library
* Added renaming option to drop import
* Improved readability and switched to pathLib
* format
* Apply suggestions from code review
Co-authored-by: yed podtrzitko <yedpodtrzitko@users.noreply.github.com>
* Revert Change
* Update tagstudio/src/qt/modals/drop_import.py
Co-authored-by: yed podtrzitko <yedpodtrzitko@users.noreply.github.com>
* Added support for folders
* formatting
* Progress bars added
* Added Ability to Drag out of window
* f
* format
* format
* formatting and refactor
* format again
* formatting for mypy
* convert lambda to func for clarity
* mypy fixes
* fixed dragout only worked on selected
* Refactor typo, Add license
* Reformat QMessageBox
* Disable drops when no library is open
Co-authored-by: Sean Krueger <skrueger2270@gmail.com>
* Rebased onto SQL migration
* Updated logic to based on selected grid_idx instead of selected ids
* Add newly dragged-in files to SQL database
* Fix buttons being inconsistant across platforms
* Fix ruff formatting
* Rename "override" button to "overwrite"
---------
Co-authored-by: yed podtrzitko <yedpodtrzitko@users.noreply.github.com>
Co-authored-by: Travis Abendshien <lvnvtravis@gmail.com>
Co-authored-by: Sean Krueger <skrueger2270@gmail.com>
* refactor: Update dialog and simplify drop import logic
* Handle Qt events for main window in ts_qt.py
* Replace magic values with enums
* Match import duplicate file dialog to delete missing entry dialog
* Remove excessive progess widgets
* Add docstrings and logging
* refactor: add function for common ProgressWidget use
Extracts the create_progress_bar function from drop_import to the
ProgressWidget class. Instead of creating a ProgressWidget,
FunctionIterator, and CustomRunnable every time a thread-safe progress
widget is needed, the from_iterable function in ProgressWidget now
handles all of that.
---------
Co-authored-by: Creepler13 <denis.schlichting03@gmail.com>
Co-authored-by: yed podtrzitko <yedpodtrzitko@users.noreply.github.com>
Co-authored-by: Travis Abendshien <lvnvtravis@gmail.com>
* add files
* fix: term was parsing ANDList instead of ORList
* make mypy happy
* ruff format
* add missing todo
* add more constraint types
* add parent property to AST
* add BaseVisitor class
* make mypy happy
* add __init__.py
* Revert "make mypy happy"
This reverts commit 926d0dd2e79d06203e84e2f83c06c7fe5b33de23.
* refactoring and fixes
* rudimentary search field integration
* fix: check for None properly
* fix: Entries without Tags are now searchable
* make mypy happy
* Revert "fix: Entries without Tags are now searchable"
This reverts commit 19b40af7480b0c068b81b642b51536a9ec96d030.
* fix: changed joins to outerjoins and added missing outerjoin
* use query lang instead of tag_id FIlterState
* add todos
* fix: remove uncecessary line that broke search when searching for exact name
* fix tag search
* refactoring
* fix: path now uses GLOB operator for proper GLOBs
* refactoring: remove FilterState.id and implement Library.get_entry_full as replacement
* fix: use default value notation instead of if None statement in __post_init__
* remove obsolete Search Mode UI and related code
* ruff fixes
* remove obsolete tests
* fix: item_thumb didn't query entries correctly
* fix: search_library now correctly returns the number of *unique* entries
* make mypy happy
* implement NOT
* remove obsolete filename search
* remove summary as it is not applicable anymore
* finish refactoring of FilterState
* implement special:untagged
* fix: make mypy happy
* Revert changes to search_tags in favor of changes from #604
* fix: also port test changes
* fix: remove unneccessary import
* fix: remove unused dataclass
* fix: AND now works correctly with tags
* simplify structure of parsed AST
* add performance logging
* perf: Improve performance of search by reducing number of required joins from 4 to 1
* perf: double NOT is now optimized out of the AST
* fix: bug where pages would show less than the configured number of entries
* Revert "add performance logging"
This reverts commit c3c7d7546d.
* fix: tag_id search was broken
* somewhat adapt the existing autocompletion to this PR
* perf: Use Relational Division Queries to improve Query Execution Time
* fix: raise Exception so as to not fail silently
* fix: Parser bug broke parentheses
* little bit of clean up
* remove unnecessary comment
* add library for testing search
* feat: add basic tests
* fix: and queries containing just one tag were broken
* chore: remove debug code
* feat: more tests
* refactor: more consistent name for variable
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
* fix: ruff check complaint over double import
---------
Co-authored-by: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
* port fixes from json branch
* fix: correctly pass grid_idx in autofill macro
* fix(BUILD_URL macro): only add url if url was successfully built
* fix(AUTOFILL macro): error when trying to add tag with name that already exists
* fix: test was wrongly renaming sidecar file
* Added a check to see if the library is loaded in filter_items
* Returned check to see if there is an engine
---------
Co-authored-by: gred <gred25@yandex.ru>