misc
- you can now customise how mouse wheel events propagate out of the hover taglist in the media viewer. this has had a variety of hacky/patchy behaviour before; now you can hit up
options->media viewer hoversand tell it to: never propagate; propagate only if no vertical scrollbar; propagate only if vertical scrollbar hasn't been used recently (the new default behaviour); and propagate immediately after scrollbar hits an end (which is what Qt wants to do). this new 'has been used recently' tech locks you in the outer or outer context and uses a little voodoo, but I quite like it (issue #2024) - thanks to a user, the human-readable embedded text section in the media viewer little button up top will now decode and show an embedded
Character Card V2spec. previously, it would just dump the json string under 'chara', but now it looks a good bit better - the help docs built into the Windows and Linux builds and the one built by the 'build_help.py' script by users running from source are now built in a more strict offline mode that caches the javascript for search tech locally. a user noticed they were previously fetching something from unpkg.com. now they should work properly even on a completely offline machine (iissue #2023)
- a variety of file existence checks and merge functions now check for 'hey this seems to be a remote storage that is disconnected/timing out' error states. previously these guys were just doing 'file does not exist' catching. this means booting the client with your NAS defined in some way but not mounted has nicer error handling. you'll get the repair locations dialog with an updated message rather than 'oh god unhandled boot I/O error aieeeee'
- added 'shutdown report mode' to the
help->debug->report modesmenu. this will report the shutdown calls, shutdown exception catches, and actual mainloop shutdown of all the program's thread workers and other mainloop daemons, with the intention of helping figure out some situations where the client will exit seemingly fine but with a silent low-resource process lingering (we think it is a thread orphaned from the signalling system or otherwise stuck in some deadlock)
cookies.txt and expiration fixes
- when importing cookies.txt, 'session' cookies (i.e. those with no expiry) are now imported correctly. previously, they were being parsed as 'discard immediately' and were not being preserved
- fixed issues with sessions not saving new cookies after import via cookies.txt or clipboard if the user closed the client before that session was actually used in a request
- I hadn't realised, but hydrus was not being very aggressive about clearing 'session' cookies. after thinking about it, this is now intentional policy. I will add some buttons/options around this in future
some repository account refresh cleanup
- the way repositories sync their accounts is a little cleaned up. clicking 'refresh account' is nicer and more reliable now
- the awkward and confusing 'network'/'hydrus account' panels in 'review services' for a repo are now merged into one expand/collapse box called 'hydrus service'. service status/errors usually appear on the top box while most people need the bottom; now you always see both at once. hope this makes some 'oh, everything is paused' situations a bit clearer
- the 'message' status text line in the 'account' panel now hides if there is no server message to show. this guy was just a weird UI gap for pretty much everyone
- 'refresh account' no longer disables itself when a repo is non-functional. this was another 'technically true, but not helpful' UI thing. if you click it, any blocker now gives a richer reason, with several generic 'account cannot sync right now' reasons replaced with the actual part of bandwidth tracking or whatever that is complaining
- if you try to hit 'refresh account', it now recognises if all network traffic is currently paused and breaks out early. previously, it would grey out and wait indefinitely until network traffic was unpaused
- a 'refresh account' call no longer sets a temporary 'unknown/unsynced' account to the service. if the fetch job fails, you keep the old account info
- errors from 'refresh account' are no longer put into toaster popups
- the 'tag filter' button for tag repositories is moved from 'network sync' to the new 'account' panel, beside the permissions button
curl_cffi
- the recent test of
curl_cffi, which adds http 2 and 3 support to hydrus, has proven successful. I am maturing the test and allowing a permanent on setting - you now set the browser name under
options->connection. http version selection is removed from the test--it seems it is doable and simpler to just letcurl_cffifigure that out - the setup_venv.py script now asks if you want
curl_cffi curl_cffiis disabled for hydrus servers for now; we had some chunking issue when downloading from the PTR
domain manager background work
- I moved forward my plans to launch a nicer unified 'here are the current statuses and settings for each network domain' UI and options system. this thing will eventually manage per-domain error timeouts, custom headers, perhaps some proxy settings, curl_cffi, and have some UI for recent errors. we'll migrate the stuff in
options->connectionto a 'global' entry and then allow more specific network context settings for particular domains; the usual deal - I was thinking I'd launch a stub of this system to allow for a per-domain
curl_cffitest, but I didn't want to rush it out, so I just kept to prep work and there's nothing launching here yet. I rounded out the objects I already had and verified the direction I'm going; I feel overall good about it
boring stuff
- refactored some of the 'render human-readable data' method for KISS
- fixed some multi-line indenting in the human-readable rendering routine
- KISSed some inelegant 'clear expired cookies' calls and code
- added
help->debug->scan file storage folders, which is just a test for a folder precache thing that I removed at the last minute last week when it performed terribly on an IRL spinning HDD. I rewrote it and will do some more testing - cleaned up some error handling in 'server busy, try again later' parsing