the duplicate filter page now has a full-on real-deal file search object to narrow down the duplicate filter, potential duplicate count, and 'show some random dupes' search domains! it also has a 'both files match' checkbox that determines if one of both files of the potential pairs should match the search!
the duplicate filter page has multiple layout changes as a result:
the main management area is now split into two pages--'preparation', for doing maintenance and discovery work, and 'filtering', for actioning the potential dupe pairs found
the 'filtering' page will select by default, but if 'preparation' needs work, its name will become 'preparation (needs work)'
the 'filtering' page now has file search ui and the 'both files' checkbox instead of the file domain button. this search data is saved on a per-page basis
the two pages' status texts are now updated on separate calls which have been rewritten to be asynchronous (with 'updating...' text while they work). both now have explicit refresh buttons to force them to update
the additional non-unknown pair counts listed on the filter area, which were irrelevant to filtering and sometimes confusing, are now gone. it only lists the 'unknown' pair number
the duplicate filter page's help button no longer has the awful 'simple help' entry. the full html help will get a pass in the coming weeks to reflect the new search changes
the duplicate file db code received significant refactoring and improvement to support searching the potential dupe space while cross-referencing the new file search context (and still falling back to the fast code when the search is just blank/system:everything)
misc duplicate file db code cleanup and refactoring
while in advanced mode, you can no longer select 'all known files' file domain for an export folder (and now the duplicate filter page) search context
making a file delete action in the duplicate filter (by hitting delete key or the button on the top hover window, which both trigger a dialog asking to delete one or both) now auto-skips the current pair
.
manage tags:
the manage tags has a new 'siblings and parents' button that will auto-replace incorrect siblings and auto-add missing parents! it works on multi-file selections as well! it gives you a summary yes/no dialog before it fires
the manage tags dialog has a little logic cleanup r.e. siblings and parents and their cog auto-apply options. the auto-application now only applies on add/pend actions
the manage tags dialog has a new cog button option to not trigger 'remove' actions from an autocomplete dropdown or suggested tag input action when the tag already exists
.
the rest:
gave video metadata parsing another pass--it now detects 'hidden' incorrect framerates due to advanced 'skip frame' codec settings and is more accurate at determining frame count and duration, including some fixed offset calculations that was sometimes adding or discounting a few frames
manual video frame count, when needed, is now faster and produces better error text
fixed a critical bug in thumbnail regen that was sometimes potentially looping regen on files with unusual rotation exif information
significant improvements to how the client file manager handles thumbnail identifier information, saving a great deal of time for file import and thumbnail regeneration code of videos
fixed an issue where regenerated file metadata was not propagating up to the ui level in real time
cleaned up some thumbnail cache initialisation code
the 'generate video thumbs this % in' option is moved from the 'media' to 'thumbnails' options page
to simplify code, and in prep for the idle-maintenance-rewrite of this system, the database->regen->thumbnails call is now removed
all three fields of text on serialised pngs now wrap, and they pad a little better as well
added a new option to the 'gui pages' options page to force input text box focus on page changes
fixed a small type issue with the server's session cookie code and some new library versions
wrote some OR search help to 'getting started with tags' help page
wrote a new multi-reader, single-writer lock object for the client file manager, along with some unit tests for it.
updated the file and thumbnail access and regen and maintenance code to use the new lock. various access is now faster when available and overall safer. there is still work to do here
adjusted file import to be less aggressive about locking, which should reduce some file/thumbnail access lag during heavy imports
the thumbnail space estimate in the migrate database dialog is now more adaptive to the new more flexible thumbnail size system and specificies better that it is an estimate
the client api's /add_tags/add_tags call now collapses siblings and expands parents on an add/pend call. this can be turned off by setting the new optional parameter 'add_siblings_and_parents' to false. the help is updated regarding this and the client api version is incremented to 6
fixed the client api's /add_tags/add_tags call for the 'hashes' parameter, which was failing to parse, and added an accidentally missing unit test to check this in future
the client local services (the booru and client api) now have two new options under their 'manage services' panel: 'support CORS', which turns on cross-orogin support (which is experimental for now, so defaults to False), and 'logs requests', which controls whether your log will be spammed with request reports (this also defaults to False), which should clear up some 100MB+ log hassle for people using the Hydrus Companion browser add-on
hydrus services now respond correctly (albeit sparsely) to OPTIONS requests, and if CORS is enabled, to CORS OPTIONS requests. there are unit tests for this that seem to work ok, but I think we'll need to verify it irl
finished a first version bitmap manager to handle all wx bitmap creation and destruction, including recycling mid-steps
updated all simple wx bitmap creation and destruction calls across the client to use the new bitmap manager, improving stability and saving some CPU
fixed some incorrect button alignment flags that were causing problems for clients set to assert check these values
added a new yiff.party file url class to the defaults that matches a new file attachment format
updated the 'url' content parser so if a parsed url is in the form 'summary_text url', as some booru source fields sometimes specify, the preceding summary text is removed, cleaning up the resultant url
silenced an old server connection lost error that was needlessly loud
silenced the client network engine from additionally log-printing SizeException errors when a downloading file (usually gif) exceeds file import options rules
improved misc window destruction code
updated supported mime list in 'getting started with files' help and website index
under construction OR predicates now present at the top of the regular tag results list, prepended with 'OR: ', and skipping default selection
this new OR line is enter-able, which will present it as-is, rather than adding new preds
hitting escape on a 'search' tag input box that is empty but has an under construction or predicate will cancel the or pred
hitting escape on a 'search' tag input box otherwise should more reliably kill its focus when the dropdown is a float window
improved OR search efficiency significantly with dynamic OR search triggering based on other search predicates. OR searches including negated '-tag' components should be massively faster when paired with non-OR tag or file search predicates
I believe I fixed a search issue that would sometimes return insufficient results when OR preds are mixed with certain other combinations of tags
improved reliability of some thumbnail refresh calls
cleaned up a bunch of OR handling ui code
.
the rest:
after previous weeks' experiments, wrote new double-layer thumbnail loading system--now too-small thumbs will quckly scale up fuzzily straight to screen, and then in the coming seconds, the nice regenerated full-size thumb will be made and drawn in place as ready. it presents much faster and looks better, but there is some cleanup to do here that I will tackle next week
all local file trashing events now record a context-appropriate deletion statement such as "Deleted from Media Viewer." this value is recovered in 'deleted' import status 'notes'. You will mostly see 'Unknown deletion reason.', for files deleted before this new system, but it will populate with appropriate info over time
fixed a search optimisation that was not cross-referencing with file domain, meaning for instance that bare system:rating calls were returning since-deleted files
upnp management window now uses new listctrl
cleaned up some old custom page-naming code
added a 'data' debug call to clear out all cached thumbnails and force an instant ui thumb reload
fixed the trash bmp misalignment, ha ha
removed e-hentai login script from the defaults, since this testing script is not appropriate for new users
dejanked some media viewer video transitions by cleaning up animation bar rendering and smoothing out video buffer initialisation
cleaned out some surplus subprocess wait calls that were hanging some systems on various 'open externally' calls
fixed multiple syncing problems with 'synchronise' export folders that produce files with subdirectories. subdirectory structures should now be synced correctly and empty folders deleted
export folders that collapse multiple file results to the same duplicated name should, after the next run, do less overwriting to this same name
if an export folder or the regular export dialog makes a file destination path that is above the chosen directory (e.g. if the path starts with ../ or ..\), the export job will error out with an explanation
big manual file exports _should_ be politer to the ui and cause fewer hangs
doing page tab drag and drops may have less post-drop ui jank on linux, continued feedback would be appreciated
moved 'reason' handling for all content updates to its own area, which neatens many content update data handling issues
fixed petitioning a tag via a shortcut, which had bad reason handling
fixed an issue with committing pending ipfs items that was overchecking service permissions
fixed some remaining bad wx code in the unit tests
extended the search predicate object to handle more OR stuff
extended the tag list to handle list objects that have multiple colours
extended the new OR search predicate to report multiple text-snippet-and-colour pairs based on sub-predicates
extended tag search input to handle prototype OR predicate creation--hold shift when you enter the tag, and it'll start an OR chain. shift-enter continues the chain, enter alone completes it
fleshed out the predicate unit tests to cover more of this
wrote unit tests for OR search predicates. it seems good!
improved some search logic to apply system preds better in certain edge cases and spend less CPU on OR-search-only searches
.
thumbnails:
thumbnails will now queue for load in a more intelligent order based on estimated difficulty to regenerate, which will tend to put more thumbs on screen faster
the decision to regenerate a thumbnail from source is now tempered by how different the current thumbnail is from what is desired--the more similar the two sizes, the more (randomly) likely the client will decide to just use the current (resized) this time. this smooths out change-lag while limiting the number of really fuzzy thumbs you get. feedback on how this works IRL would be appreciated--it uses some voodoo distribution polling to figure it out, which I can definitely tweak
improved visual quality of thumbnail scale-up optimisations
fixed an issue where a multipage thumbnail grid would incorrectly recalculate the new virtual height after a thumbnail size change event, leading to a bit of invalid extra scrollspace (with noclip rendering errors) at the bottom
the thumbnail right-click menu's reparse files entry is now extended to a new 'regenerate' submenu with three options: reparse file and regen thumbs (the old action), force regen thumbs, and regen thumbs if wrong size!
the new 'regen if thumbs wrong size' action sends how many thumbs needed resize up to the popup window, as well
moved some old thumbnail regen code responsibility out of the db and into the files manager
cleaned out some old redundant file/thumbnail code
cleaned and refactored a bunch of general image handling and resizing code
.
the rest:
fixed some bad serialisation code that was making file search objects set their 'include current tags' value to false/true on interleaving loads. on this update, all 'include current tags' values are blanket reset to true
fixed an issue that was drawing animation canvases pure white on various media update events
extended manage urls dialog to support multiple files when launched from a selection of thumbnails. there is a warning in this case, noting that only gallery-style urls are appropriate to be added to multiple files
manage urls dialog now supports multiple selections, including shift-select, and accepts delete key presses for easy mass deletion
when you ask the database migration dialog to move some files, it now pops up a confirmation dialog that also asks if you would like to limit the max time for the job as 10, 30, or 60 minutes
improved file permission setting code across the program to be more sensible for non-Windows
if you are a non-Windows user and were hit with directory permission problems last week on the thumbnail update--which resulted in the rxx directories not being deleted--the update this week will attempt to do the delete again, this time correcting the now missing execute permission bit. if it finds outstanding rxx directories to delete, it will give a popup beforehand summarising the situation and giving you a chance to bail out
fixed yet another problem that was stopping client api url requests from finding the correct page by name
when a client api url request includes fixed tags, these tags should now propagate in all scenarios where the single url produces multiple files
set out a plan to achieve some simple conjunctive normal form (e.g. (blue eyes OR green eyes) AND (blonde hair OR red hair)) OR search support
started work on the object extension and search code to support this search in a very basic (and likely inefficient-for-some-scenarios) way--we'll work on this as we discover the most common inefficiencies
.
thumbnails:
the client no longer uses both 'master' and 'resized' thumbnails--it uses a single, smarter thumbnail
only the 'txx' thumbnail directories (formerly referred to as full-size) are now used, and the thumbnails inside will regenerate and scale themselves as needed on demand (and will be careful to not save changes to disk when when their source file is non-local)
the old 'rxx' 'resized' thumbnail directories are no longer referred to anywhere in the code or ui
the old 'rxx' thumbnails directories will be permanently (i.e. no recycle bin) deleted on update. this is a big job, and you will be prompted on update before it happens
if you have migrated your db to put 'resized' thumbs on an SSD but not the formerly 'full-size', you will want to recheck the 'migrate database' dialog once you have booted and set a new thumbnail override to move the txx directories over
due to the smarter thumbnail, 200x200 is no longer the hard limit for hydrus thumbnails! you can now set up to 2048x2048
all file storage location information is now stored directly in the client db (rather than the options object), which should make for more easily export/importable options in future and improve manual fixing as needed
added more thumbnail-resizing related popup spam to file report mode
fixed a windows-only issue that was making the migrate db dialog close after a file move event concluded
updated database migration help for new concepts and ui
cleaned up some misc storage code
.
the rest:
fixed a problem in the client api with fetching file identifiers from file_ids
fleshed out 'help my db is broke.txt' with more specific clone recovery examples
fixed import support for a variety of single-frame music webms
fixed an edge-case preview viewer initialisation bug that was trying to draw the canvas before any media was set
network report mode now states url classes of urls about to be parsed
added optional 'show_destination_page' arg to '/add_urls/add_url', defaulting to False, to control whether an URL-add will select (i.e. jump to) the destination page in the ui. this changes the default behaviour for this command
simplified the routine that finds or creates a watcher or url import page and fixed a bug in the api that was not creating new pages when destination_page_name was specified
some misc cleanup
fixed fetching file_metadata by hashes
fixed the client api help regarding file_metadata response example tags
client api version is now 5
.
the rest:
psd support added! because of this format's potential multi-layer complexity, it will not render natively, but width and height are parsed. it is treated as 'application/x-photoshop'. PSB is also recognised and treated as psd
added a 'open_known_url' shortcut to the 'media' shortcut set that lets you quickly open URLs for files. if there is one recognised known url, it will be launched, and if there are multiple, a list with all known urls will appear to select which one you want
animation scanbars now show an x/y current timestamp! it includes millisecond timings and even works for variable framerate gifs. whether to show a second/shadow caret for timestamp position on variable frame rate is a new discussion to have
fixed an issue where animations would sometimes not resume animation for several seconds after a big scanbar drag
when the thumbnail manager cannot produce a thumbnail due to a storage error (like a missing file), it now only puts up a single, more informative error popup on the first problem. subsequent errors are printed silently to the log. (these errors tend to come in en masse, so this cuts down on spam and error-related ui lag that was making loading a bad session difficult)
improved error reporting when an upload pending command would fail due to service non-functionality--it should now give a popup with error info imediately, rather than obscured through the login system
added temp_dir parameter to the client and server that will override which temporary directory the program will use
cleaned up how no_daemons and no_wal mode are handled internally
no_wal mode now has to be called from the command parameter, the no_wal file hack in the db directory no longer works
missing ffmpeg errors now prompt the user to check if it is installed
searching for numerical ratings should now work for files that were rated when the service had a different number of stars (ratings now searches in 'bands' rather than exact values)
reduced the min height of the new import files frame's list
doubled the decompression bomb test to permit files up to ~179 megapixel, we'll see how it goes
fixed an int/str type mismatch issue with service_names_to_actions_to_tags in /add_tags/add_tags in the client api that meant that argument was not working
fixed up some last /get_files/search_files stuff
added /get_files/file_metadata
added /get_files/file
added /get_files/thumbnail
added help and unit tests to reflect the above
updated client api version to 4
.
the rest:
the list of paths in the manual file import dialog is now sortable. this order will be preserved in regular and 'add tags' ok events for this dialog. it has a new '#' column so you can return to 'parse' order if desired
animation and static image windows in the media viewer canvas are now recycled through media type transitions, making for slightly smoother browsing between mixed media
increased aggression of media viewer image prefetch
added support for 'MM' Tiffs
fixed webm mime parsing for webms with no audio (these were falling back to mkv)
improved the error reports when a serialised png fails to import
the mass-open-urls popup is now pausable as well as cancellable
added support for webp import. it does not yet support animated webps, which, if the local platform supports, will import like apngs used to: just the first frame
added support for tiff import. it works ok for 24bit and 8bit (monochrome) tiffs, but I am not sure how well it will do with 48bit
both webp and tiff should work on the duplicate files system
improved webm detection to include opus audio (previously, these files were falling back to mkv)
fixed an issue where unusual formats with duration but no frames or frames but no duration were being sorted and otherwise presented incorrectly
improved autocomplete job cancelability. this job can now cancel much faster on large jobs, meaning typing searches with large result sets will hit less CPU and return faster on subsequent keystrokes
_all_ of the complicated 'copy url' commands from the thumbnail right-click->known urls menu are now available on the 'open' submenu! if there is more than one url to open (e.g. 'open all of these files blahbooru post urls' on a selection of 50 files), you will be presented with a yes/no dialog to confirm, and it will open one url in your browser every second (with a cancellable popup if num_urls > 5)
by default, system:everything is now hidden if its total files is >10k. you can force it to always show under options->default system predicates
the gallery downloader's list's status column now shows gallery status (deferring to active file status) when appropriate and shows 'done!' when all work is complete
after working back and forth with a user, I _believe_ the linux similar files >0 distance search crash is finally fixed
fixed sorting by media views/viewtiming with collections
a single-selected collection right-click now shows total media views for all files in the collection! you can now see how long you have been viewing an artist!
fixed an issue that lead to export folders not running on always-on clients as often as they should
updated the gelbooru 0.2.5 file page parser to pull rating tag from the correct location (previously, it was pulling from what appears to be a site-wide 'mature' browser hint)
improved memory cleanup stability when animations and other parts of the video rendering pipeline are deleted--this _may_ fix some rare crashes
increased animation rendering aggression overall and particularly in 'future' of frame buffer
if a video renderer that is asked to start some way into the video fails to render anything, it will now fall back to trying to render from the beginning. this is slightly hacky atm and leads to out of phase rendering frames, but it is better than an error
added a '--no_db_temp_files' launch parameter that will force the client or server to return to the recent old behaviour of exclusively using memory for journalling. this is useful if your temp directory is small and/or your available ram is very large. if running in this mode, the client will attempt to check available memory (instead of free space on your temp dir) before performing very large transactions
with the new lighter-weight update transactions, the client now tests for less free space for journalling before running repository update processing
added /get_files/search_files to the client api, which does the first half of file searching. it allows tag search (including -tag negation) and system inbox/archive. since the second half, which will fetch file metadata, is not yet in, this can't do anything interesting yet
updated help and unit tests to support this, client api version is now 3
added /add_tags/add_tags, which does several kinds of tag content updates
added /add_tags/clean_tags, which shows how hydrus will handle potential tags
added /add_urls/associate_url, which allows you to associate urls with files
added 'destination_page_name' to /add_urls/add_url, which will choose which destination watcher/url importer to place the url (or create a new one with that name)
updated client api version to 2
updated client help and unit tests for the above
added a linked contents to the client api help
improved some server error handling, mostly moving 403s to more correct 400s
improved how missing parameter 400 errors are reported from the server vs deeper keyerrors that should be 500
.
the rest:
tag repository update processing now saves progress to disk every million rows or every minute, whichever comes first. this reduces journaling bloat, improves recovery when the process quits unexpectedly, and makes for significantly faster cancel when requested by the user
when processing duplicates and copying/merging/moving ratings, the 'source' file will now also overwrite the 'destination' file's rating if that destination rating is lower (previously, the rating would only go over if the dest had no rating set)
added a new 'thumbnail experiment mode' under help->debug->gui. this will load fullsize thumbs and resize them in memory, please see release post for more details
reduced menubar replacement flicker while, I believe, keeping and strengthening recent menubar indexing stability improvements
the tag autocomplete dropdown will now always embed (instead of floating) in non-Windows
when data seems non-decodable, the fallback encoding format is now that given by chardet, rather than utf-8
improved serialisability of some pending tag data
watchers can now hold and pass on fixed pending tag data
gallery log objects can now hold and pass on fixed pending tag data
file import objects can now hold and action fixed pending tag data
hard drive imports now store their paths-to-tags info in this new format, directly in the file import objects
improved some url-import page drop-target-selection logic
improved error reporting when dropping/api-adding urls
adjusted some url import workflow so big 'already in db' download lists should work a bit faster
attempting to start the program with some external database files but not the main 'client.db/server.db' file will now cause a boot-fail exception with an explanation before any stub db files can be made
tightened up some hydrus service login-capability-testing code that was previously stopping certain error states from recovering promptly, even on a force account refresh, while the service was maxed on bandwidth
fixed a source of linux CRITICAL logspam related to several common dialogs
improved ui stability on boot when file folders are missing (particularly for linux)
improved stability for the various async tasks on the duplicates processing page, particularly for linux. I am not sure I got everything here, but it is definitely better
did some more misc stability improvements, particularly in various boot fail scenarios
completely removed an ancient and janky focus catcher widget from the main gui frame
now various db caching is improved on the python side, removed a sqlite instruction to force temp information to always stay in memory--hot data returns to staying mostly in memory to start and then spools to disk if the transaction gets too large
fixed approx bitrate sorting for malformed video files with explicitly '0' duration
daemon_profile_mode now spams some more info about export folders
fixed an issue that meant client db maintenance was firing its jobs too aggressively, regardless of idle status
fixed up some api permissions object stuff so that /verify_access_key response can always serialise correctly
fixed the 'add_url' api call's instability
the API will now always return JSON on 200. anything else should be presumed to be raw text
'/api_version' now returns JSON, and after talking with users, it will now start incrementing with every api change. it remains 1 just for this week
'/request_access_permissions' now returns JSON
'/add_url' now results JSON on success with more info, 403 on failure
'/get_url_info' now returns the 'normalised_url' in the response JSON
added '/get_url_files', which returns 'url_file_statuses', listing known hashes and file import status for that url
added '/add_files/add_file', which can import a file from a path or bytes
added '/add_tags/get_tag_services', which will return info on the client's tag services
updated client api help to reflect the above changes and fleshed out the intro a bit
fixed the client api permissions enum values in the help, which I somehow transcribed wrong first time
updated the client api tests to check the above
refactored client api tests to be neater and in their own file
.
the rest:
fixed the page of pages close bug
added a downloader for nijie.info to the client defaults (it needs a login)
updated danbooru file page parsers to get 'rating' tag
added gelbooru 0.1.11 parser for future application
fixed an issue that was stopping advanced content updates from fully copying all the desired mappings in the transaction
added a semi-hacky checkbox to 'options->files and trash' that will delay all new file/thumb requests for 15s after the computer resumes from sleep (useful if your files are on a NAS that takes a few seconds to reconnect on wake)
wrote some more graceful fallback decoding handling code that attempts original assumed encoding and 'utf-8' if different and returns the one with the fewest unicode replacement characters
the network engine and the ffmpeg info parsing now use this new 'safe' decoding, so even if a site has borked bytes or the video file has unexpected Shift-JIS title metadata, it'll still go through, albeit with some question marks
moved some more old daemons to the new job scheduler, deleted some old daemon code
improved some daemon job wake and shutdown code
wrote a proper upnp manager object and improved all-around reliability of the auto upnp-service-mapping code
simplified the upnp check code so it now only ever checks/does anything if the respective services actually want upnp mappings. surplus mappings are now wiped immediately on service update
fixed upnp mapping fetching to cope with ipv6 results
improved some memory clearing code to deal with some semi-stubborn objects
improved some 'iterate through this giant list of single numbers from the db without using a lot of memory' code and applied it to the autocomplete cache regeneration routine
improved menubar stability, both in finding menus and swapping them out
if a serialised json object fails to load from the db, this is now caught, the bad object deleted and written to a new file in the db dir, and all logging info captured along with an explanatory popup thrown on screen. so, if a subscription fails to load, it will now be extracted so that a subsequent subscription edit/run will work with the remaining good objects. in the case of backed-up objects (gui sessions atm), reattempting the load should restore the next most recent backup
fixed an issue with login script validation when the given credentials have surplus ( key, value ) pairs to the script's credential definitions
fixed two login invalid cookie error handling bugs
maybe made some dupe filter searching more stable
fixed a py2 datatype issue that made the client unbootable when updating the client from <296
the client now pauses to nag and moan about backups if you try to update more than 15 versions in one go
slightly sped up discord bugfix file drag and drops and expanded file limit up to 25 files/200MB
wrote some ui to handle client api permissions adding and editing
wrote a 'catch a permissions request' mini-dialog for external api permissions adding
wrote api calls:
GET
/api_version
/request_new_permissions
/verify_access_key
/add_urls/get_url_info
POST
/add_urls/add_url
and made a new 'client api' help page to describe in detail what these do
wrote fairly comprehensive unit tests for the new client api
refactored a bunch of 'hydrus network' specific stuff away from general server code that the client api now uses
neatened up 401 vs 403 error handling across the program, and replaced some clientside error handling that was inelegantly borrowing these network errors
deleted very old prototype file/thumbnail client server fetch code, which was no longer in use
.
misc and bug fixes:
added a 'clear ratings' button to the ratings service 'review services' panels. it can clear out ratings for deleted, non-local, or _all_ files
the '3 downloaders are working, is it ok to close the client?' message is now folded into the 'confirm client exit (auto-yes in 15s)' dialog. this merged dialog will still appear for users who have the regular confirm client exit dialog turned off (and still auto-yeses in 15s)
the file url downloader now reports 'downloading file' and 'importing url' text status separately
fixed a typo bug from last week that was breaking asc/desc ratings service sorting
fixed a typo bug from last week that was stopping manage import folders from opening
fixed a typo bug from last week that was breaking setting upnp port on the local booru/client api service management panel
the advanced file reparse-and-re-thumbnailing routine now correctly moves a file to its new extension if its mime changes (e.g. png->apng, or webm/mkv distinctions)
the client file manager now silently detects and auto-repairs instances of missing files where the file actually does exist, just with the wrong extension
fixed a url parsing issue that was normalise-mangling url classes with no path but some query parameters
the network engine now uses utf-8 decoding when no specific encoding is set (previously ISO-8859-1)
fixed an ffmpeg video parsing bug when the video included Shift-JIS metadata. it should work for other unusual encodings as well
maybe cleaned up some menubar management code
the filename tagging dialog now uses a notebook for service choice, like the manage tags dialog, rather than the janky old listbook
fixed a py2-to-3 issue with the admin-only 'is server currently busy' check while a backup is running
improved some dialog button event handling. it may completely fix the 'trytoendmodal' issue some users run into
improved some JSON db serialisation error reporting code, trying to pin down an issue several users have seen with session save
improved thread-safety of serialisable objects as they serialise
after talking with some users, put a bit of time into tag autocomplete wolkflow. both read (search pages) and write (manage tags) autocomplete inputs now operate ~asynchronously~, with the tag fetch working on a separate thread. tag jobs can also now cancel at certain checkpoints in the tag search process if overwritten by a new request. therefore, a variety of tag lookup scenarios _should_ be less painful. this change was executed in a semi-inelegant way, so please report if you encounter bugs from fast typing etc...
I also improved some of the "I hit enter before results were in" code as a result of this. not sure I have it totally nailed, so please give feedback on errors here
wildcard search tags now have an explicit '(wildcard search)' after their label
taglists that have an attached page of media (basically the 'selection tags' box and the 'active search predicates' up top) now have a right-click menu entry to 'select files with (all these tags)' and, if more than one tag is selected, 'select files with (any of these tags)'! This is pretty neat in action, so give it a go!
added a 'sort by approx bitrate' file sorting option that does a basic filesize/duration so you can filter out dense gifs and other short-but-big vids a bit easier. anything without a duration is shoved to the 'smallest' side
some of the file sort options now default to their respective 'biggest' first, see how you like it
folded in updated gelbooru file page parser (fixing the 403 errors that just appeared) and added searches for gelbooru user favourites and pools
if a gallery or watchable url ends up in the file processing queue (and hence fails), it now says the believed-to-be url class name in the error, which should help some false positive url class matching debugging
fixed a focused-file selection issue that meant preview viewtime was frequently counting in file viewing statistics even while a page was not currently in view
fixed the local booru review service panel, which wasn't fully deleting shares when the button was clicked
wrote a service object and basic server skeleton for the client api (basically refactoring the existing local booru code). client api now appears in manage and review services and can boot and present the normal hydrus browser welcome page at '/'
the client api and the local booru now have an 'allow non-local connections' checkbox! defaulting to off and on respectively
updated a wx-thread call function to more safely and universally deal with instances where the responsible window died before the call could be made
removed some old experimental crypto code that isn't used any more--pycryptodome is no longer needed to run the program from source
fixed another couple of unicode encoding problems with the logging and profiling code
the logger now sticks a unicode BOM at the top of new log files to help text readers guess the utf-8 encoding
fixed musical webm import when the video stream has no stated duration but the audio stream does and typically stretches out a 'single frame' video
fixed some 'max size' download file size testing
'waiting on bandwidth' statements on network job controls now show the specific network context (like 'web domain: somesite.com') they are waiting on (you might need to hover over to see the tooltip for this)
the downloader easy-importer lain image is now clickable to launch a file selection dialog
if you are in advanced mode, the manual file export dialog now lets you export symlinks with a new checkbox. this is experimental, so if you are interested, give it a brief test and let me know how it works for you
duplicate content merging now applies to pending as well as current tags
the duplicate filter now counts pending tags when saying which file has more tags
advanced content updates now _copy_ both current and pending tags. the other actions now state what they do more clearly
stopped printing long server error text on 304 and 404, where actual response content is uninteresting
removed wx import that accidentally came into server space due to 2to3 check
improved the path-fixing code that helps environment construction when launching external programs from non-windows frozen builds
fixed a critical pubsub processing bug that kicked in at a certain stage of client shutdown. this should stop the post-shutdown-processing memory explosion certain users were seeing and should stop any ui jank in the last 0.2s of the program for everyone else
improved some other shutdown memory cleanup that was sometimes leading to double-log-printing of exit statements
did a full pass over the daemon scheduling code. it now reacts more responsively to various shut down situations
reduced db disk cache aggression significantly and added more memory maintenance to the cache population process
fixed an issue where subscriptions were not promptly responding to shutdown events
fixed an issue where some delayed network jobs (e.g. while all network traffic is paused) were also not responding to shutdown events
added a 'pubsub report mode' debug mode for simpler pubsub review
the db is now less redundantly spammy on certain behind the scenes update notifications
wrote a first version of the client api manager and permissions handling objects
fixed an issue where the numerical rating control was coercing all clicks to either the minimum or maximum allowable rating (e.g. 3/5 stars wasn't working)
fixed some text file and process i/o, which was handling some unicode decoding/encoding incorrectly. it now mandates utf-8 in all cases
fixed a referral url encoding problem that was stopping pixiv from downloading when the gallery page url had kana/kanji characters (from a search term)
fixed a str vs bytes issue when loading the filename tagging panel
fixed the delete button on the filename tagging quick namespaces panel (the edit and delete buttons are also now 'live' and will disable when nothing is selected)
improved some json dump deserialisation code
fixed a data-sorting issue that would appear with certain parsers in the edit parsers panel
improved video metadata parsing, fixing an issue when the video has a 'title' row containing inconvenient data
fixed some hex character processing for system preds
added an advanced check item to the gallery downloader cog icon menu that will 'bundle' multiple query-pastes to the same single gallery downloader (this is helpful if you are pasting a whole bunch of md5 queries in one go and would rather one downloader work through them sequentially than 50+ separate ones blat your CPU simultaneously)
the different kinds of importer worker threads now have several limits on the max number that can be working at once, to stop accidental ui overload when a hundred or more are in memory and all want to work at once (like after a big paste event or resuming after computer sleep). during periods of heavy import activity, the importers will now naturally space themselves out to smooth out the spike. the limits are hardcoded for now, let me know if it noticeably bottlenecks your situation
made some menubar update code a bit less complicated and reduced how often it'll spam during heavy update
the 'what to do?' buttons that appear in manage tags sometimes on a tag action got a simplification pass and are now on the new dialog system
simplified my new dialog code significantly, clearing out redundant code and classes and pushing all okable/cancellable/vetoable closing checks through one single method
wrote some new help.txt in the db dir about hanging startups
hydrus now runs completely and exclusively on python 3!
for users who are updating, the client has special install instructions for just this week:
if you are a windows or linux user who extracts to install, you will have to delete your old install's files (but keep your db folder!!!) before installing/extracting the new version so there are no 2/3 dll/so conflicts (don't delete your db folder!)
if you use the windows installer to install, this v335 installer will do the clean install for you! there is absolutely no way this could go wrong, so no need to make a backup beforehand :^)
if you are an os x user, I am now only releasing the client in the app. furthermore, the default app db location is now ~/Library/Hydrus (i.e. /Users/[you]/Library/Hydrus). you will have to move your existing db to this location to update, and thereafter you'll just be replacing the app in Applications!
if you try to boot a non-clean mixed 2/3 install, the client will try to recognise that and give an error and dump out
please check the release post for more detailed instructions here
.
semi-important:
the db password feature may be one-time broken for unusual keyboard languages, so failures this version will be forgiven with an appropriate error message explaining the situation. feedback from ???? ????? lads appreciated
I may have fixed the issue some linux/os x users were having launching external programs, including OS ffmpeg (it was a child process environment issue related to pyinstaller)
although I did most of my devving here on py 3.6, the client seems to run ok on 3.5. I doubt 3.4 will do it, if you mean to run from source
I moved from the old pycrypto to the new pycryptodome, so users who run from source will want to get this. I also dropped some libraries
.
misc bug fixes:
fixed the 'load one of the default options' button on manage tag import options when a set of default options is orphaned by a deleted url class
removed some popup flicker related to long error messages
fixed some parsing testing ui error handling
cleared up some bad text ctrl event handling that could sometimes cause a recursive loop
listctrls should now sort text that includes numbers in the human-friendly 2 < 10 fashion
cleaned up some bad external process calling code and improved how child process environment is set up
finally figured out the basic problem of a long-time nested dialog event handling error that could sometimes freeze the ui. I may have fixed it in one case and will keep working on this
.
boring details:
ran 2to3 to auto-convert what could be done
updated environment to python 3
went over a whole ton of unicode encoding/decoding manually to update it to python 3
removed all the old tobytestring/tounicode calls in favour of new python 3 handling
fixed all the file io to do bytes/str as appropriate
corrected a bunch of / vs // int/float stuff
fixed up twisted, which has some str/bytes stuff going on
fixed all the listctrls to deal with column sorting None values amongst ints/strs
fixed png export/import, which had some fun bytes/bytearray/int/str issues
updated the swf header parsing code to py3 (more str/bytes stuff)
misc float/int fixes
fixed up some http.cookies handling, which has changed in py3
improved some ancient loopback connection code that was only really checking to see if ports were in use
cleaned up a bunch of now-invalid parameter tuples that 2to3 helpfully marked
numerous misc other refactoring and so on
updated the new network engine to now decode non-utf-8 responses correctly based on actual response header
removed some old py2 manual http multipart code
removed the old py2 'matroska or webm' parsing py, replacing it with some direct ffmpeg format inspection
replaced all % formatting with the new .format system. I will slowly move to this rather than the current endless concatenation mess
deleted some more misc old code
tightened up some spammy network error reporting
converted all /r/n to /n in my environment project, ha ha ha
the ui seems to better support rarer unicode characters like ??
updated some of the install/update/backup help for all this, and some misc other stuff as well
wrote a system:file viewing stats to comprehensively search the new viewing stats--it _should_ also be synced with the exact current values
but for system:everything, inbox, and archive, which remain where they were, system predicates are now sorted alphabetically!
added a _database->file viewing stats_ menu that lets you suspend file view tracking and clear all records permanently
mr. bones now welcomes all users under the help menu
fixed mr. bones's confusion at those who have yet to board the ride
also mr. bones now makes sure to get the latest file viewing stats
moved confirm trash/archive from _options->gui_ to _options->files and trash_
moved a bunch of 'pages' related stuff from _options->gui_ to the new _options->gui pages_
added an option to options->gui pages to change the number of session rolling backups
subscription popups now provide an x/y query progress string in their popup text
the edit subs/sub panels are now a bit shorter by default and the edit sub has its own frame position data, under 'edit_subscription_dialog', and remembers its last size and position by default
fixed an issue where some dupe watcher urls (like url and url#12345) were not being correctly merged on a mouse drag and drop watcher-import
the client will now print up to 512KB of server error info to the log (previously 4KB)
removed the youtube download prototype--if it returns, we'll do a proper youtube-dl solution. as a result, pafy is no longer needed to run the client
network report mode now shows more network error information
gave the 'getting started with subscriptions' help page a complete pass. it now reflects the new system and has up-to-date advice based on my new experience
wrote a 'logins' section to the bottom of the 'getting started with downloading' help page
added a first version of file viewing statistics! the client db now keeps track of how many times a file is loaded in the preview and full media viewers, and for how long!
you can see the media and preview stats on any single media right-click menu. there are multiple options for how this displays, including hiding it completely, under options->media
viewing stats update as they happen! (although viewtime typically only updates on the end of viewing. I'll likely make this more live, especially if I end up showing this info in the media media viewer)
you can now sort files by total media views/viewtime!
mr. bones's wild ride continues, as well
deleted the old 'file list' way of updating in-ui media objects in favour of a long-planned global media cache. there is now only ever one active copy of any particular media, and all data-level updates need only occur once on that single copy. this saves a bunch of CPU, memory, and overall hassle behind the scenes! various search results/lookups for media already loaded elsewhere now load super fast!
tag siblings refresh is quicker and less memory heavy thanks to this as well
furthermore, the complicated tag changes from tag repository processing and advanced content updates are now reflected immediately in the gui on the job's completion! (as long as you have fewer than 10k files open, ha ha) previously, these required a search refresh to show the results
the file sort choice dropdown on all pages is now sorted alphabetically. it has always been a mess picking what you want from here, so let's see if this helps!
tag and rating sort options are now listed as 'tag:' and 'rating:' respectively
fixed some misc file sort choice code, which was failing to keep certain defaults in certain situations
fixed the tag import options' new 'load from defaults' button to correctly load the tag blacklist
the keyboard icon on the media viewer's top hover window now permits activation of current/default shortcut sets under submenus. it now also omits these entries if no custom shortcut sets exist
cleaned up some of the hover_window-canvas interaction code
fixed some long-time sperg-out buffer-drawing when changing position in a long video
the database->backup actions are now hidden if the current db has non-default file/thumbnail locations. for now, in these cases, only a custom backup is appropriate
fixed some ancient repository admin code that fetches summary account info given an account key
the filename tagging dialog now has a much shorter listctrl by default, so should fit better on smaller monitors
fixed the 'review session cookies' dialog's clear button, which was not deleting sessions after clear. it now also wraps the operation in a yes/no confirmation
the client serialisation system now supports multiple rolling backups!
client sessions (like the 'last session' that typically loads on boot) are now automatically backed up to ten times in rolling backups! you can review and append the backups if you need to recover from _pages->sessions->append session backup_, where they are listed by their timestamp!
when the client closes, an additional 'exit session' is now saved. this differs to 'last session', which is overwritten every x minutes, and is now available (especially with the new backup) for various error recovery situations
gallery import pages now have a little cog icon to control if new import queues will start with files and/or galleries paused. these states persist through a session reload
tag import options that are 'defaultable' now have a button to let you load in a specific default, so you can easily quickly edit in a one-time slight alteration of the default rather than having to create everything from scratch
under options->downloading, you can now set the 'delay' times on gallery/watcher network error, subscription network error, and subscription other error, now defaulting to 90mins, 12hours, and 36 hours respectively
attempting to launch a client with db version > software version now spawns a blocking messagebox on pre-launch informing the user of the risks and advising task manager force-kill of the process
did a little cleanup on the new tag id database cache and merged some other, older semi-laggy tag-fetching code to use the same system
wrote a similar 'file id' database cache for caching file hashes and also merged some old hash-fetching code into it. a variety of file operations are now significantly faster
export folders can now delete files from the client after export. the edit panel will warn you on selecting this and oking the panel. it can't be set if the export type is 'synchronise'.
fixed the edit export folders dialog's old buttons, which were semi-working due to some recent update work
when checking for file integrity, you can now choose to export a .txt file listing all the missing files' known urls, so you can try to recover by feeding them all back into a new url downloader!
the physical file deletion process is now a little simpler and deals with larger jobs in smaller batches, no longer hogging the file read lock the whole time. clearing a large trash should no longer hang other media loads
adding ngugs in the 'export downloaders' dialog now attempts to add the respective gugs as well
fixed an issue where the listctrl would accept certain kinds of duplicate data and hence confuse its indices
fixed all the add buttons on the export downloader panel to exclude all items already in the list when figuring out what additional objects to add
the 'scroll thumbs at this rate per tick' option now _rounds_ the pixel result, rather than always _floor_ing it
wrote a new mass-selection database routine that should reduce memory footprint of autocomplete regeneration. if it works out, I will use it in some other places
improved the errors when a network job that cannot wait fails on an invalid login, and added a separate error when it refers to a hydrus service
fixed a small typo bug when trying to auto-add url classes and parsers
updated an old deprecated checkboxlist call
clarified the integrity section of 'help my db is broke.txt'
added a 'do login now' button to the manage logins dialog. it only enables when the selected logins are active and not invalid and so on, and will ok the dialog and queue up some login attempts, which will make report popups as normal
'review session cookies' panels now support drag and drop cookies.txt import! cookies.txt importing will also handle errors a bit better and report total number of added cookies
the 'review session cookies' panel now defaults to not showing sessions with zero cookies. a new checkbox controls this
login scripts can now be rolled into easy import pngs! should work for export and import just like the other objects (although they won't be auto-added based on domain in export dialog)
brushed up some of the 'change login script' code--particularly, it now puts login scripts that have matching domains first in the selection list, for easier selection
after striking a reckless bargain with a daemon from the database-plane, system:num_tags now runs significantly faster and produces accurate tag counts even when searching over multiple tag services that have duplicate tags. if this works out, the immaterial beast promises greater gains for similar jobs with no possibility of anything going wrong
prototyped a new tag cache in the db that affects (and should speed up) many tag fetching routines. let's see how it goes
added complete, global proxy support for the new network engine! there are new options under options->connection (with some explanation text) to handle it. if pysocks is installed, socks4/5 proxies are also available!
updated the e-hentai.org login script to the new one on the github. your existing mappings for e-hentai.org _should_ all be updated right. exhentai.org is likely too difficult to properly support in the current system
the different panels where you enter system predicate information now all run on the new panel sizing system--if you have had problems with these, please let me know how they size now!
added a '4channel thread' url class to support watchers for the new 4channel sfw domain. it works for now, but let's see if their api changes when the split actually happens
the list right-click menu on gallery import and thread watcher panels now has three options to show combined importers' files--presented, new, and all. it also now shows the files (more smoothly) in the same page, clearing any existing highlight.
added a proper username/password login script for hentai foundry--double-check your hf filters are set how you want in your profile, and your hydrus should inherit the same rules
fixed the gelbooru login script from last week, which typoed safebooru.com instead of .org
fixed the pixiv login 'link' to correctly say nsfw rather than everything, which wasn't going through last week right
improved the pixiv file page api parser to veto on 'could not access nsfw due to not logged in' status, although in further testing, this state seems to be rarer than previously/completely gone
added login scripts from the github for shimmie, sankaku, and e-hentai--thanks to Cuddlebear and any other users who helped put these together
added safebooru.donmai.us to danbooru login
improved the deviant art file page parser to get the 'full' embedded image link at higher preference than the standard embed, and only get the 'download' button if it looks like an image (hence, deviant art should stop getting 140MB brush zips!)
the manage logins panel now says when a login is expected to expire
the manage logins dialog now has a 'scrub invalidity' button to 'try again' a login that broke due to server error or similar
entering blank/invalid credentials is now permitted in the manage logins panel, and if entered on an 'active' domain, it will additionally deactivate it automatically
the manage logins panel is better at figuring out and updating validity after changes
the 'required cookies' in login scripts and steps now use string match names! hence, dynamically named cookies can now be checked! all existing checks are updated to fixed-string string matches
improved some cookie lookup code
improved some login manager script-updating code
deleted all the old legacy login code
misc login ui cleanup and fixes
.
other:
sped up tag searches in certain situations (usually huge inbox) by using a different optimisation
increased the repository mappings processing chunk size from 1k to 50k, which greatly increases processing in certain situations. let's see how it goes for different users--I may revisit the pipeline here to make it more flexible for faster and slower hard drives
many of the 'select from a list of texts' dialogs--such as when you select a gallery to download from--are now on the new panel system. the list will grow and shrink depending on its length and available screen real estate
.
misc:
extended my new dialog panel code so it can ask a question before an OK happens
fixed an issue with scanning through videos that have non-integer frame-counts due to previous misparsing
fixed a issue where file import objects that have been removed from the list but were still lingering on the list ui were not rendering their (invalid) index correctly
when export folders fail to do their work, the error is now presented in a better way and all export folders are paused
fixed an issue where the export files dialog could not boot if the most previous export phrase was invalid
the duplicate filter page now has a button to more easily edit the default merge options
increased the sibling/parent refresh delay for 1s to 8s
hydrus repository sync fails due to network login issues or manual network user cancel will now be caught properly and a reasonable delay added
additional errors on repository sync will cause a reasonable delay on future work but still elevate the error
converted import folder management ui to the new panel system
refactored import folder ui code to ClientGUIImport.py
converted export folder management ui to the new panel system
refactored export folder ui code to the new ClientGUIExport.py
refactored manual file export ui code to ClientGUIExport.py
deleted some very old imageboard dumping management code
deleted some very old contact management code
did a little prep work for some 'show background image behind thumbs', including the start of a bitmap manager. I'll give it another go later
the login manager is fully turned on! hentai-foundry click-through and pixiv login now occur fully on the new system
wrote a Deviant Art login script for NSFW downloading--however, it only seems to work on a client that has done some logged-out downloading first (otherwise it thinks you are a robot)
updated the DA file page parser to only NSFW-veto if the user is currently logged out
wrote a danbooru login script for user prefs and special files if you have a gold account
wrote a gelbooru 0.2.x login script for user prefs
pixiv recently(?) allowed non-logged in users to see sfw content, so the login script is updated to reflect this. the login script doesn't detect a failed login any more, so I will revisit this
logging in in the regular order of things now makes a temporary popup message with the overall login status and final result. ~it is cancellable~--and if cancelled, future login attempts will be delayed
logging in in the regular order of things now prints simple started/result lines to the log
deleted old network->login menu and related code such as the custom pixiv login management. gdpr click-through is now under downloaders
subscription login errors will now specify the given login failure reason
subscription login tests will now occur at a better time, guaranteeing the sub will be correctly saved paused if the test fails
login errors will now always specify the domain for which they failed
testing a login script on a fresh edit login script dialog now pre-fills the alphabetically first example domain
the login script test ui now restores its 'run test' button correctly if the test is abandoned early
misc improvements to login error handling and reporting
.
other:
any texts across the program that ellipsize when they are too thin to display what they have will now tooltip their text (this most importantly includes the status on the network job control, which will now display full login problem info)
the copy button on manage tags goes back to copying all if no tags are selected
the remove button on manage tags now removes only selected if some tags are selected. it still removes all if none are selected
the remove button on manage tags is now wrapped in a yes/no dialog (as is hitting the delete key on the list's selection). this can be turned off under the cog button
filename tagging panels now support directory tagging for the last, second last, and third last directories. the related code for handling directory tagging is cleaned up significantly
the export files panel now lets you delete the files from the client after export. this value will be remembered, and if on will prompt a capital letters warning on export, either via the button or the quick-export shortcut
in manage tag parents, where there are multiple parents in a pending action (either by importing via clipboard/file or by putting multiple parents in right-hand box), the action will now be treated as one transaction with one 'enter a reason' confirmation!
in manage tag siblings, when multiple 'better' values are pended in one action via a clipboard/file import, they will now be treated as one transaction with one 'enter a reason' confirmation!
.
misc:
added a new url class that api-links .gifv-style imgur links so they are downloadable like regular imgur single media pages
the pixiv manga page url class now redirects to the new api, so mode=manga pages should now be drag-and-drop importable and generally downloadable if you have any still hanging around in any queues
clients now come with an additional danbooru parser that fetches the webm version of ugoiras
after discovering a pdf that ate indefinite 100% CPU while trying to parse, I have decided to stop pulling num_words for pdfs. it was always a super inaccurate number, so let's wait for a better solution at a later date. hydrus hence no longer requires pypdf2
fixed an issue with monthly bandwidth estimates rolling over to the new year incorrectly
in an attempt to chase down a duplicate files content move/copy bug, the duplicate action content updates got a bit of cleanup work. if you have noticed duplicate actions not copying tags/urls, please let me know the exact process in the ui, including services and merge options, you went through
tag lists should now update their sibling appearance correctly after a tag siblings dialog ok--previously, they were checking for new sibs too early
tag siblings and parents should now refresh their data more efficiently when spammed with new data notifications (this usually happens janitor-side, which approving dozens at once)
copy queries/watcher urls on the download pages' lists' right-click menus no longer double-spaces the copied texts (it just does single spaces)
fixed an issue where certain initialised watchers were erroring out when asked to provide next-check time estimates--in all cases, null timestamps will be dealt with better here
misc tag parents/siblings ui code cleanup
wrote some code to catch and report on an unusual dialog dismissal error
the login system now works and is turned on, although the legacy hardcoded pixiv and hf logins remain in place. it will not do anything very new this week--it is strictly only for advanced users to experiment with for now
cleaned up some messy network code
all subscription and hydrus jobs will no longer wait indefinitely on an invalid login--they will cancel immediately
network jobs will report a bit more info when they are cancelled
subscriptions will now attempt to test login validity before and during file downloads and syncing. if they fail, the sub will pause and stop work and a message will be presented to the user
made a 'thumbnails' options page and moved some things to it
added thumbnail border and margin to that thumbnails page! you can even set 0 border and/or margin and it works
fixed up a heap of bad thumbnail drawing code that didn't work with thicker borders
the tag sibling and parent dialogs now have suggestion buttons in their 'give a reason' dialogs! if your petitions are simple and fit into one of these categories (which is most of them), please use these buttons as they will let janitors (e.g. hydrus dev for the PTR) process them in batches, in fewer clicks
manage tags dialog's checkboxes and advanced buttons are now wrapped into a cog icon! remove/copy/paste buttons are compacted and put on the same row!
manage tags dialog's copy button now only copies selected, not all tags
manage tags dialog now uses the new sizer. some components are smaller by default but will eat up spare pixels better
misc manage tags code cleanup
added 'paged file import queues' to the network->pause menu. this will pause any, hdd, url, simple, gallery, or watcher page from processing its file import queue. it is a bit hacky and will take up to 30s to unpause unless you joggle the respective downloader to wake it up--see how it goes!
added a similar 'gallery searching' to that menu, to pause any url, simple, or gallery page from actioning its gallery-side queue
and 'watcher checking' for watchers
fixed a stupid bug that was causing false-positive and _mostly_ harmless errors for certain pixiv and artstation multi-page downloads
fixed an issue where multi-page data was being mis-metadata'd (mostly, this meant thread watchers were giving the last filename tag to all files, and I think similarly getting the latest source time) due to a mistake in some recent de-duping code
fixed the new pixiv file page api parser to parse source time, which I must have accidentally deleted previously
fixed a no-expand bug in my new sizer when in horizontal orientation
fixed a small bug when making an easy-import downloader png and cancelling the add url class dialog
fleshed out how login credentials and other linked data is stored in the login manager, including script link recovery when the script changes but name does not
improved some initialisation login validation error handling
improved login failure validation error handling
wrote a dialog panel for managing login credentials and reviewing validity and so on
a heap of related session and login tie-in/fix-up work
the login manager will now save changes to the db. it will get the HF and pixiv scripts on db creation/update, and if you have a pixiv login, the login system will pre-fill that info and 'activate' the script (although the login manager will not fire any login scripts yet--if so configured, it'll just delay on a polite error message)
.
other stuff:
with the subscriptions' new more liberal syncing logic, the periodic file limit will now only pop up if the sub does not see any already-seen files
to give more buffer for the new syncing logic, file import caches will now store 250 entries minimum on compaction (was 100 previously)
subscription merging now lets you choose the primary subscription into which the other subs will be merged
cancelling a subscription merge action mid-merge is now safely nullipotent
post urls that use subsidiary page parsers (such as the new pixiv manga parser) will now correctly insert (rather than append) their manga urls into the file import cache
removed a couple of places where urls could accidentally be duplicated in a file import cache
cleaned up some areas where successful file import objects were presumed to have file hashes when they might not (this was causing errors when importing urls that split into multiple url children, like pixiv manga, while also having 'additional tags' set)
updated tag censorship, parents, and siblings dialogs to the new panel system
tag censorship, parents, and siblings panels now use a notebook instead of the layout-borked listbook
tag parents and siblings panels now use the new small-resolution-friendly sizer, are more tight by default, and expand more neatly
refactored a bunch of tag ui code to clientguitags
the client video renderer will now deal with videos with (invalid) duration of 0 more gracefully
finished the 'getting started with downloading' help page, sans the login stuff
finished the new login objects. they can deal with multi-step single second-level domain login problems, can pass variables from step to step, and use cookies as success verification
wrote an ton of ui for the new login objects, now under network->downloader definitions and network->logins. it is not 'active' yet, but advanced users are invited to check it out. there is no good test ui yet, which I think I'll have to figure out in the coming weeks
wrote a first attempt at HF and pixiv replacement login scripts--please try importing from defaults on the manage login scripts dialog and look through them to see what I am going for. once the system is flipped on and we are happy these work, I'll remove the old hardcoded legacy login stuff
when a network job that needs a login cannot login, it now waits (rather than bombing out completely), presenting the related error, and checks again every 60 seconds
if a network job thinks it can login but fails to generate a login process, the network engine now catches the error safely and recovers. the job is put on hold as above
.
subs:
the subscription 'have we caught up to where we were before' test is now more complicated--rather than just stopping after five 'already seen' urls are found, it now only stops if at least the _last_ five contiguous urls of the page are already seen. this will catch more late-tagged files that get inserted out of order
fixed the 'get quality info' button on edit sub panel to only get the current selection, not all queries wew
subscriptions can now optionally publish/present their files to a specific label! this is a great way to merge multiple subs to the same final landing page
.
layout:
after a long time thinking about it, wrote a new custom boxsizer that handles resizing multiple expanding items of different reasonable min size by expanding them _beyond minimum size_ by their proportion, rather than forcing them all to have total proportional width/height. I expect to polish this and apply it in multiple locations around the program where tall things were being too tall because something else was forcing it to be (the management panel on the left of most pages was terrible at this, causing a giganto taglist just because the upper panel was tall as well).
changed my custom boxsizer (the box with a bold header) to the new custom boxsizer, so it is all over now--please report any bad layouts you see
in an effort to improve layout, the manage tag parents and siblings panels' preview boxes have shorter minimum height--it will get a bigger layout overhaul soon
.
bigger misc:
thanks to work of user kourraxspam on the discord, fixed the pixiv downloader to use a more stable api and added pixiv tag search
watchers and gallery imports now have a list right-click menu entry to show all selected importers' files in a new page! use this to clear out a bunch of finished queues all at once!
the tag right-click menu now offers 'open new search pages for each in selection' if multiple tags are selected--this will open three search pages each with one tag, as opposed to the original entry, which would only open one page with all three
the edit nested gug panel now uses a checklistbox rather than the menu to select gugs to add, which is more reliable and allows for multiple selections
sped up autocomplete tag fetches' tag sibling integration--irl this may be a reduction in total a/c search time of approx 33%
page parsers will now generate next gallery urls absent any file/post urls if the only type of url they can generate is gallery urls (so a meta-gallery-search like board->threads that only generates subsidiary gallery pages will now work, whereas before it never could because it was missing post urls)
the gallery log now provides a shorthand way to restart and resume failed searches from its right-click menu (if the most recent log entry failed)
'try again (and allow search to continue)' reattempt jobs will now generate next page urls even if no new urls are found (which can happen if a search stopped due to the file limit exactly lining up with the number of files found, for instance, so a reattempt finds nothing new)
gallery downloaders will now specify their 'delay work for a bit' error states in the ui. this usually means 'could not connect', which has a 4-hour timer (I'll prob add a scrub delays button here at some point)
the watcher will now show its 'delay work for a bit' error state in more places in the ui
added a 'media' shortcut 'export_files_quick_auto_export', which will open the export files frame and give you a quick yes/no to confirm you want to export as set. if yes, it will export. then it will close the frame
added a 'show a "N" to short import summaries' option to options->downloading, which will extend the typical 'x/y' status string to 'x/y - zN' for z 'new files' (as opposed to already in db)
improved how the video parser estimates frame rate--it _should_ fix some of those low-framerate, low-framecount slideshow-vids where at current they render everything in a rush and then sit on the last frame for ten secs
.
smaller misc:
network report mode now reports url_to_fetch and parser-to-parse-with info
when the server fails to accept a file upload due to a file parsing issue, it now prints the hash of the file in the error
if the client sees a possible file hash in a server error message from a file upload, ~it will try to show that file in a new page~
fixed an issue where wildcard searches were not finding results if the search text included the normally discarded characters [](){}"'
fixed some domain handling for localhost and other undotted network names
content parsers will now only launch with permissable content types, which for the legacy 'lookup scripts' scripts system means only tags and vetoes, and for the new login system means only temp variables and vetoes
as compaction now happens automatically on sync, removed the 'compact' button from edit subs panel
an unusual network error related to hydrus update files sometimes being cut off mid-stream is now glossed over silently, with the download reattempted after a delay
the initial gui session load now occurs after a 0.25s delay--let's see if it cleans up some initial layout issues some users have had
maybe fixed an odd dictionary-initialisation error related to tag siblings/parents dialog boot
ruggedised against an unusual bandwidth load bug
gave some of the index help a pass
did most of a 'getting started with downloaders' page in the help--I'll finish it next week
updated discord share link to https://discord.gg/3H8UTpb , which should not expire
added a 'show a popup while working' checkbox to edit subscription panel--be careful with it, I think maybe only turn it off after you are happy everything is set up right and the sub has run once
advanced mode users will see a new 'get quality info' button on the edit subscription panel. this will some ugly+hacky inbox/archived/deleted info on the selected queries to help you figure out if you are only archiving, say, 2% of one query. this is a quickly made but cpu-expensive way of calculating this info. I can obviously expand it in future, so I would appreciate your thoughts
subscription queries now have an optional display name, which has no bearing on their function but if set will appear instead of query text in various presentation contexts (this is useful, for instance, if the downloader query text deals in something unhelpful like integer artist_id)
subscription queries now each have a simple tag import options! this only allows 'additional tags', in case you want to add some simple per-query tags
selecting 'try again' on file imports that previously failed due to 'deleted' will now pop up a little yes/no asking if you would like to first erase these files' previously deleted file record!
the watcher and gallery import panels now have 'retry failed' buttons and right-click menu entries when appropriate
the watcher and gallery import panels will now do some ui update less frequently when they contain a lot of data
fixed the new human-friendly tag sorting code for ungrouped lexicographic sort orders, where it was accidentally grouping by namespace
downloader easy-import pngs can now hold custom header and bandwidth rules metadata! this info, if explicitly present for the appropriate domain, will be added automatically on the export side as you add gugs. it can also be bundled separately after manually typing a domain to add. on the import side, it is now listed as a new type. longer human-friendly descriptions of all bandwidth and header information being bundled will be displayed during the export and import processes, just as an additional check
for advanced users, added 'do not skip downloading because of known urls/hashes' options to downloader file import options. these checkboxes work like the tag import options ones--ignoring known urls and hashes to force downloads. they are advanced and should not be used unless you have a particular problem to fix
improved how the pre-import url/hash checking code is compared for the tag and file import options, particularly on the hash side
for advanced users, added 'associate additional source urls' to downloader file import options, which governs whether a site's given 'source urls' should be added and trusted for downloaded files. turn this off if the site is giving bad source urls
fixed an unusual problem where gallery searches with search terms that included the search separator (like '6+girls skirt', with a separator of '+') were being overzealously de/encoded (to '6+girls+skirt' rather than '6%2bgirls+skirt')
improved how unicode quoted characters in URLs' query parameters, like %E5%B0%BB%E7%A5%9E%E6%A7%98 are auto-converted to something prettier when the user sees them
the client now tests if 'already in db' results are actually backed by the file structure--now, if a the actual file is missing despite the db record, the import will be force-attempted and the file structure hopefully healed
gallery url jobs will no longer spawn new 'next page' urls if the job yielded 0 _new_ (rather than _total_) file urls (so we should have fixed loops fetching the same x 'already in file import cache' results due to the gallery just passing the same results for n+1 page fetches)
in the edit parsing panels, if the example data currently looks like json, new content parsers will spawn with json formulae, otherwise they will get html formulae
fixed an issue with the default twitter tweet parser pulling the wrong month for source time
added a simple 'media load report mode' to the help debug menu to help figure out some PIL/OpenCV load order stuff
the 'missing locations recovery' dialog that spawns on boot if file locations are missing now uses the new listctrl, so is thankfully sortable! it also works better behind the scenes
this dialog now also has an 'add a possibly correct location' button, which will scan the given directory for the correct prefixes and automatically fill in the list for you
fixed some of the new import folder error reporting
after adding some small new parser tools, wrote a new pixiv downloader that should work with their new dynamic gallery's api. it fetches all an artist's work in one page. some existing pixiv download components will be renamed and detached from your existing subs and downloaders. your existing subs may switch over to the correct pixiv downloader automatically, or you may need to manually set them (you'll get a popup to remind you).
wrote a twitter username lookup downloader. it should skip retweets. it is a bit hacky, so it may collapse if they change something small with their internal javascript api. it fetches 19-20 tweets per 'page', so if the account has 20 rts in a row, it'll likely stop searching there. also, afaik, twitter browsing only works back 3200 tweets or so. I recommend proceeding slowly.
added a simple gelbooru 0.1.11 file page parser to the defaults. it won't link to anything by default, but it is there if you want to put together some booru.org stuff
you can now set your default/favourite download source under options->downloading
.
misc:
the 'do idle work on shutdown' system will now only ask/run once per x time units (including if you say no to the ask dialog). x is one day by default, but can be set in 'maintenance and processing'
added 'max jobs' and 'max jobs per domain' to options->connection. defaults remain 15 and 3
the colour selection buttons across the program now have a right-click menu to import/export #FF0000 hex codes from/to the clipboard
tag namespace colours and namespace rendering options are moved from 'colours' and 'tags' options pages to 'tag summaries', which is renamed to 'tag presentation'
the Lain import dropper now supports pngs with single gugs, url classes, or parsers--not just fully packaged downloaders
fixed an issue where trying to remove a selection of files from the duplicate system (through the advanced duplicates menu) would only apply to the first pair of files
improved some error reporting related to too-long filenames on import
improved error handling for the folder-scanning stage in import folders--now, when it runs into an error, it will preserve its details better, notify the user better, and safely auto-pause the import folder
png export auto-filenames will now be sanitized of \, /, :, *-type OS-path-invalid characters as appropriate as the dialog loads
the 'loading subs' popup message should appear more reliably (after 1s delay) if the first subs are big and loading slow
fixed the 'fullscreen switch' hover window button for the duplicate filter
deleted some old hydrus session management code and db table
some other things that I lost track of. I think it was mostly some little dialog fixes :/
.
advanced downloader stuff:
the test panel on pageparser edit panels now has a 'post pre-parsing conversion' notebook page that shows the given example data after the pre-parsing conversion has occurred, including error information if it failed. it has a summary size/guessed type description and copy and refresh buttons.
the 'raw data' copy/fetch/paste buttons and description are moved down to the raw data page
the pageparser now passes up this post-conversion example data to sub-objects, so they now start with the correctly converted example data
the subsidiarypageparser edit panel now also has a notebook page, also with brief description and copy/refresh buttons, that summarises the raw separated data
the subsidiary page parser now passes up the first post to its sub-objects, so they now start with a single post's example data
content parsers can now sort the strings their formulae get back. you can sort strict lexicographic or the new human-friendly sort that does numbers properly, and of course you can go ascending or descending--if you can get the ids of what you want but they are in the wrong order, you can now easily fix it!
some json dict parsing code now iterates through dict keys lexicographically ascending by default. unfortunately, due to how the python json parser I use works, there isn't a way to process dict items in the original order
the json parsing formula now uses a string match when searching for dictionary keys, so you can now match multiple keys here (as in the pixiv illusts|manga fix). existing dictionary key look-ups will be converted to 'fixed' string matches
the json parsing formula can now get the content type 'dictionary keys', which will fetch all the text keys in the dictionary/Object, if the api designer happens to have put useful data in there, wew
formulae now remove newlines from their parsed texts before they are sent to the StringMatch! so, if you are grabbing some multi-line html and want to test for 'Posted: ' somewhere in that mess, it is now easy.
wrote first version of the new downloader easy-import drop-panel. you drop downloader-encoded pngs on it, and it maybe asks you a question and jumbles its way through auto-importing all the required data to the client
extended this file import to do some cleverer 'example url merging' when parsers are otherwise dupes, rather than spamming similar dupes on import
wrote first version of the new downloader export panel. it takes gugs, url classes and parsers, and predicts sensible sub-objects to include to make functional downloaders, and bundles it into one png
fleshed out help for the new easy import/export system
the client now slows down gallery and watcher processing when the network engine is under heavy load, aiming for no more than 50 jobs in system at once. the solution is a bit hacky for now, but it should alleviate the deadlock issue when there are ~180+ simultaneous gallery/watcher network jobs pending
the multi-watcher panel's list of watchers now supports right-click menu to copy/open urls and pause/play files/checking
the multi-downloader panel's list of downloaders now supports right-click menu to copy query texts and pause/play files/searching
added a 'derpibooru tag search - no filter' GUG that disables the default derpi no-explicit-files rule
added basic gfycat support to default client--drag and drop any typical video page, and it should import ok
fixed the canvas/hover window tag sorting discrepancy--all tags are now sorted with the same code, and the media view sort order should be the same as your default sort order (although in this case incidence has no effect as there are no tag counts)
rewrote the network job control's cog menu to be a bit more dynamic, and added 'override gallery slot requirements for this job' if appropriate
fixed a stupid typo bug in the shutdown maintenance jobs test code that was causing pending repository work to not report right
fixed gallery searches that include unicode characters that end up in the path of the url (rather than the query parameters)
fixed an issue where highlighting a watcher would unpause its checking
generalised the way the new listctrl class can produce right-click menus
fixed some api link calculation that was over-prescribing api link display pairs (this affected the artstation file page url class by default). these pairs are now also sorted in the links dialog
misc png-export improvements to present better with the new easy import/export stuff
the summary texts in the tag filter panel now ellipsize (...), so if the tag filter is complicated, it won't try to boot a superwide edit panel!
the manage subscriptions panel now correctly initially sorts in a case-insensitive way (previously, it was usually sorting A-Za-z, which is different to regular aA-zZ resorting behaviour, so it always sort-flickered after the first edit)
the status bar has a new segment for reporting when the client is 'busy' with different jobs. for most typical usage, it'll just stay blank. let's see how it goes.
fixed mr. bones's wild review when the client currently has no files
punched up the new file report mode to specify full paths where available
gallery logs for the gallery downloader and url downloader now support 'try again' and 'skip' right-click menu for gallery log entries. the try again allows just the one page or also allowing search to continue) so, if a gallery query fails for some reason, you can now try again/continue where it broke. subs/watcher/simple downloader work on more complicated gallery search logic, so their gallery logs will remain read-only for now
all gallery log buttons now support right-click menu to mass-export urls to png or clipboard. non read-only also support import
fixed an issue with gallery searches that rely on both api url conversions and url class next gallery page urls (I think just artstation and tumblr by default) not generating the next page url correctly
improved some misc gallery url processing logic
fixed some issues with gallery url generators with invalid example urls causing problems opening the edit gug and gallery selector panels
fixed an issue where you could only delete a gug if it was in an ngug, ha ha
thanks to a different submission by prkc on the discord, collections now have a _right-click->set collections as groups of alternates_ duplicate action (note the duplicate menu only appears in advanced mode). the related shortcut action duplicate_media_set_alternate_collections is also added
export phrases now support '\' ('/' in linux) in the path export phrase in order to create folders. you should also be able to do \[series]\ to create optional namespace folders. slashes in tags will still be replaced with _
to stop the client sometimes doing laggy vacuum checks every maintenance cycle, vacuums that cannot occur due to limited disk space now will still count as 'done' for the purposes of rescheduling
added 'file report mode' to the help debug menu. This will spam popups as file and thumbnail actions are requested
tightened up some network job status setting to help us debug the 'there are a ton of jobs in network engine, but the three active on this domain seem stalled' issue
wrote a simple 'review threads' panel under help->debug->data actions->review threads. I knocked it together in about ten minutes, and it's likely unstable as hell, but it's pretty neat!
some instances where many file paths are copied quickly (exporting paths to clipboard and drag and drop) no longer do a safety check for file existence, so should be much faster to go. this particularly reduces startup lag for large file drag and drops!
the 'would you like to do maintenance work in this shutdown?' dialog now lists a summary of what it thinks it'll be working on. I _could_ make this more detailed, so let me know how it works for you
tags with numbers should now sort according to the new improved human sorting method--it now shouldn't matter where the numbers are in the tag--as long as the text-and-number-breaks lines up with another tag, they'll be compared each part in turn correctly
fixed some human sorting code for unusual number characters like ?. they will be treated as text, not a number, for now
the basic downloader overhaul is complete! at this point, any user can create and share the objects required for a completely new downloader! it is still rough in some places, so a round of EZ-import is coming to make adding new downloaders a single easy drag and drop action
rounded out the ngug (nested gugs, which contain multiple gugs) code
updated the edit gug panel to deal with gugs and ngugs on different notebook pages
added a bunch of logic to this panel and backend data handling to deal with missing gugs in ngugs
if an ngug cannot find a gug by its internal identifier key, it will now attempt to fallback to its simple name, and will silently fail if no gug can be found. all gug tracking now uses this 'key first, name later' id method, so downloaders and subs should generally survive gug renames and same-name overwrites
the gallery selector now works in gugs. it has two 'pages', depending on which gugs are set to 'display', and will note if the chosen gug is cannot be found in the current definitions. the gugs have slightly more specific names ('gelbooru tag search', 'hentai foundry artist lookup', etc...) than before
the gallery selector also puts 'non-functional' gugs (i.e. those with no parsable gallery url class) to a third page
moved the gallery downloader gallery and file pipeline completely over to the new system
the gallery downloader will now bundle nested gugs (like hentai foundry artist, which searches both works and scraps) into a single downloader
moved the subs gallery and file pipeline comppletely over to the new system
the subs gallery sync now handles nested gugs (like hentai foundry artist, which searches both works and scraps) in an interleaved manner and make behind-the-scenes checking decisions in a clearer and more logical way
subs should now make correct 'hit limit' stop reason reports and not generate new gallery pages when the current page has exactly enough results to hit the current file limit
artstation artist lookup is now available as a default downloader
newgrounds artist lookup makes a triumphant return. it works pretty well, given how flash and NG has changed since
derpibooru tag lookup is now available as a default downloader. due to unusual search syntax on derpibooru, please enter queries exactly as you would on derpi, using ',' or ' AND ' to separate tags (such as 'rainbow dash,straight')
pixiv now has multiple artist lookup options--either images, manga, ugoira (doesn't work yet!), or everything
the old downloader code is deleted!
the old manage booru dialog is deleted!
'custom' boorus (i.e. new ones you created or imported to 'manage boorus'), cannot be completely automatically updated to the new system. I've figured out a way to generate new gugs and gallery&post parsers, but they will miss url classes to get working again. your custom-booru subs will notice this and safely pause until the issue is fixed. if you rely on custom boorus, please check the release post for info on this--you might like to put off updating
many misc changes and fixes to gugs and overall gallery url handling pipeline
some misc refactoring and concept-renaming in gallery pipeline r.e. gugs
when the downloader tries to import what looks like a raw html file, its error notes will specify this and suggest a parser may be needed
moved the 'media viewer url display' options panel from the manage url match links dialog to the new network->downloaders->manage downloader and url display
this new dialog also hosts a list for managing which downloaders to show in the first list of the downloader selector
.
misc:
gave the video rendering pipeline communication logic a quick pass, cleaning up a bunch of bad code and other decisions. the video renderer should be quicker to respond to various changes in scanbar position, and incidences of the frame buffer suddenly sperging out (usually inexplicably falling behind the current frame position or deciding to regen for no apparent reason) should be greatly reduced if not completely eliminated
the test that stops repository processing if there is not enough disk space now uses half the current size of client.mappings.db for its estimate (previously 1GB) and also tests temp folder location free space (just as the vacuum test does) and reports this nature of the error along with pausing the repo, stopping further attempts
might have fixed another out-of-order dialog close/open event combination during manage tags close->advanced content update open
fixed gallery queries that include '/' (or some other unusual characters) that end up in the 'path' of the url (as opposed to the query). this fixes 'male/female' on e621, for instance
'advanced mode' users now have a 'nudge subs awake' menu entry below 'manage subs'. this simply wakes the subs daemon (which usually only checks once every four hours), in case any subs are due
'db report mode' now reports every db job as it comes in (formerly, it only reported some optimisation esoterica). this makes it a more lightweight version of 'db profile mode' for several debugging tasks
fixed a tiny issue in fetching the 'how boned am I?' stats when the user had zero inbox/everything count
fixed a typo in the default new url class object that was breaking the edit ui panel
highlighted the quiet filename tagging options on edit import folder panel
clients should now have objects for all default downloaders. everything should be prepped for the big switchover:
wrote gallery url generators for all the default downloaders and a couple more as well
wrote a gallery parser for deviant art--it also comes with an update to the DA url class because the meta 'next page' link on DA gallery pages is invalid wew!
wrote a gallery parser for hentai foundry, inkbunny, rule34hentai, moebooru (konachan, sakugabooru, yande.re), artstation, newgrounds, and pixiv artist galleries (static html)
added a gallery parser for sankaku
the artstation post url parser no longer fetches cover images
url classes can now support 'default' values for path components and query parameters! so, if your url might be missing a page=1 initialsation value due to user drag-and-drop, you can auto-add it in the normalisation step!
if the entered default does not match the rules of the component or parameter, it will be cleared back to none!
all appropriate default gallery url classes (which is most) now have these default values. all default gallery url classes will be overwritten on db update
three test 'search initialisation' url classes that attempted to fix this problem a different way will be deleted on update, if present
updated some other url classes
when checking source urls during the pre-download import status check, the client will now distrust parsed source urls if the files they seem to refer to also have other urls of the same url class as the file import object being actioned (basically, this is some logic that tries to detect bad source url attribution, where multiple files on a booru (typically including alternate edits) are all source-url'd back to a single original)
gallery page parsing now discounts parsed 'next page' urls that are the same as the page that fetched them (some gallery end-points link themselves as the next page, wew)
json parsing formulae that are set to parse all 'list' items will now also parse all dictionary entries if faced with a dict instead!
added new stop-gap 'stop checking' logic in subscription syncing for certain low-gallery-count edge-cases
fixed an issue where (typically new) subscriptions were bugging out trying to figure a default stop_reason on certain page results
fixed an unusual listctrl delete item index-tracking error that would sometimes cause exceptions on the 'try to link url stuff together' button press and maybe some other places
thanks to a submission from user prkc on the discord, we now have 'import cookies.txt' buttons on the review sessions panels! if you are interested in 'manual' logins through browser-cookie-copying, please give this a go and let me know which kinds of cookies.txt do and do not work, and how your different site cookie-copy-login tests work in hydrus.
the mappings cache tables now have some new indices that speed up certain kinds of tag search significantly. db update will spend a minute or two generating these indices for existing users
advanced mode users will discover a fun new entry on the help menu
the hyperlinks on the media viewer hover window and a couple of other places are now a custom control that uses any custom browser launch path in options->files and trash
fixed an issue where certain canvas edge-case media clearing events could be caught incorrectly by the manage tags dialog and its subsidiary panels
think I fixed an issue where a client left with a dialog open could sometimes run into trouble later trying to show an idle time maintenance modal popup and give a 'C++ assertion IsRunning()' exception and end up locking the client's ui
manage parsers dialog will now autosort after an add event
the gug panels now normalise example urls
improved some misc service error handling
rewrote some url parsing to stop forcing '+'->' ' in our urls' query texts
fixed some bad error handling for matplotlib import
started the new convert-query-text-to-gallery-urls object. these objects, which I was thinking of calling 'Searchers', will be called the more specific and practical 'Gallery URL Generators', or GUGs for short
the first version of GUGs is done, and I've written some test ui for advanced users under network->downloader definitions->manage gugs. this ui doesn't save anything yet, but lets you mess around with different values. if we don't think of anything else needed in the next week, I will fix this code for v320 and start filling in defaults
watchers now have a checking slot, much like the recent change to galleries and subs. it safely throttles dozens of threads so they don't rudely hammer your (or the destination server's) CPU if they all happen to want to go at once (like just after your computer wakes up). the option is similarly under options->downloading
moved the new gallery delay/token management code to the better-fit bandwidth manager (it was in domain manager before)
the gallery delay/token code now works per-domain!
moved the gallery delay/token checking code into the network job proper, simplifying a bunch of import-level code and making the text display now appear in the network job control. token consumption now occurs after bandwidth (it is now the last hoop to jump through, which reduces the chance of a pileup in unusual situations) I expect to soon add some kind of 'force-go' action to the cog menu
the network engine will now not permit more than three jobs active per domain, and the overall limit has been raised from ten to fifteen
the media right-click menu now supports copying: all of a files recognised urls; all of a files urls; all selected files' urls of a specific url class; and all selected files urls
reworked and harmonised a bunch of urlparsing and generation code--all urls should now appear as full unicode across the program, generally without %20-type encoding characters unless explicitly entered by the user. character encoding now all happens on the backend in requests
non-url-class-matched urls now have their query parameters alphabetised as part of the normalisation process
all urls in the db will have their query params alphabetised on update, and any file relationships merged to the new/existing normalised url
the manage urls dialog will now normalise newly added urls (but should also still permit the removal of non-normalised urls)
reworked how gallery hits update file import object caches, particularly for subscriptions
fixed an issue in subscriptions gallery logging where the gallery log would always state it had found the max number of files and typically redundantly generate an 'ignored' stub--it should now say something like 'found 7 files - saw 5 previously seen urls, so assuming we caught up' as originally intended
simplified some gallery->file import object creation
galleries now compact until 100 entries (was 25)
watchers now gallery-compact after a successful check
watchers now show the 'just added'/'already watching' status for 15s, up from 5s
network report mode now reports three time--once each for job addition, start, and successful completion
fixed an issue with the new 'max width' popup sizing calculation that was sometimes not fitting for new height requirements correctly
fixed an issue with the new url class next page generation code
fixed an issue where TIOs with data regarding since-deleted services were failing to initialise at the ui level
extended url classes to support 'next gallery page' generation--a fallback that predicts next gallery page url if the parser cannot provide it (as is often the case with APIs and unreliable next-page-url galleries such as gelbooru)
integrated this new next page generation into new gallery processing pipeline
updated gelbooru, tumblr api and artstation gallery api url classes to support the new next gallery page business
fixed the url class for xbooru, which wasn't recognising gallery urls correctly
wrote new gallery parsers for rule34.paheal and mishimmie (which are both shimmie but have slightly different gallery layout). this should finally solve the 'one paheal gallery url is being parsed into the file list per page' problem
'fixed' the tumblr parser to fetch the 1280px url (tumblr killed the raw url trick this past week)
misc text/status fixes
wrote a gallery parser for tumblr that fetches the actual tumblr post urls and hence uses the new tumblr post parser naturally! (tumblr post urls are now more neatly associated as 'known urls' on files!)
note that as the tumblr downloader now produces different kinds of urls, your tumblr subs will hit your periodic limits the next time they run. they will also re-download any 1280px files that are different to the previously fetched raws due to the above raw change (protip: keep your subscription periodic file limits low)
cut the 'periodic limit' subscription warning popup down to a much simpler statement and moved the accompanying help to a new help button on the edit sub panel
multi-gallery pages now have an 'added' column like multi-watchers
the new 'pause' ? and 'stop' ? characters shown in the multi-downloader pages are now customisable under options->downloading (some users had trouble with the unicode)
the watcher now shows the 'stop character' if checking is 404/DEAD
fixed an issue where the new gallery imports on the same multi-page were all sharing the same identifier for their ephemeral 'downloader instance' bandwidth tracker, which meant they were all sharing the same '100rqs per 5mins' etc... rules
the page and subscription downloader 'gallery page delay' is now program-wide (since both these things can run in mass parallel). let's see how it goes, maybe we'll move it to per-site
subscription queries now auto-compact on sync! this means that surplus old urls will be removed from their caches, keeping the whole object lean and quick to load/save
gallery logs now also compact! they will remove anything older than twice the current death velocity, but always keep the newest 25 regardless of age
.
misc:
the top-right hover window will now always appear--previously, it would only pop up if the client had some ratings services, but this window now handles urls
harmonised 'known urls' view/copy menu to a single code location and added sorted url class labels to entries (which should reduce direct-file-url misclicks)
greatly sped up manage tags dialogs initial calculation of possible actions on a tag alteration event, particularly when the dialog holds 10k+ tags
greatly sped up the second half of this process, when the action choice is applied to the manage tag dialog's current media list
the buttons on the manage tags dialog action popup dialog will now only show a max of 25 rows on their tooltips
some larger->smaller selection events on large pages with many tags should be significantly faster
subscription popups should now 'blank' their network job controls when not working (rather than leaving them on the old job, and without flickery-ly removing the job control completely)
the file cache and gallery log summary controls now have ... ellipsized texts to reduce their max width
fixed an issue where larger 'overriding bandwidth' status wait times would sometimes show instead of legit regular smaller bandwidth wait times
removed a now-superfluous layer of buffering in the thumbnail grid drawing pipeline--it seems to have removed some slight lag/flicker
I may have fixed the issue where a handful of thumbs will sometimes remain undrawn after several fast scrolling events
gave the some-linux-flavours infinitely-expanding popup message problem another pass. there _should_ be an explicit reasonable max width on the thing now
added a 'html5lib not found!' notification to the network->downloaders menu if this library is missing (mostly for users running from source)
help->about now states if lz4 is present
gave 'running from source' help page another pass, including info on running a virtual environment
in file lookup scripts, the full file content now supports string transformations--if this is set to occur, the file will be sent as an addition POST parameter and the content-type set to 'application/x-www-form-urlencoded'. this is a temp fix to see if we can get whatanime.ga working, and may see some more work
if the free space on the db dir partition is < 500MB, the program will not boot
if the free space on the db dir partition is < 1GB, the client will not sync repositories
on boot the client can now attempt to auto-heal a missing local_hashes table. it will give an appropriate error message
the tag filter panel now has 'whitelist' and 'blacklist' pages beside the old 'advanced' sub-panel. these new simple pages are much more human friendly for common workflows and provide easy-select checkboxes for namespace classes (which are compiled from all the namespaces your parsers can currently do)
the tag filter rule entering workflow now stops you from creating overcomplicated rulesets: when adding a blacklist rule, it will now only add an explicit entry if it is not already blocked by a higher rule (otherwise it will just discard from whitelist, if there)--and when adding a whitelist rule, it will now only add an explicit entry if it is already blocked by a higher blacklist rule (otherwise it will just discard from blacklist, if there)
tag filters now provide more human-friendly summary statements
misc improvements to tag filter ui logic
the various help texts surrounding the tag filter panel all got passes
the tag filter panel now uses text-and-paste controls for mass-adding of tags
namespace checkboxes have been completely removed from the tag import options panel and various other related places. any existing TIO with checked namespaces will be automatically updated to 'get tags' with an appropriate filter. this is an important step in the rewrite--everything is now handled in the new tag filter panel
simplified and sped up the actual tag filtering code
.
numerous multi-importer improvements:
the gallery and watcher page lists will now ~dynamically~ resize in height based on number of entries, from roughly four columns to twenty four. this relayout code somehow seems to work on all platforms
sped up the 'results loading' step of gallery/watcher highlighting immensely--on a typical list of a couple hundred files, it should now be about 50ms total (before, depending on presentation rules, it could be 0.8-3s)
added an additional db-skipping optimisation for calculating presentation status
watcher and gallery highlights will now filter out trash and completely deleted files (the ones that appear with a dark default 'hydrus' icon) on reloads
added two checkboxes to options->downloading for 'if nothing is highlighted when I add a new X, highlight that new X' for watchers and galleries
adding or removing a query or watcher from the new multi-lists should now be reflected in the list ui instantly, rather than after a <=1s delay
added url classes and parsers for imgur single and multiple urls--thanks to the community for providing some examples
added url class and parser for derpibooru single file pages--again thanks to the community. derpibooru hence now supports basic drag and drop import
fixed an issue where the watcher was often still checking despite 404 status
watchers and galleries use a little less CPU to update some of their ui
added simple subsidiary page parsing support to file import objects (previously, this only worked in the gallery log)
.
gave the thumbnail scrolling code a pass--it is now a bit cleverer about drawing and uses a larger number of smaller 'tile' bmps rather than pages
added an 'EXPERIMENTAL' option to options->gui to change the number of thumbnails each scroll tick scrolls. it defaults to 1.0, but you _should_ be able to set 0.5, 0.37, whatever. please report any bugs!
added a thumbnail debug mode to help see the new thumbnail layout boundaries
.
misc:
the max subscription file limits are now 10,000 for users in advanced mode
the default subs initial/periodic limit is now 100/100 (bumped up from 100/50)
the file import dialog now has a little cog icon to change whether human sort is applied on path addition events (for e.g. if you want to add in some date order from an explorer window)
humansort now sorts case-insensitive
by default, unmatched urls will no longer display in the top-right of the media viewer. see how you like this and let me know if you would like an option to put them back
the speed text on the right-side of the network job control now dynamically resizes to its min size, which gives the text on the left side (where it is often cut off, saying 'overriding bandwidth ...') more space when available
I think I fixed an issue where the popup frame could spam-resize in odd ways (such as growing a pixel wider every update tick)
watchers will no longer include the '* ' highlight prefix in subject-based sort comparisons
in prep for an eventual major code refactoring, the thumbnails' underlying media object now stores a faster db-based numeric file identifier
'duplicate' calls on the new listctrl will now insert the dupes in the current correct sort location, rather than tacking them on the end
drag and drop imports to the new listctrl will also now insert like this
caught up edit subscriptions panel to the finalised common listctrl panel code, including the import/export/duplicate buttons
the multiple checkboxlist selection dialog now sorts by label
converted all old checkboxlist dialogs to the new panel system
massively sped up certain kinds of parsing that were wasting time hitting a cache test way too often
fixed an old hash filtering system
moved to a simpler and more stable way of calculating certain text extents
fixed an issue where the include directory (which has the original source, which isn't a big deal but is nice to have) wasn't being correctly copied into the linux build
the os x .tar.gz build now has the include directory
if parsers are linked, gallery pagewalk can now work on the new parsing system. gallery import pipeline has been significantly updated to reflect this
gallery import objects are now 'multiple' gallery imports, much like the multi-watcher, with each separate query having its own entry in a list (they also run in parallel!)
the multi-gallery list will show file/gallery pause status in slender columns, and will show a 'stop' character when gallery parsing is done
wrote a 'gallery selector' button and added it to the new multi-gallery page, so you can spawn queries for ~different sites~ on the same import page! it always defaults to 'deviant art' for now, but when the next 'searcher' overhaul step is done, this will be customisable
the new page selector and related 'pages' menu is now simpler--with the new selector, you just select 'gallery'
added 'new_gallery_downloader_page' shortcut action to the 'main gui' set to allow quick opening of this new page type
wrote a 'gallery import panel', which reviews a single gallery import stream, and added it to the multi-gallery page to show the current highlighted query
as all gallery imports now run in parallel and work on the new system, the now almost-useless 'cancel' gallery pagewalk button is now removed
with the wider availability of the new gallery log for file count and error reports, shifted around and smoothed out some gallery status text presentation
improved the auto url_class->parser linking 'try to fill in gaps' logic to work with gallery urls (this was surprisingly complicated)
fixed a misc stupid waste of time in auto url_class->parser linking
many misc updates to gallery pipeline
.
subscriptions:
wrote a new gallery pagewalk pipeline for subscriptions, which still does oldest-to-newest url addition and obeys file limits and so on
numerous subscription pipeline and error handling tweaks and improvements, particularly in regards to the new code
subscriptions now have max initial and periodic file limits of 1000. existing subs with >1000 or infinite will be cut to 1000. there is a help button on the edit sub panel to explain why you should do large syncs with the manual downloader and not subs
the ugly and dangerous-if-you-scroll-in-the-wrong-place gallery selector mismash control in the edit subscription panel is now replaced with the new gallery selector button
fixed an issue where the edit subs panels could sometimes say '48 years ago' (i.e. displaying a literal time delta since 0, 1970) on initial timestamps
juggled some 'periodic limit' reporting logic to skip an unusual false positive that affect hentai foundry subs for now and more in future
.
urls:
the url downloader now accepts gallery urls and will receive drag-and-dropped gallery urls. at the moment, it only parses the one page (i.e. it doesn't start a new 'searching' pagewalk) and sends the parsed links to its file queue
.
watcher:
finished 'watcher panel', which reviews a watcher, and added it to the multi-watcher page to show the current highlighted watcher
the single watcher page is completely removed--it is only the multiple watcher now. all singles will be converted to multiples on update
some single-watcher options (like watchers naming their own page tabs and the [404]-style page name prefixes) are removed
multiple watcher panel now lists file/checking pause status and has separate buttons to control these paused statuses
fixed some misc watcher highlight code--highlighted watchers should correctly publish to the page from the start of session load now
improved some 'repage' logic in how highlighted threads get removed
.
misc:
discovered a scroll-setup parameter that stops janky scroll-to-click-focus behaviour on all the new scrolling panels, thank the LORD
improved some 'can't parse' error handling for post url parsing
reworked how all importers present their network jobs to the ui, including fast response if the switch happens during a job
in prep for searcher switchover where all downloader sources will be harmonised into one system, booru identifiers now present in several ui locations as 'name', not 'booru: name'
updated the danbooru parser to deal with the new 'next page' markup they use
wrote a gelbooru gallery parser that works with 0.2.0 and 0.2.5 gelb sites--an ancillary issue where gelb-related downloaders could sometimes not accurately figure out the magic '42' next-page offset is hence now fixed
wrote an e621 gallery page parser
these sites hence now support single-page gallery drag-and-drop
added url classes for artstation gallery url and its api counterpart, but didn't go further yet--we aren't quite there with api pagewalking just yet
updated deviant art gallery url classes
added an e621 'search initialisation' gallery url class to improve some future drag-and-drop stuff
url normalisation no longer cuts off 'www.'-style prefixes
url comparison is more careful to test 'www.'-style prefixes, so a file import cache should recognise that 'http://www.blah.com/blah' is the same as 'https://blah.com/blah'
did a bunch of refactoring to further split up the bloated ClientImporting.py
fixed some misc downloader layout that may have been hiding some texts previously
some multi-watcher and multi-gallery events like add/pause query should be a bit snappier
in the parsing ui, url and title priorities are now 50 by default
prepped a little subscription unit test code for when searcher object is done
got started on the big gallery update, but decided not to pull the trigger just yet. I hope to do it next week, switching the whole thing over to a two-object multi-watcher kind of deal
updated to wxPython 4.0.3 for all platforms
cleaned up some menubar replacement code, and the update to the new wxPython should also fix a "event for a menu without associated window" bug some gtk2 users were seeing on quick menubar changes
manage default tag import options panel now has copy/paste buttons that work on the listctrl
added some 'paste tag import options' safety code to make sure no one accidentally pastes a subscription or something in there, wew
added default checker options for subscriptions to options->downloading
unified how checker options are edited from their button, much like how file and tag import options work. it also has a summary tooltip on the button
the checker options under options->downloading are now these slimmer buttons
in the manual import dialog (which pops up when you drop a folder/files on the client), the files will now be added in 'human friendly' number sorting, so files of the sort 'Favourites - 10.jpg' will sort [10, 11, ..., 99, 100] rather than the purely lexicographic [10, 100, 11, ..., 99]
gave the migrate database dialog a pass--a bunch of misc presentation changes and a general simplification of workflow, now based more on just increase/decrease location weight
a bunch of texts on page management (left-hand) panels that share horizontal space with buttons should now ellipsize ("downlo...") when they get too long for the width instead of drawing in an ugly way over the buttonspace
moved the manage import folders dialog to the new listctrl and added a 'paused' and better 'check period' column
if a user tries to run a 'paused' import folder specifically from the menu, the import folder will now unpause (I will probably remove this old paused variable in the future--it isn't of much use any more)
tightened up some repository reset code that wasn't deleting all service tables and hence recovering from some service id malformation errors correctly
wrote a 'clear orphan tables' db maintenance routine that kills some spare tables some users who have previously deleted/reset repositories may have floating around
fixed an issue with parsing folders after hitting cancel button on the import files pre-dialog
if watchers encounter non-404 network errors during check, they should now just delay checking for four hours (before, they were also pausing checking completely)
if watchers are in 'delay' mode, they'll also not work on files.
file and gallery downloads that hit a 403 (Forbidden) will now present a simpler error status, like they do for 404
the new post downloader will no longer fail if one of the parsed source urls is not a url. the borked string will also not be associated as a url
regular gallery downloads now override bandwidth for the file download step, which is almost always the second half of a pair of post_url/file downloads, just to keep things in sync in edge cases
cleaned up some timestamp generation and 'overriding in x seconds' strings to be more human friendly
improved some serverside file parse error handling to propagate the actual error description up to the client a bit better
fixed typo causing incorrect num_ignored count in file import status button right-click menu
parseexceptions will now present more data about which page and content parser caused the problem. I am not totally happy about how this solution works and may revisit it
the lz4 import error catching is now more broad to catch some odd problem I discovered in new Linux build environment
the moebooru parser now fetches the original png of an image, if available
added a new tumblr parser that also gets post tags--it _shouldn't_ be the default
the new login pipeline now kicks in for the legacy logins--pixiv and hentai foundry--on a per-url basis, so adding pixiv/hf urls to the url downloader will trigger a login even if needed (previously, this was tied to legacy gallery initialisation, which explains some pixiv 'missing' login stuff some users and I were having trouble with)
if the legacy login system fails in the new pipeline, it now sets a flag and won't try again that client boot
the old 'default tag import options' panel is now completely removed from options->importing. please check 'network->downloaders->manage default tag import options' for the new url-based settings
tag import options can now be set to 'default', meaning 'use whatever the default is at the time of import', which will be an easier way of managing TIOs for many subs that you'd prefer all share the same TIO settings anyway
updated tag import options ui to enable this default setting where appropriate
updated the newer import pipeline to work with 'default'-set tag import options
new downloaders, subscriptions, watchers, and multi-watchers now start with 'default' tag import options
deleted the old default tag import options management code and put some text up on options->importing making notice about the impending shift. a popup message will also say this on update
tag import options buttons now have a right-click menu with copy/paste/default options for quick assignment and duplication!
added 'overwrite tag import options' to manage subscriptions--once you are comfortable with the new 'default' TIO mode, and after some small tests, you might want to switch all your subs over to 'default'
the 'urls' downloader now has a tag import options--it initialises as 'default'
added furry.booru.org to gelbooru 0.2.0 parser
wrote a hentai foundry file page parser
wrote a moebooru file page parser (this works for konachan, yande.re, and sakugabooru)
wrote a shimmie parser (this works for rule34.paheal, rule34hentai, and mishimmie)
wrote a newgrounds parser
integrated the user-created sankaku parser
wrote a tumblr parser that handles photo, photoset, and video posts, auto-converts to 'raw' urls for those post-2012 urls that can handle it, figures out a creator tag (reverting to the reblog root if it is a reblog post!), and cooks you breakfast
(hence all these above sites now support drag and drop!)
rolled out some new tumblr url classes to handle all this.
added sakugabooru url classes
fixed an issue where url classes were not normalising api urls in all cases, meaning some url classes would not api-link correctly in 'manage url class links' panel
fixed an issue with deviant art legacy gallery parser pulling some funky 'creator:' tags
some misc new downloader error handling improvements
the watcher now uses the new gallery object to parse and generate file import objects
the downloaders with gallery logs should now report non-success gallery fetches, along with error tracebacks (this will include some no-worry 404s the legacy downloader sometimes uses to terminate searches)
added image and thumbnail cache timeout time delta buttons to options->speed and memory
added a 'show the D on short file import summaries' checkbox to options->downloading--it defaults to off
the 'I' on short file import summaries is now 'Ig' to clear up 1/I confusion
added 'copy queries' to the edit subscription panel, which lets you copy all the selected queries' search texts to clipboard, newline separated
added a checkbox to options->gui that commands 'last session' only be autosaved during idle time. this is useful if you usually have a huge (200k+ file) session and your client is always on
fixed file import status button right-click, which I messed up somehow last week with the 'retry ignored' add
shook up and collapsed the network menu into neater categories
tightened-up the rarely used pre-parsing conversion panel on the edit page parser panel to just a button with a bit of explaining text
if database errors include the word 'malformed', the client now throws a little extra error text pointing people to the help.txt in the db dir
cleared out some legacy download code
cleared out legacy hard drive import error handling, moving it all to the new file import object
fleshed out the new gallery log and its constituent log entry objects
added gallery logs to gallery downloaders, subscriptions, url downloaders, simple downloaders and watchers
added very simple gallery log reporting to these downloaders
added first, read-only version of gallery log ui to these downloaders
fleshed out some new gallery/file-object pipeline stuff
wrote a simple danbooru gallery page parser and added it on update. it doesn't do anything yet, but if you are into the new parsing system, please check it out as an example
the url downloader now has a full file import status control with status text
fixed a url count issue on completely fresh gallery downloads that was stopping gallery searches one file (like 199 vs 200) before the file limit
the pixiv downloader now fetches 'type=all' gallery pages, which include specifically manga file pages (as opposed to merely multi-file 'illustrations')
added 'retry ignored' to the file import status button's right-click menu
fixed the deviant art url class and parser to use the new file page format. also added an '(old format)' class to match the old way for legacy purposes (this legacy class also uses an api conversion to connect to the new parser--we'll also figure out a way to convert all these over at the db level en masse later!)
updated some similar deviant art gallery stuff as well
tag import options now has a tag filter to go along with the 'get all tags' checkbox! ('get all tags' is now renamed to 'get all' as a result). this filter lets you make more complicated tag filtering decisions like 'get all tags except "species:" tags'.
the new 'only get tags if they already exist' checkbox now also has a filter, if you want to only apply this test to a subset of tags (like the unwashed mess of unnamespaced tags many boorus and sites provide)
generalised a 'tag filter' button class to make it simpler to edit tag filters across the program, and cleaned up some related status code
fixed a problem with deriving tag import options for specific url classes when that url class was part of an api-url-class chain
if the domain manager cannot now find a url match for a pending download, it now assigns the file post default tag import options to that import
added a new 'duplicates' options page that has a hacky way to edit the weighted scores used to determine which of the pair of files to present file in the duplicates filter
unifed how some file import status generation works, adding a new 'simple status' string to briefly summarise progress in multi-watcher and edit subscriptions columns
cleared out some old redundant status caching in the urls downloader
simplified how almost all timestamp strings are generated
simplified how time delta strings are generated
brushed up some simple common ways to present timestamps as 'human pretty' strings
all places where timestamps would be presented as a mix of '5 days ago' and complete datetime strings will now present as '5 days ago' unless you set the new options->gui 'always show iso' checkbox. going back to simple to clear up confusion in workflow and code. I may revisit this, as turning on ISO mode now spams it all over the place
cleaned up the 'looks like the computer just woke from sleep' check and reduced its grace period to fifteen seconds. foreground daemons (like the subscription daemon) and the network engine will now also obey it
added a 'simulate wake from sleep' debug action to better test the sleep-wake detection code
improved my custom statictext class to auto-wrap text without flickering
used this new autowrapping to improve wrapping and layout of popup message texts
replaced all other st wrapping with this new code
wrote a little helper function to better dedupe lists in future
did a bunch of refactoring to neaten some long common func names
converted much of the increasingly complicated tag import options to a new sub-object that simplifies a lot of code and makes things easier to serialise and update in future
tag import options now allows you to set whether tags should be applied to new files/already in inbox/already in archive, much like the file import options' 'presentation' checkboxes
tag import options now allows you to set whether tags should be filtered to only those that already have a non-zero current count on that tag service (i.e. only tags that 'already exist')
tag import options now has two 'fetch if already in db' checkboxes--for url and hash matches separately (the hash stuff is advanced, but this new distinction will be of increasing use in the future)
tag import options now applies sibling and parent collapse/expansion before tag filtering, which will improve filtering accuracy (so if you only want creator tags, and a sibling would convert an unnamespaced tag up to a creator, you will now get it)
the old 'all namespaces' checkbox is now removed from some 'defaults' areas, and any default tag import options that had it checked will instead get 'get all' checked as they update
caught up the ui and importer code to deal with these tag import option changes
improved how some 'should download metadata/file' pre-import checking works
moved all complicated 'let's derive some specific tag import options from these defaults' code to the tag import options object itself
wrote some decent unit tests for tag import options
wrote a parser for deviant art. it has source time now, and falls back to the embedded image if the artist has disabled high-res downloading. if it finds a mature content click-through (due to not being logged in), it will now veto and set 'ignored' status (we will revisit this and get high quality nsfw from DA when the login manager works.)
if a check timings object (like for a subscription or watcher) has a 'static' check interval, it will now apply that period to the 'last next check time', so if you set it to check every seven days, starting on Wednesday night, it will now repeatedly check on Wed night, not creep forward a few minutes/hours every time due to applying time to the 'last check completed time'. if you were hit by this, hit 'check now' to reset your next check time to now
the multiple watcher now sorts by status by default, and blank status now sorts below DEAD and the others, so you should get a neat subject-alphabetical sort grouped by interesting-status-first now right from the start
added 'clear all multiwatcher highlights' to 'pages' menu
fixed a typo bug in the new multiple watcher options-setting buttons
added 'retry ignored' buttons to edit subscription/subscriptions panels, so you can retry pixiv manga pages en masse
added 'always show iso time' checkbox to options->gui, which will stop replacing some recent timestamps with '5 minutes ago'
fixed an index-selection issue with compound formulae in the new parsing system
fixed a file progress count status error in subscriptions that was reducing progress rather than increasing range when the post urls created new urls
improved error handling when a file import object's index can't be figured out in the file import list
to clear up confusion, the crash recovery dialog now puts the name of the default session it would like to try loading on its ok button
the new listctrl class will now always sort strings in a case-insensitive way
wrote a simple 'fetch a url' debug routine for the help->debug menu that will help better diagnose various parse and login issues in future
fixed an issue where the autocomplete dropdown float window could sometimes get stuck in 'show float' mode when it spawned a new window while having focus (usually due to activating/right-clicking a tag in the list and hitting 'show in new page'). any other instances of the dropdown getting stuck on should now also be fixable/fixed with a simple page change
improved how some checkbox menu data is handled
started work on a gallery log, which will record and action gallery urls in the new system much like the file import status area
significant refactoring of file import objects--there are now 'file seeds' and 'gallery seeds'
added an interesting new 'alterate' duplicate example to duplicates help
brushed off and added some more examples to duplicates help, thanks to users for the contributions
wrote a new parser that muddles its way through pixiv's new dynamic javascript layout. it seems to get everything working again. it gets tags in kanji, although the unnamespaced pixiv tags remain low quality, and you may wish to just not parse them at all anyway
fixed some misc parser text handling, unicode conversion etc...
the new pixiv parser has a 'page' tag stub that should inform tag import options in the old downloader
the multiple watcher now remembers the highlighted watcher through a session restart
the multiple watcher now shows the highlighted watcher's url up top
the multiple watcher now has checker, file import, and tag import options, which it will assign to all new watchers it creates
the multiple watcher now has a 'set options to watchers' button that will force-set the current options to all the selected watchers
the multiple watcher now has an 'added' column with watcher creation time listed. storing this creation time is new, so any existing watchers will get a new creation time of their next load time, but it is remembered henceforth. the listctrl here is now pretty crushed for width, so maybe we'll rejigger some stuff here
watchers added to a multiple watcher will now have a status of 'just added' for five seconds
watchers that are added to a multiple watcher that is already watching them will now have the status of 'already watching' for five seconds
the multiple watcher list now has a much taller minimum height--layout here is another work in progress
fixed the inkbunny parser (and a related tweak to the inkbunny url class)--it now uses the new 'multiple-file-per-post' import object generation to actually walk through the pages of the mini-gallery (which for inkbunny have -p2- suffixes on the url) to fetch only the correct files and url-associate them neatly
tag import options now has a 'get all tags' checkbox, which can override the normal namespace checkboxes. it gets all tags, even those with namespaces not listed, which happens for several reasons in the new download system. (eventually, the namespace list may be replaced with a slightly different system)
watcher tag import options no longer list 'filename' under their namespace checkboxes--they just have this 'get all tags', which works for everything (so watching yiff.party pages should now get tags)
simplified and sped up similar files search at the db level
sped up some ratings search code
generalised some common file search optimisations, meaning they now apply in more situations and can take advantage of some other speed-ups:
similar files system predicate is now faster
inclusive ratings searches are now faster
duplicate relationship count searches with non-zero-inclusive count are now faster
removed some clumsy old ratings search optimisation code
exporting serialised objects as pngs is a bit easier--now, it displays current export path better, will remember the last export location used, and for single png exports will pre-fill the filename and 'title' value with a reasonable default
the content parser, page parser, and url class listctrls now accept serialised png files when drag and dropped!
the simple downloader should recover and continue better from malformed urls during a page parse
the url downloader should now recover better from various situations where it cannot not derive some tag import options (including urls with a 'file' url class, such as 4ch/8ch direct file links)
parse test results will now state the priority value of urls
gave the 'updating' section of help a pass and wrote a little more on how to do a big-version-gap update
when a new multi-file import object inserts its child file import objects while being looked at in the ui, the listctrl should now correctly refresh the displayed indices
subscriptions will now wait up to 90s for bandwidth (was 30s before, I think) before quitting, which should avoid a few more early-quit events
cleaned up some server decompression bomb testing
users with admin-level accounts can now upload decompression bombs to file repositories, better options on this will be avaliable in future
the manage urls dialog will now OK on the same 'manage_file_urls' shortcut action that can open it (like manage tags and ratings already do)
fixed the string converter for new file lookup parsing scripts
started work on some in-the-background mass file reparsing, but I want to get some nicer ui going before I pull the trigger on any of it
file reparsing now repopulates the table for md5, sha1, and sha512 hashes if they are missing
improved some ffmpeg error parsing
moved from basic list to a pop-faster collections.deque for importable path parsing and duplicate search branch regen
added a BUGFIX option to options->gui that forces minimum width for popup messages in the continuing attempt to deal with some funny fit/layout calculation in certain Linux WMs
fixed how some 'unrepairable db' error messages are displayed in Linux systems
cleaned up a ton of old tuple-stripping code from the db
updated the inkbunny file page url class to acknowledge that inbunny pages can have multiple files
updated the inkbunny file page parser to handle multiple file urls (although they may be out of order and possibly sometimes include the artist profile image--this was not super easy)
added a parser for twitter tweets (only images supported atm, but it can handle multiple!) (hence tweet drag and drop now works!)
updated the artstation file page url class to redirect to a new api url class
wrote an artstation file page parser that also handles multiple file urls
updated/added pixiv file page, manga page, and mange_big url classes
updated pixiv file page parsers to be ok with manga links
wrote parsers for pixiv manga and manga_big pages to fetch manga files (with page tags)!
file import objects can now create semi-duplicate children for multi-file post urls and insert them just after themselves in the file import queue.
file import objects can now receive and remember referral urls. this referral url is associated with the file if appropriate. the watcher and simple downloader now uses this in addition to the multi-file post system
jumbled around some parameters and merged the two new file import url commands (import 'file' vs import 'post') into one single simple 'work on this url, thanks' call that is now used across the program
the parsing system's 'content parser' no longer fetches file urls and post urls, but 'download urls' and 'source urls'. this helps some pipeline logic and also lets post urls be download urls
when file import objects parse post urls as the urls to download, it now creates 1-n new import objects, just like if multiple file urls.
improved some file import object file association code
the new parsing system will de-dupe parsed urls
refactored the 'seed' code, which handles all basic file import objects, to the new ClientImportSeeds.py
added a new string transformation type, 'integer addition', for shifting page number tags up and down
fixed thumbnail generation for some videos that failed to do the new x%-in generation--it reverts more reliably just to the old frame 0 method
file reparsing popup now has a stop button
fixed an issue where extremely thin or wide (ratio > 200:1) images would not generate a full-size or resized thumbnail
the file reparsing/re-thumbnailing now reports errors better (including with full path) and does not abandon the larger job as it works
misc thumbnail generation code improvements
improved some thumbnail and file regeneration/moving code when the existing file has read-only status
the multiple watcher now has a 'check now' button
added a checkbox to options->gui that will put new notebook page tabs on the left
for all file download network jobs working in the new download system, the file import options for min size, max size, and max size (gifs) are now applied _during the download_! if the server tells the client the exact file size in the response headers, it will test max and min size before the content is actually downloaded--otherwise, it will test the max size as it downloads. if the server clearly says the file is a gif, the max gif size rules will also be tested in the same way
cleaned up some bandwidth announcement code--now, if bandwidth is due in less time than override time, that will now correctly be the status text
the bandwidth status no longer says 'in in' typo
fixed up some tag repair code from last week
the 'print garbage' debug function now dumps a whole bunch more data to the log
the thumbnail cache should now be a bit more stoic about missing repository thumbnails--it should now just present the hydrus default backup without error popup spam
the repository thumbnail sync will now get as thumbs in blocks as high as 10k at a time, rather than the old 100
hydrus network requests no longer generate web domain network contexts (and so won't have a default one-request-per-second bandwidth limit and should stream through thumbnails a bit faster)
hydrus network services are now willing to wait longer for bandwidth, so big thumbnail queues should keep working even if other bottlenecks pause them for a bit
hydrus network services will no longer sometimes have double-sync popups if synced from the advanced 'sync now' button in review services
changed the default global 'stop-accidents' bandwidth rule of 120rqs per minute to 512MB per minute. this only affects new users, but users trying to sync to large file repos might like to make a similar change manually
doing giant full file delete (i.e. purge from trash) jobs should now be a bit gentler on the gui
improved how the client deletes paths, clarifying in the code when and when not to allow recycle (usually disabled for thumb disposal)
switched the hacky text widgets on the popup system to a newer object. seems to still render ok, so lets see if it fixes some unusual layout issues some users have seen
if the temp folder cannot be created on boot, the client will continue anyway
fixed some url-domain text handling in db storage that was also breaking v309 update for some users
fixed some additional domain generation error handling at the db level
the list of url classes in the system:url panel is now the list of all url classes that are considered associable (before, it was file and post urls)
if a url class now api-links to itself or otherwise forms a loop with n other api url classes, the client will now throw an error (rather than lock up in an infinite loop!)
in the parsing ui, tag parse test results are now cleaned before being displayed
fixed misc url matching error reporting bug
when consulting the current file limit, the gallery page downloader will now try, when it has that number, to consult the total number of urls found it the current search (old behaviour is to only consult the number of _new_ urls, which lead to some bad edge-case workflows)
wrote a fix for the tumblr GDPR issue under _network->DEBUG: misc->do tumblr GDPR click-through_. you will also get a popup about this on update
the tumblr downloader will try to detect the GDPR problem and present a similar popup guiding you to the GDPR click-through solution
the client and server now generate video (but not gif yet) thumbnails 35% in by default. the client can now change this percentage value under options->media. this was highly requested and was being put off for a longer rewrite, but I figured out a simple way to hack it in. please let me know if you get failures
on adding a parent, all files with the child tag will now also get all applicable grandparents (with no limit on recursive generations and dealing with accidental loops)
on adding a sibling, all files with any of the siblings will now also get all applicable parents and grandparents for the whole group. a maintenance call to retroactively fill in the sibling/parent gaps that are now filled will also come soon
this logic still does not apply in cross-service situations, which _will_ likely have to wait for a big data/gui overhaul and us figuring out what we actually want here
added a simple pause/play button to the multiple watcher
if the multiple watcher is set to catch watchable url drag and drop events and the current page is a multiple watcher, this current page will catch those new urls (as opposed to the _leftmost_ multiple watcher)
improved some thread unpause logic which was failing to lock pause during 404 status
the multiple watcher should now ignore case when it sorts by subject
added url class and file page parser for inkbunny (so this site is now supported in drag and drop!). it fetches creator tag, some artist-made unnamespaced tags, source time, and md5
added file page parser for gelbooru 0.2.0, which by default works for rule34.xxx, tbib, xbooru but certainly should work for a bunch of others. it fetches source time and source url
html formula parsing rules can now additionally test the tag 'string' using a standard StringMatch object. this greatly helps to parse otherwise indistinguishable 'a' tags that have string 'Original image' and so on
the 'have I seen this url's file before?' pre-import test is now much more strict and will cause fewer accidental false-positive 'already in db'/'deleted' results:
the url pre-import test now does not trust source urls if they do not have a url class
the url pre-import test now no longer trusts urls that are supposed to only be mapped to one file but are actually mapped to multiple
this url pre-import test now treats url-classless original post urls and intended file urls with a special level of trust
urls are now stored in the db in a more powerful and in-future easily searchable way--your db will take a moment to convert to the new format on update
did some prep work for multi-file post urls (like pixiv manga) but did not have time to finish it
the filename tagging options panel (in the 'add tags based on filename' of file import dialog and import folder dialog) now updates its tags/list 0.5s after the last change event, which means typing on a giant list will not cause megalag
improved stability of some client-screen coordinate conversion
misc bmp handling stability improvements
improved some parsing ui stability when example data gets set after the dialog is closed
improved some misc dialog close stability
converted all but one final ui update timer to the new job scheduling system
there are still problems with linux stability--I will continue to work on it
an ugly (but basically harmless) shutdown exception sometimes caused by Animations being a bit slow on deleting their underlying bmps _should_ be fixed
the export files dialog now generates its paths in sort order, meaning (1), (2) de-dupe filename suffixes should now be generated nicely in order
the network domain manager should now always chase API URL links to get the right parser
made some 'the db is broke, let's try to fix it' tag recovery code more forgiving
misc improvements to some media indexing backend, which may fix some unusual session ghost files
fixed the 'sure it is ok to close this importing page' dialog to also veto on a 'cancel' event, rather than just a 'no'
added a guide to database_migration.html on how to move the db from just an HDD to straddle both an SSD and HDD.
cleaned up the help->debug menu a bunch
added run fast/slow memory maintenance calls to help->debug->data actions
the multiple watcher will now discard new urls if it is already watching them
the multiple watcher will list x/y progress as just 'x' if x==y (making it easier to scan the list)
the multiple watcher now lists a couple of 'total' summary lines on its ui--the top lists total number of watchers and queue progress, the bottom lists the usual '23 successful, 3 deleted' line, but summed for all watchers
the multiple watcher will now warn you if you try to remove the highlit, alive or un-caught-up watchers
the multiple watcher will now resort if the thread subject (or rather, any data in the current sort column) changes (which usually happens right after it is added, when you see it change from from 'unknown subject' to 'mlp is kino')
fixed an issue where multiple watchers were not unscheduling down their update job correctly on page close
the booru selector in the edit subscription panel should now be in the tab traversal order for keyboard/automated focusing tasks
the boorus in that selector are now alphabetised
tag import options namespaces are now alphabetised
removed/renamed pretty much all references to 'thread' in the watcher code and ui presentation, since it can now do a bunch of other stuff. it is now just the 'watcher' and the 'multiple watcher'
deleted a bunch of old static thread watcher and page of images code from the old downloading system
added an experimental 'compact' button to advanced mode users' manage subscriptions panels. this removes urls from the selected subscriptions' caches that are no longer useful, keeping their load/save snappy. this is still in testing--be careful with it!
the hydrus splash screen now has a bare frame caption and will appear in the taskbar--which helps with some alt-tab and 'where the hell did it go?' stuff if you need to enter a password
wrote five 'reasonable defaults' buttons for the 'check timings' options panel for quick entry for different thread/subscription scenarios.
added a checkbox to this panel that will swap the reactive options with a simpler single checkbox
also clarified/fleshed out the help button on this panel
fixed an important source of program instability related to page alive/dead status checking that was inadvertantly talking subtly to the main gui frame even on non ui threads
improved how some 'page is closed but not destroyed' test logic for pages inside a closed-but-not-destroyed notebook
fixed another small place where the db was talking to the main gui object about status bar updates in a potentially unstable way
fixed another small place where the foreground daemons were talking to the main gui frame in a trivial but potentially unstable way
played around with some taglist sizer and layout settings
the gallery and simple download pages are now a little shorter--the pause and cancel buttons are now just to the right of the status texts, rather than on their own row beneath the network job controls.
the various bandwidth-overriding network jobs in the download system--like gallery page downloading--now wait 30s before overriding their bandwidth. hence these jobs will now obey the usual bandwidth rules up to a point
the simple downloader also obeys the usual bandwidth rules for 30s but no longer has a static wait, so it can run much faster in certain situations
network jobs that will override bandwidth in the future will now report that countdown in their status texts
fixed a bug in the old booru code that meant some boorus were superfluously requesting the 0th indexed page of a gallery more frequently than needed in order to reestablish a 'page size' cache. this value is now cached globally and will be replaced by a completely different system in the new gallery downloader
added a decent tooltip to the 'gallery fixed delay' widgets in the options->downloading panel
the autocomplete input should clear itself after a 'broadcast' event a bit quicker and stop some dupe inputs in certain edge cases
the tumblr url class now recognises that tumblr posts can have multiple files, which helps some source url lookup logic
added a url class for artstation file pages
the primary file import url (the one listed in the file import list) will now correctly not associate with the resulting file if its url class is so set
all the import objects now have much lower idle CPU time and thread needs and start in slightly offset times, smoothing out the thread count spikes
all the import objects will now respond quickly to changes to the underlying file import cache (like right-click->try again events)
the new job scheduling system now uses two queues--fast and slow, in order to reduce some resort/insert overhead
a couple more improvements to the new job scheduling system to smooth out spikes
if the temporary path override does not exist, the client will now compain with spammy popup messages and fall back to the default
if the temporary path override does not exist or is not writeable-to on options dialog ok, a veto exception will be raised
refactored the watcher and multiple watcher to their own file, ClientImportWatchers
wrote a gelbooru 0.2.5 (which matches gelbooru itself) parser in the new system. it now has some more redundancy and produces md5 hash and source urls
fixed the e621 parser for flash files
manage tags is now a notebook rather than a listbook!
a problem where OS X was displaying the wrong label in the manage tags listbook is now fixed (as it no longer uses the buggy old listbook)
improved autocomplete focus setting in OS X in general
moved all paged importer loops to the new job scheduling system, which will massively cut down on idle time thread count (and some idle CPU usage) on clients with a bunch of import pages open
the main thread pool (which the job scheduling system uses) can now temporarily grow much larger (200 threads) when it gets hammered
recalibrated some thread watcher code to deal with being embedded in a larger object better (and sharing a page with other watcher importers)
finished the first version of a multiple watcher. it is ugly and only for advanced users for now--please check release post for more information
added 'use the multiple watcher on DnD events' to options->downloading, which will send thread url drag and drops straight to a new/existing multiple watcher!
gui session load now 'shows' the first page but loads everything to the right in the background, which saves some CPU and memory for large sessions. this means it now starts focused on the leftmost page rather than the right--see if you like it or not
'clear and load session' now fully deletes old pages and takes a little break between the clear and load step to make sure old large sessions are deleted tidily before loading the new stuff
cleaned up the new leaner popup message display code to react better to (and re-layout) sub-changes in its popups (so now when a subscription popup spawns a new progress gauge, it _should_ be positioned in the right place immediately)
if an import folder/subscription publishes files to a page while the main gui is minimised (and the action would result in a new page creation), the page add will be delayed until the gui is no longer minimised (new page layout in this case was broken due to minimised parent frame)
the edit subscription query panel will now spawn with the query text input focused
added a patch to ensure new booru import pages get query input focus after a second if the focus attempt on init failed (this will be fixed better in the new downloader system)
restored the 'clear deleted files record' button to the 'combined local files' service on _review services_, which was previously hidden during a significant service rewrite.
if critical master tables are missing on boot, the client will warn and provide info and then abandon the boot
if cache similar files tables are missing on boot, the client will warn and provide info and offer to recreate them empty and try to boot the client anyway (this replaces some old repair code that wasn't always kicking in at a good time)
if cache autocomplete tables are missing on boot, the client will warn and provide info and offer to recreate and repopulate them
if mappings tables are missing on boot, the client will warn and provide info and offer to recreate them empty and try to boot the client anyway
the emergency 'repair missing file locations' panel now runs in a more stable way
this emergency dialog will now also recognise 'I fixed all the file paths but cannot do the thumbnail paths' situations and will present the same 'ok, make sure you run regen thumbs after boot' dialog as if all the missing paths were thumbnail related
you can now turn off x/y page name import progress under options->gui
fixed an issue where tags that begin with ':' like ':p' were not getting through the new importing system
fixed an issue where tags that begin with ':' like ':p' could sometimes get prepended extra escape characters and end up looking like ':::p'
fixed sibling tag searching (e.g. if a->b exists and you search for b, results with a but not b should also appear), which the recent tag search optimisation accidentally disabled
whole bunch of refactoring and cleanup of ClientData and ClientGUICommon
cleaned up some spammy splash text status setting that was flooding some debug info with useless garbage
gave getting_started_tags.html's tag repo section and access_keys.html a pass, updating the ancient screenshot and linking advanced users to the latest QuickSync location
some misc help updates
misc autocomplete logic improvements
misc ui display fixes
misc wx destroy code stability improvement
updated ffmpeg for windows builds to the new 4.0 release
the file import status list now has 'open selected import files in a new page', which should show up where it is possible. this is a bit prototype and ugly--it'll show _all_ files, including in-trash and permanently deleted (which will show up with the hydrus thumbnail)
the file import status list now prefixes the already in db/deleted notes with 'url' or the hash type that lead to the recognition
these redundant/deleted notes now also propagate up from 'during import' recognition phase as well
the 'delete seeds of type x' entries on the file import status button's right-click menu are now split into three smaller individual tyes and are more explicit about exactly which status types they will remove
like import folders, subscriptions can now optionally publish their files to pages as well as popup buttons. also, subscriptions can optionally publish their files separately for each query instead of all merged together
sped up multiple tag queries significantly
sped up simple (file size, mime, etc...) system predicate queries that also include a tag/namespace/wildcard predicate significantly
added a pixiv parser that pulls the japanese tags to the defaults--users can switch to this if they prefer under network->manage url class links
fixed the 4chan parser to get part of comment as backup subject/page title
removed the 'newgrounds' entry from the normal gallery page creation ui, as the basic gallery parser no longer works due to a dynamic loading change on their end. I hope to have it back with the new gallery parsing system I will soon be writing
the edit url classes panel now has a little text box to put in example urls and see which class, if any, that they match to
improved layout of edit url class links panel
all url types are now displayable in the media viewer--only post url classes are default on
the new (x/y) import page page_name progress count is now updated on all alterations to this value (previously, this was not updating when a user interacted with the import queue, only when the natural downloader loop cycled)
added 'can produce multiple files' option to post url url classes, which informs client url-checking logic whether the url can be relied upon for 'already in db/deleted' calculations
the pixiv file page url class now has 'can produce multiple files' checked, meaning some bad pixiv url association logic due to other sites referencing it as a source url is now fixed
added a 'twitter tweet' url class, which is also a 'can produce multiple files' post url
added a 'sync known urls?' action choice to the duplicate merge options panel, which governs whether urls should be copied from worse to better or in both directions
gave the edit duplicate merge options panel a layout pass
the edit duplicate merge options panel will now disable pointless/over-complicated choices on non-custom actions, let me know if this is a pain for your workflow
added a 'manual' web browser path override to the 'files and trash' options panel, which fixes the new share->open->in web browser option for Windows and also fixes some #anchor link propagation
consolidated all URL/Path web browser launching code to one location
'open in web browser' is now available for non-advanced_mode users and the 'open' submenu of the share menu is available in the preview window and the media viewer
fixed a bug that was causing import folders to publish incorrect file identifiers, which was poisoning popup buttons and import page destinations
gui sessions that fail to load a page will recover and continue to attempt loading the rest of their pages. some popups detailing the page's serialised data and error will be presented
gui sessions that fail to save a page will recover and continue to attempt saving the rest of their pages. some popups detailsing the page's rough info and error will be presented
the core controller inside all media pages will now present itself in a more beautiful way when asked to dump itself to a log (which should beautify the above save error a bit)
wrote a subsidiary database->check->just repo update files that tests integrity of only repository update files
fixed an issue where default tag import options were sometimes not being saved from the new dialog in the networking menu
wrote a couple of layers of bad tag protection to help the new downloader deal with some occasional bad output from the old downloader
network jobs can now reattempt connection attempts up to three times on POST requests (if you ever got inexplicable immediate 'could not connect' errors on repository uploads, this should now be fixed)
replaced some archaic misc old import code with the new system, cleaning up a bunch of stuff and making space for further refactoring along the way
fixed tags blacklist not being inherited in the old (through options dialog) system
improved some invalid domain error handling
fixed an animation update issue that would pause naturally updating controls on non-main-gui frames when there were no regular media pages open on the main gui
added a BUGFIX option to 'files and trash' option page to override the default temp path for almost all client temp path requests
the minimum value for the 'vacuum period' in maintenance and processing options is now 28 days. the control also has a little explanatory tooltip
the 'try to auto-link url classes and parsers' function now always preferences parsers alphabetically
fixed a typo in the string transformations prettyfication code that incorrectly summarised 'take the last x characters' as the opposite
misc fix to file hash generation and status checking code
the 'export tags to .txt files' checkbox on the export files panel will no longer bother you with a dialog as you uncheck it
wrote some code to make it easier and more fool-proof to update the domain manager with new url classes and parsers on my end
improved some popup message manager ok-to-alter-ui logic when the main ui is minimised and so on
fixed some potential crash conditions (affecting linux mostly, seems like) in the service credential testing and access key fetching ui code
fixed a bug when 'stopping' a gallery parse during a long error pause (like when it holds on '404')
fixed the pixiv url class, which was unintentionally removing a parameter
wrote a pixiv parser in the new system, fixing a whole bunch of tag parsing along the way, and also parses 'source time'! by default, pixiv now fetches the translated/romaji versions of tags
finished a safebooru parser that also handles source time and source urls
finished an e621 parser that also handles source time and source urls and hash!
wrote a danbooru parser that also handles source time and source urls and hash!
as a result, danbooru, safebooru, e621, and pixiv post urls are now drag-and-droppable onto the client!
finished up a full yiff.party watcher from another contribution by @cuddlebear on the discord, including url classes and a full parser, meaning yiff.party artist urls are now droppable onto the client and will spawn thread watchers (I expect to add some kind of subscription support for watchers in the future). inline links are supported, and there is source time and limited filename: and hash parsing
fixed some thread watcher tag association problems in the new system
when pages put an (x) number after their name for number of files, they will now also put an (x/y) import total (if appropriate and not complete) as well. this also sums up through page of pages!
if a call to close a page of pages or the application would present more than one page's 'I am still importing' complaint, all the complaints are now summarised in a single yes/no dialog
url downloader pages now run a 'are you sure you want to close this page' when their import queues are unfinished and unpaused
if the subscriptions for 'manage subscriptions' take more than a second to load, a popup will come up with load progress. the popup is cancellable
added a prototype 'open in web browser' to the thumbnail right-click share menu. it will only appear in windows if you are in advanced mode, as atm it mostly just launches the file in the default program, not browser. I will keep working on this
harmonised more old download code into a single location in the new system
created a neater network job factory system for generalised network requests at the import job level
created a neater presentation context factory system for generalised and reliable set/clear network job ui presentation at the import job level
moved the new downloader simple-file-download-and-import to the new file object and harmonised all downloader code to call this single location where possible
did the same thing with download-post-and-then-fetch-tags-and-file job and added hooks for in the subscription and gallery downloader loops (where a parser match for the url is found)
the simple downloader and urls downloader now use 'downloader instance' network jobs, so they obey a couple more bandwidth rules
harmonised how imported media is then presented to pages as thumbnails through the new main import object
the new post downloader sets up referral urls for the file download (which are needed for pixiv and anything else picky) automatically
improved file download/import error reporting a little
entering an invalid regex phrase in the stringmatch panel (as happens all the time as you type it) will now present the error in the status area rather than spamming popups
fixed a bug in the new parsing gui that was prohibiting editing a date decode string transformation
fixed enabling of additional date decode controls in the string transformations edit panel
added a hyperlink to date decoding controls that links to python date decoding explainer
if a source time in the new parsing system suggests a time in the future, it will now clip to 30s ago
misc downloader refactoring and cleanup
fixed an issue where new file lookup scripts were initialising with bad string transformation rows and breaking the whole dialog in subsequent calls, fugg
hid the 'find similar files' menu entry for images that have duration (gifs and apngs), which are not yet supported
added 'flip_debug_force_idle_mode_do_not_set_this' to main_gui shortcut set. only set it if you are an advanced user and prepared for the potential consequences
silenced a problem with newgrounds gallery parser--will fix it properly next week
renamed the new 'tagcensor' object to 'tagfilter' (since it will end up doing a bunch of non-censoring jobs) and refactored it into clienttags
attached a tag filter object to all tag import options to act as a tag blacklist. all tags that go through the import pipeline (except for a couple of old legacy instances) are now checked against the blacklist, and if a bad tag is found, the file vetoes! tag import options has some new ui to handle this and background code to deal with inheritance from defaults and so on
new file import urls that have url classes, no matter their source, are now normalised!
all new file import urls are now tested against both the original and normalised version of the url, so even though previously parsed urls remain un-normalised, new urls that are pre-normalised the same will not count as new! -fingers crossed-
on update, the db will get normalised copies of all existing urls. this means many files will now have two versions of its urls--some ui to collapse everything down to only the normalised version (after some human eyes have passed in front of this big change) will come in the coming weeks
some sites where normalisation is a consistent problem for later redownloads (like e621, which appends 'preview' tags to the post url) _should_ now be caught reliably!
the 'allow subdomains' on edit url class panel is now named 'match subdomains' and has a tooltip to better explain how it works
'keep subdomains' is now 'keep matched subdomains' and has a tooltip as well
the 'keep matched subdomains' enabled behaviour (and some normalisation calculation) is now additionally governed by the 'associate url with files' value and api url conversion info rather than just 'match subdomains' and raw url type
fixed an issue that was stopping the 'associate url with files' option sticking in edit url class panel
edit url matches now resorts after an add or edit action
all listctrls with a wrapper panel now resort after an import from clipboard, png, or defaults call
url matches now match against www*. versions of their domain regardless of 'match subdomains' settings
updated xbooru url classes to prefer https
the manage url class links panel now has a 'clear' button to clear a url_class->parser link
introduced three new simple downloader parsers for yiff.party, thanks to @cuddlebear on discord for the submission
the old 'uninteresting mime' status has been expanded to a wider 'vetoed' status to represent all file imports that are abandoned without a particular error (e.g. tag blacklist, wrong filesize or resolution)
the import system now reports the total of 'num vetoed' as 'num ignored' in its summary statements
it now also reports 'num skipped'
the 'num successful' and 'num already in db' are now folded more neatly together in import cache summary statements
file downloads that are cancelled will now set a 'veto' state rather than a 'skip' state
improved file import exception handling across the board
improved how single-file-result parsing vetoes propagate up to the file import status cache
404 network errors will now provide a 'veto' status rather than an 'error'
vetoes will not count as errors when deciding whether a subscription should be abandoned early (so a bunch of decomp bombs or 404s will no longer stutter a subscription!)
misc fixes and improvements to the new download stuff
wrote a new parsing cache that saves a lot of work in the new parsing system
improved the 'is this url known?' test to better deal with situations where all the given urls are galleries or unrecognised--a better aggregate of file status is formed, and 'already in db'/'deleted' statuses will apply if there is no evidence otherwise (the dev got the new logic for this from a legit nightmare about urls downloading over and over, so let's hope it works out)
the 'is this url known?' logic also recovers from 1->n url->hash relationships where it does not expect them, trying to find 'already in db' hashes over 'deleted' ones
to clear up some ambiguity, galleries or subscriptions now give a different 'checking in x seconds' status when waiting on the first page of a query
the 'noneablebytescontrol', as seen in edit file import options, will now correctly disable/enable its bytes sub-control when it is none'ed
a persistent issue with the new network engine sometimes failing to correctly error after certain broken connections (the computer going to sleep mid-download was a common cause here) should now be recovered from and the connection naturally reattempted
added three new shortcuts to the 'main_gui' shortcut set that allow for opening a new 'urls', 'simple', or 'thread watcher' downloader page
added two more shortcuts to 'main_gui' for new 'page of pages' and 'duplicate filter page'
moved some old 'new page' menu code to the new application command system
added numerous 'duplicates' shortcuts to the 'media' shortcut set that will work on selections of thumbnails
the thumbnail duplicates menu actions now go through the new application command system
fixed an issue where the current tag parents caches was not refreshing when notified
inputting a short invalid syntactic input on a 'read' tag autocomplete such as '-' will now clear the system predicates list--system preds should now only show on a completely empty input
fixed an issue where certain combinations of 'remove a tag, then re-add it' nullipotent actions in a single manage tags dialog transaction were not applying reliably (sometimes, the subsequent mirror action was not occuring due to a processing re-order optimisation at the db level)
made some animation code a little safer and quieter as a test for some users who were getting blitzed with some deadwindow error spam in certain situations--let's see if this changes anything
replaced all the em dashes in the help with double hyphens as github pages was rendering them wrong
added CrystalDiskInfo recommendation to 'help my db is broke.txt'
file post url classes can now be linked to parsers!
the 'raw url' downloader is now just the 'url' downloader. if a dropped url is matched as a 'file post' url and links to a parser, it will download it with that parser and default tag import options
url drag and drop now recognises file post urls that have linked parsers and will send them on to a url import page, just like 'raw' urls! they will use the new parsing system to parse tags and known urls and all that
wrote a way for the new download system to store and edit default tag import options--this can now be found under network->manage default tag import options, although it does not do much yet. eventually the old options will be transferred here, and the different downloaders will consult it more
refactored and cleaned up how some default tag import option calculation is done
the fixed 5 second wait time between gallery page fetches is now editable for downloader pages and subscriptions under options->downloading. subscriptions default remains 5s, gallery default is now 15s
the gallery downloader will present its 'x urls found so far' string in a more uniform and reactive way. it will also count down until the next page fetch
subscriptions will now similarly react quicker while the gallery parse step is ongoing, and it will count down to the next page fetch
the manage subscriptions dialog will now note in BIG RED TEXT if subscriptions are currently globally paused
subscriptions now consume less parallel-timeslot overhead, meaning they sync much faster when they have no work to do (which is most of the time)
separating subscriptions is now more sophisticated--if you wish, you can now choose just to separate a subset of the large subs's queries, and if you do so, you can decide whether to merge the extracted subs into a new larger sub or just have them as individuals. also, you will be asked for name/base_name for what to name the new subs
since separating subs is more complicated, the button is only enabled when a single large sub is selected. please do your separating one sub at a time!
merging subs will now ask if you want to rename the merged subs as it goes
refactored a giant heap of duplicate import code into single locations in the new file import object--things like applying tags and generating pre-import status are all now done in one place. a number of weird behaviours (like not applying known url associations in certain circumstances) should now be a lot better and unified
the way the db and other import testers handle whether a pending import is new or unknown is simplified
optimised the way the importers figure out whether to display a new import
the 'has the client seen this url before?' test used to figure out whether to download a file now explicitly ignores anything it isn't certain is a single-file File URL or Post URL (according to current url classes). associating 'gallery' known urls is no longer catastrophic to this system
the simple downloader now associates the entered url with the files subsequently imported
file import objects working in the new parsing system are aware of the new 'should this url be associated' option and will be given gallery urls to hold on to as appropriate
url classes now have an explicit option as to whether they should be associated with files imported from them, which is not appropriate for dynamic CDN File URLs but is appropriate for multi-image tweet links (which will likely be Gallery URLs in the new system), for instance
general importer code cleanup across the board
threw together some early ui to show current jobs in the network engine under network->review network jobs
popup messages will now try to set a max width of roughly 56 characters wide rather than 400 pixels. this value is editable under options->gui
updated the listctrl in the export files frame and the way this frame generates and stores export filenames. let's see if linux users who had crashes with this have better luck
refactored stuff out of the bloated ClientImporting file into seperate new files
refactored client network bandwidth and session code out to their own files as well
refactored client network objects to its own file
cleaned up some open externally debug code linked to callto report mode
a common grid layout used across the program will copy control tooltips to the string on the left
removed the 'downloader' network context type, which was never fully introduced and wasn't turning out to offer much in the new bandwidth tracking system
improved how simple downloader parsing formulae are stored and passed around
the edit simple downloader parsing formulae panel now has an 'add defaults' menu button
the simple downloader formula edit panel handles its buttons better and can now do import from/export to clipboard/png and reimport from the defaults, and fixes duplicate names automatically
simple downloaders now remember their current parser through a session save/load
simple downloaders will set a new default parser selection for new simple downloader pages on any choice event
renamed all the default simple downloader parsers to more clearly explain what they do
added 'all files linked by images in page' to the simple downloader, which does the old page of images' behaviour, and is hence pretty decent for most imageboards
added a simple mewch thread html parse formula to the simple downloader
added a very simple webmshare parse formula to the simple downloader
added 'imgur image album' to the simple downloader, which will fetch the first 'page' of results from an image album. full parsing will have to wait for the gallery downloader update
subscriptions can now run simultaneously! you can set the max number at options->downloading page--the default remains 1, so default behaviour will not change
if subscriptions guess they can eat some bandwidth in the next 30s but it turns out they can't, they will bandwidth-override that last job after the 30s expires. this will stop some edge cases from causing subs to potentially hang for hours just on one last request
'explicit tags' are now renamed to 'additional tags'
you can now set media to initially scale to 100% even when it is larger than the media or preview canvas
the html parsing formula can now 'ascend' as well as search down the DOM tree--so, for instance, you can find all 'img' below an 'a' and then jump back up to the 'a' to fetch the 'href' of that image link!
html parsing formulae can now search without a tag name--so, for instance, 'find all tags with class = "whatever"' is doable, without having to specify div or span etc..
the html parsing formula rule panel is hence a bit richer. it also presents a preview of the rule's string as you edit
the client no longer needs lxml to boot, and if html5lib is present, it will prefer that for html parsing. if both libraries are missing and html parsing is requested, it will raise an exception explaining the error
the builds now include html5lib, which is better at recovering from some bad markup than lxml, and as a result some parsing jobs that formerly did not work (such as 'akaiha_(akaihasugk)' on danbooru) now do
rewrote how services test their functional status to better account for different states. the logic here should be a bit better now--repositories will still be able to process if their network side is down, but everything will pause if any pause is set, and it should all propagate up to higher levels of error catching and status reporting better
hydrus can now deal with really big decompression bombs (>~180 megapixel)
filtered out en-dashes (as an alternative to standard hyphens in a "? + -" link-prefix) from booru tag parsing
fixed a string generation issue that was stopping date decode string transformations from summarising themselves
fixed some catastrophic boot failure gui reporting
cleaned up a double-exit error on dialogs that could occur when spamming exit events with a script like AutoHotkey
after discussions with Sankaku Complex about their recent bandwidth problems, added a new 64MB/day default bandwidth rule for sankakucomplex.com--please check the release post for more information
the 'page of images downloader' is now called the 'simple downloader' that uses the new parsing system (particularly, a single formula to parse urls)
the simple downloader supports multiple named parsers--currently defaulting to: html 4chan and 8chan threads, all images, gfycat mp4, gfycat webm, imgur image, imgur video, and twitter images (which fetches the :orig and also works on galleries!)
there is some basic editing of these parsing formulae, but it isn't pretty or easy to import/export yet
the new parsing test panel now has a 'link' button that lets you fetch test data straight from a URL
added a 'gather to this page of pages->dead thread watchers' menu to the page of pages right-click menu--it searches for all 404/DEAD thread watchers in the current page structure and puts them in the clicked page of pages!
cleaned up some page tab right-click menu layout and order
fixed tag parents, which I previously broke while optimising their load time fugg
the new favourites list now presents parents in 'write' tag contexts, like manage tags--see if you like it (maybe this is better if hidden?)
sped up known_url searches for most situations
fixed an unusual error when drag-and-dropping a focused collection thumbnail to a new page
fixed a problem that was marking collected thumbnails' media as not eligible for the archive/delete filter
wrote a 'subscription report mode' that will say some things about subscriptions and their internal test states as they try (and potentially fail) to run
if a subscription query fails to find any files on its first sync, it will give a better text popup notification
if a subscription query finds files in its initial sync but does not have bandwidth to download them, a FYI text popup notification will explain what happened and how to review estimated wait time
delete key now deletes from file import status lists
default downloader tag import options will now inherit the fetch_tags_even_if_url_known_and_file_already_in_db value more reliably from 'parent' default options objects (like 'general boorus'->'specific booru')
the db maintenance routine 'clear file orphans' will now move files to a chosen location as it finds them (previously, it waited until the end of the search to do the move). if the user chooses to delete, this will still be put off until the end of the search (so a mid-search cancel event in this case remains harmless)
the migrate database panel should now launch ok even if a location does not exist (it will also notify you about this)
brushed up some help (and updated a screenshot) about tag import options
fixed a problem that stopped some old manage parsing scripts ui (to content links) from opening correctly
improved some parsing test code so it can't hang the client on certain network problems
wrote system:known url to find files that have--or do not have--certain types of urls. it works but is still a little slow--I can optimise it later!
added exact match, domain, regex, and url class search types for system:known url
added a button to the top media viewer hover window that will start a file export drag and drop event if dragged from
moved the autocomplete dropdown results list down into a paged notebook
wrote a new 'favourites' page tab for the autocomplete dropdown results
hitting left or right arrow keys on an empty text input will move between the results tabs
hitting arrow up/down/page up/down/home/page or passing mouse scroll events will now go to the current selected page
typing regular search text into the input will automatically return the current page to the search results list
moved the 'tag suggestions' part of the 'tags' options page to a new page
added 'tag favourites' to the 'tags' options page to edit which tags show in this new tab
added import/export buttons to the tag siblings and parents dialogs. they'll export to clipboard or .txt file, and import from the same with an additional option to add_only (i.e. to not delete/petition conflicts with the existing list)
added some quick-and-dirty 'set as alternates/same/notdupes' buttons to the duplicate filter, which will quickly apply that status to the dupes and show some more dupes
sped up db loading time of tag siblings and parents significantly
added a short delay check to tag siblings/parents regeneration so rapid regenerations (such as when processing certain admin-side petitions) can be merged
fixed an issue where similar_to searches could return results not in the current file domain
fixed some spinctrls that were sizing to thin
fixed a bug in the manage server services dialog that was incorrectly dealing with port conflicts on edit service dialog ok
added a clientside and serverside assertion to test that all the services on a serverside modify services call have unique ports
fixed an issue where hydrus network services without access keys would sometimes try to sync their accounts (this was messing up some admin server setup)
fixed some misc dialog window structure
messed around a little with how the autocomplete dropdown hides and shows when in float mode--I _think_ it will now be less flickery and will otherwise position itself and receieve focus better
converted the 'export files' dialog to the new sizing system and also made it non-modal (i.e. you can now interact with the rest of the program while it is open)
wrote a more rigorous force-fit-all-tlws command to the debug menu
No Comments