From 6152573676165e933d152817e031000b16e040ad Mon Sep 17 00:00:00 2001 From: Hydrus Network Developer Date: Wed, 7 Sep 2022 16:16:25 -0500 Subject: [PATCH] Version 499 closes #1221, closes #1219, closes #1222, closes #1223 --- .github/workflows/release.yml | 8 +- docs/about_docs.md | 4 + docs/access_keys.md | 6 +- docs/adding_new_downloaders.md | 4 +- docs/advanced.md | 5 +- docs/advanced_multiple_local_file_services.md | 4 +- docs/advanced_parents.md | 4 +- docs/advanced_siblings.md | 4 +- docs/after_disaster.md | 4 +- docs/changelog.md | 57 +- docs/contact.md | 6 +- docs/database_migration.md | 4 +- docs/downloader_completion.md | 4 +- docs/downloader_gugs.md | 2 + docs/downloader_login.md | 6 +- docs/downloader_parsers.md | 6 +- docs/downloader_parsers_content_parsers.md | 6 +- docs/downloader_parsers_full_example_api.md | 6 +- ...wnloader_parsers_full_example_file_page.md | 6 +- ...oader_parsers_full_example_gallery_page.md | 6 +- docs/downloader_parsers_page_parsers.md | 6 +- docs/downloader_sharing.md | 4 +- docs/downloader_url_classes.md | 4 + docs/duplicates.md | 2 +- docs/faq.md | 6 +- docs/gettingStartedOverview.md | 4 +- docs/getting_started_importing.md | 4 +- docs/getting_started_installing.md | 4 +- docs/getting_started_ratings.md | 3 +- docs/getting_started_searching.md | 2 +- docs/getting_started_subscriptions.md | 2 +- docs/getting_started_tags.md | 2 +- docs/index.md | 1 + docs/introduction.md | 6 +- docs/ipfs.md | 2 + docs/launch_arguments.md | 2 +- docs/local_booru.md | 5 +- docs/old_changelog.html | 39 +- docs/petitionPractices.md | 5 +- docs/privacy.md | 4 + docs/reducing_lag.md | 6 +- docs/running_from_source.md | 6 +- docs/server.md | 6 +- docs/support.md | 8 +- docs/wine.md | 4 +- hydrus/client/ClientOptions.py | 2 +- hydrus/client/ClientParsing.py | 4 +- hydrus/client/ClientRendering.py | 4 +- hydrus/client/db/ClientDB.py | 66 ++ hydrus/client/db/ClientDBFilesDuplicates.py | 28 +- hydrus/client/db/ClientDBSimilarFiles.py | 13 +- hydrus/client/gui/ClientGUIMenus.py | 6 +- hydrus/client/gui/ClientGUIPopupMessages.py | 62 +- .../gui/ClientGUIScrolledPanelsManagement.py | 26 +- hydrus/client/gui/ClientGUIShortcuts.py | 2 + hydrus/client/gui/ClientGUITags.py | 3 +- hydrus/client/gui/QtPorting.py | 1 + hydrus/client/gui/canvas/ClientGUICanvas.py | 38 +- .../gui/canvas/ClientGUICanvasHoverFrames.py | 2 +- hydrus/client/gui/canvas/ClientGUIMPV.py | 11 +- hydrus/client/gui/lists/ClientGUIListBoxes.py | 942 +++++++++--------- .../client/gui/pages/ClientGUIManagement.py | 32 +- hydrus/client/gui/parsing/ClientGUIParsing.py | 2 - .../services/ClientGUIClientsideServices.py | 5 +- .../client/gui/widgets/ClientGUIControls.py | 5 + hydrus/client/media/ClientMedia.py | 2 +- .../networking/ClientNetworkingDomain.py | 25 + .../client/networking/ClientNetworkingJobs.py | 28 +- hydrus/core/HydrusConstants.py | 2 +- .../core/networking/HydrusServerResources.py | 2 +- mkdocs.yml | 4 +- requirements_macos.txt | 2 +- requirements_ubuntu.txt | 2 +- requirements_windows.txt | 4 +- static/build_files/windows/client-winQt5.spec | 2 +- static/build_files/windows/client-winQt6.spec | 2 +- .../build_files/windows/requirementsQt5.txt | 2 +- .../build_files/windows/requirementsQt6.txt | 2 +- .../twitter syndication collection lookup.png | Bin 0 -> 2782 bytes .../gugs/twitter syndication likes lookup.png | Bin 0 -> 2754 bytes .../gugs/twitter syndication list lookup.png | Bin 0 -> 2707 bytes ...rofile lookup (limited) (with replies).png | Bin 2884 -> 0 bytes ...r syndication profile lookup (limited).png | Bin 2377 -> 0 bytes ...dication profile lookup (with replies).png | Bin 0 -> 3446 bytes .../twitter syndication profile lookup.png | Bin 0 -> 2827 bytes ...twitter syndication api profile parser.png | Bin 6754 -> 7422 bytes .../twitter syndication api tweet parser.png | Bin 2557 -> 3140 bytes static/default/url_classes/twitter list.png | Bin 0 -> 1906 bytes .../twitter syndication api collection.png | Bin 0 -> 2592 bytes ...witter syndication api likes (user_id).png | Bin 0 -> 2880 bytes .../twitter syndication api likes.png | Bin 0 -> 2610 bytes ...twitter syndication api list (list_id).png | Bin 0 -> 2763 bytes ...cation api list (screen_name and slug).png | Bin 0 -> 3394 bytes ...yndication api list (user_id and slug).png | Bin 0 -> 3009 bytes ...tter syndication api profile (user_id).png | Bin 0 -> 2921 bytes .../twitter syndication api profile.png | Bin 2070 -> 2612 bytes .../twitter syndication api tweet.png | Bin 1925 -> 2500 bytes static/default/url_classes/twitter tweet.png | Bin 1480 -> 1909 bytes 98 files changed, 963 insertions(+), 659 deletions(-) create mode 100644 static/default/gugs/twitter syndication collection lookup.png create mode 100644 static/default/gugs/twitter syndication likes lookup.png create mode 100644 static/default/gugs/twitter syndication list lookup.png delete mode 100644 static/default/gugs/twitter syndication profile lookup (limited) (with replies).png delete mode 100644 static/default/gugs/twitter syndication profile lookup (limited).png create mode 100644 static/default/gugs/twitter syndication profile lookup (with replies).png create mode 100644 static/default/gugs/twitter syndication profile lookup.png create mode 100644 static/default/url_classes/twitter list.png create mode 100644 static/default/url_classes/twitter syndication api collection.png create mode 100644 static/default/url_classes/twitter syndication api likes (user_id).png create mode 100644 static/default/url_classes/twitter syndication api likes.png create mode 100644 static/default/url_classes/twitter syndication api list (list_id).png create mode 100644 static/default/url_classes/twitter syndication api list (screen_name and slug).png create mode 100644 static/default/url_classes/twitter syndication api list (user_id and slug).png create mode 100644 static/default/url_classes/twitter syndication api profile (user_id).png diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae503b46..11f3876e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -326,14 +326,14 @@ jobs: uses: carlosperate/download-file-action@v1.0.3 id: download_mpv with: - file-url: 'https://sourceforge.net/projects/mpv-player-windows/files/libmpv/mpv-dev-x86_64-20210228-git-d1be8bb.7z' + file-url: 'https://sourceforge.net/projects/mpv-player-windows/files/libmpv/mpv-dev-x86_64-v3-20220829-git-211ce69.7z' file-name: 'mpv-dev-x86_64.7z' location: '.' - name: Process mpv-dev run: | 7z x ${{ steps.download_mpv.outputs.file-path }} - move mpv-1.dll hydrus\ + move mpv-2.dll hydrus\ - name: Build Hydrus run: | @@ -413,14 +413,14 @@ jobs: uses: carlosperate/download-file-action@v1.0.3 id: download_mpv with: - file-url: 'https://sourceforge.net/projects/mpv-player-windows/files/libmpv/mpv-dev-x86_64-20210228-git-d1be8bb.7z' + file-url: 'https://sourceforge.net/projects/mpv-player-windows/files/libmpv/mpv-dev-x86_64-v3-20220829-git-211ce69.7z' file-name: 'mpv-dev-x86_64.7z' location: '.' - name: Process mpv-dev run: | 7z x ${{ steps.download_mpv.outputs.file-path }} - move mpv-1.dll hydrus\ + move mpv-2.dll hydrus\ - name: Build Hydrus run: | diff --git a/docs/about_docs.md b/docs/about_docs.md index f069fd36..cfefc8a0 100644 --- a/docs/about_docs.md +++ b/docs/about_docs.md @@ -1,3 +1,7 @@ +--- +title: About These Docs +--- + # About These Docs The Hydrus docs are built with [MkDocs](https://www.mkdocs.org/) using the [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) theme. The .md files in the `docs` directory are converted into nice html in the `help` directory. This is done automatically in the built releases, but if you run from source, you will want to build your own. diff --git a/docs/access_keys.md b/docs/access_keys.md index f420fb1a..f96b6055 100644 --- a/docs/access_keys.md +++ b/docs/access_keys.md @@ -1,7 +1,9 @@ --- -title: PTR access keys +title: PTR Access Keys --- +# PTR access keys + The PTR is now run by users with more bandwidth than I had to give, so the bandwidth limits are gone! If you would like to talk with the new management, please check the [discord](https://discord.gg/wPHPCUZ). A guide and schema for the new PTR is [here](PTR.md). @@ -66,4 +68,4 @@ Then you can check your PTR at any time under _services->review services_, under A user kindly manages a store of update files and pre-processed empty client databases to get your synced quicker. This is generally recommended for advanced users or those following a guide, but if you are otherwise interested, please check it out: -[https://cuddlebear92.github.io/Quicksync/](https://cuddlebear92.github.io/Quicksync/) \ No newline at end of file +[https://cuddlebear92.github.io/Quicksync/](https://cuddlebear92.github.io/Quicksync/) diff --git a/docs/adding_new_downloaders.md b/docs/adding_new_downloaders.md index 8ae6c123..58d5665e 100644 --- a/docs/adding_new_downloaders.md +++ b/docs/adding_new_downloaders.md @@ -1,5 +1,5 @@ --- -title: adding new downloaders +title: Adding New Downloaders --- # adding new downloaders @@ -18,4 +18,4 @@ You can get these pngs from anyone who has experience in the downloader system. To 'add' the easy-import pngs to your client, hit _network->downloaders->import downloaders_. A little image-panel will appear onto which you can drag-and-drop these png files. The client will then decode and go through the png, looking for interesting new objects and automatically import and link them up without you having to do any more. Your only further input on your end is a 'does this look correct?' check right before the actual import, just to make sure there isn't some mistake or other glaring problem. -Objects imported this way will take precedence over existing functionality, so if one of your downloaders breaks due to a site change, importing a fixed png here will overwrite the broken entries and become the new default. \ No newline at end of file +Objects imported this way will take precedence over existing functionality, so if one of your downloaders breaks due to a site change, importing a fixed png here will overwrite the broken entries and become the new default. diff --git a/docs/advanced.md b/docs/advanced.md index 01c9d16a..7afd76b5 100644 --- a/docs/advanced.md +++ b/docs/advanced.md @@ -1,7 +1,8 @@ --- -title: general clever tricks +title: General Clever Tricks --- +# general clever tricks !!! note "this is non-comprehensive" I am always changing and adding little things. The best way to learn is just to look around. If you think a shortcut should probably do something, try it out! If you can't find something, let me know and I'll try to add it! @@ -95,4 +96,4 @@ If the file is one you particularly care about, the easiest solution is to open ## setting a password { id="password" } -the client offers a very simple password system, enough to keep out noobs. You can set it at _database->set a password_. It will thereafter ask for the password every time you start the program, and will not open without it. However none of the database is encrypted, and someone with enough enthusiasm or a tool and access to your computer can still very easily see what files you have. The password is mainly to stop idle snoops checking your images if you are away from your machine. \ No newline at end of file +the client offers a very simple password system, enough to keep out noobs. You can set it at _database->set a password_. It will thereafter ask for the password every time you start the program, and will not open without it. However none of the database is encrypted, and someone with enough enthusiasm or a tool and access to your computer can still very easily see what files you have. The password is mainly to stop idle snoops checking your images if you are away from your machine. diff --git a/docs/advanced_multiple_local_file_services.md b/docs/advanced_multiple_local_file_services.md index 20f14edf..93f39b72 100644 --- a/docs/advanced_multiple_local_file_services.md +++ b/docs/advanced_multiple_local_file_services.md @@ -1,7 +1,9 @@ --- -title: multiple local file services +title: Multiple Local File Services --- +# multiple local file services + The client lets you store your files in different overlapping partitions. This can help management workflows and privacy. ## what's the problem? { id="the_problem" } diff --git a/docs/advanced_parents.md b/docs/advanced_parents.md index 81cce42c..ca9cbfab 100644 --- a/docs/advanced_parents.md +++ b/docs/advanced_parents.md @@ -1,7 +1,9 @@ --- -title: tag parents +title: Tag Parents --- +# tag parents + Tag parents let you automatically add a particular tag every time another tag is added. The relationship will also apply retroactively. ## what's the problem? { id="the_problem" } diff --git a/docs/advanced_siblings.md b/docs/advanced_siblings.md index 8dd3eabe..15854083 100644 --- a/docs/advanced_siblings.md +++ b/docs/advanced_siblings.md @@ -1,7 +1,9 @@ --- -title: tag siblings +title: Tag Siblings --- +# tag siblings + Tag siblings let you replace a bad tag with a better tag. ## what's the problem? { id="the_problem" } diff --git a/docs/after_disaster.md b/docs/after_disaster.md index 6565ed82..ef134a65 100644 --- a/docs/after_disaster.md +++ b/docs/after_disaster.md @@ -2,7 +2,9 @@ title: recovering after disaster --- -# you just had a database problem +# Recovering After Disaster + +## you just had a database problem I have helped quite a few users recover a mangled database from disk failure or accidental deletion. You just had similar and have been pointed here. This is a simple spiel on the next step that I, hydev, like to give people once we are done. diff --git a/docs/changelog.md b/docs/changelog.md index bf805223..41e6160f 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,8 +1,49 @@ +--- +title: Changelog +--- + # changelog !!! note This is the new changelog, only the most recent builds. For all versions, see the [old changelog](old_changelog.html). +## [Version 499](https://github.com/hydrusnetwork/hydrus/releases/tag/v499) + +### mpv +* updated the mpv version for Windows. this is more complicated than it sounds and has been fraught with difficulty at times, so I do not try it often, but the situation seems to be much better now. today we are updating about twelve months. I may be imagining it, but things seem a bit smoother. a variety of weird file support should be better--an old transparent apng that I know crashed older mpv no longer causes a crash--and there's some acceleration now for very new CPU chipsets. I've also insisted on precise seeking (rather than keyframe seeking, which some users may have defaulted to). mpv-1.dll is now mpv-2.dll +* I don't have an easy Linux testbed any more, so I would be interested in a Linux 'running from source' user trying out a similar update and letting me know how it goes. try getting the latest libmpv1 and then update python-mpv to 1.0.1 on pip. your 'mpv api version' in _help->about_ should now be 2.0. this new python-mpv seems to have several compatibility improvements, which is what has plagued us before here +* mpv on macOS is still a frustrating question mark, but if this works on Linux, it may open another door. who knows, maybe the new version doesn't crash instantly on load + +### search change for potential duplicates +* this is subtle and complicated, so if you are a casual user of duplicates, don't worry about it. duplicates page = better now +* for those who are more invested in dupes, I have altered the main potential duplicate search query. when the filter prepares some potential dupes to compare, or you load up some random thumbs in the page, or simply when the duplicates processing page presents counts, this all now only tests kings. previously, it could compare any member of a duplicate group to any other, and it would nominate kings as group representatives, but this lead to some odd situations where if you said 'must be pixel dupes', you could get two low quality pixel dupes offering their better king(s) up for actual comparison, giving you a comparison that was not a pixel dupe. same for the general searching of potentials, where if you search for 'bad quality', any bad quality file you set as a dupe but didn't delete could get matched (including in 'both match' mode), and offer a 'nicer' king as tribute that didn't have the tag. now, it only searches kings. kings match searches, and it is those kings that must match pixel dupe rules. this also means that kings will always be available on the current file domain, and no fallback king-nomination-from-filtered-members routine is needed any more +* the knock-on effect here is minimal, but in general all database work in the duplicate filter should be a little faster, and some of your numbers may be a few counts smaller, typically after discounting weird edge case split-up duplicate groups that aren't real/common enough to really worry about. if you use a waterfall of multiple local file services to process your files, you might see significantly smaller counts due to kings not always being in the same file domain as their bad members, so you may want to try 'all my files' or just see how it goes--might be far less confusing, now you are only given unambiguous kings. anyway, in general, I think no big differences here for most users except better precision in searching! +* but let me know how you get on IRL! + +### misc +* thank's to a user's hard work, the default twitter downloader gets some upgrades this week: you can now download from twitter lists, a twitter user's likes, and twitter collections (which are curated lists of tweets). the downloaders still get a lot of 'ignored' results for text-only tweets, and you still have to be logged in to get nsfw, but this adds some neat tools to the toolbox +* thanks to a user, the Client API now reports brief caching information and should boost Hydrus Companion performance (issue #605) +* the simple shortcut list in the edit shortcut action dialog now no longer shows any duplicates (such as 'close media viewer' in the dupes window) +* added a new default reason for tag petitions, 'clearing mass-pasted junk'. 'not applicable' is now 'not applicable/incorrect' +* in the petition processing page, the content boxes now specifically say ADD or DELETE to reinforce what you are doing and to differentiate the two boxes when you have a pixel petition +* in the petition processing page, the content boxes now grow and shrink in height, up to a max of 20 rows, depending on how much stuff is in them. I _think_ I have pixel perfect heights here, so let me know if yours are wrong! +* the 'service info' rows in review services are now presented in nicer order +* updated the header/title formatting across the help documentation. when you search for a page title, it should now show up in results (e.g. you type 'running from source', you get that nicely at the top, not a confusing sub-header of that article). the section links are also all now capitalised +* misc refactoring + +### bunch of fixes +* fixed a weird and possible crash-inducing scrolling bug in the tag list some users had in Qt6 +* fixed a typo error in file lookup scripts from when I added multi-line support to the parsing system (issue #1221) +* fixed some bad labels in 'speed and memory' that talked about 'MB' when the widget allowed setting different units. also, I updated the 'video buffer' option on that page to a full 'bytes value' widget too (issue #1223) +* the 'bytes value' widget, where you can set '100 MB' and similar, now gives the 'unit' dropdown a little more minimum width. it was getting a little thin on some styles and not showing the full text in the dropdown menu (issue #1222) +* fixed a bug in similar-shape-search-tree-rebalancing maintenance in the rare case that the queue of branches in need of regeneration become out of sync with the main tree (issue #1219) +* fixed a bug in archive/delete filter where clicks that were making actions would start borked drag-and-drop panning states if you dragged before releasing the click. it would cause warped media movement if you then clicked on hover window greyspace +* fixed the 'this was a cloudflare problem' scanner for the new 1.2.64 version of cloudscraper +* updated the popupmanager's positioning update code to use a nicer event filter and gave its position calculation code a quick pass. it might fix some popup toaster position bugs, not sure +* fixed a weird menu creation bug involving a QStandardItem appearing in the menu actions +* fixed a similar weird QStandardItem bug in the media viewer canvas code +* fixed an error that could appear on force-emptied pages that receive sort signals + ## [Version 498](https://github.com/hydrusnetwork/hydrus/releases/tag/v498) _almost all the changes this week are only important to server admins and janitors. regular users can skip updating this week_ @@ -335,19 +376,3 @@ _almost all the changes this week are only important to server admins and janito * I also cleaned some of the maintenance code, and made it more aggressive, so 'do a full metadata resync' is now be even more uncompromising * also, the repository updates file service gets a bit of cleanup. it seems some ghost files have snuck in there over time, and today their records are corrected. the bug that let this happen in the first place is also fixed * there remains an issue where some users' clients have tried to hit the PTR with 404ing update file hashes. I am still investigating this - -## [Version 488](https://github.com/hydrusnetwork/hydrus/releases/tag/v488) - -### all misc this week -* the client now supports 'wavpack' files. these are basically a kind of compressed wav. mpv seems to play them fine too! -* added a new file maintenance action, 'if file is missing, note it in log', which records the metadata about missing files to the database directory but makes no other action -* the 'file is missing/incorrect' file maintenance jobs now also export the files' tags to the database directory, to further help identify them -* simplified the logic behind the 'remove files if they are trashed' option. it should fire off more reliably now, even if you have a weird multiple-domain location for the current page, and still not fire if you are actually looking at the trash -* if you paste an URL into the normal 'urls' downloader page, and it already has that URL and the URL has status 'failed', that existing URL will now be tried again. let's see how this works IRL, maybe it needs an option, maybe this feels natural when it comes up -* the default bandwidth rules are boosted. the client is more efficient these days and doesn't need so many forced breaks on big import lists, and the internet has generally moved on. thanks to the users who helped talk out what the new limits should aim at. if you are an existing user, you can change your current defaults under _network->data->review bandwidth usage and edit rules_--there's even a button to revert your defaults 'back' to these new rules -* now like all its neighbours, the cog icon on the duplicate right-side hover no longer annoyingly steals keyboard focus on a click. -* did some code and logic cleanup around 'delete files', particularly to improve repository update deletes now we have multiple local file services, and in planning for future maintenance in this area -* all the 'yes yes no' dialogs--the ones with multiple yes options--are moved to the newer panel system and will render their size and layout a bit more uniformly -* may have fixed an issue with a very slow to boot client trying to politely wait on the thumbnail cache before it instantiates -* misc UI text rewording and layout flag fixes -* fixed some jank formatting on database migration help diff --git a/docs/contact.md b/docs/contact.md index 3a76395e..bda62062 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -1,4 +1,6 @@ - +--- +title: Contact and Links +--- # contact and links @@ -29,4 +31,4 @@ That said: * [email](mailto:hydrus.admin@gmail.com) * [discord](https://discord.gg/wPHPCUZ) * [patreon](https://www.patreon.com/hydrus_dev) -* [user-run repository and wiki (including download presets for several non-default boorus)](https://github.com/CuddleBear92/Hydrus-Presets-and-Scripts) \ No newline at end of file +* [user-run repository and wiki (including download presets for several non-default boorus)](https://github.com/CuddleBear92/Hydrus-Presets-and-Scripts) diff --git a/docs/database_migration.md b/docs/database_migration.md index e9dd6805..8dae79c6 100644 --- a/docs/database_migration.md +++ b/docs/database_migration.md @@ -1,7 +1,9 @@ --- -title: database migration +title: Database Migration --- +# database migration + ## the hydrus database { id="intro" } A hydrus client consists of three components: diff --git a/docs/downloader_completion.md b/docs/downloader_completion.md index 2b2c6104..dcfe820f 100644 --- a/docs/downloader_completion.md +++ b/docs/downloader_completion.md @@ -1,7 +1,9 @@ --- -title: Putting it All Together +title: Putting It All Together --- +# Putting it all together + Now you know what GUGs, URL Classes, and Parsers are, you should have some ideas of how URL Classes could steer what happens when the downloader is faced with an URL to process. Should a URL be imported as a media file, or should it be parsed? If so, how? You may have noticed in the Edit GUG ui that it lists if a current URL Class matches the example URL output. If the GUG has no matching URL Class, it won't be listed in the main 'gallery selector' button's list--it'll be relegated to the 'non-functioning' page. Without a URL Class, the client doesn't know what to do with the output of that GUG. But if a URL Class does match, we can then hand the result over to a parser set at _network->downloader definitions->manage url class links_: diff --git a/docs/downloader_gugs.md b/docs/downloader_gugs.md index cd90d535..1c706ca7 100644 --- a/docs/downloader_gugs.md +++ b/docs/downloader_gugs.md @@ -2,6 +2,8 @@ title: Gallery URL Generators --- +# Gallery URL Generators + Gallery URL Generators, or **GUGs** are simple objects that take a simple string from the user, like: * blue_eyes diff --git a/docs/downloader_login.md b/docs/downloader_login.md index 69497a8e..b43d955c 100644 --- a/docs/downloader_login.md +++ b/docs/downloader_login.md @@ -1,3 +1,7 @@ +--- +title: Login Manager +--- + # Login Manager -The system works, but this help was never done! Check the defaults for examples of how it works, sorry! \ No newline at end of file +The system works, but this help was never done! Check the defaults for examples of how it works, sorry! diff --git a/docs/downloader_parsers.md b/docs/downloader_parsers.md index f3a986db..462dd33d 100644 --- a/docs/downloader_parsers.md +++ b/docs/downloader_parsers.md @@ -1,3 +1,7 @@ +--- +title: Parsers +--- + # Parsers In hydrus, a parser is an object that takes a single block of HTML or JSON data and returns many kinds of hydrus-level metadata. @@ -27,4 +31,4 @@ When you are making a parser, consider this checklist (you might want to copy/ha * Is a source/post time available? * Is a source URL available? Is it good quality, or does it often just point to an artist's base twitter profile? If you pull it from text or a tooltip, is it clipped for longer URLs? -[Taken a break? Now let's put it all together ---->](downloader_completion.md) \ No newline at end of file +[Taken a break? Now let's put it all together ---->](downloader_completion.md) diff --git a/docs/downloader_parsers_content_parsers.md b/docs/downloader_parsers_content_parsers.md index 1a4de4f5..e40fcff2 100644 --- a/docs/downloader_parsers_content_parsers.md +++ b/docs/downloader_parsers_content_parsers.md @@ -1,3 +1,7 @@ +--- +title: Content Parsers +--- + # Content Parsers So, we can now generate some strings from a document. Content Parsers will let us apply a single metadata type to those strings to inform hydrus what they are. @@ -67,4 +71,4 @@ This is a special content type--it tells the next highest stage of parsing that ![](images/edit_content_parser_panel_veto.png) -They will associate their name with the veto being raised, so it is useful to give these a decent descriptive name so you can see what might be going right or wrong during testing. If it is an appropriate and serious enough veto, it may also rise up to the user level and will be useful if they need to report you an error (like "After five pages of parsing, it gives 'veto: no next page link'"). \ No newline at end of file +They will associate their name with the veto being raised, so it is useful to give these a decent descriptive name so you can see what might be going right or wrong during testing. If it is an appropriate and serious enough veto, it may also rise up to the user level and will be useful if they need to report you an error (like "After five pages of parsing, it gives 'veto: no next page link'"). diff --git a/docs/downloader_parsers_full_example_api.md b/docs/downloader_parsers_full_example_api.md index d642f178..fe5a8212 100644 --- a/docs/downloader_parsers_full_example_api.md +++ b/docs/downloader_parsers_full_example_api.md @@ -1,3 +1,7 @@ +--- +title: API Example +--- + # api example Some sites offer API calls for their pages. Depending on complexity and quality of content, using these APIs may or may not be a good idea. Artstation has a good one--let's first review our URL Classes: @@ -42,4 +46,4 @@ This again uses python's datetime to decode the date, which Artstation presents ## summary { id="summary" } -APIs that are stable and free to access (e.g. do not require OAuth or other complicated login headers) can make parsing fantastic. They save bandwidth and CPU time, and they are typically easier to work with than HTML. Unfortunately, the boorus that do provide APIs often list their tags without namespace information, so I recommend you double-check you can get what you want before you get too deep into it. Some APIs also offer incomplete data, such as relative URLs (relative to the original URL!), which can be a pain to figure out in our system. \ No newline at end of file +APIs that are stable and free to access (e.g. do not require OAuth or other complicated login headers) can make parsing fantastic. They save bandwidth and CPU time, and they are typically easier to work with than HTML. Unfortunately, the boorus that do provide APIs often list their tags without namespace information, so I recommend you double-check you can get what you want before you get too deep into it. Some APIs also offer incomplete data, such as relative URLs (relative to the original URL!), which can be a pain to figure out in our system. diff --git a/docs/downloader_parsers_full_example_file_page.md b/docs/downloader_parsers_full_example_file_page.md index 85ffa651..5574556c 100644 --- a/docs/downloader_parsers_full_example_file_page.md +++ b/docs/downloader_parsers_full_example_file_page.md @@ -1,3 +1,7 @@ +--- +title: File Page Example +--- + # file page example Let's look at this page: [https://gelbooru.com/index.php?page=post&s=view&id=3837615](https://gelbooru.com/index.php?page=post&s=view&id=3837615). @@ -96,4 +100,4 @@ Phew--all that for a bit of Lara Croft! Thankfully, most sites use similar schem ![](images/downloader_post_example_final.png) -This is overall a decent parser. Some parts of it may fail when Gelbooru update to their next version, but that can be true of even very good parsers with multiple redundancy. For now, hydrus can use this to quickly and efficiently pull content from anything running Gelbooru 0.2.5., and the effort spent now can save millions of combined _right-click->save as_ and manual tag copies in future. If you make something like this and share it about, you'll be doing a good service for those who could never figure it out. \ No newline at end of file +This is overall a decent parser. Some parts of it may fail when Gelbooru update to their next version, but that can be true of even very good parsers with multiple redundancy. For now, hydrus can use this to quickly and efficiently pull content from anything running Gelbooru 0.2.5., and the effort spent now can save millions of combined _right-click->save as_ and manual tag copies in future. If you make something like this and share it about, you'll be doing a good service for those who could never figure it out. diff --git a/docs/downloader_parsers_full_example_gallery_page.md b/docs/downloader_parsers_full_example_gallery_page.md index 2cc459a5..9b93276b 100644 --- a/docs/downloader_parsers_full_example_gallery_page.md +++ b/docs/downloader_parsers_full_example_gallery_page.md @@ -1,3 +1,7 @@ +--- +title: Gallery Page Example +--- + # gallery page example !!! caution @@ -39,4 +43,4 @@ Note that this finds two URLs. e621 apply the `rel="next"` to both the "2" link ## summary { id="summary" } -With those two rules, we are done. Gallery parsers are nice and simple. \ No newline at end of file +With those two rules, we are done. Gallery parsers are nice and simple. diff --git a/docs/downloader_parsers_page_parsers.md b/docs/downloader_parsers_page_parsers.md index 5fcf24be..0aa0f48f 100644 --- a/docs/downloader_parsers_page_parsers.md +++ b/docs/downloader_parsers_page_parsers.md @@ -1,3 +1,7 @@ +--- +title: Page Parsers +--- + # Page Parsers We can now produce individual rows of rich metadata. To arrange them all into a useful structure, we will use Page Parsers. @@ -56,4 +60,4 @@ When the client sees this in a downloader context, it will where to download the ## subsidiary page parsers { id="subsidiary_page_parsers" } -Here be dragons. This was an attempt to make parsing more helpful in certain API situations, but it ended up ugly. I do not recommend you use it, as I will likely scratch the whole thing and replace it with something better one day. It basically splits the page up into pieces that can then be parsed by nested page parsers as separate objects, but the UI and workflow is hell. Afaik, the imageboard API parsers use it, but little/nothing else. If you are really interested, check out how those work and maybe duplicate to figure out your own imageboard parser and/or send me your thoughts on how to separate File URL/timestamp combos better. \ No newline at end of file +Here be dragons. This was an attempt to make parsing more helpful in certain API situations, but it ended up ugly. I do not recommend you use it, as I will likely scratch the whole thing and replace it with something better one day. It basically splits the page up into pieces that can then be parsed by nested page parsers as separate objects, but the UI and workflow is hell. Afaik, the imageboard API parsers use it, but little/nothing else. If you are really interested, check out how those work and maybe duplicate to figure out your own imageboard parser and/or send me your thoughts on how to separate File URL/timestamp combos better. diff --git a/docs/downloader_sharing.md b/docs/downloader_sharing.md index 225a2920..e2b66cbe 100644 --- a/docs/downloader_sharing.md +++ b/docs/downloader_sharing.md @@ -1,5 +1,5 @@ --- -title: Sharing Downloaders +title: Sharing --- # Sharing Downloaders @@ -16,4 +16,4 @@ It isn't difficult. Essentially, you want to bundle enough objects to make one o This all works on Example URLs and some domain guesswork, so make sure your url classes are good and the parsers have correct Example URLs as well. If they don't, they won't all link up neatly for the end user. If part of your downloader is on a different domain to the GUGs and Gallery URLs, then you'll have to add them manually. Just start with 'add gug' and see if it looks like enough. -Once you have the necessary and sufficient objects added, you can export to png. You'll get a similar 'does this look right?' summary as what the end-user will see, just to check you have everything in order and the domains all correct. If that is good, then make sure to give the png a sensible filename and embellish the title and description if you need to. You can then send/post that png wherever, and any regular user will be able to use your work. \ No newline at end of file +Once you have the necessary and sufficient objects added, you can export to png. You'll get a similar 'does this look right?' summary as what the end-user will see, just to check you have everything in order and the domains all correct. If that is good, then make sure to give the png a sensible filename and embellish the title and description if you need to. You can then send/post that png wherever, and any regular user will be able to use your work. diff --git a/docs/downloader_url_classes.md b/docs/downloader_url_classes.md index 8852b9c3..8f6d20ce 100644 --- a/docs/downloader_url_classes.md +++ b/docs/downloader_url_classes.md @@ -1,3 +1,7 @@ +--- +title: URL Classes +--- + # URL Classes The fundamental connective tissue of the downloader system is the 'URL Class'. This object identifies and normalises URLs and links them to other components. Whenever the client handles a URL, it tries to match it to a URL Class to figure out what to do. diff --git a/docs/duplicates.md b/docs/duplicates.md index c7ed2d71..07794d8e 100644 --- a/docs/duplicates.md +++ b/docs/duplicates.md @@ -1,5 +1,5 @@ --- -title: duplicates +title: Filtering Duplicates --- # duplicates { id="intro" } diff --git a/docs/faq.md b/docs/faq.md index 679ea4f4..2f03eecf 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -1,3 +1,7 @@ +--- +title: FAQ +--- + # FAQ ## what is a repository? { id="repositories" } @@ -105,4 +109,4 @@ This is another long string of random hexadecimal that _identifies_ your account The repositories do not work like conventional search engines; it takes a short but predictable while for changes to propagate to other users. -The client's searches only ever happen over its local cache of what is on the repository. Any changes you make will be delayed for others until their next update occurs. At the moment, the update period is 100,000 seconds, which is about 1 day and 4 hours. \ No newline at end of file +The client's searches only ever happen over its local cache of what is on the repository. Any changes you make will be delayed for others until their next update occurs. At the moment, the update period is 100,000 seconds, which is about 1 day and 4 hours. diff --git a/docs/gettingStartedOverview.md b/docs/gettingStartedOverview.md index ca04779c..7737e781 100644 --- a/docs/gettingStartedOverview.md +++ b/docs/gettingStartedOverview.md @@ -1,5 +1,5 @@ --- -title: Overview for getting started +title: Overview For Getting Started --- # Overview for getting started @@ -25,4 +25,4 @@ It is also worth having a look at [siblings](advanced_siblings.md) for when you Have a lot of very similar looking pictures because of one reason or another? Have a look at [duplicates](duplicates.md), Hydrus' duplicates finder and filtering tool. ## API -Hydrus has an API that lets external tools connect to it. See [API](client_api.md) for how to turn it on and a list of some of these tools. \ No newline at end of file +Hydrus has an API that lets external tools connect to it. See [API](client_api.md) for how to turn it on and a list of some of these tools. diff --git a/docs/getting_started_importing.md b/docs/getting_started_importing.md index ca23d578..ca82a76d 100644 --- a/docs/getting_started_importing.md +++ b/docs/getting_started_importing.md @@ -1,5 +1,5 @@ --- -title: Importing and exporting +title: Importing and Exporting --- # Importing and exporting @@ -68,4 +68,4 @@ While you can import and export tags together with images sometimes you just don Going to `tags -> migrate tags` you get a window that lets you deal with just tags. One of the options here is what's called a Hydrus Tag Archive, a file containing the hash <-> tag mappings for the files and tags matching the query. -![](images/hydrus_tag_archive.png) \ No newline at end of file +![](images/hydrus_tag_archive.png) diff --git a/docs/getting_started_installing.md b/docs/getting_started_installing.md index 9d5ead7a..6f75c945 100644 --- a/docs/getting_started_installing.md +++ b/docs/getting_started_installing.md @@ -1,7 +1,9 @@ --- -title: installing and updating +title: Installing and Updating --- +# installing and updating + If any of this is confusing, a simpler guide is [here](https://github.com/Zweibach/text/blob/master/Hydrus/Hydrus%20Help%20Docs/00_tableOfContents.md), and some video guides are [here](https://github.com/CuddleBear92/Hydrus-guides)! ## downloading diff --git a/docs/getting_started_ratings.md b/docs/getting_started_ratings.md index f68a108f..283575f8 100644 --- a/docs/getting_started_ratings.md +++ b/docs/getting_started_ratings.md @@ -1,6 +1,7 @@ --- -title: ratings +title: Ratings --- + # getting started with ratings The hydrus client supports two kinds of ratings: _like/dislike_ and _numerical_. Let's start with the simpler one: diff --git a/docs/getting_started_searching.md b/docs/getting_started_searching.md index 3649e24d..b82caa88 100644 --- a/docs/getting_started_searching.md +++ b/docs/getting_started_searching.md @@ -1,5 +1,5 @@ --- -title: Searching and sorting +title: Searching and Sorting --- # Searching and sorting diff --git a/docs/getting_started_subscriptions.md b/docs/getting_started_subscriptions.md index d5b92f63..bc463deb 100644 --- a/docs/getting_started_subscriptions.md +++ b/docs/getting_started_subscriptions.md @@ -1,5 +1,5 @@ --- -title: subscriptions +title: Subscriptions --- # subscriptions diff --git a/docs/getting_started_tags.md b/docs/getting_started_tags.md index 81906c5e..30189f85 100644 --- a/docs/getting_started_tags.md +++ b/docs/getting_started_tags.md @@ -1,5 +1,5 @@ --- -title: tags +title: Tags --- # getting started with tags diff --git a/docs/index.md b/docs/index.md index 2260ef7d..cacb83cc 100644 --- a/docs/index.md +++ b/docs/index.md @@ -4,6 +4,7 @@ hide: - navigation - toc --- + # hydrus network - client and server The hydrus network client is a desktop application written for Anonymous and other internet enthusiasts with large media collections. It organises your files into an internal database and browses them with tags instead of folders, a little like a booru on your desktop. Tags and files can be anonymously shared through custom servers that any user may run. Everything is free, nothing phones home, and the source code is included with the release. It is developed mostly for Windows, but builds for Linux and macOS are available (perhaps with some limitations, depending on your situation). diff --git a/docs/introduction.md b/docs/introduction.md index 6f60b9ce..aeea68ef 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -1,7 +1,9 @@ --- -title: introduction and statement of principles +title: Introduction and Statement of Principles --- +# introduction and statement of principles + ## on being anonymous { id="anonymous" } Nearly all sites use the same pseudonymous username/password system, and nearly all of them have the same drama, sockpuppets, and egotistical mods. Censorship is routine. That works for many people, but not for me. @@ -44,4 +46,4 @@ These programs are free software. Everything I, hydrus dev, have made is under t --8<-- "license.txt" ``` -Do what the fuck you want to with my software, and if shit breaks, DEAL WITH IT. \ No newline at end of file +Do what the fuck you want to with my software, and if shit breaks, DEAL WITH IT. diff --git a/docs/ipfs.md b/docs/ipfs.md index eac5dc96..3001aa23 100644 --- a/docs/ipfs.md +++ b/docs/ipfs.md @@ -2,6 +2,8 @@ title: IPFS --- +# IPFS + IPFS is a p2p protocol that makes it easy to share many sorts of data. The hydrus client can communicate with an IPFS daemon to send and receive files. You can read more about IPFS from [their homepage](http://ipfs.io), or [this guide](https://medium.com/@ConsenSys/an-introduction-to-ipfs-9bba4860abd0) that explains its various rules in more detail. diff --git a/docs/launch_arguments.md b/docs/launch_arguments.md index 29915ebc..2419f728 100644 --- a/docs/launch_arguments.md +++ b/docs/launch_arguments.md @@ -1,5 +1,5 @@ --- -title: launch arguments +title: Launch Arguments --- # launch arguments diff --git a/docs/local_booru.md b/docs/local_booru.md index c97fbb07..62eff377 100644 --- a/docs/local_booru.md +++ b/docs/local_booru.md @@ -1,3 +1,6 @@ +--- +title: Local Booru +--- # local booru @@ -61,4 +64,4 @@ You can review all your shares on _services->review services_, under _local->boo ## future plans { id="future" } -This was a fun project, but it never advanced beyond a prototype. The future of this system is other people's nice applications plugging into the [Client API](client_api.md). \ No newline at end of file +This was a fun project, but it never advanced beyond a prototype. The future of this system is other people's nice applications plugging into the [Client API](client_api.md). diff --git a/docs/old_changelog.html b/docs/old_changelog.html index 83c6d62e..616f0f80 100644 --- a/docs/old_changelog.html +++ b/docs/old_changelog.html @@ -33,9 +33,46 @@

changelog