v0.5.2 - UX Refresh, Custom Themes, Metadata Editing, and OPDS updates!
This was another huge release. I knew it was going to be big going in, I didn't expect that I'd had to split some of the features out into a separate release. This release is themed around UX enhancements and as you can see, we added custom theme support to Kavita (which was a lot of code changes behind the scenes). Admins can now either use one of our themes (eink is a new one) or build their own and encourage everyone to use it by setting it as the default theme for new accounts. Users can always change their theme based on their own needs.
We also added a side nav to Kavita. This was always my plan from day 1, but coding a side nav is no fun, so I had to wait a while till @therobbiedavis was here to do the heavy lifting. Thanks again Robbie! The side nav removes the need to have the libraries on the main page and based on my and the nightly users testing, is a huge experience upgrade. I'm excited to see what you think of it.
Another big feature is Metadata editing, something I've been looking to get to since we added metadata. Admins can now edit metadata in the UI and lock fields so that metadata updates from files do not override the custom edits done. This also allows to mark a series as 'On Hiatus', something that isn't possible with ComicInfo.xml. The edits stay in Kavita's DB. I will be assessing saving to the underlying file at a later time.
One more big feature that's not in the release title but should be is that the events widget that shows when a scan is in progress has been rewritten in a major effort to send more detailed information to the UI and ensures that only admins receive the messages when they should be protected by RBS. The widget will now show filenames when being scanned, series when they are updated or being generated for covers, and even errors that might occur, like you have an empty base folder from the library, which indicates a mounting problem. This is a really big enhancement, great to see, esp if you have a larger library or use networked storage.
Lastly, to wrap up. I finally got to re-tackle OPDS and help flatten some of the clicks users have to do and provide some better naming, which mimics the new series detail page rolled out last release (but also enhanced in this release). Kavita will now flatten based on some of the conditions of your series to reduce clicks. Search has been updated, download names as well. I hope the OPDS users enjoy it and let me know if you have ideas to improve it.
This release was a blast to work on and has many changes I can't touch on, please read through the changelog. I was lucky to be able to fix or improve a lot of different areas and features in Kavita thanks to the scope of changes the theming update required.
Some of my favorite smaller changes this release are:
- The Cover Chooser now works with urls pretty consistently
- Updating the Manga reader to use raw images giving us a much better experience on smaller screens with 'Fit to Screen' splitting mode
- Huge performance gains on Series Detail page
- Enhanced stat collection of what features users are using, like collections, reading lists, etc. I'm really excited to see what people are using so I can focus my effort in those areas.
Known Issue: Currently On Deck is not working as I want it, sometimes series will not get included on it, when they should be. I have plans to do a rewrite of this functionality for the next release. Please bear with me until then.
Added
- Added: Introducing custom theme support! Admins can now add their own custom theme files and have Kavita use them as the default for new users. Users can change their own site theme to any on the server, including Kavita's default themes. Admins can also default all users to any theme, including a custom one. See more about theme's here.
- Added: Added a hover effect to card to give more feedback to the user.
- Added: Kavita now comes with an e-ink theme out of the box, optimized for e-ink devices
- Added: Added tooltip to API regenerate button to warn user about it invalidating all existing clients.
- Added: Added file parsing support for 'Series 001 (Digital) (Name123)'
- Added: Series detail now shows reading lists where said series has some connection to.
- Added: Series detail will now show Last Read date by the user.
- Added: Implemented the ability to update metadata on series from the UI. Each field can be manually edited and locked. Once locked, no updates will occur on that field, even if the metadata source (ComicInfo) is updated. Fields can be unlocked from the UI. This does not write to the ComicInfo.xml file.
- Added: New, redesigned screens for Chapter/Volume info (now called details). This new modal screen features expanded metadata (from ComicInfo if in underlying file), ability to see the bookmarks in said Chapter/Volume, a quicker way to change cover image, and overall, better experience.
- Added: For archives, when parsing, set the SeriesSort from ComicInfo if it exists (this is a pending v2.1 draft spec)
- Added: Added ETag on headers for Bookmark and Manga images to allow browser to cache some files
- Added: Manga reader now has a modal to show all the shortcut keys
- Added: Manga reader now has a configurable background color in user settings, defaults to black
- Added: Manga reader has a new setting to disable showing screen hints, like overlay when pagination direction is changed. Users can now disable in user settings.
- Added: Cache control on reader images are cached for up to 10 mins
- Added: Added mark as read/actionables on Files in volume detail modal.
- Added: Errors that occur in background tasks, like Backup or Library scan, will now push to events widget to inform the user that said tasks were aborted. User can now click the error and get more information (or check logs for the same information).
- Added: Side nav added to the application. From the side nav you can easily reach your libraries, reading lists, collections, and user settings.
- Added: Hooked in the ability to search by release year (along with series optionally) and series will be returned back.
- Added: Filter screen now lets you filter against a series name, using same contains logic as search. (https://feats.kavitareader.com/posts/93/filter-by-series-title)
- Added: Download role will now block users over ODPS from downloading items. OPDS-PS will still function.
- Added: Added stat collection on new features to help focus development efforts. New stats include: Number of Users on an install, Total Files per Install, Admin's theme, Admin's reading mode, Number of collections and reading lists, and if OPDS is enabled.
- Added: When deleting a library, send Series Removed events for each series in said library, to remove from user's pages without a refresh
Changed
- Changed: Updated to Angular 13 and updated many dependencies
- Changed: Updated to .NET 6.0.2
- Changed: Upgraded to Bootstrap 5
- Changed: Manga Reader will now use regular images to render pages to the user. A canvas (previous implementation) will be used solely for page splitting. This has improved resolution for Fit to Screen rendering on smaller devices.
- Changed: Dark mode is now Custom theme
- Changed: A ton of work behind the scenes to unify the styles we user per component.
- Changed: A major rework to the events widget to provide detailed information about what is occurring during library/series scans and cover refreshes. It will now send filenames being scanned, what series is being updated or where cover generation is.
- Changed: Changed tag badges on the filter to be green instead of outline on dark theme.
- Changed: All toasts relating to task queuing now have 'info' instead of 'success' styles.
- Changed: Width of search bar now spans entirety of navbar on all viewport sizes.
- Changed: Series Detail page is now generated completely in the backend. This allows for greater flexibility and speed. On average, users should see 50% speed increase on page load and site responsiveness.
- Changed: Continue reading or Read button on series detail is now enabled on load. You can skip waiting for the volumes and chapters to load.
- Changed: Series Detail page will now show Books under Books tab only
- Changed: Series Detail page for Book Libraries will now render titles as 'Index - Book title'
- Changed: Chapters/Issues tab will no longer show any chapters that are just a volume (ie Btooom! - v01.cbz)
- Changed: Removed file parsing support for 'A Compendium of Ghosts - 031 - The Third Story_ Part 12' due to complexity in parsing
- Changed: CopyFilesToDirectory will now allow for one duplicate copy over and put (2). This allows for old bookmarks to handle duplicates on download.
- Changed: Removed no-connection route and component since it is no longer in use by the app.
- Changed: Series Detail page now works slightly different. Library type Books will never send chapters back. It will only send Specials or Volumes back. Volumes are renamed to be more user friendly. Non-book types had many fixes to streamline what renders on the screen.
- Changed: Made the badge expander button smaller to match tag badges
- Changed: Log message for Scan Service has been tweaked to make it easier to find total scan time vs scan time for a chunk of work.
- Changed: Multi-select typeaheads now have a close icon to clear out the field
- Changed: Fixed up some styling on Edit Series modal for phones.
- Changed: (Performance) Optimized some code in ArchiveService to avoid extra memory allocations.
- Changed: Tweaked on deck to only show series that have progress within 30 days.
- Changed: Ignore @recycle directories on QNAP devices
- Changed: Disabled some options in the menu when you're in a mode that doesn't support for Manga Reader
- Changed: Moved library type resolution into getChapterInfo resulting in less API calls when starting a new manga to read
- Changed: Changed the layout of the extended settings menu on manga reader
- Changed: Refactored Invite user setup to shift the checking for accessibility (network) to the backend and always show the link to the user. This should help with users that are facing issues. Email sending is still in place, but users can easily bypass without looking in logs.
- Changed: Removed On Deck page and replaced it with a pre-filtered All Series page (filtered to In Progress series only)
- Changed: Cover chooser via url now works much more reliably. The whole implementation was changed to download the file into the temp directory. The image is non-executable and is cleaned up on the daily cleanup.
- Changed: Removed libraries from dashboard for now. Use side nav instead.
- Changed: Moved Changelog from admin tab to user dropdown under Announcements.
- Changed: You can now click library from admin library tab (https://feats.kavitareader.com/posts/90/link-to-a-library-from-the-library-admin-page)
- Changed: Scroll is now on the body and not the whole page. This reduces page jank on nav bar when loading a page with overflow
- Changed: When navigating OPDS feed for a series, now shows the items mimicking how Series Detail does in the UI
- Changed: Adjusted all headers in the app to h2
- Changed: When exploring an OPDS feed, Chapters will now be mapped to Issues/Books depending on the library type
- Changed: When exploring an OPDS feed, if a Volume only has 1 chapter inside it, we flatten the navigation and send a chapter which emulates the volume.
- Changed: Updated Search description (OPDS-SE) to inform user they can search by reading list or collection tag as well.
- Changed: (Performance) Updated some String Equals to avoid an extra 90 bytes allocation
- Changed: (Performance) Optimized Normalize method to reduce memory pressure by 100MB over the course of a scan (16k files)
- Changed: When sending the chapter file on OPDS, format the title of the FeedEntry more like Series Detail aka improved file download names in OPDS.
- Changed: When an epub metadata key is not correct, even after we attempt to correct it, ignore the inlining of the style so the book is still readable
- Changed: Removed cache directory from UpdateSettings validation as we don't allow changing it.
- Changed: When searching against series, use normalized name as a search parameter. This will allow users to type dont and still get don't back.
Fixed
- Fixed: Fixed the wrong hover color used on bulk add to reading list
- Fixed: Fixed an issue when swiping, sometimes swipes would trigger a card click
- Fixed: Fixed a bug where user preferences wasn't saving book reading direction
- Fixed: Fixed a bug where clicking 'recently added' on dashboard wouldn't load up /recently added page
- Fixed: Fixed a bug where no results was showing on search, when searching for a library
- Fixed: Fixed broken wiki links within Kavita after we reorganized the wiki.
- Fixed: Fixed a bug where reading lists and collection's summary wouldn't render new lines
- Fixed: Fixed a bug where books were sorting incorrectly when series_index had non-zero decimal (1.0, 1.2, 2.0)
- Fixed: Fixed a bug in get previous chapter where it could bleed into chapters or specials after the first volume
- Fixed: Fixed a bug where ComicInfo count can be a float and we threw a parse error expecting it to be an int
- Fixed: Fixed a bug in download bookmarks which didn't properly create the filenames for downloading, resulting in an empty zip
- Fixed: Fixed an issue where card detail layout wouldn't refresh the library name on the card between pages
- Fixed: Fixed an issue where a check to scrolling page back to top was missing in the manga reader
- Fixed: Fixed a bug where cleaning up collection tags without Series was missing after editing a series
- Fixed: Fixed a bug where when adding multiple series to a reading list, an error was thrown on UI, but it was successful.
- Fixed: Fixed a bug in GetContinuePoint for a case where we have Volumes, Loose Leaf chapters and no read progress.
- Fixed: Fixed a bug where archives with __MACOSX inside would break the reader during flattening
- Fixed: Fixed a bug where confirm service rejection wasn't handled correctly
- Fixed: Fixed an issue where checking if server was available for email services on a local ip or loopback wouldn't fail correctly and use would be stuck 'Checking for Availability' forever.
- Fixed: Fixed a bug where if GetImage from ReaderController threw an error, the chapter directory would be emptied, but the folder itself wasn't deleted.
- Fixed: Fixed an issue where fullscreen mode in webtoon reader would stretch the images
- Fixed: Adjusted the styles on dashboard for first time setup and used a routerlink rather than href to avoid a fresh load
- Fixed: Fixed a bug in the filter format code where it was sending the wrong type on filtering screen
- Fixed: Don't show a pointer if the carousel selection title is not actually selectable
- Fixed: Fixed a bug where after going into webtoon reader mode then leaving, the bookmark effect would continue using the webtoon reader mode styling
- Fixed: Fixed how continuous trigger is shown so that we properly adjust scroll on the top (for prev chapter)
- Fixed: After all migrations run on startup, save the new installed version number to database and send that to KavitaStats (if enabled)
- Fixed: Fixed a bunch of typeahead bugs when using keyboard
- Fixed: Fixed a bug where some bad page checking code broke book reader when navigating to the last page naturally
- Fixed: Fixed label order for Prev/Next on book reader
- Fixed: Fixed a bug on webkit browsers (apple devices) where scroll would fail as document wasn't fully rendered in book reader.
- Fixed: Correctly validate and show a message when a user is not an admin or has change password role, when going through forgot password flow.
- Fixed: Fixed a bug where + and some other symbols weren't allowed in email invites, but should have been
- Fixed: Fixed some rendering and validation issues around inviting users and the underlying screen refreshing
- Fixed: Fixed the UI complaining of an error when adding a chapter to a reading list via bulk selection, when the chapter already exists. The UI will now show success, even if no operation occurred.