* feat(ui): add PagedPanel widget
* feat(ui): add MigrationModal widget
* feat: add basic json to sql conversion
* fix: chose `poolclass` based on file or memory db
* feat: migrate tag colors from json to sql
* feat: migrate entry fields from json to sql
- fix: tag name column no longer has unique constraint
- fix: tags are referenced by id in db queries
- fix: tag_search_panel no longer queries db on initialization; does not regress to empty search window when shown
- fix: tag name search no longer uses library grid FilterState object
- fix: tag name search now respects tag limit
* set default `is_new` case
* fix: limit correct tag query
* feat: migrate tag aliases and subtags from json to sql
* add migration timer
* fix(tests): fix broken tests
* rename methods, add docstrings
* revert tag id search, split tag name search
* fix: use correct type in sidecar macro
* tests: add json migration tests
* fix: drop leading dot from json extensions
* add special characters to json db test
* tests: add file path and entry field parity checks
* fix(ui): tag manager no longer starts empty
* fix: read old windows paths as posix
Addresses #298
* tests: add posix + windows paths to json library
* tests: add subtag, alias, and shorthand parity tests
* tests: ensure no none values in parity checks
* tests: add tag color test, use tag id in tag tests
* tests: fix and optimize tests
* tests: add discrepancy tracker
* refactor: reduce duplicate UI code
* fix: load non-sequential entry ids
* fix(ui): sort tags in the preview panel
* tests(fix): prioritize `None` check over equality
* fix(tests): fix multi "same tag field type" tests
* ui: increase height of migration modal
* feat: add progress bar to migration ui
* fix(ui): sql values update earlier
* refactor: use `get_color_from_str` in test
* refactor: migrate tags before aliases and subtags
* remove unused assertion
* refactor: use `json_migration_req` flag
* feat: Audio Playback
Add the ability to play audio files.
Add a slider to seek through an audio file.
Add play/pause and mute/unmute buttons for audio files.
Note: This is a continuation of a mistakenly closed PR:
Ref: https://github.com/TagStudioDev/TagStudio/pull/529
While redoing the changes, I made a couple of improvements.
When the end of the track is reached, the pause button will
swap to the play button and allow the track to be replayed.
Here is the original feature request:
Ref: https://github.com/TagStudioDev/TagStudio/issues/450
* fix: prevent autoplay on new track when paused
* refactor: Add MediaPlayer base class.
Added a MediaPlayer base class per some suggestions
in the PR comments. Hopefully this reduces duplicate code
between the audio/video player in the future.
* refactor: add controls to base MediaPlayer class
Move media controls from the AudioPlayer widget
to the MediaPlayer base class. This removes the need
for a separate AudioPlayer class, and allows the
video player to reuse the media controls.
* fix: position_label update with slider
Update the position_label when the slider is moving.
* fix: replace platform dependent time formatting
Replace the use of `-` in the time format since this
is not availabile on all platforms.
Update initial `position_label` value to '0:00'.
* fix(ui): display loading icon before rendered thumb
* fix: skip out of range thumbs
* fix: optimize library refreshing
* fix(ui): tag colors show correct names
* fix(ui): ensure inner field containers are deleted
* fix(ui): don't show default preview label text
* fix: catch all missing file thumbs; clean up logs
* fix: mypy error in ts_qt
* fix: mypy error in file_opener due to conflicting types
* fix: remove unnecessary type ignores
* refix type ignore comments
* partially revert "refix type ignore comments" due to being implemented in #608