Skip to content

LANraragi v.0.9.0 - Hallo Spaceboy

Compare
Choose a tag to compare
@Difegue Difegue released this 31 Oct 13:07
· 134 commits to master since this release
3e10960

ecbf30a6df1c84691bc670a2fbb5398a5f99bc71b03b79c6066e576a43e67799

LANraragi release jumpscare! awooooooooooooo

Happy Halloween! 🎃

I wanted to hold off this release until it had a big feature deserving of the major version update, but since it's been so long...
A terrifyingly huge pile of QoL stuff has built up in the meantime! I think you'll find something to enjoy in here.

There's also been some community activity recently, including:

It's not a spooky release without some cold sweat, right? So here's a:

🛑🪟 WARNING FOR OLD WINDOWS VERSIONS 🛑🪟

This new update jumps the Windows Linux distro by quite a few software versions (See "Add AVIF/JPEGXL support to Windows" below), including non-reversible updates to Redis 7 for the database.

I've received spare reports of large databases on WSL1 breaking with the new Redis version and being unable to save changes, so please make a backup of your database folders before updating in case you need to roll back!
In case you updated anyway and hosed yourself, WSL2 should work and allow you to access the app for backup.json generation.


All set? Let's get to the actual changes:

🧛 (#789) "Save archive title" is now a global preference for all plugins

image

With this change, plugins are no longer responsible for handling whether they should update the Archive title or not; They can always just hand off a title suggestion, and it'll only be applied if you enabled this global preference in Plugin Configuration.

It defaults to ON, so you should very much make sure all your plugin settings are set correctly upon updating.

🍬 Archive overlay improvements

image

The reader overlay now features a few additional shortcuts if you're logged in, including a Delete button and a quick Category UI so you can see at a glance which Categories a file belongs to, and add/remove them as you please.

It now also shows the Archive name on top!

🦇 Add AVIF/JPEGXL support to Windows builds (#626 / #792 / #805)

Through the arcane magicks of... Alpine Linux updates!
image

The Horror!

Windows was previously stuck on Alpine 3.12 due to musl's DNS changes breaking downloader support -- As a result they were missing out on recent ImageMagick updates, including the stuff needed for avif/jxl.

3.18 fixed the mess, so I'm quite pleased to finally be rid of dual-legacy Docker image building for the time being.
(the legacy Dockerfile will remain maintained for a bit longer for the poor chaps stuck on aging Synology hardware... update already lads I'm all for reducing ewaste but surely there's a more up to date community linux or something)

🍡 JPEGXL thumbnail support (#825 - @polak14)

image

JPEGXLBROS WE'RE SO BACK unless you're using Chrome because Google decided your meme format didn't have a future

This adds an optional toggle in settings to use JPEGXL instead of JPEG for thumbnail generation. Your existing thumbnails won't be regenerated however, so you should use the "Regenerate all thumbnails" option if you want to switch everything to JXL.

JXL brings slight size improvements, and has less artifacting if you're using high quality thumbnails:

du --apparent-size  
1404    ./jpg sample (HQ thumbnails)
1152    ./jxl sample 
21.88% diff

1180    ./jpg scale (LQ thumbnails)
906     ./jxl scale
30.24% diff


Considering the wins, I might use JXL in "Resize images in Reader" later down the line?
I guess browser support would have to get a bit closer(doesn't even work in Firefox stable smh my head), but with Apple supporting the format it'll probably happen at some point.

💀 Plugin for Koushoku/Anchira YAML files (#833 - @siliconfeces)

image
This plugin adds support for the info.yaml files you can find embedded in files coming from KSK(rip) or Anchira.
We had a full KSK plugin set with downloader and everything, but the website died before we could ship it lmao

This also adds a YAML parsing library(YAML::Syck) to the stock codebase modules, so writing future plugins that parse yaml should be easier.

🧟 LRR now supports OPDS-PSE 1.2 (#791 - @kuroneko995)

OPDS Page Streaming Extension 1.2 adds support for tracking the last time reading progress was updated, so that clients can either use the server progress or their own.

As with everything OPDS, this is quite niche and only Panels for iOS supports it... But as a bonus for API clients, LRR archive objects now expose a lastreadtime value you can use.

👻 Tankoubons are (almost) here! (#519 / #818 - @EfronC)

This update introduces a new way to classify your files, Tankoubons.

Much like Categories, Tanks allow you to regroup multiple archive IDs...
Except that unlike Categories, Tanks have a specific order and will hide their contents from the Archive list and search, effectively allowing you to only show one entry for multiple files, with chapters.
Sounds pretty neat! Except...it's not actually finished! 🫠

0.9.0 only features the API endpoints for tankoubons, allowing API clients to get a headstart on implementing adding/removing archives to/from tanks. The web UI and implementation in search will come in a future release.

🎃 Other changes

  • (#864) Make stats page faster when file access is slow (@siliconfeces)

    📈 Historically, the stats page used to do filesystem operations to count your total archive count and content folder size.
    📉 This could be slow if you were using software forbidden by god cloud-based filesystems.
    📊 Stats now exclusively use the database to compute their information - It might not be filesystem-accurate at all times as a result, but with time I've changed my mind on this and think it's probably better to be database-accurate so we're consistent.

  • Dev environment changes (@siliconfeces)

    💎 The Redis hostname can now be overridden by the environment variable LRR_REDIS_ADDRESS
    🐳 A docker-compose file has been added and documented if you want to setup an environment where the Redis database is in a separate container. it's the docker way™️....

  • (#811) Fix broken encoding for titles (@siliconfeces)

    🀄 get_title didn't handle text encoding properly, which caused non-trivial characters getting mangled in the "add to/remove from category" toasts from last release.

  • (#589) Update themes to use webkit-line-clamp

    〰️ This adds basic support for two-line titles in thumbnail view.
    🏬 If one wants unlimited lines, it's now as easy as removing -webkit-line-clamp: 2; from div.id2 a. Use table view if you want more tbh

  • (#840) Implement title similarity scanning for the Hentag plugin (@siliconfeces)

    🔎 This plugin will now try to find the most similar title to your archive's, instead of relying on exact matches.
    📜 This has been added to a core function (LANraragi::Utils::String::most_similar($title_hint, @titles)), so feel free to reuse this for your own plugins!

  • (#866 - #823) Remove loading='lazy' from Reader (@siliconfeces / @URenko)

    🐌 Lazyloading images was pretty much broken in different ways in both FF and Chrome, so it's been removed for now.

  • (#874) Add missing package-lock.json file and switch to npm ci

    🏗️ This enables easily reproducible builds. I don't know how those newfangled npm things work, okay?
    📦 I'm not quite sure the builds are perfectly reproducible considering cpan installs can use different/later versions of Perl packages depending on the options you give it...ah well

  • Update secret generation so it doesn't only rely on machine hostname

    🧙 The mojo secret is used to authenticate login cookies - Using the hostname alone was a bit weak, so it's now coupled with a randomly-generated string.
    ㊙️ The secret string is generated and stored in the app root folder -- If LRR_DATA_DIRECTORY is declared however, it'll be stored there.

  • Miscellaneous bugfixes and improvements

    💎 (#769) Add missing search cache invalidation to set_isnew
    💎 (#788) Add some more information to the epub warning
    💎 (#792) Eval thumbnail minion job and fail it properly if thumbnail fails to gen
    💎 (#798) Don't add non-ascii artists to EH URL searches
    💎 (#807) Use File::Temp rather than homebrew stuff (@siliconfeces / Additional fixes in #827 - @polak14)
    💎 (#812) Fix "Uncaught TypeError" when attempting to navigate past last page in infinite scroll mode (@siliconfeces)
    💎 (#822) avoid await at top level (@URenko)
    💎 (#824) add magazines to koromo (@polak14)
    💎 (#834) Fix Batch tagging overrides not accepting utf8 text
    💎 (#856) Make permission fixing optional (but default) (@siliconfeces)
    💎 (#868) Reuse generate_archive_list when possible to simplify codebase (@siliconfeces)
    💎 (#871) Remove duplicate tags when updating DB (@siliconfeces)
    💎 (#872) ajax cache to reduce server load (@ndbiaw)
    💎 (#878) Fix Redis password authentication (@TomaSajt)
    💎 Add trace-level logging to backup generation
    💎 make sure cpan packages are installed before running tests
    💎 Fix LOADING redis check being bypassed by settings migration
    💎 Fix thumbnail extraction not accounting for covers properly when used from the API
    💎 Add a script for npm run get_version because perl oneliners are hell to maintain
    💎 Move appendonly set to redis.conf instead of app boot
    💎 Delete BlacklistMigrate plugin as we're long past 0.8.0 now
    💎 Handle error codes better with nH parsing
    💎 Update to Mojolicious 9.34

  • API Changes

    🔑 Archive objects now expose a lastreadtime value.
    🔑 Updating progress will also update lastreadtime, and return the value in the JSON response.
    🔑 /api/tankoubons endpoints are available and documented.
    🔑 /api/archives/:id/tankoubons has been added to know which tankoubons a given archive ID belongs to.

Full Changelog: v.0.8.90...v.0.9.0

Conjured up in a handful of days in the studio, “Spaceboy” was a liberating track for Bowie, who rode its beat and reveled in the trash. This chaos is killing me! he screamed, sounding delighted to die, mocking his past selves with “do you like girls or boys? It’s confusing these days. [...] “Spaceboy,” one of the last great Bowie pop moments, never quite seemed his own property; it was fluid, a coalescing held together by a beat that seemed to invade it.”