Merry Christmas! To wrap up the year, I am bringing you the gift of Chinese.
This release clears out a few long-standing feature requests; We haven't had sub-500 issue numbers in a long time!
There are also a fair amount of new features, new plugins(GalleryDL is here!), existing plugin fixes, and API doodads for clients to play with.
I hope you all have an excellent end of the year -- Surely tanks will be finished in 2025.
This update bumps the Perl minversion requirement to v.5.36.0.
🖼️ Thumbnail improvements (#953 / #1059 / #1076)
Last release broke automatic generation of cover thumbnails in an attempt to spam the job queue less; This should now be fixed.
Page thumbnails improved a lot last time but were a bit slower as a result; I've reintroduced some multithreading there so that beefy machines don't get stuck for ages generating all pages if they can help it.
And finally, in what is a bit of a breaking change, the default mount directory for thumbnails has changed.
It used to be a subdirectory of the content
folder, but as recent changes made it possible to be its own Docker volume, this made the situation convoluted and hard to work with.
tl;dr /home/koyomi/lanraragi/content/thumb
is now /home/koyomi/lanraragi/thumb
.
Feel free to set it back to the old location in server settings if you want to keep the old behavior. Sorry for the trouble!
🌟 Added Rating option on WebUI contextMenu (#873, @Hanga7yr)
There's some new shorthand UI for creating and deleting rating:xxx
tags.
It might be possible to allow being able to set those ratings from the Reader page as well in the future, like what has been done for Categories... But for now this is only usable in the Index.
📚 Tankoubons are progressing (#519, #1045) (@EfronC)
While there's no UI yet, if you use the API to assign archives to Tankoubons, they will all be grouped under said tank, which will show up in search.
Tankoubons can also now have their own summary and tags -- Tankoubon-specific tags will be added to the sum of the tags of all the contained archives.
The feature is still a WIP and is disabled in the web UI;
Clients can use the grouping mechanism with the search API by using the group_tanks
flag.
🈁 Localization support and official CN translation (#617, @Haibersut)
This has been a longstanding ask to the point there are maintained translated forks of the server -- There have been attempts to bring localizations in a few times but I never managed to make anything pan out... Until now! Many thanks to @Haibersut for going through with this anew.
LRR is now (mostly) fully localizable, and will adapt its display language to whatever your browser requests (through the Accept-Language
header) if it supports it.. Which for now really just means english and chinese.
The current work translates most of the webapp - Some dynamic popup messages will remain untranslated in this release.
More languages coming soon -- If you wish to contribute yourself, feel free to check the Documentation.
🅱️ Base URL support (#363, @alethiophile)
This was another longstanding request for folks who wanted to deploy LANraragi without using an entire toplevel domain or subdomain.
You can now configure base_url_path
in lrr.conf
to allow for subdirectory deployment.
E.g. if a top-level deployment had the URL manga.example.com
, a subdirectory deployment might have the URL example.com/manga
. LANraragi can be used as normal, with all its internal URLs rewritten to be under the /manga
subdirectory:
base_url_path => "/manga",
🎁 Other changes
-
Plugin Dev QoL updates (#1091 / #1071 / #1041, @IceBreeze)
💣 Error handling from plugins is now handled more gracefully at the plugin loader level.
💥 This really mostly means you can write sloppier code than before and stop caring about error checking -- Anydie
exceptions thrown from plugins will be mirrored to a proper error message for end users.
🧩 Plugins can now use named parameters instead of the previous array mechanism - See the Documentation if you fancy migrating. -
Upload API endpoint (#1085, @psilabs-dev)
⬆️ This API implementation (using multipart/form-data encoding) allows users to perform language-agnostic archive migrations or mirrors from their existing archive servers and downloaders to the LRR server via the API, or write comparatively thin HTTP client wrappers around their downloaders that negotiate with and push to LRR during that application's runtime.
🏣 You can also attach the SHA1 hash of the file to check for file integrity and avoid corruptions during transit. -
Fix Docker healthcheck failing with proxies and ipv6 (#1040, #1117, @psilabs-dev)
🐋 The built-in healthcheck is a dumb wget and will false fail in a lot of cases... But we fixed some of them with this update.
-
Plugin updates
🆕 Add plugin to copy tags from another archive ID (@IceBreeze)
🆕 Add GalleryDL plugin (#1109, @okaros)
🧩 [ComicInfo] Add support for elements in ComicInfo files (#1047)
🧩 [Koromo] Avoid ARRAY garbage tags for unexpected koromo info.json files (#1050, @siliconfeces)
🧩 [Eze] Check for existing upload_date tag before processing (#1046, @lnhpm)
🧩 [HDoujin] Improve HDoujin info.txt parsing with additional field support (#1053, @HDoujinDownloader)
🧩 [RegexParse] Add testing for RegexParse (#1060, @siliconfeces)
🧩 [HDoujin] Add title and source extraction for HDoujin info files (#1068, @HDoujinDownloader)
🧩 [nH] Fix local filepaths not being decoded before being used for seach (#1074, @natanane)
🧩 [nH] Add support to set upload date in timestamp field using epoch stamp (#1077, @shinji257)
🧩 [FAKKU] Add option to use FAKKU plugin safely (#1082, @nivkner)
🧩 [ComicInfo] Add Title parsing and updating to ComicInfo (#1098, @shinji257)
🧩 [Pixiv] Add Pixiv summary (#1105, @psilabs-dev)
🧩 [FAKKU] Fixed Fakku summary and added thumb folder to gitignore. (#1113, @Nixis198)
🧩 [RegexParse] Add support for multiple artists in filename (#1084, @IceBreeze) -
Miscellaneous bugfixes and improvements
💎 (#1037) Use string-based comparison (cmp) rather than numeric <=> for IDs (@siliconfeces)
💎 Fix backup generation failing if content folder is Readonly
💎 Add support for .zst and .tar.zst archives (#1063, @baysonfox)
💎 (#1055) Fix tag edit fields on mobile (@alethiophile)
💎 (#1070) Fix Windows uninstall failing if wslconfig.exe is unavailable
💎 Fix archive count stat not being counted correctly
💎 Add logging to debug occasional filetype failures on mass downloads
💎 (#846) Add some basic retry logic for blank content-disposition headers
💎 Fix the issue where "Pin this Category" doesn't work in Chrome (#1132, @Reiyy)
💎 Test for file existence before removing mojo/minion/shinobu pid files (#1110, @okaros)
💎 Fix incorrectly firedpage_thumb
jobs when the cover is missing
💎 Update npm, Mojo and Minion versions
💎 Update perl requirement to v5.36 so we can use try/catch
💎 Fix incorrect search sorting in some cases (#1122, @psilabs-dev)
💎 Fix noisy logs (#1125, @psilabs-dev)
💎 Add docs and permission-fixing to the plugin sideload directory
💎 Fix search engine not halting token processing when there are no more results -
API Changes
🔑 (#1119) Add
recordsTotal
to/api/search/random
🔑 (#1085) Implement/api/archives/upload
(@psilabs-dev)
🔑 Fix JSON types on/api/info
-- This is a breaking change. (thanks @MegrezZhu for a bugfix on this)
🔑 Add a cleanersuccessMessage
to metadata update API
🔑 (#1080) Add total_archives to /api/info
🔑 (#519) Add parameter to search API to group IDs into tanks if enabled
🔑 PUT/api/tankoubons/:id/archive
is now PUT/api/tankoubons/:id
and the payload has changed to accomodate being able to set specific summary/tags for Tanks.
Full Changelog: v.0.9.22...v.0.9.30
Bowie saw Russell as predicting the data avalanche of the Internet. You can attempt to use the information it generates to shore up your preconceptions, or you can simply sit on the banks and watch an endless, ever-broadening stream of information go by. Russell “was right, mean old bastard that he was,” Bowie said in 1997.