Important
Users who use the extract builds who are updating from v661 or earlier to v662 or later need to do a clean install! Please check that release for more information.
misc
- fixed an issue where a duplicates page would not re-enable the 'launch the filter' button sometimes when it previously had a count of 0 but got a pair-discovery update in the background that added new pairs (issue #1988)
- the 'help: random 403 errors' entry is now moved down in the 'retry' buttonlist. it will disappear in a few weeks, leaving just the
network->downloadersmenu item, once people hitting this menu have had more chance to see it - fixed an issue where if you selected some files with a subset of trash and then said 'move/copy n files to blah local file domain', it would try and move the trashed files and throw an error. it now filters those files out of the actual operation as you'd expect
- fixed an issue in numerical rating rendering after deleting a numerical rating service (bad error handling on the missing service)
- added a section to the 'contact' help page about how to send broken files to hydev (zipping them up explanation etc..)
- updated the
io.github.hydrusnetwork.hydrus.desktopfile with easy mode help comments on how to edit things and addedStartupWMClassto help taskbar grouping
more audio device stuff
- applying the options dialog now updates all open mpv players to use the specified audio device
- applying the options dialog now updates all open QtMediaPlayers to use the specified audio device
- the
ao/xxxxxx: There are no playback devices availablempv error, which until now has sparked the 'hey things are looking unstable with this file, so unloading it' response, now triggers a new 'hey, set all mpv windows tonullaudio device'. if you get this stuff when you unplug your headphones or something, let me know how it goes - when a new QtMediaPlayer initialises, if the desired audio device is invalid, it falls back to auto. if the auto device is invalid, it resets to null
- new DEBUG checkboxes in
options->media playbackallow you to auto-set mpv or the QtMediaPlayer to 'null' audio device when playing silent media like animated gifs. I know we've had some issues around this over the years with mpv on Linux in particular, so let's see how it goes. this used to be default behaviour for the QtMediaPlayer btw; now it isn't
some boring cleanup
- improved how media objects determine if they are in 'combined local file domains'
- a database routine used in repository sync and 'are we mostly caught up to this repo?' that fetches missing update hashes is now significantly faster
- the QtMediaPlayer no longer leaves the video output disconnected until the first non-audio file is loaded. things are more KISS
- the mpv and QtMediaPlayers recognise better their current audio device and can trigger update calls only on changes
- cleaned up some more QtMediaPlayer output setting generally
- updated some critical error text when trying to boot into a database that was created--and failed to initialise--on the last program boot
- removed some OpenRaster debug statements
removed Qt5 gubbins
- Qt5 (which for us means PySide2 or PyQt5) is well behind us now, so any lingering support is just getting in the way. I removed it all this week. if you are struggling on a hyperpatched Win7 machine, forgive me but it is time to move to Linux
- removed Qt5 initialisation code
- removed debug code that tests for Qt5 support
- removed old thumbnail UI scaling Qt5 hack
- removed Qt5 stylesheet hacks
- removed Qt5 media panel swap hacks
- removed About Window Qt5 stuff
- removed an old Qt5 qtpy init hack
- removed Qt5 patches for mouse and drop events
- removed Qt5 QPDF check
- removed Qt5 QKeySequence conversion
nicer PIL memory cleanup
- PIL images are now closed promptly (freeing up memory better and faster) in more locations: the visual tuning suite; jpeg quality estimation; icc profile inspection; embedded metadata inspection; exif inspection; decompression bomb testing; 'show file metadata' window; import metadata gen; icc profile inspection on load; on forced PIL loads that error out on conversion to numpy; on another standard method to load images; variable frame duration fetching, 'get number of times to play animation'; 'animation has valid duration'; serialisable object import; ugoira rendering; ugoira API rendering; ugoira property fetch; ugoira json property fetch; Ugoira thumb gen; PSD rendering; PSD thumb gen; the native PIL animation renderer; on EXIF rotation conversion; some weird dequantization; resolution fetch; when some thumbnail stuff errors out; some animation property fetch; OpenXML thumbnail gen; Paint.NET thumb gen; Krita thumb gen; Krita rendering; openraster thumb gen; openraster rendering
- I went overkill here and yet there are still some gaps. I got all the file loads though, I think, which is the main stuff here that I thtink was lagging. some of it is also a little ugly. we'll see if this improves some lazy memory cleanup during heavy import. if it helps, I may revisit to clean up
import options overhaul
- wrote migration code that takes the old file/tag/note import options and produces a new populated
ImportOptionsContainer - updated the prefetch import options to track the 'fetch metadata even...' checkboxes, although they will do nothing until migration
- updated 'note import options' to a legacy object that can deliver a trivially shucked 'note import options' that has no 'is default' properly and works in the new system. the edit notes dialog, Client API add-notes call, duplicate content merge options, notes sidecar exporter, and unit tests now use the new object
- wrote an edit panel for the new note import options
- the legacy note import options now holds its shucked version inside it, now only taking responsibility for the 'is default' property otherwise, and all import contexts now consult the new object for work
- juggled around my options stack preference again for simplicity and added 'import folder' and 'client api' options import contexts
- brushed up the UI significantly with new labels, better options summaries, better help, a KISSer workflow that filters out overengineered options by default, a little description label for each import type, and another for each options type
- made the stack description and display clearer and added it to the url class section
- fixed some default options display
- brushed up all the import options summary statements and rearranged them all into single-line
- updated some tag filter label grammar. in some cases it was saying 'tags taken: allowing all tags', which comes from internal permissions language, when just a 'tags taken: all tags' was a better fit