Kavita

Kavita is a fast, feature rich, cross platform reading server. Built with the goal of being a full solution for all your reading needs. Setup your own server and share your reading collection with your friends and family.

GPL-3.0 License

Stars
5K
Committers
95

Bot releases are hidden (Show)

Kavita - v0.7.1 - Stats Hotfix

Published by majora2007 over 1 year ago

Well, I knew adding 73K lines of code in the last release would cause a few bumps in the release and it looks like I was right. A few users have pointed out some minor issues that escaped release testing and this hotfix closes those issues.

If anyone wants to help ensure these type of hotfixes aren't necessary, please join our Release Tester role in discord and help out in release testing. It's about a week of your time before release and drastically helps catch issues before they go out to our users.

Known Issues

  • Synology users are having issues running their docker containers, likely due to PGID/PUID issues. If anyone is familiar with Synology, please comment on the open issue or jump in discord and engage a team member. There is a workaround in the issue.

Fixed

  • Fixed: Fixed a bug where SignalR wasn't sending events to the UI (and broke Komf)
  • Fixed: Advanced tab on Library settings was not working
  • Fixed: Added timeouts on some regex parsing to prevent malicious filenames timeout attack
  • Fixed: Some users in GMT+1 were having invalid utc dates, new migration to manually correct those.
  • Fixed: Fixed an issue where convert covers to webp was saving an invalid path and made covers look like they didn't exist
Kavita - v0.7 - Who doesn't like Stats?

Published by majora2007 over 1 year ago

Important
You and users MUST log out and log back in after updating for Kavita to function correctly!

v0.7 is finally here and boy is it big! When I started v0.7, I had planned for just a reader refresh and stats, but due to the 4 vacations I had during the development, so much more got added in. This is a massive update with many areas touched, tweaked, and added to, including a lot of bug fixes brought by our community. Let's start with the name of the release.

Stats:
Since the beginning of Kavita, I've always wanted rich metadata and cool stats to understand how much my users and I are reading, what's hot on the server, when is the most popular day for reading, etc. That's what the main feature of this release is about. Adding this cool contextual information into Kavita and presenting to not only the admin, but letting the users see their individual statistics. For example, I've learned since I started this project 2 years ago till this year, I've read 200K pages of manga. I hope you all enjoy the statistics and if you have any ideas, jump on our feature site and let me know.

Image Reader:

Last release I had already started a major cleanup of the image reader (or what I usually call the manga reader), but wasn't able to wrap it up and give it the polish needed before the release, so this release window, I polished until I thought I was looking at a mirror. My focus was not only on improvement on layout but also getting the double page reader down correct and that's what I did. I worked closely with a few members of the community (Thank you @hgourvest and @handy1928) to ensure the double reader works exactly as you'd expect and along the way, added a cool new effect to emulate a comic book page spine). I also added the ability to change pages with swipes, something users have requested. I still have some more items planned, but for now, the reader is solid.

Customization:
Everyone loves customization and so do I, which is why this release I made progress on an overarching set of features I want to add to Kavita. This customization added gives you the power to choose how content from libraries gets included or processed. With the new Library Settings, you can configure certain libraries to not show on any dashboards, in search results, or recommendations or a mix and match. In addition, you can allow or deny the auto creation of Collections (driven from SeriesGroup tag) and just to top it all off, add a custom image for the library icon, so it's easier to distinguish. I hope you enjoy the flexibility these enhancements bring and look forward to what I have in store in future releases.

Manga Manager:
I want to also give a big shout-out to @ThePromidius, the creator of our Tachiyomi plugin, who has built what I believe to be the best ComicInfo tagger around, Manga Manager. Over the past year, he has been putting a lot of time and effort into a rework of his tool and recently released the beta. It's insanely fast and has the potential to outshine all other tools out there. I encourage you to check it out. I have taken a role in his project to help him deliver on a combined vision.

Authentication:
Not so much as something new, more of an alert. All users must re-authenticate (log out then in again) for this release. I made some internal changes in the authentication tokens to allow for some optimizations in our API layer. Again, All users must re-authenticate after update.

Lastly, I want to shout out to some miscellaneous enhancements, like OPDS which received a touch up to include more metadata (authors, genres) in the feeds or to prepend reading order number in reading lists due to Chunky not respecting the spec. Kavita also now auto-creates Collections if SeriesGroup tag is filled out. If you're wondering what about reading lists, I got you covered (in another release). I worked up the code but didn't have time to polish it all out.

With all things said, I appreciate the community for coming out and helping with support and reporting issues and feature requests. Many feature requests were implemented in this release. Thank you to everyone that has reported issues. I encourage the community to speak up if they are facing issues so I can get them fixed.

Added

  • Added: Added a new setting under Media to allow covers to be saved as WebP. This results in a x3 savings. There is no task to perform the conversion, just use Refresh Covers on the library.
  • Added: Series Detail page now has a dedicated Want to Read button for toggling and also let's you quickly see this is in your want to read list.
  • Added: Series Detail page will now show a tag badge showing unread chapters when there is reading progress on the Series Image.
  • Added: When there is progress on a series, the continue point will now pretty print under the series cover image. This will only work with volumes and loose leaf chapters. Specials are not shown due to spacing issues.
  • Added: Added the ability to turn off folder watching for individual libraries in new library settings Advanced tab.
  • Added: Added the ability to turn off including a library's series on Dashboard page.
  • Added: Added the ability to turn off including a library's series on Recommended page.
  • Added: Added the ability to turn off including a library's series and any derived info in search results.
  • Added: Added the ability to upload custom images for libraries (only visible in side nav). Customize to your hearts content!
  • Added: Added release date on the reading list item, if it's set in the underlying chapter.
  • Added: Added an Open API spec generator that gets saved with codebase. This enables external API reference
  • Added: From library settings, admins can now kick off a forced series scan, which ignores last scan date and will act more like a first time scan. This is expensive, but useful if you need to run a full scan after Kavita has migrations.
  • Added: New task called Analyze Files which is used to run a one time migration that scans all files and calculates extension and file size information about them for the statistics view.
  • Added: Added many new visualizations for server-wide statistics: Total Series, Total Volumes, Total Files, Total Size, Total Genres/People, Top 5 release years, Most active users, Popular Libraries (by read events), Popular Series (by read events), Recently read series, Top Readers (with breakdown of Comics/Manga/Books reading hours and against time periods), Format breakdown and size, Publication Status breakdown, Reading History over time, and most popular reading day.
  • Added: Added basic user stats: Total Pages Read, Time Spent Reading, Chapters Read, Last Active, Reading History
  • Added: Added back old PDF to image rendering code just for Tachiyomi, so users can get maximum use from the application.
  • Added: Added Genre and Authors to Series level OPDS feeds.
  • Added: Added summary to Volume and Chapter feeds.
  • Added: New API for getting a given chapter's pages' file dimensions
  • Added: Added a Save preferences button to save a few preferences from the manga reader directly to user settings.
  • Added: Double and Double (manga) now have a shadow effect to emulate a real comic book. You can enabled this via user settings under 'Emulate comic book'
  • Added: Added percentage of a given library and average hours read per week to user stats
  • Added: When there are multiple files for a chapter, show a count card on the series detail to help user understand duplicates exist.
  • Added: Added Size throughout the UI and in the APIs for CDisplayEx integration
  • Added: Ability to provide environment variables PUID and PGID which allow running Kavita as a non-root user in a Docker container. If you do not specify these variables, Kavita will run as root. If specified, user and group 'kavita' will be created in the container with the specified UID and GID if they don't already exist. Kavita will then run as that user. (Thank you @mikeymakesit for the contribution)
  • Added: More aggressive pre-caching for next and previous chapters. This allows for less lag spikes when switching to another chapter in continuous reading mode on the second page on slower networks.
  • Added: Manga reader now has swipe support. You can swipe left, right, up, and down. Swipe will trigger the appropriate page change based on reading direction and reading mode (up/down or left/right). If there is area to scroll, the reader will make sure you hit the end and require another swipe to trigger the page change.
  • Added: Users can now click the Words Read count on user stats to view a year over year count
  • Added: Added a new Yearly stat table for counting files over the years. This is not hooked up to the UI, but will be in a later release.
  • Added: Added new statistics for analytics (Kavita Stats): users with emulate comic book enabled, percentage of libraries with folder watching enabled, percentage of libraries included in search/dashboard/recommended, total reading hours, is server storing cover images as webP.
  • Added: New server setting for Host name. If the server sits behind a reverse proxy, this can be set in Host Name and host name will be used for link generation and accessibility checks (aka if the server can be reached from outside the network) will be skipped, thus an email will always send.
  • Added: Added the ability to allow a library to generate Collections from SeriesGroup tag in ComicInfo.xml
  • Added: New setting in Library settings which allows for Auto Collection generation to be turned off for a library.
  • Added: Added a new JWT Claim to allow getting UserId throughout the codebase. All users will need to reauthenticate.
  • Added: Added UTC Dates throughout the application. They are not exposed in API, but will come later with localization work. For now, they will be in sync with non-UTC dates.
  • Added: (API) ChapterDto from series/chapter and ReadingListItems now have a field LastReadingProgressUtc, which contains the latest reading progress for the authenticated user. This is for CDisplayEx integration.
  • Added: Added Library name and File Size for reading list items for CDisplayEx
  • Added: Allow changing listening IP addresses from server settings to one or multiple addresses. Defaults to 0.0.0.0,::. This is not available for Docker users. (Thank you @Kupferhirn for your contribution)
  • Added: CDisplayEx now supports Kavita. Thank you @hgourvest.

Changed

  • Changed: Reworked messaging on Media tab to provide more information about when WebP can be used and what browsers support it.
  • Changed: Changed compact numbering to extend to one decimal place (20K -> 20.5K) and applied it to Page Length.
  • Changed: If an epub has an invalid language tag set, drop the language altogether rather than saving the invalid tag and later throwing an error
  • Changed: Tags, Collections, Genres, and People are all now shown alphabetically throughout the app.
  • Changed: Improved support for partial volumes (1.5) in Comic libraries
  • Changed: Series Detail buttons now use a proper tooltip
  • Changed: Metadata filter Release Year has been renamed to Release to fix up some smaller screen rendering issues.
  • Changed: Changed the library settings modal to be a streamlined, wizard-like (for new libraries only) modal.
  • Changed: You can now access library settings from side nav
  • Changed: When typing the library name in Library settings, the name is checked in real-time.
  • Changed: Refactored the design of reading list page to follow more in line with the list view.
  • Changed: Redesigned the edit collection tag modal to align with new library settings and provide inline name checks.
  • Changed: Redesigned the edit reading list modal to align with new library settings and provide inline name checks (and ability to update the name)
  • Changed: Split each (image) renderer up into separate classes to separate logic and make support much easier
  • Changed: Progress reporting now requires LibraryId to be passed (api/reader/bookmark). OPDS-PS will reflect this.
  • Changed: (Performance) Reduced 4 spots where JOINS were occurring when the extra data wasn't used.
  • Changed: Reading list items will prefer book title from Book libraries
  • Changed: Reading list items in OPDS will now use the full formatted title, like the Web UI does in addition to series name
  • Changed: Reading list items will prepend their order as Chunky does not respect the OPDS sepc.
  • Changed: Users can now send non pdf/epub to their devices, so long as they are not Kindle. Requires latest Kavita Email service.
  • Changed: Some areas in the UI, like Last Active will now show live updates against the date instead of detailed date information (ie a minute ago)
  • Changed: ChapterInfo api will now optionally send file dimensions if requested.
  • Changed: Double and Double (Manga) readers will now NOT show double pages in the following conditions: On first page, next page is a wide, current page is a wide, on last page.
  • Changed: When switching from single renderer, double renderer will now be smart about page pairs and can put you back a page to ensure you're reading pairs of pages correctly.
  • Changed: First time run of Kavita will now wait 12 hours before it sends an install to stats server. This gives users the option to turn it off and gives users the chance to check out the software without muddying up our numbers.
  • Changed: (Performance) Slightly sped up word count for epubs
  • Changed: (Performance) Replaced WebP conversion with NetVips, which is drastically lighter on memory and CPU
  • Changed: Progress dtos now have LastModifed timestamp on them for CDisplayEx API needs.
  • Changed: Jump bar and jump bar resuming are disabled when there is a custom sort present
  • Changed: (Performance) Reduced an additional db call in chapter info API (readers)
  • Changed: Added messaging on Media tab to help the user understand to run the convert covers to WebP, after modifying the setting.
  • Changed: On phone, when applying a metadata filter, when clicking apply, collapse the filter automatically.
  • Changed: Changed OPDS to be enabled by default for new installs. This should reduce issues with users being confused about it before it's enabled.
  • Changed: Made the unread badge smaller to avoid collision with new card count on series detail
  • Changed: Default layout mode is now called Scroll to better reflect how it operates.
  • Changed: Docker health checks will not log at all anymore
  • Changed: Changed Word Count to Length to match the way pages work on info cards
  • Changed: Made reading time more clear when min hours is 0
  • Changed: Apply more aggressive coalescing when remapping bad metadata keys for epubs.
  • Changed: Reduced the padding between icons and text in side nav items
  • Changed: When clicking on an activity stream header from dashboard, show the title on the resulting page.
  • Changed: Moved the bottom menu on the manga reader up a bit for iOS devices which have a 'handlebar' that can interfere with the buttons
  • Changed: Swallow all noisy messages that are from RequestLoggingMiddleware when the log level is on Information or above.
  • Changed: All loading indicators in the app are now consistent
  • Changed: Updated the word count calculation to be more accurate by taking a book's word count and multiplying by the percentage of the book read.
  • Changed: Images are cached more aggressively. The downside is that it can take up to a minute after a cover change to accurately reflect, but the app is more performant.
  • Changed: After a download is zipped up (like a series download), delete the temp folder as it's no longer needed (as opposed to waiting for nightly task).
  • Changed: server/accessible API will return true if the host name is set.
  • Changed: Loading indicator in the manga reader is now center positioned
  • Changed: Updated app to Angular 15, including many dependencies and font upgrades
  • Changed: Dropped support for iOS 12.5. Supporting old versions was preventing improvements. A very small percentage of our userbase used these devices.
  • Changed: Not read badge on cards now follows the top right curvature of the card
  • Changed: (Performance) Refactored Genre and Tag maintenance methods in the Scan loop to be faster for lookups.
  • Changed: Ensure when grabbing comma separated tags from that we remove duplicates
  • Changed: Updated many spelling errors and wordings to be more clear (Thank you @DomenicF for the contribution)
  • Changed: (Performance) Sped up the following APIs: collection/search, download/bookmarks, reader/bookmark-info, recommended/quick-reads, recommended/quick-catchup-reads, recommended/highly-rated, recommended/more-in, recommended/rediscover, want-to-read/

Fixed

  • Fixed: Fixed: Fixed an issue with adding a new device
  • Fixed: Fixed a bug where FOREIGN KEY constraints could be thrown when deleting Series with relations
  • Fixed: Fixed a missing check in update library to ensure no libraries are created with same name
  • Fixed: Fixed a bug where updating library name wouldn't emit an update event to automatically update side nav
  • Fixed: Fixed a bug where reordering the list items could sometimes not update correctly with drag and drop.
  • Fixed: Fixed a bug where duplicate collection tags could be created
  • Fixed: Fixed a bug where collection tag normalized title was being set to uppercase.
  • Fixed: Fixed a bug on series detail when bulk selecting between volume and chapters, the code which determines which chapters are selected didn't take into account mixed layout for Storyline tab.
  • Fixed: Fixed a bug where epubs packed with Sigil that had invalid keys wouldn't render TOC. This change will apply extra fallback mapping to help when keys are referenced incorrectly (ie '../Text/file.xhmtl' vs actual of 'Text/file.xhtml' or just 'file.xhtml')
  • Fixed: When an epub has a malformed page, Kavita now presents a much better message to the UI than before.
  • Fixed: Fixed up the edit series relationship modal on tablet viewports
  • Fixed: Fixed a long standing bug where fit to height on tablets wouldn't center the image in manga reader
  • Fixed: Fixed an annoying bug where on mobile, the metadata filter drawer would open automatically for no reason.
  • Fixed: Fixed a bug where pagination area would be too small when the book's content was less that height on default mode in epub reader.
  • Fixed: Fixed an ordering issue where Volume 1 was a single file but also tagged as Chapter 1 and Volume 2 was Chapter 0. Thus Volume 2 was being selected for continue point when Volume 1 should have been.
  • Fixed: Fixed fit to width on phones still having a horizontal scrollbar
  • Fixed: Fixed a bug where there is extra space under the image when fit to width and on a phone due to pagination going to far
  • Fixed: Fixed a bug where fit to height could still have a scrollbar due to the horizontal scrollbar messing with calculations
  • Fixed: Fixed a bug in iOS where fullscreen wasn't triggering
  • Fixed: Removed an additional unneeded save progress call on loadPage
  • Fixed: Snap points for double page reader are now working correctly in all conditions
  • Fixed: Webtoon reader will use max width of all images to ensure images align well
  • Fixed: On Original scaling mode, users can use the keyboard to scroll around the images without pagination kicking off.
  • Fixed: Fixed a bug where reading list detail wouldn't show the picture that was set.
  • Fixed: Fixed a bug when clicking on a series rating for the first time, the rating wouldn't show in the modal.
  • Fixed: Fixed a bug on scroll mode with immersive mode, the bottom menu bar could clip with the book body
  • Fixed: Fixed a bug in reading lists where when deleting an item, order could be miscalculated.
  • Fixed: Ensure all series sort orders by SortName are using case invariant
  • Fixed: Fixed a bug where if during new word count calculation, new word count is zero, restoring the old count wasn't working.
  • Fixed: Don't show 'not much going on' when we are actively downloading in event widget
  • Fixed: Fixed an issue where folder watching could be activated when creating a new library, despite it globally being set off
  • Fixed: Fixed a few components where lifecycle hooks weren't being called due to not implementing interface
  • Fixed: Fixed a bug in reading list title generation to avoid Volume 0 if the underlying file has a title set.
  • Fixed: Fixed an edge case in epub reader where epubs with bad keys, when falling back to hacks, could have multiple keys that match the hack algorithm and would throw an error.
  • Fixed: Fixed a bug where non-admins couldn't update their OWN reading lists. Reading lists are user-based and not only for admins.

Theme

  • Added: Added a new css variable for controlling size of the read triangles: --card-progress-triangle-size
  • Added: Themes can now override the color of the header on mobile devices via --theme-color and Kavita will now update both theme color as well as color scheme.
  • Changed: Themes no longer need to maintain a complete copy of all css variables, but just include variables they want to override.
  • Changed: Updated theme support to be able to customize the tile color dynamically via --tile-color
  • Changed: Removed --manga-reader-bg-color as not used

Removed

  • Removed: Removed an extremely old check for docker containers that had the data/ mount, when Kavita moved to config/ in Nov 2021.
  • Removed: Dropped support for iOS 12.5. Supporting old versions was preventing improvements. A very small percentage of our userbase used these devices.
Kavita - v0.6.1 - Security Patches + Hotfix

Published by majora2007 almost 2 years ago

I took a one week vacation after the v0.6.0 release and it seemed there were a few issues that cropped up, so here is the hotfix. This hotfix fixes high utilization that a few users have reported. If you were one of these users, after this hotfix you should be clear to turn on folder watching again. If you're experiencing issues, please drop by support again.

In addition, there were a few security vulnerabilities exposed via Huntr. As usual, the details will be disclosed after a few days. Also a few parsing changes made release broke grouping for light novels that were not tagged correctly. This hack was added back in to help users not have to re-tag thousands of files (but I do encourage it).

Lastly a small but annoying bug where when reading in the manga reader, going backwards or moving to the next chapter could cause the screen to not update the image but the page changed. This is now squashed for good.

Added

  • Added: Added a jumpbar to bookmarks page

Changed

  • Changed: Updated all non-authenticated APIs to return more generic messaging back to the user and log more detailed information to avoid any attack vectors.
  • Changed: Log level defaults to Debug as it's no longer noisy
  • Changed: Swapped out SQLite for Memory backstore for Hangfire
  • Changed: Added DisableConcurrentExecution on ProcessChange to avoid duplication when multiple threads execute at once for Library Watching
  • Changed: When parsing epubs, if there is a volume in the epub title, try to parse and group. This is beneficial for Light Novels which are generally tagged this way. Last release, we changed logic to prefer metadata, but most files are not properly tagged.
  • Changed: When scanning files, exit earlier from parser when file is a cover image.
  • Changed: When inviting or editing a user, when Admin role is selected, all other roles are disabled as they aren't applicable.
  • Changed: When there are no collections, don't point the user to the wiki unless they are an admin

Fixed

  • Fixed: Fixed the black background present when the e-reader's color theme was set to 'White'
  • Fixed: Fixed security issue (https://huntr.dev/bounties/55cd91b3-1d94-4d34-8d7f-86660b41fd65/)
  • Fixed: Fixed security issue (https://huntr.dev/bounties/bebd0cd6-18ec-469c-b6ca-19ffa9db0699/)
  • Fixed: Fixed a bug where promoting a reading list would fail
  • Fixed: Fixed a bug where bookmarks wouldn't load in the reader in the order they were saved
  • Fixed: Fixed a bug where state variables weren't being updated correctly and pages could get stuck. This also fixes paging backwards not working
  • Fixed: Fixed a bug where Hangfire could cause high CPU/RAM utilization for some users due to slower process change execution.
  • Fixed: Fixed delete series sometimes not triggering on series detail page
  • Fixed: Fixed some parsing logic for how we treat specials like Annual and Omnibus. This now handles more cases and fixes a few that broke last release.
  • Fixed: Fixed a bug where Log Level Information wouldn't show proper log output
  • Fixed: Fixed a case in ComicInfo fallback where and invalid ComicInfo location wasn't picked up
  • Fixed: Fixed a typo in the toast notification for marking multiple items as unread and made capitalization consistent (Thanks @pssandhu )

Known Issue

  • Double page renderer seems to be occasionally missing pages. I am working on addressing this for v0.7
Kavita - v0.6.0 - Polish, Polish, Polish + Send To Support!

Published by majora2007 almost 2 years ago

This release has been an interesting time. Originally a small release with a big impact (auto updating) has turned into a release just about polishing and battle testing the scan loop from last release. Rewriting the scan loop last release was a huge effort and despite being diligent with testing with our nightly testers, bugs still slipped through. I wanted to take a step back and get Kavita sorted out before moving forward with new features, but I couldn't leave you with just fixes, so I made it action packed instead. With that, let's get into what's in this release.

Let's start with some big asks since the initial release of Kavita--the ability to send files directly to users devices. This is something Calibre has that avid book readers on Kindle need. Over the past few releases, I've been laying the ground work for this and with v0.6, we finally get to use it and from what the nightly users express, it's awesome. Any user in Kavita can setup devices with an email, this could be your Kindle email, your personal email, or anything. Give it a name and from any epub or pdf, you can send the file or files to your device. Currently this is limited to epub and pdf as there are no readers that support cbz, etc. However, if you have use cases, reach out. In order to use this, you must run your own KavitaEmail service.

Speaking of email, you know what's annoying? Having to have an email when you sign up for Kavita. Even though Kavita doesn't validate your email or require you to put in a real email, users have still complained about it. In this release, I updated the flows to better reflect this. Invite user will still ask for one but make it known it can be anything (although if it's not a real email an invite email will not send). When users sign up or an admin sets up the account, the email field is optional. On top of all this, Kavita now has a new Profile tab in User Settings which allows a central place to update and see their profile information and add/change it.

From emails to profiles, another big ask was Kid accounts. Many users have large libraries and want to restrict some profiles to certain levels of content. This is a tricky one as not all file formats are the same. PDFs and Epubs don't have an Age Rating field like CB* files, which expose it via the ComicInfo standard. Luckily, Kavita can store this information for you. With that, you can now setup Age Restrictions on accounts and grant those accounts the ability to maintain their own rating or not. Age Restrictions restricts all content that is higher than the rating set. If there are Unknowns (which is the default state), Kavita let's you set whether that is allowed for said profile or not. This restriction is applied at the highest level. So if you have one issue that is Mature while account is on Teen, the whole series will be purged from the user, including any promoted reading lists or collections.

That's a lot of heavy hitters, but I have more to talk about. This one is my favorite, Folder Watching. Folder Watching was introduced last release as an experimental feature and after much battle testing and reworking the code, I've cracked the code and gotten it to a really stable place. I personally have been running it for the last month without issue. This essentially brings your content into your server without having to wait for nightly scans. Do note, it is not designed for moving massive amounts of content over a long period of time into your library. It will still work, but you might get some partial series you have to manually cleanup.

Lastly, I want to talk more about the polish that this release is all about. Not only did the scan loop get major polish, from the release notes you'll see so did the parser, reader bugs (like double page layout now works consistently), and many quality of life enhancements.

A few shout outs on features as well:

  1. We are finally done with Tachiyomi. We have a PR open into the main application and it's been slotted into a release by the Tachiyomi developers. Huge thanks to @ThePromidius (who recently joined our Kavita team after 6+ months of battling Kotlin in development of our extension) for taking on this effort and working with our users to get it polished out.
  2. The Kavita Tachiyomi Extension (the preview build) contains full progress tracking support and has been working perfectly for the past month.
  3. Kavita now has a Readarr connection hook, which can do what Folder Watching does, without having to have it enabled. If you have Folder Watching enabled, you do not need the hook. This will be available in Readarr once Readarr releases next version.

To wrap up, I want to call out to some issues that cropped up in v0.5.6. As mentioned in the opening, the code was tested a ton but things slipped through. After you update, you need to pay attention to your logs. Your logs will indicate corrupted volumes or series that you need to manually cleanup from Kavita. This is an unfortunate reality, but luckily doesn't require data loss.

If you've still read to this point, props to you. If you've been enjoying Kavita, please consider donating or becoming a supporter. It makes a huge difference for me to continue pouring thousands of hours into the project (not just coding but support). Thank you again to my current supporters and those whom have donated.

Added

  • Added: New Role for allowing users to bookmark. Bookmarking can consume a considerable amount of resources on the host system, so a role needs to be introduced to restrict this action. By default, existing users will have this role off (admins excluded, they have all abilities).
  • Added: Kavita is now using Tiered Compilation and Dynamic PGO. These are techniques by .NET to analyze the application as it runs and optimize on the fly. This just means Kavita over time will get faster without any extra work by me or you.
  • Added: Users can now search for a series on Bookmarks page. No other filter is active.
  • Added: Implemented Russian filename parsing for Manga and Comics
  • Added: When in the manga reader, you can now double click to bookmark pages.
  • Added: When a user reads the full series of anything that is Completed or Cancelled and exists on their Want to Read list, Kavita will now remove the item from said Want to Read list on a nightly basis. This can be triggered at any time from Tasks page.
  • Added: Kavita can now filter against release year (min, max, or both). If only min, all series that have a release year of or greater than the min are returned. If only max, all series that have a release year or less than or equal will be returned. Lastly if both, any series that fits in that range is returned.
  • Added: Kavita can now sort by release year.
  • Added: Added a new setting to manage how many log files exists in terms of days, since Kavita uses splitting on days now.
  • Added: Added new stats for tracking to help with some of the reader feature utilization for some upcoming redesign/polish work
  • Added: User's can now setup devices for readers that cannot access Kavita via web, but can receive files via email.
  • Added: User's can now send pdf and epub files to devices via the context menu. Users MUST have their own email service setup in order to do this.
  • Added: Added -화, -회, -장 for volume parsing for Korean filenames (Thanks @DeltaLaboratory for handling this)
  • Added: Added -회 for chapter parsing for Korean filenames (Thanks @DeltaLaboratory for handling this)
  • Added: New validation added to Edit Series modal to ensure Name and SortName are required
  • Added: Series cover selection will now show all volume images or all chapter images (if only chapters exist)
  • Added: New user setting to disable transition effects (animations) in the app. Great for e-ink readers.
  • Added: When browsing on screens with infinite scroll, the scroller will now try to resume to the approximate location (nearest jump key) when navigating back.
  • Added: Added the ability to edit Release Year on the Series
  • Added: Admins can now setup restricted profiles for their users (or users can restrict themselves). A restricted profile will restrict content that does not match their Age Restriction rating. For example, all content on the server that is Mature would be hidden from a user with a Age Restriction of Teen. Age restrictions do not apply to admin accounts.
  • Added: A new role called 'Change Restriction' now exists to allow a user to change their own age restriction.
  • Added: Added a new Series relation called Edition. (A generic relation with no Parent relation)

Changed

  • Changed: Swapped out the default logger with Serilog, which enables more expressive logs and powerful Sinks
  • Changed: Log file rolling is enabled by default and now uses a day by day format. The new format will be kavitayyyyMMdd.log.
  • Changed: Logging levels now affect other types of loggers from libraries and are now handled by Kavita. So Debug can provide rich logs, while Information can keep the other loggers to Error to keep the logs clean. Loggers have been significantly cleaned up and Debug is safe to use without so much spam. Trace will now have that same spammy output.
  • Changed: Removed the data connection for the database out of appsettings.json and hard coded it. This is a prerequisite for auto updating.
  • Changed: Updated pdf viewer to 15.0.0 (pdf.js 2.6) which now supports east-asian fonts.
  • Changed: Unified the star rating design in series detail to match metadata filter.
  • Changed: Changed Normalization to not strip ! from the resulting string. This requires an expensive migration which will take time on first load of this version. This will allow users to have series that differ by !
  • Changed: When parsing epub files, ensure SeriesSort tag is used when defined
  • Changed: Disable Angular Animations for older iOS (<14) devices to allow the readers to still function (Thank you @ocgineer for tackling this)
  • Changed: Optimized the bookmark and unbookmark flows to remove 2 DB calls and reworked the flow of logic.
  • Changed: Collection cover image chooser will now prompt with all series posters from within the collection.
  • Changed: Cover image chooser now has the reset button first (if applicable)
  • Changed: Moved the brightness value readout to the same label line as Brightness in Manga reader
  • Changed: Updated our epub parser which now supports reading Link properties and includes more cover handling logic.
  • Changed: Changed the code that checks for ComicInfo.xml inside archives to follow the spec and enforce case and only check root of archive first, then fallback to a more loose ComicInfo.xml check.
  • Changed: Reworked Folder Watching nearly completely to be more robust and moved it out of Experimental
  • Changed: Optimized some of the parser methods. CleanTitle is up to 10 times faster. (Thanks @tjarls )
  • Changed: Support additional variants for special keywords 'One Shot', 'Hors-Série' (Thanks @tjarls )
  • Changed: Debug and Info logger is much less noisy. If you want SQL Output for debugging, use Trace.
  • Changed: Word wrapping on the title and localized title, instead of break-all.
  • Changed: Actionable menus are now able to have nested menus (Thanks @KorakotSanti for driving this home)
  • Changed: Removed the Lock field on Series name since it inherently is locked
  • Changed: Kavita now sends InstallId (represents a unique install) to Email Service to allow throughput tracking. InstallId is not able to be tracked to personal information about your install.
  • Changed: When performing actions on series detail, don't disable the button anymore.
  • Changed: (Auth) Users no longer need to signup with an email. It is now optional for all of Kavita. If not used, then Forgot Password will not function.
  • Changed: (Auth) Users can now edit their email after the fact via Profile tab in user settings. Email confirmation via log file or email is required for the email change to take effect.
  • Changed: Fixed up some typos on word publicly
  • Changed: The scan loop is now synchronous. From testing, there is no major performance difference and this fixes duplication issues or some scan errors.
  • Changed: Updated the LibraryWatcher to now suspend watching if multiple internal buffer exceptions occur. After an hour, the scanner will restart.
  • Changed: Release Year on info cards now shows as Year
  • Changed: When ScanFolder runs (via api or library watcher), ensure we don't queue duplicate tasks
  • Changed: Series Detail api will now cache for a min to reduce load
  • Changed: The scan loop log will now complain if there is a corrupted volume from buggy code in v0.5.6. This new log informs users to delete the series and rescan.
  • Changed: Moved Folder Watching out of experimental. It is now stable to a point that it can be used as a primary driver for changes.
  • Changed: When ScanFolder is invoked and the folder resides in a book library, a full library scan will be invoked to ensure changes are picked up for users that have multiple series in one shared folder.
  • Changed: When ScanFolder schedules a library or series scan, it will now wait 1 min to give time for any other requests behind it to be dropped.
  • Changed: When updating a reading list's title, explicitly check against other reading lists, like we do when we create a list
  • Changed: Removed an additional epub parse when scanning and handled merging differently

Fixed

  • Fixed: Fixed up some regex for parsing volumes that have a float number, so Series v3.5 will now properly parse as Volume 3.5
  • Fixed: Fixed a bug where tooltip for Publication Status wouldn't show Current Items / Max Items.
  • Fixed: Fixed some weird parsing rules where v1.1 would parse as volume 1 chapter 1
  • Fixed: Fixed a bug in bulk selection code where when using shift selection, the inverse of what was selected was toggled.
  • Fixed: Fixed up some old code where if on all series page, only English would show as a language
  • Fixed: Fixed an issue where some users were missing a theme entry and the Save user preferences wouldn't work for them
  • Fixed: Fixed an assumption that the environment always uses US time format which could cause ReleaseYear parsing of ComicInfo to fail.
  • Fixed: Fixed a ComicInfo XML de-serialization bug with empty elements of xs:int type into ints
  • Fixed: Fixed a typo in manage tasks of Reoccuring -> Recurring
  • Fixed: Fixed a bug in MinimumNumberFromRange where a regex wasn't properly contstructed which could skew results
  • Fixed: Fixed a bug where Volume numbers that were a float wouldn't render correctly in the manga reader menu
  • Fixed: Fixed a case where when using double (manga) layout, bookmarking a page wouldn't show it on both pages, despite them both being saved.
  • Fixed: Fixed a log message that wasn't properly formatted after a scan ran and there were 0 files (everything was skipped).
  • Fixed: Fixed the prefetcher in the Manga reader to always load in the correct sequence
  • Fixed: Fixed a bug where continuous scroller wouldn't trigger in fullscreen mode of webtoon reader
  • Fixed: Fixed a bug where manga reader when given an image of height smaller than reading area, the pagination area wouldn't extend to the bottom of the reader.
  • Fixed: Fixed a bug where manipulating background color in user preferences of manga reader wouldn't enable the save button
  • Fixed: Fixed a bug where scanner could select the wrong first file when a series is first imported and has ComicInfo.
  • Fixed: Fixed a bug where volumes that had larger than 1 difference wouldn't properly return next/prev chapter (for continuous reader) (ie volume 1 -> volume 3 wouldn't work)
  • Fixed: Special regexps are now word bound which reduces false positives (Thanks @tjarls )
  • Fixed: Cases where CleanTitle would erase the entire file name when it starts and ends with parenthesis (Thanks @tjarls )
  • Fixed: Fixed a concurrency issue when saving new Series in scan loop
  • Fixed: Fixed a regression from a downstream epub library that broke reading some epub books
  • Fixed: Fixed inline validations not rendering throughout the app
  • Fixed: Don't allow the user to bookmark in bookmark mode
  • Fixed: Fixed a bug where Scan Series would skip over Specials folder due to how new scan loop works
  • Fixed: Fixed scroll to top persisting between page loads
  • Fixed: Fixed up the way the Series Detail page lays out to work better in all breakpoints
  • Fixed: Fixed a bug where Email Service errors weren't propagating to the UI Layer.
  • Fixed: Fixed a bug where .kavitaignore wasn't being applied at library root level
  • Fixed: Fixed a bug where multiple theme scans could occur at the same time, throwing an error
  • Fixed: Fixed an issue where empty folders could break scan loop
  • Fixed: ScanSeries job will now check for .kavitaignores higher than it's own folder and respect library level ignores
  • Fixed: Fixed an issue where image series with a folder name containing the word folder could get ignored as though the image itself was a cover image.
  • Fixed: Fixed a bug where get next/prev chapter wouldn't respect floating point volume numbers
  • Fixed: Fixed a bug when building kavita ignore exclusions, blank lines could break scanner
  • Fixed: Fixed a bug where changing the name in Kavita of a series then doing a scan series, the series would be deleted
  • Fixed: Fixed cover generation choosing a special file for the Series when there is only specials and chapters in the Series
  • Fixed: Fixed a scaling issue in the epub reader, where images could scale when they shouldn't
  • Fixed: Fixed foreign constraint issue when cleaning up series not seen at end of scan loop. The Scan loop will alert you if there are bad entities that need deleting. You need to remove any related series then delete the series.
  • Fixed: Fixed an issue where removing a series from want to read page wouldn't update the page correctly
  • Fixed: Fixed a bug where uploading a new image in cover chooser wouldn't properly select the image. This fix includes auto selecting the newly uploaded cover.
  • Fixed: Fixed title bar being all white on PWA. This will be investigated to be theme-able later.
  • Fixed: Fixed a bug where bulk selection on series detail wouldn't allow you to select the whole card, only checkbox
  • Fixed: Fixed a bug where volume cards weren't properly updating their read state based on events from backend
  • Fixed: Fixed broken white theme in eink reader
  • Fixed: Fixed the positioning of the 'Library | Recommended' buttons, which would jump up or down depending on which was selected (Thanks @TheIceCreamTroll )
  • Fixed: Fixed the reading list deletion process not navigating the user back to the reading list library (Thanks @TheIceCreamTroll )
  • Fixed: Fixed a bug where scanning for themes would always report theme didn't exist

Security

Removed

  • Removed: Removed a migration of config files from pre-v0.4.9. If you are updating from this version, do not update directly to v0.6.0.

API

  • Changed: Refactored some APIs in /api/reader/ around bookmarks to remove get-
  • Changed: (API) series/series-for-chapter, series/series-for-mangafile, and library/search have now all moved under search/
  • Removed: (API) Removed the api library/libraries as library/ did the same thing already

New Contributors

Kavita - v0.5.6 - Performance Part 2 (Is that a new scan loop?)

Published by majora2007 about 2 years ago

For the past 3 months, I have been working tirelessly to rebuild our main scan loop, which is not only the most complicated part of Kavita but also the most critical. It translates files on your system into the series, volumes, and chapters you know in the UI. This goal of a new loop was so difficult, I quit 3 times, but finally made it through. The new loop is finally ready to share with you all, thanks to many of our nightly users helping test and provide feedback.

What is this new scan loop I speak of? The new scan loop is a new way (and a new set of requirements) to scan your disks and process files extremely efficiently. This changes Kavita to using a folder-based parsing mechanism rather than the previous mechanism where we would parse all files, group then perform DB operations in groups of 50. The reasoning for this drastic shift is that the old method failed to scale on users with massive libraries (we have one user with half a million files per stats) and would take an exceedingly long time for networked (rclone) users.

To dive in, we need to talk about some requirement changes. In order to utilize folder-based scanning, we have to remove the flexibility of users can put files anywhere they want and Kavita will group them for you. When I started, I chose this mechanism based on feedback from Plex and Jellyfin, but in reality most of our users have proper folder-based structures, so this new requirement change shouldn't affect many users.

Kavita expects all series to be in their own folder, so a library cannot have loose leaf files in it. You can still do /library root/manga/Publisher/Series A/, /library root/manga/Publisher/Series B/, just not /library root/my book.pdf. Kavita will now scan folder by folder an for each folder, group the files in and process them as a single series in a task (async). This task will do all DB operations and invoke Cover Gen and File Analysis (word counting) for just that series. This change is important because it will now process series-by-series and update your UI in that manner. Hence you should be able to more quickly see your series and use them completely than before on first scan. This however comes with a drawback due to increased I/O and trips to the DB, the library scan is slower (on first scan). For me, previously it took 30 mins to scan all files into the DB (without covers or word counts), on the new loop it takes 80 mins (but has covers and word counts). The main difference is on the old loop I had to wait at least 10 mins till the first chunk inserts, with the new loop, you don't have that issue. This also means the Chunk errors users sometimes receive should no longer be an issue and if there is an error, that series will tell you directly. You can find more information about the new Scan loop on the wiki.

With that said, this also allows some deep optimizations. Kavita will no longer do any I/O (except an attribute lookup on folders) if a folder hasn't changed since the last scan time. This single optimization means that my library scan can run in 5 seconds for my 660 series library, as it skips work on anything that hasn't changed. From the nightly testers, many users have seen drastic time reduction, esp our rclone users. This also allows for 2 enhancements, the ability to ignore certain files/folders (aka .kavitaignore) and the ability to hook into Kavita and say a folder has changed and let Kavita kick off a scan.

Next up is .kavitaignore, inspired from .plexignore and a feature request as well, users can now tell Kavita to ignore files and folders at any level of a scan. You can have at library root to have a global set of rules, like ignore cover.png, or you can have nested into your folders. You can have one for each folder and Kavita will intelligently combine the rules as it moves down the folder tree. This is another degree of freedom which allows you to not only filter, but speed up scans as well. This feature is experimental and still being tested and tweaked, but works in many cases. Give it a go and report back on issues faced or clever tricks that we can enhance our wiki with.

Lastly, we have folder watching. This new, experimental feature is really something cool. Why wait for nightly scans, when Kavita can pickup on changes and instantly run an appropriate scan? This new feature does just that. When a change is detected, a task is queued up and after 5 minutes executed. Any changes that related to that first task, will get disregarded. Please note, this is experimental and likely to not work if you download directly to your library. This feature will be fletched out further in later releases.

TLDR: There are new requirements for what Kavita expects from file layout. Read about it on the wiki. If you scan without conforming your layout, you may run into issues.

If you have been enjoying Kavita, please consider donating or backing me. Kavita is primarily built by just me in my spare time and each release is hundreds of hours of work.

Added

  • Added: You can now have a .kavitaignore file at any location in your library and the scanner will read that and filter out any subsequent folder/files. This works very similar to .plexignore, this utilizes a Globbing syntax and supports multiple patterns via new lines. You can find more about the syntax here. This feature is experimental
  • Added: Added a new event type of Info which will show when Scan loops are aborted due to nothing changing on disk. This aims to inform the user that their expected action took no result.
  • Added: Added a clear all button on the events widget
  • Added: When a new series is added to Kavita, library detail pages will insert instantly (previously we reloaded the page every 3 seconds post an update coming in)
  • Added: Added --event-widget-info-bg-color for the new info event widget color
  • Added: When we navigate from a page that has a jump bar and the user has clicked the jump bar, resume their scroll position when returning to that page. This is not tracking scroll position naturally, that will be looked at later.
  • Added: Added / as a server route to swagger, which could help users behind a reverse proxy from using their local server.
  • Added: Kavita now comes out of the box with Folder Watching for libraries. This means that when any sort of event occurs, like new files, file/folder renames, deletions, etc, Kavita will queue a task to scan those changes into the system. By default, tasks will only be processed every 5 mins. This is an experimental feature and disabled by default.
  • Added: Kavita now comes with a new API for library/scan-folder and takes the API key (with admin permissions) and a folder path.
  • Added: Added API endpoint for a health check to streamline docker healthy status.

Changed

  • Changed: Kavita now requires series to be within a folder and not spread between multiple folders. For example, a library root of /manga/ must have series self contained in /manga/series A/files, /manga/series B/files. Kavita will now ignore files that are in /manga/ alone.
  • Changed: Rewrote the scan loop to perform folder-based scanning, Kavita will now process one folder at a time in a multi-threaded manner. This is a major change to how previously scanned, where all files had to be parsed before any DB work could be done. Users on networked systems should see a major improvement.
  • Changed: Scanning tasks now run on their own dedicated queue and will not allow any concurrent runs. Time for a scan task to get executed is lengthened a bit as default queue takes priority.
  • Changed: Added optimizations where Kavita will ignore scanning folders (all I/O) if nothing has changed on the disk since last scan of that folder.
  • Changed: Fail silently if an email invite doesn't get sent, as the link is still present in the DB and UI screen.
  • Changed: Ignore progress events altogether on Series cards so progress bars don't get skewed when a user is reading
  • Changed: Reduced the spammy output for the logger, so more clear information is delivered, instead of internal DB queries.
  • Changed: Deleting a series will now automatically remove it from the Want to Read page
  • Changed: Tweaked a migration to output log only if it's going to be ran
  • Changed: Added dedicated token output to logs for auth flows (when inviting a user) in case token is getting url encoded (but from testing, it doesn't affect)
  • Changed: Reverted back to ES6 vs ES2020 so older Safari browsers can use Kavita
  • Changed: When parsing non-epubs in Book library, use Manga parsing instead of Comic, to better support Light Novels
  • Changed: OPDS description now no longer mentions users will be able to download, as they currently still need the download role.
  • Changed: Updated all links that point to external sites to use noopener noreferrer
  • Changed: Updated the Email Service wording to point to the Github for the external email service
  • Changed: Clear cache will now clear temp directory as well, to clear out bookmark and downloads.
  • Changed: When a library is in progress and a user tries to delete the library, tell them to wait before we let them
  • Changed: Rearranged some code in invite user flow to help with the small fraction of users that can't invite users.
  • Changed: Added a null check so we don't log an exception when connecting a websocket when user is not authenticated
  • Changed: When a theme that is set for a user, gets removed from Kavita, inform the user to refresh.
  • Changed: Manga reader Darkness control is now called Brightness

Fixed

  • Fixed: Fixed a bug where series with LocalizedSeries comicinfo tag could not get joined or joined in wrong order each scan, depending on which folders or files were processed first.
  • Fixed: Fixed a bug where collection images weren't loading
  • Fixed: Go back was not returning to the scroll position when you clicked the nested link, in the book reader.
  • Fixed: Fixed a bug when moving between pages and a page had smaller height, the total height calc would get skewed and allow you to scroll beneath the bottom action bar in the book reader.
  • Fixed: Fixed tooltips not rendering on series cards
  • Fixed: Fixed a missing update in Update Series, where we could change name of a series, but not recalculate the normalized name.
  • Fixed: Fixed a bug where archives with ._ files would be counted as valid files, when they are actually just metadata files from Macosx
  • Fixed: Removed some extra blank space on collection detail page when collection doesn't have a summary or cover image
  • Fixed: Fixed a bug where adding a new item to a reading list wasn't adding it at the end of the list
  • Fixed: Fixed an issue where collection page would re-render the same covers for multiple cards
  • Fixed: Fixed a missing margin-top which made the page extras drawer not render correctly and hence be uncloseable on small screens
  • Fixed: Fixed a bug with stacked modals not showing overlay
  • Fixed: API changes to support some changes in Tachiyomi around progress syncing
  • Fixed: Fixed an issue where Save Bookmarks as WebP could get reset to false when saving other server settings
  • Fixed: Fixed a bug where typeahead wouldn't automatically show results on relationship screen without an additional click
  • Fixed: Fixed an issue where Chrome was caching api responses when it shouldn't had, thus causing some apis to return invalid data after a modification
  • Fixed: When there is no data on collection detail page, make sure we show the no data design
  • Fixed: When resetting password, ensure the input is colored correctly
  • Fixed: After resetting password, Kavita threw an error despite it working.
  • Fixed: Fixed incorrect messaging on reset password page
  • Fixed: Fixed a bug where reset password would show the side nav button causing skewing on the page
  • Fixed: Fixed a bug where a series with a relationship would prevent the series from being deleted (or the library it resided in)
  • Fixed: Downloading theme files was previously not allowed by non-authenticated users due to some changes in the Hotfix
  • Fixed: Hide the All Series side nav item if there are no libraries exposed to the user

Removed

  • Removed: Removed a migration of bookmarks from in the DB into external files. This was added for v0.5.0, 6 releases ago.

KavitaEmail

  • Fixed a typo where Email service was using SenderAddress instead of Username for authentication
  • Changed the messaging around if the user received the email but didn't request it themselves, to ignore to be more prominent on the email
Kavita - v0.5.5 - Performance Part 1

Published by majora2007 about 2 years ago

This is another release where I forgot just how much I did. The intent of this release was performance and held tons of work that I had been wanting to tackle, but needed the dedicated time for. Originally I had planned to release this with the new scan loop, however due to security vulnerabilities and some bugs in the hotfix, I had to split the release in half. As mentioned, the focus is on performance and we are bringing a ton of nice performance improvements along with a new contributor, @TheIceCreamTroll, who not only opened a lot of bugs on Github, but also helped fix a few in the process. I look forward to more development work from them.

To start off this highlight, comes Downloads. Downloads have always been pretty reliable but when you're downloading tons of content for an upcoming trip, it can first get annoying when you leave the page, you might loose the download. Also that downloads kept prompting you for confirmation when the files are large (to hopefully not eat up your data cap). So this release, I reworked downloads significantly. Downloads are now handled at a global level, range processing is enabled (this means you can stop/start if your browser supports it), downloads are cached and thus streamed to your browser (less memory overhead), the event widget handling has been tweaked a lot to make it much more streamlined, and my favorite, if you start a download, go to another page then return, the download progress bar on the card will still show.

Another huge update for Kavita is moving to OnPush change detection, something that is more technical and more work for me, but has nice performance implications for the user. OnPush basically means that the code tells Angular when it's time to re-render, which means less work Angular does and hence more frames per second. Pairing this with the update to Angular 14, the UI should feel a lot snappier to you.

This next one is my favorite. I was shocked when I was on a non-admin account and realized, I didn't have a way to track what I wanted to read...normally, I would create a collection but then I realized, Kavita's collections are for admin's only (modeled after Plex originally). So I sought out to build a Want to Read list that is like a collection that tracks what you want to read. Right now, we have ability to filter against it and that's it. I plan to build it out in future updates; if you have any ideas, jump on the feature request site and submit them.

In addition to performance, I also focused on polishing up the double page reader from last release and fixed an annoying infinite redirection bug, usually seen on Firefox. If you have issues with the double page render, def stop by or create a Github issue to let me know.

Lastly, a few users have been having issues with the invite user flow. I've been hard at work trying to support these users, but have been unable to reproduce their issues. I made some changes in the Invite User flow to hopefully improve their lives, but behind the scenes I'm still engaged in support and planning enhancements around this Authentication system. Thank you for being patient. Early reports from users seem to have less issues post these changes, so give it another go if you fell into this bucket.

Lastly is a call to the community if anyone is interested in helping in Support in our discord or being a dedicated release tester. Kavita has gotten to the size where it is taxing to be building and testing all by myself. Currently release testing takes 3 days split between 3 people. I really need help from the community to help keep Kavita stable and let me focus on development rather than Support and Testing. If anyone is interested, please reach out to me in the discord.

With all that said, the next release will be even slower than this one. I have a lot of vacation planned for next 2 months and the left over work is extremely difficult, as it's the most complicated and critical part of Kavita. Thank you as always for being patient with releases and for those that have donated, I am extremely grateful. I've been buying my Kavita supplies (lots of coffee to get me through the scan loop).

Note: The security vulnerabilities may not be viewable till a few days after this release, to allow all platforms to upgrade their builds. Anything listed has been validated and fixed as of this release.

Added

  • Added: Added new event hooks for when mark as read/unread occur on entities, which will now trigger a re-calculation on Read Time Left.
  • Added: Cover Image uploading will now allow gif and webp files
  • Added: When the user is requesting background jobs, like scan library, Kavita will now disregard jobs if there is already a job in the queue for that configuration.
  • Added: Downloads now support range processing (the browser can theoretically resume the download)
  • Added: Downloads will now persist through page loads and the indicator will show on any card/list items where applicable.
  • Added: Downloads are now global and a notification in event widget helps you see the download progress (browser progress).
  • Added: New user preference to prompt for downloads larger than 100MB. When disabled, Kavita will download without prompting.
  • Added: Downloads will now temp be left on disk and thus if requested again, can send the same file without re-generating it.
  • Added: New placeholder for when covers haven't loaded in yet.
  • Added: PDF Reader now has a loading indicator with a progress bar to indicate how much of the PDF has been downloaded by the browser.
  • Added: PDF Reader will now close itself when ESC is pressed
  • Added: Added the ability to manually setup users without having to worry about the invite url during invite flow or doing it right at invite time. Now a Setup button will appear next to all Pending invites and at any time can be pressed to manually complete the account setup. Note: This does not work with pending invites created before this update. Please re-create them to get the new functionality.
  • Added: Added back to top support on all pages but those that utilize virtual scrolling without a parent scroll
  • Added: Pressing H will open the shortcut modal
  • Added: All users will now have a dedicated List called 'Want to Read' which will allow them to track series they are interested in reading. They can apply filtering against this page.
  • Added: Added a quick way to set darkness level on manga reader for when night light just isn't dark enough (this is not a setting, it is being trailed and subject to removal)
  • Added: Added Japanese Series name parsing support in Parser
  • Added: Added Jump bar to reading list page

Changed

  • Changed: Changed padding to allow for two cards side-by-side on viewport width of 375px.
  • Changed: Changed every component to use OnPush Change Detection, resulting in less wasted render work and a snappier experience overall
  • Changed: Moved some calculations for title and subtitle in manga reader to the backend
  • Changed: Bulk Operations bar now has an explicit mark as read/unread buttons.
  • Changed: Bulk Operations now has Add to Collection option and Delete where appropriate (and for appropriate users)
  • Changed: Edit Series Relation will focus on the next typeahead after pressing Add Relation
  • Changed: Cover Image chooser will now show the chapter's cover images as options by default
  • Changed: Added more aggressive static file caching
  • Changed: Refactored reading list item component to drastically reduce the amount or render calls. Huge performance for users with large reading lists
  • Changed: Typeahead control now has an animation for opening and closing
  • Changed: Scan Series, when invoked via UI/API, will force a re-calculation of metadata and ignore any caching, to ensure reliable results.
  • Changed: Added Range processing support for images on the reader for slower networks or large files
  • Changed: (Manga Reader) When using single mode, try to use a pre-fetched Image, rather than relying on browser to cache the image
  • Changed: Reduced some latency when rendering first page of next chapter via continuous reading mode
  • Changed: Downloads will now leave the file on disk and re-use them. These files are cleaned up nightly or after any scan (scan series/library)
  • Changed: When a user is downloading a file on Kavita, admin's received a notification about it. This notification is now reworded to imply that the server is processing the download. This notification will be removed in future version.
  • Changed: Changed how caching works within Kavita. Cover Images are now properly cached for 1 min, Images for the reader are cached for 10 mins, and the pdf file (for new reader) is also 10 mins. This has a known issue where updating a cover image, the browser wont reflect the new image on Chrome based browsers. This is due to Chrome not respecting the cache-control spec. A hard refresh will fix it.
  • Changed: (Performance) Applied SplitQuery to multiple queries throughout the codebase, speeding up many API calls.
  • Changed: Exception middleware will now send the original error message to the UI rather than a generic 'Internal Server Error'.
  • Changed: Error toasts now have Error in the title along with the status code
  • Changed: Changed volume titles in list view to include volume number.
  • Changed: Implemented a workaround for nginx users with BlockCommonExploits enabled, which would interfere with book image escaping done by Kavita when images had ../ in their path.
  • Changed: Hide jumpbar on pages where there is no scroll
  • Changed: Non-admins can no longer view file info on card detail drawer
  • Changed: Typeaheads will no longer close after selecting an item
  • Changed: If there is no collection or reading list cover image, hide the image placeholder
  • Changed: Optimized bookmarking a page by reducing a DB trip
  • Changed: Search bar now will only show clear button once a single character is typed
  • Changed: When making bulk selections, clicking anywhere on the card will select it.
  • Changed: When cancelling a bulk selection action, like Adding to Reading List or Collection, cancelling the flow will no longer deselect the cards.
  • Changed: Updated to Angular 14
  • Changed: Updated dependencies and bootstrap to match Angular 14 version
  • Changed: When saving bookmarks, capture their date, so we can serve them up in the order they were bookmarked. This only applies to new bookmarks.
  • Changed: Updated all but one API in collection control to admin only policy
  • Changed: Updated some headers on Kavita to tighten security
  • Changed: Tightened up cover upload to restrict more APIs to the admin
  • Changed: Resetting your own password now requires you to pass your current password (if already authenticated). Admins can still change passwords for the user without this restriction.
  • Changed: Removed an additional copy in the build script and changed a copy to use appsettings.json from build rather than development.json
  • Changed: Save buttons on user and admin dashboards will only activate if a setting is changed, and will deactivate when clicked
  • Changed: The save button on the password reset screen will only activate if 'New Password' and 'Confirm Password' match
  • Changed: Centered user roles to 'Roles' in the admin dashboard
  • Changed: Reordered Series and entity details to be more consistent and renamed 'Read Left' to 'Time Left'
  • Changed: Reading list page now has a Read button which starts at beginning and Continue which continues from last reading progress position

Fixed

  • Fixed: Fixed an issue where the sidenav wasn't scrollable on mobile.
  • Fixed: Fixed a bug where manage library component wasn't invoking the trackBy function
  • Fixed: Edit Series Relation now shows Parent as an option when the series is in a child relationship. This option is non-selectable and the field is disabled.
  • Fixed: Collection detail's scroller was on the wrong element and didn't match other pages
  • Fixed: When initializing side nav, don't call an authorized call until after user has authenticated
  • Fixed: Fixed a bug in book reader where page anchors weren't properly calculating and thus table of contents wouldn't show the highlighted item
  • Fixed: Fixed an edge case in Next Chapter API where if the user was on Volume 1 Chapter 1 and next chapter was Volume 2 Chapter 0, Kavita would report no next chapter.
  • Fixed: Added word breaking for long filenames with no spaces on headers, titles, and lists which would cause overflow.
  • Fixed: Titles on many screens and in modals will now word break if they are too long.
  • Fixed: Fixed a bug where Scan Series didn't properly choose the highest directory closest to the library path for scanning, leading to missed files (ie lib/Series A/First Files/a.cbz, lib/Series A/Second Files/b.cbz -> b.cbz would be skipped due to code choosing lib/Series A/First Files/ rather than lib/Series A/ for scanning)
  • Fixed: Fixed a bug where metadata filter, after updating a typeahead, collapsing the filter area then re-opening, the filter would still be applied to page, but the typeahead wouldn't show the modification (correct number of tags)
  • Fixed: Fixed a bad redirect on auth guard which could freeze the browser due to infinite redirect loop
  • Fixed: Fixed a bug when downloading bookmarks from multiple series, the temp file would only use the first series id rather than a combination of all of them.
  • Fixed: Fixed a bug on bookmark reader, the reader on last page would throw some errors and not show No Next Chapter toast.
  • Fixed: Fixed an issue where cover update events would be sent to the UI before the DB was saved, thus looking like covers weren't generated
  • Fixed: Fixed a bug where list item for books that have 0.X series index wouldn't render on series detail.
  • Fixed: Fixed issue where action menu would be overlapped by the header nav.
  • Fixed: Styling issue which caused reading list items to be shorter than intended.
  • Fixed: Fixed an issue where modal could extend past users max viewport height.
  • Fixed: (Manga Reader) Fixed an issue where sometimes when loading the next page, the pagination area wouldn't be properly setup due to a missed render cycle
  • Fixed: Fixed a flash of white when refreshing the browser
  • Fixed: Fixed a bug where bookmarking when using Double (manga) wouldn't bookmark both pages
  • Fixed: Lots of fixes around when we choose to render double pages, when we decide to skip pages, etc. This should hopefully be feature complete now.
  • Fixed: When an error occurs when registering a new user, delete the user instead of rolling back the transaction.
  • Fixed: Fixed Sequence contains no elements exception on first run (in stats)
  • Fixed: When progress updates were processed by Volume cards, the progress bar could be out of sync. This now correctly updates.
  • Fixed: Fixed an issue where InstallId wouldn't properly convert and show on the UI.
  • Fixed: Fixed a bug where browser would inject a clear button onto our search bar, showing 2 clear buttons.
  • Fixed: Fixed an oversight where if there is no tag in ComicInfo after a chapter was updated with People or Genres, then the People/Genres would never be removed.
  • Fixed: Fixed an issue where pages could be skipped in single due to prefetching overriding our recently set image (Manga Reader)
  • Fixed: Fixed dark mode on pdf reader not undoing correctly due to a bug in ngx-extended-pdf-viewer
  • Fixed: Fixed a bug with new authentication where images and pdfs would fail to load (from v0.5.4.2 hotfix)
  • Fixed: Fixed a regression from hotfix where bookmarks were not able to load due to a missing [AllowAnonymous] (from v0.5.4.2 hotfix)
  • Fixed: Fixed a bug where some config folders wouldn't be created on first load
  • Fixed: Fixed a regression which broke Plugins (and Tachiyomi) from authenticating (from v0.5.4.2 hotfix)
  • Fixed: Fixed a bug where clicking on a Jump key wouldn't go exactly to the selected letter
  • Fixed: Fixed a bug where . wasn't being included in # JumpKey
  • Fixed: Fixed a bug where the add to reading list modal would overflow and make create button hidden
  • Fixed: Fixed some inconsistencies with clearing multiple series of bookmarks in one go by building a dedicated api
  • Fixed: Fixed a bad naming case for reading list items where it was just a volume showing just Chapter 0
  • Fixed: Fixed a bug where there could be duplicate scrollbars on pages with virtual scroller
  • Fixed: Fixed a bug where scan series, when generating new covers, wouldn't emit cover updates to the UI
  • Fixed: Fixed an issue where opening directory picker to change bookmark directory and hitting Share without changing anything, would blank out the bookmark directory field.
  • Fixed: Summaries wouldn't be blurred if they were less than 250 characters.
  • Fixed: Custom css themes wouldn't load after v0.4.5.2 Hotfix
  • Fixed: On fresh installs, check if the Server Settings table exists so we don't dump an error on startup (confusing a handful of users)
  • Fixed: Fixed a bug where UI was showing Chapter created date for files instead of file created. This fix introduced a new field so will not show for existing files.

Security

Known Issues

  • ARM x64 users may have issues with PDFs generating cover images. There is a workaround found thanks to @kleisauke, the author of NetVips, which we use to generate images in Kavita. You can find information on our wiki's FAQ or the original issue for a workaround.
  • Typeaheads (autocompletes) can clear itself automatically when adding multiple times in one go.
  • Continuous scroller doesn't trigger in webtoon mode when in fullscreen
  • Changing cover images on Chromium-based browsers will not reflect. This is due to Chromium not respecting the Cache-Control header (spec) and hence requires a hard refresh from the user.
Kavita - v0.5.4.2 - Security Hotfix v2

Published by majora2007 about 2 years ago

This is a hotfix to the hotfix, fixing image loading within Kavita.

Fixed

  • Fixed: Fixed a bug with new authentication where images and pdfs would fail to load

Known Issues

  • Tachiyomi no longer connecting
  • Collection image covers are not showing on Collections Page (but collection detail it does show)
Kavita - v0.5.4.1 - Security Hotfix

Published by majora2007 about 2 years ago

This is a security hotfix, please update immediately! Several high severity issues were disclosed to the Kavita team this morning that require an immediate hotfix.

Thanks @vultza for disclosing these issues through Huntr.

Added

  • Added: After 5 login attempts, Kavita will impose a 10 min lockout before authentication can be retried

Fixed

  • Fixed: Fixed an exploit that allowed a user to change the admin user's account password, thus taking ownership of the server
  • Fixed: Fixed an exploit that would allow an unauthorized user to delete reading list items within a user's reading list
  • Fixed: Fixed an exploit that allowed a user to abuse an API and leak sensitive files from the system
  • Fixed: Fixed an exploit that allowed an unauthenticated user to download pdfs from the server
  • Fixed: Fixed an exploit (SSRF) that would allow a user to upload a cover image that isn't an image

This is a hell of an update, so big I could barely figure out what features to put in the header. There were so many great additions that were not planned for this release, like the new PDF reader. Welcome to v0.5.4, this release is the part 2 of the UX and Reader refresh. This is another massive release, even I'm shocked when I was creating the release notes. This releases adds some big hitters and some requests from the community. Let's get started.

Coming up first is a niche feature for myself, but a few of our users will definitely like this, WebP storage support for bookmarks. If you use the bookmarking feature, your bookmark collection can get pretty big pretty fast. This new feature allows Kavita to covert images to WebP and save 40% space in the process. This is some foundational work as I want to expand this for all covers as well (WebP is missing Safari support).

Estimated Reading Time
This is a really cool feature as it helps you find what to read next based on how much time it might take to read it. Want something quick to read, your dashboard now shows series that it takes under 10 hours to read. If the series is image based, we use some estimates taken from our discord community to estimate a range of how long it takes to read. If it's a book, same deal, but we use word count rather than pages. Of course, estimated read time is now available for sorting as well. See some examples below:

image

image

List View
This is another one that is pretty cool and what looks like a simple feature, is in fact a lot of work under the hood. This new layout mode for the site really shines for book readers. Not only can you see the titles (if they are set), but also summary and other information, making it really easy to pick up a book to read. Plus, combined (in this screenshot) is the new Blur Unread summaries setting, which will blur summaries if you haven't read them, so you wont be spoiled when glancing over books in a series (like I was, creating this feature).
image

PDF Reader
I've always been annoyed with the PDF reader Kavita came with out of the box, but I personally don't have many PDF files, so it's not a big deal for me. I've been monitoring and searching for libraries that would provide a better experience and low and behold, I found one. It's not perfect, but it was easy to integrate and gives a much more natural experience when reading PDFs. I would love to hear feedback on this new reader from you, so drop by the discord or open a feature request with some ideas for it. This is our v1 implementation so some more reading focused features are not present. Feed me ideas so we can build out a more ideal solution.

image

Infinite Scrolling This is a big one. There is no more pages in the app (except a few places that haven't been attended to), everything is infinite scrolling with a jump bar to quickly jump around and virtualized DOM to keep it light on the browser. Due to the infinite scroll, the scroll bars are in different places than you might be used to. It might be jarring at first, but you'll quickly get used to it and love the speed at which the screen renders.

infinite-scroll

Double Page Layout
This is another big one. I had implemented most of it in Part 1, but had to pull from the release as it had some edge cases. @magujun took it upon themselves to drive it home and it's simply sweet. If you're a big comic fan or even want to read emulating a comic, this is the feature for you (on appropriately sized devices). We offer 2 new double page layout methods: Double and Double (manga). Double will render out the pages as Page 1 Page 2 | Page 3 Page 4. Double (manga) renders out the pages as Page 2 Page 1 | Page 4 Page 3 to help mimic the reading order of manga.

image

Detail Drawers
This is the last big feature to talk about and that is moving to drawers rather than modals for some screens. This new UX pattern is me playing with the idea and testing it out. So far, it seems to be much nicer experience on mobile.

image

With those big features out of the way, there are still plenty of great enhancements in here, like the ability to mark chapters as specials via ComicInfo.xml, parser support for Chinese, Korean, and Japanese characters, a redesigned cover upload, ability to enable swagger on your server (for those who develop scripts against our API), and even a redesigned Admin panel, to drive some future updates.

Next release will be another slow release, especially since I'm doing some deep refactors of the main scan loop. Next release is focused solely on performance and scan loop enhancements and will take quite some time. Thank you as always for being patient and supporting me in this project. Especially to those that provide support in discord and our donators.

Added

  • Added: New Server setting to use WebP for bookmarks rather than the raw image. WebP provides a 40% saving to space. This setting will take effect but not convert existing bookmarks (use task for that)
  • Added: New Adhoc Task to convert existing bookmarks to WebP. The setting to use WebP does not have to be enabled. This can be a long running task, esp on ARM, so be aware of that.
  • Added: When user account updates occur, like changing permissions or library updates, events will be sent to that user if they are logged in/active on the site and patch their new state in. This ensures they don't need to log out and log in to have the new state
  • Added: Exposed internal reoccurring tasks to the UI under Tasks tab. This is preliminary work for a later update.
  • Added: Kavita can now read the Format tag from ComicInfo and use that to force special status. The following tags will force special: Special, Reference, Director's Cut, Box Set, Box-Set, Annual, Anthology, Epilogue, One Shot, One-Shot, Prologue, TPB, Trade Paper Back, Omnibus, Compendium, Absolute, Graphic Novel, GN, FCBD
  • Added: Implemented the ability to parse some volume and chapter keywords for Chinese
  • Added: Added a word count analysis to count number of words in your epub files.
  • Added: Added an time estimate to read a series based on average reading time for comics/manga and text. Time to read is powered by pages for comics/manga and words for epub
  • Added: Implemented file parsing support for Korean
  • Added: Series detail page will now show an estimated time left, if you have reading progress, based on an average speed between our fast and slow readers.
  • Added: Library Recommendation page now has a new feed, Quick Catchups. Series that take less than 10 hours and are ongoing.
  • Added: On Volume details, added a distinct Read button, rather than having hidden knowledge of clicking the poster for the chapter would let the user read it.
  • Added: Series Detail has a new button in the top right which lets you use a new layout mode for laying out cards (without having to change user preferences).
  • Added: List view layout. This new layout uses a list style to render out non-series on series detail page. There is more information on these cards by default and can show the title of the chapter/issue/book.
  • Added: Swapped out the pagination for infinite scroll and jump bar to quickly jump around library
  • Added: Added Download action to series detail page
  • Added: Implemented the ability to use double page layout in the manga reader. This new rendering mode allows for both Comic (Page 0 Page 1 | Page 2 Page 3) book reader and Manga (Page 1 Page 0 | Page 3 Page 2) reading and is optimized for larger screens. Shoutout to @magujun for finishing off the implementation and getting it into this release.
  • Added: Brand new PDF reader that is more like the native reader in browsers. PDF files will be streamed to the UI (this means way faster load times) and have ability to search text within, select text, zoom, change reading layout, etc. Progress reporting is hooked in. Light/Dark mode is supported but experimental in underlying library, use at your own risk.
  • Added: When a series is removed form a library, library detail will now reload.
  • Added: Filename parser now supports Japanese kanji for volume and chapter parsing
  • Added: Admins can now enable swagger (exposed via swagger/) on their instances via a new server setting.
  • Added: New server setting to configure how many days of backups are retained. Still defaults to 30 days.
  • Added: Added the ability to sort by time to read from metadata filter
  • Added: When there are errors extracting archives, throw a custom error message to the UI informing of the potential issues
  • Added: Admins can now change a library type after creation. There is a warning explaining that it's very likely series will be re-created and hence reading progress or bookmarks could be deleted. Proceed with caution.
  • Added: Users can now enable a setting to blur summaries (mainly for list view) of volumes/chapters/books they haven't read yet.
  • Added: Added new stats to help see how features are being used and gather some performance testing numbers from v0.5.3 and to prepare for upcoming performance release (v0.5.5). In addition, some of the new functionality (virtual scrolling) have new stats to ensure we are seeing how it performs on the user base rather than just the beta testers. New fields: Total Genres, Total People, If storing bookmarks as WebP, Users on Cards layout, Users on List Layout, Max number of Series in a Library, Max Volumes in a Series, Max Chapters in a Series, and if any series relationships are present.

Changed

  • Changed: A major rework to the events widget to provide detailed information about what is occurring during library/series scans and cover refreshes.
  • Changed: Admin dashboard has received a major overhaul to the tabs. Tabs have been split into General, Users, Libraries, Media, Email, Tasks, and System.
  • Changed: Removed Actions dropdown and functionalities from System tab and moved them to Tasks tab.
  • Changed: Tweaked the messaging around Stat collection to reflect what we collect (aka we don't collect browser information)
  • Changed: On Series detail, some of the tag badges have been replaced with a new design.
  • Changed: (Performance) Large performance gains on Scan Series by checking for highest level based on known series folders before falling back to library folders for a scan.
  • Changed: Series detail Language will now show the full name (ie en -> English)
  • Changed: The details modal for chapters and volumes is now a bottom drawer. This new design is to help make the experience more natural on mobile and give us more horizontal space to work with.
  • Changed: Library Recommendation page now uses the time calculations to select quick reads rather than just pages. Instead of < 2000 pages, we now pick series that are not ongoing and can be completed in less than 10 hours.
  • Changed: You can now view an individual issue/book's summary in the new detail drawer, along with maturity rating, word count, pages.
  • Changed: Series detail drawer will now select the book's internal title rather than generic volume 1 when it's set.
  • Changed: (Performance) Reduced an array allocation that occurs thousands of times a scan.
  • Changed: Series detail uses the builtin cover image refreshing mechanism rather than some old, initial implementation, resulting in a much more reliable refresh mechanism.
  • Changed: Side nav filter (when there are more than 10 libraries) now uses a clear button within the input field.
  • Changed: Tweaked the book reader to try to reduce overlapping on bottom action bar.
  • Changed: Redesigned the cover image chooser to be less intensive for volume/chapter image uploads.
  • Changed: When in image chooser, don't allow the first image, which represents what was the active cover, respond to cover image updates
  • Changed: Cleaned up the selection code on mobile to be less prone to accidental selections
  • Changed: Analyze Files on a series, when invoked by user, will force a recalculation regardless of cache.
  • Changed: Many areas around the app, like library detail and series detail, will now recycle DOM to lessen impact of rendering many items.
  • Changed: Changed the router to help with this infinite loading on Firefox issue
  • Changed: Adjusted gutters on admin dashboard to match other screens
  • Changed: The directory picker now allows you to paste in a directory path to select it and features a new design that should be easier to use.
  • Changed: Default pagination is all items on API level
  • Changed: Changed some APIs for Tachiyomi to help with progress syncing edge cases
  • Changed: When errors occur during scans, show the event widget icon in read

Fixed

  • Fixed: Fixed a layout issue for screens with cards that had no data, the message would be fixed into a card space.
  • Fixed: See more is now at the bottom of the section, instead of in the middle of the people area.
  • Fixed: Fixed some alignment issues for page subtitles where the header had actionables
  • Fixed: Fixed a bug in the user-preferences within the BookReader accordion panel where missing brackets for the id prevented the accordion from functioning correctly.
  • Fixed: Fixed an off by 1 pixel bug on the search overlay
  • Fixed: Fixed an issue where images in the book reader were not respecting height limiting styles, causing the image to spill across multiple virtual pages in column layout
  • Fixed: Fixed a bug when fit to height and there is overflow on horizontal, the pagination area is stuck to the original width and after scrolling right, the pagination area doesn't move on manga reader.
  • Fixed: E-ink readers would show an outline on the pagination area on book reader when using white mode
  • Fixed: Fixed a bug when switching from column layout to default, the progress would get reset and current line wouldn't be scrolled to
  • Fixed: Side nav filter (when there are more than 10 libraries) now hides when the side nav is collapsed.
  • Fixed: Fixed a bug where the progress bar wouldn't render on a card item while a download was progressing
  • Fixed: Fixed language not being sent to the backend when editing in series detail modal
  • Fixed: Fixed a bug where in some rare cases, the scroll would not be reset when using the reader
  • Fixed: Fixed a bug where sometimes changing the layout wouldn't re-render the page.
  • Fixed: Numerous spelling corrections throughout the app
  • Fixed: Fixed a bug where table of contents would no longer generate on some Epub 3's due to a change in the underlying epub reader we use
  • Fixed: Fixed a bug in the epub parsing where even if you had a series index and series group, but didn't have the series in the title, Kavita wouldn't group them properly.
  • Fixed: Fixed a bug where refresh tokens were supposed to be granted, but weren't and hence a re-authentication was required.

Theme

  • Added: Added --card-list-item-bg-color for the card list item

Known Issues

  • Reading List page's drag and drop is broken when there is scroll on the page. You can use the Order Numbers option which will enable input boxes to re-order.
  • Apple M1 chips are not supported for generating PDF covers (if you host your server on a mac). With the new reader, you can now at least read them. The team is investigating a solution.
Kavita - v0.5.3 - Book Reader Enhancements, Related Series, and More!

Published by majora2007 over 2 years ago

v0.5.3 is here and packed full of a collection of random features I wanted to build out for Kavita. I usually plan out the next few releases and stick to that schedule, adding in features that I want or users suggest randomly, but this time I wanted to sit down and take a release for myself to work on whatever I felt like, rather than what I had planned and it turned out to be really fun and some great additions came from it.

Let's start with what the discord community is abuzz about and that's the fated book reader refresh. Started last release but pushed due to complexity was a big refresh to the UX around the book reader and bringing one of our most up-voted feature request, calibre-like reading. Not only did we bring this reading mode to Kavita's reader, we also brought along new color themes for the reader for our OLED users, a font for Dyslexic users, and immersive mode, which hides the menuing system and lets you focus just on your book (goes great with column layout). It's been great iterating on the book reader since it was first built. I can't wait to see how it evolves and is polished further in later releases.

Next is my personal favorite and another coming from feature request, Series relations. Isn't it really annoying reading a series and not knowing what the next series is or what spin-offs exist? Well, now you can configure this into Kavita. From any series you can configure relationship links to other series, like sequels, prequels, spin off, side story, alternative version, etc. There are many links to choose from. You can see a little teaser of it below. Jump on our wiki to learn more about the feature.

image

Another killer addition is a big update to our search. You spoke and I heard you, you can now search for individual titles (book or manga/comics) and for individual files in addition to series, genres, people, tags, reading lists, libraries, collections, etc. This was tricky to implement and still retain the non-functional requirement of everything responding under 300ms. There should be no issues with you finding things in your server.

Wrapping it up is a few small but powerful ones. Likely you've seen it a few times in your logs, but the old constraint issue. I finally was able to track it down and squash it for good. It ended up being an index in the database that wasn't actually being used. Another one is the extra white space on the right side of the card grid system. Robbie was able to drive a beautiful solution and it works just as I envisioned. Lastly, On Deck was tweaked yet again to try to achieve a good balance of how I want it vs how I can actually code it and we have found a good compromise that works.

As usual, the release is packed with many things, so read through the changelog. To close off, I want to say thank you for all the support and suggestions to help shape Kavita. I have a lot of ideas that I want to see realized and really appreciate the inputs that have helped us build out Kavita.

Note: Kavita releases will slow down for a while as I have taken a new job. I am still committed to bringing my vision of Kavita to life, so don't worry about this project dying. I use Kavita daily.

Added

  • Added: Users can now start reading from any chapter within a Reading List
  • Added: Reading lists now have Cover images like Collection tags (https://feats.kavitareader.com/posts/89/adding-cover-images-to-reading-lists)
  • Added: Added ability to filter series on a collection page
  • Added: Library detail, all series, and collection page filtering will now persist in the url. This allows you to make a filter, click a series and hit back in browser to load the screen as it was, on the same page with the same filter as previously.
  • Added: Card's progress bars will now automatically reflect a users' reading status in real time as a user is reading in real time without refreshing
  • Added: Added a new Sort by field on filtering, Last Chapter Added, to help users sort in a way that mimics On Deck
  • Added: Edit Series modal information tab will now show Last Chapter Added and Last Read Progress
  • Added: Added a link to the wiki for stat collection to help users understand exactly what we collect on the setting field
  • Added: GIF image types are now supported
  • Added: Bookmarks are now moved out of user settings and are their own page on side nav.
  • Added: Bookmarks can now be read by clicking on the series they are from, which will open the manga reader for that set of bookmarks.
  • Added: Users can now link series together via Edit Series modal. Linked series will show on Series detail page under the Related tab.
  • Added: Kavita will now read and group based on the LocalizedSeries tag within ComicInfo. This is not an official tag, but an issue is raised on Anansi Project. This tag maps to Series LocalizedName field.
  • Added: Library Detail now has 2 tabs: Library and Recommendation. Library is your library and recommendation is detailed below.
  • Added: Library Detail Recommendation tab now has actual recommendations. A first pass, we now show (for the current library only): On Deck, Quick Reads (series that are not read, not ongoing, and are under 4k pages), Highly Rated (series rated by any user on the server with more than 4 stars, sorted by average star count), Rediscover (series that you're already read), and lastly More In (more in a given genre).
  • Added: Users can now search directly for files within Kavita. Clicking on the file will open the respective series.
  • Added: Users can now search against Chapters with TitleName set. TitleName is extracted from the Title field in ComicInfo or the book name from Epubs (i.e. if you search 'Stone' and have a series of Harry Potter, 'Harry Potter and the Sorcerer's Stone' will show up as it's the 2nd book in the series)
  • Added: Added total pages to series info modal
  • Added: When a file doesn't exist on disk but still in Kavita and the user tries to read it, throw an error and show it on the UI rather than just spin forever.
  • Added: New book reader drawer design. Drawer has been redesigned to break up settings and table of content to reduce the amount of scrolling and to provide a cleaner UX.
  • Added: Column layout (1 or 2 column) is now available in the book reader. This is a no-scroll solution which works best on e-ink readers.
  • Added: New coloring themes for the book reader. Users can now choose between Dark (existing), Light (existing), or Black (new, all black)
  • Added: Blacklist .qpkg folders and don't scan Recently-Snapshot or recycle folders.
  • Added: New OpenDyslexic font for the book reader
  • Added: You can now hide the action bar (top/bottom bar) in the book reader by using Interactive Mode. Interactive mode will automatically turn on tap to paginate and gives you a distraction free way to read. In order to show the drawer and top bar, you can tap in the document on a non-interactive element.
  • Added: Added --bulk-selection-highlight-text-color and --bulk-selection-text-color for bulk selection bar.
  • Added: Added --search-result-text-lite-color for search results accent (where library is shown)

Changed

  • Changed: Aligned the edit collection tag modal to align with new tab design
  • Changed: Small change in webtoon reader to try to avoid using max width on PC's
  • Changed: (Performance) Removed some nested loops and avoided some list generation in scan loop
  • Changed: When opening a pre-filtered page, the filter section won't automatically open. Instead, the filter icon will be green showing that a filter is in effect.
  • Changed: Made some style changes in the manga reader to better center images in the reader on different reading modes
  • Changed: When a special has a Title set in the metadata, on series detail page show that on the card rather than filename
  • Changed: Increased Recently Updated to give back 30 series worth of additions while still hitting our Non-Functional performance requirements
  • Changed: From dashboard, clicking any activity stream (carousel)'s title, will go to all series page with a custom filter to emulate the underlying stream.
  • Changed: Tweaked the styles on image cover chooser
  • Changed: Typeahead filters are now disabled when they can't be changed. For example, library page, you can't remove the library from the typeahead.
  • Changed: Event widget can now scroll vertically if there are messages that go past the viewport height.
  • Changed: When opening the side nav on mobile with metadata filter already open, collapse the filter.
  • Changed: When on mobile viewports, when clicking an item from side nav, collapse it afterwards
  • Changed: Updated vers-one/EpubReader library which will now allow for reading epubs with bad table of contents (missing items), something that a lot of users complained about.
  • Changed: When an epub doesn't have a dc:date set with publication event type, default to the dc:date tag for publication date.
  • Changed: Updated ComicInfo MA15+ to MA 15+ per Anansi Project (wrong info was documented originally)
  • Changed: Enhanced cover image selection such that back_cover and back-cover will no longer be selected
  • Changed: Large Scale modularization to cleanup our lazy loaded modules and implement prefetching lazy loaded modules. The app should load even faster now.
  • Changed: Home page (dashboard) is now called libraries/ instead of library/
  • Changed: Removed cleaning some edition tags from Series name, like Full Color Edition or Full Contact Edition.
  • Changed: Adjusted some styling in the search results screen
  • Changed: Search results are now limited to 15 in each category that is searched against.
  • Changed: Wrote some extra messaging in the invite user flow to help users understand they can use fake emails or use the link generated after to setup an account for the user
  • Changed: Updated the wording for 'Read in Incognito' as in was redundant
  • Changed: Misc UX polishing throughout the app
  • Changed: Moved tags to be closer to genre rather than between different people roles on series detail
  • Changed: Optimized the query for On Deck to significantly reduce memory and time
  • Changed: Adjusted the mime type for downloads to use application/x-cbz, etc for cbX type of files, rather than the archive mime type. This should help some OPDS readers, like Marvin3, handle downloads more correctly
  • Changed: Added wiki documentation into invite user flow and register admin user to help users understand email isn't required and they can host their own service.
  • Changed: Removed a - 1 hack in progress bars on cards as there used to be an off by one progress bug in Kavita many versions back.
  • Changed: On deck now functions differently. The sorting will be based on reading progress then by last chapter added. Only series with reading progress in the past month are considered or series with some reading progress and last chapter added within the last week.
  • Changed: All drawers have swapped out with a new design and functionality, including ability to click outside the drawer to collapse it.
  • Changed: User preferences now uses normal range sliders instead of custom sliders
  • Changed: Updated to .NET 6.0.4
  • Changed: Book reader action bar (top/bottom bar) is now fixed height. The title will overflow and can be hovered or pressed on mobile to view the full title of the book you're reading
  • Changed: Icon button names (settings, close, next/previous) are now removed in the book reader
  • Changed: Continuous reading buttons (next/prev chapter) will now disable preemptively if there is no next or prev chapter in book reader
  • Changed: The next page button will now show as the primary color to indicate to the user what the next forward page is in book reader
  • Changed: Swapped out our grid implementation to allow us to have less whitespace on the right side of the page when laying out cards (Thanks @therobbiedavis for driving this)
  • Changed: Docker health scan interval has been dropped from 300s to 30s.

Removed

  • Removed: Removed Light and E-ink themes form Kavita. Less than 1% of users were using light or e-ink themes and the maintenance was high. These themes are offered on our wiki to be used as a custom theme.

Fixed

  • Fixed: Finally fixed On Deck so that chapters show correctly when they are added on series that are fully read. This required a migration so it will only work on new series going forward.
  • Fixed: Fixed a bug where sometimes series level metadata would pull from the wrong chapter when the first chapter starts with a float.
  • Fixed: Fixed a bug where locked people fields on a series would be reset during a scan
  • Fixed: Fixed a type on sending when collection tag cover images are updated, thus user's not seeing updates without refreshing
  • Fixed: Fixed a bug where custom series, collection tag, and reading list covers weren't being removed on cleanup
  • Fixed: Fixed a bug where when paging in manga reader, the scroll to top wasn't working due to changing where scrolling is done
  • Fixed: Fixed a bug where clearing a typeahead externally wouldn't clear the x button
  • Fixed: Fixed a bug in typeahead when a partial filter is in place then using keyboard to select options, the wrong option would be picked.
  • Fixed: Fixed a bug in a re-usable pagination component which could trigger multiple page loads due to how pagination model updates occurred
  • Fixed: Fixed a rare bug where an image could be cut off in some scaling modes in the manga reader.
  • Fixed: Fixed a bug on getting publication status within a certain library which would fail due to how the query was written.
  • Fixed: Fixed an issue where series with similar names would sometimes throw a constraint issue due to a custom DB index.
  • Fixed: Fixed a bad parsing case for Series Name - Ch. 23.5 - Volume Extras
  • Fixed: Fixed a bug stemming from the old db where duplicate issues could be added.
  • Fixed: Fixed scroll to top not rendering or working due to the moving of scroll to body instead of window.
  • Fixed: Fixed an issue in updating tags that could lead to a unique constraint
  • Fixed: Fixed an issue with webtoon reader on initial load being completely black and broken
  • Fixed: Fixed a bug where search bar when focused would expand just a bit too much
  • Fixed: Fixed typing lag when interacting with a typeahead
  • Fixed: Fixed some orientation and resize event handlers that weren't firing
  • Fixed: Fixed a bug where filter drawer apply button was sometimes not reachable
  • Fixed: Fixed a bad looking close button on the book reader
  • Fixed: Fixed a bug where volumes that were a range would fail to generate series detail api response.
  • Fixed: Fixed a bug where bulk selection in storyline tab wouldn't properly run the action on the correct chapters (if selecting from volume -> chapter).
  • Fixed: Ensure the bottom action bar is at the bottom of the viewport on small pages that don't take up full height
  • Fixed: Fixed a bug where pagination wasn't mutating url state
  • Fixed: Fixed the invite user modal not continuing when email had a trailing space
  • Fixed: Fixed some bugs around fields not being locked correctly from frontend
  • Fixed: Removed the actions in the header on some pages where there were no actions to make at a page level, like collections
  • Fixed: Fixed library detail page not having header actions hooked up
  • Fixed: Split page was not centering the canvas in manga reader

Known Issues

  • Firefox 100 has an issue with redirecting to the correct route when a user tries to load yoursite.com/ and will freeze up. This is a browser bug, you can use yoursite.com/login instead to avoid or use a different browser.
  • Apple M1 chips are not supported for reading PDFs (if you host your server on a mac). The team is investigating a solution.
Kavita - Hotfix 0.5.2.5 - PDF Rendering Regression on Pi 32-bit

Published by majora2007 over 2 years ago

It has come to my attention that PDF rendering broke on 32-bit Pis due to a downstream dependency and a .net regression. The downstream library has put a workaround and we have confirmed it works in this. Sorry for the inconvenience. This will be the last hotfix.

Added

  • Added: Backup now includes your themes folder.

Fixed

  • Fixed: Fixed an issue where PDFs would not render on 32-bit Pi's due to a dependency having a bug.
  • Fixed: Fixed a copy issue where sometimes non-existent files would cause existent files to not copy during backup
  • Fixed: Fixed a bug where bottom action bar on the book reader would have side-effects that top didn't, like settings button wouldn't open the drawer.
Kavita - Hotfix 0.5.2.3 - SortName & Invite User Redirect fix

Published by majora2007 over 2 years ago

There were some unfortunate issues that slipped through release testing, so please update. The main focus for this hotfix is around SortName on series, which was getting cleared during a scan and not repopulated, thus breaking the sorting logic within Kavita.

In addition, some issues were found around Invite user, where unauthenticated browsers would not properly show the registration screen. These and a few more bugs reported have been fixed.

Please note, On Deck is still not functioning as expected from previous release and in this hotfix. It is planned to get a full treatment to align to my vision. Please make due with it as is.

Note 2: The hotfix is skipping patch .1 and .2 in order to better align with our nightly users.

Changed

  • Changed: Slightly tweaked the logic of On Deck to consider chapters in a series that have been created within 30 day cutoff in addition to having been read. This does not fix the inherit issues with it, but serves as a first start.

Fixed

  • Fixed: Fixed a bug where some events weren't being sent to admin clients only
  • Fixed: Fixed a bug where on scan, if SeriesSort wasn't set in ComicInfo, it would get cleared, thus breaking sorting on library detail page
  • Fixed: Fixed an issue where when falling back to folder parsing, sometimes when the folder name wouldn't parse well, like 'Foo 500' which parses as 'Foo'. Now the fallback will check if we have a solid series parsed from filename before we attempt to parse a folder.
  • Fixed: Ensure SortName is always being set during a scan loop, even if locked, to ensure that it's never just an empty string (which breaks sorting)
  • Fixed: Fixed some errors being thrown from metadata update for files that haven't had a summary set.
  • Fixed: Fixed a bug where updating a series name to an existing name in the system wouldn't throw an error
  • Fixed: Hide the side nav hamburger toggle when not authenticated
  • Fixed: Fixed some logic issues around determining which releases are installed, available, etc from Announcements page.
  • Fixed: On Firefox, upload cover image via url had different event properties than other browsers and would completely fail.
  • Fixed: Confirm email (invitation link) would redirect to login when not authenticated due to side nav having an authenticated call in it.
Kavita - v0.5.2 - UX Refresh, Custom Themes, Metadata Editing, and OPDS updates!

Published by majora2007 over 2 years ago

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:

  1. The Cover Chooser now works with urls pretty consistently
  2. Updating the Manga reader to use raw images giving us a much better experience on smaller screens with 'Fit to Screen' splitting mode
  3. Huge performance gains on Series Detail page
  4. 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.
Kavita - v0.5.1.1 - Email Migration Hotfix

Published by majora2007 over 2 years ago

There have been a significant amount of reports that users are struggling to receive the email link for email migration or they are unable to find in their logs (usually due to a logging level mismatch). We have altered the migration code to not require any email to be clicked and instead as long as you pass correct login credentials, email migration will successfully validate.

We will continue to look into the email functionality and smooth out existing flows. Thank you for being understanding.

Changed:

  • Changed: Email migration will now auto validate the email as long as user provides the correct username/password
Kavita - v0.5.1 - Search & Account Enhancements

Published by majora2007 over 2 years ago

Another jam packed update is here and it lays out some important foundational work for future updates. The focus of this update was account management and search overhaul. Both are functions that were built out very early in the project and haven't had much love in quite some time. The key accomplishments that I wanted was making account registration easier and more streamlined and overhaul search to work against the newly added metadata from last release.

First off, accounts now require emails to function. When you start v0.5.1 up, a one time migration will occur to have you confirm your email address. After that, you can now easily invite users to join your server and your user's can register their account from a unique link sent from your server. User's can now use forgot password as well to change their password, without you having to change and send to them manually. Emails will not be sent if your server is not accessible to the web, instead a link will be generated in your Logs under Email Link.

If you are concerned about your email, please note, that our email service (gmail) automatically delete emails that flow through them immediately and is only accessible by myself. If you are not satisfied with this, we offer a separate service for the email, so you can use your own SMTP server. You can find details here. If you don't want that, you can either access and invite users when your server is not accessible to the web (aka localhost/internal ip) or change the email service to a bad url, which will always fail and use the fallback.

Next up is search and I have to give a huge thanks to @therobbiedavis who really polished the UI up quite a bit. Our search now searches against the metadata fields, like people, genres, tags, it can search against collections and reading lists and is still blazing fast. The UX has been really polished and should work well on even the smallest devices.

As an added bonus to this release, we have refresh tokens which keep you authenticated without you having to re-login and Tachiyomi progress syncing is done and a Pull Request is open to have Tachiyomi support us.

This has been another great release. The next 2 releases are planned with a focus on UX and the readers. It will take some time, please be patient, but I think the results will speak for themselves.

Added

  • Added: Added 'f' as keybind to toggle fullscreen on manga and book readers.
  • Added: Added Refresh Tokens. Users are issued tokens that last 14 days, just before the 14 days, the UI will request a new token to avoid having to re-authenticate.
  • Added: Changed the Dockerfile to include a health check to make sure Kavita is running smoothly.
  • Added: Added support for Tachiyomi to sync progress
  • Added: Added a new section to the dashboard that shows when new volumes and chapters are added to the library, providing more detail than just the Series itself (Recently Added Chapters)
  • Added: Invite users to your server through email and they can setup their accounts from the emailed link
  • Added: All accounts now must have an email assigned to their account and must verify said email.
  • Added: Added ability to reset password via email from login page.
  • Added: Implemented a new role 'Change Password'. This role allows you to change your own password. By default, all users will have it. A user can have it removed by an admin.
  • Added: Added a new activity stream on the dashboard which shows Recently Updated Series with a number badge showing the number of chapter/volumes added.
  • Added: Added the ability to search for metadata fields (people, genre, tags), series, collections, and reading lists. This also applies to OPDS where applicable.
  • Added: Added data collection on 2 new fields: NumberOfLibraries which will help for some upcoming design work and HasBookmarks, to see if other users are using this functionality and the scope of changes I can make to stabilize them further.

Changed

  • Changed: When migrations occur, create a temp/migration/version/kavita.db backup, attempt to run migrations and if any fail, restore the temp/migration/version/kavita.db backup and exit immediately with verbose logging.
  • Changed: Admins should have ability to delete a user's reading list (api only)
  • Changed: Moved calculation for getting the resume point to the backend
  • Changed: Removed showing toasts when series are added to the server since cards will show automatically.
  • Changed: Changed how Kavita finds the ComicInfo.xml to prefer top-level documents, which is the current way most tools work.
  • Changed: Series detail now will have dedicated tabs for Volumes and Chapters/Issues, in addition to Storyline (which is the existing view). Storyline is selected by default and has side-by-side grouping of volumes and chapters. Volumes shows just Volumes, Chapters/Issues shows just those underlying chapters, especially good for users with chapters grouped into volumes.
  • Changed: Added a spinner when epub reader is loading the book
  • Changed: Server settings is now next to progress button in header.
  • Changed: Admins can change an admin's username/role/library access.
  • Changed: Admins can remove another user's admin role.
  • Changed: Changed (you) to a star to indicate who you're logged in as.
  • Changed: Editing a user's role/library access is now streamlined.
  • Changed: (Performance) Put an optimization in refresh cover images to avoid 3 db calls.
  • Changed: Brand spanking new UX for search screen. Search will now open up the results in a modal like window, the search bar will grow to eat the rest of the screen width.
  • Changed: Tweaked the card design to help them standout better on dark mode.
  • Changed: Users can now user their own email service (docker) to allow them to use their own SMTP servers. By default, Kavita will use it's email service, which auto-deletes email records after sending, even on failure. No emails leave the user's install until an invite occurs, giving the user the opportunity to use their own service.
  • Changed: Changed the default margin on mobile devices for book reader to 5% to give a little padding from edge
  • Changed: On Bookmarks tab in user settings, the series name will now show the bookmarks and where the edit button is now a button to open series.
  • Changed: Changed how we delete a bookmark so the logic is more precise
  • Changed: On super small screens (less than 300px width), the server settings button will move under account dropdown
  • Changed: Webtoon reader will now hide all images until the first load is complete to avoid any layout shifting
  • Changed: Adjusted the rendering on reading list page to be better on smaller screens (and worse on larger ones). This will be addressed in UX release.
  • Changed: Bookmark file management now happens in real time for deleting files and no longer runs on a scheduled task.

Fixed

  • Fixed: Fixed an issue where the copy button wasn't working on the '3rd Party Clients' page.
  • Fixed: Fixed an issue where a user who's logged in but has download role removed and then tries to download a file, Kavita would allow the download as the claim was still present in their JWT.
  • Fixed: In directory picker, clear the filter when you load a folder
  • Fixed: EPUB parsing was missing setting the Day metadata tag
  • Fixed: Fixed the spelling of 'On Going' to 'Ongoing'
  • Fixed: Removed filtering button on Reading List page since it doesn't make sense
  • Fixed: Fixed a bug where the events widget was visible for non-admins
  • Fixed: Fixed an issue where the pagination would reset to 1 on the library-details page when refreshing or navigating directly to a specific page number.
  • Fixed: When normalizing series names, if the series has no alphanumeric characters (ie non-roman), return the original name back rather than empty string.
  • Fixed: When no user exists for an api key, throw a 401.
  • Fixed: Fixed a bug where users couldn't select a collection (via add to collection) when they had a lot of them.
  • Fixed: Fixed a bug where some covers would generate with green overlays and offsets due to an underlying bug in libjpeg
  • Fixed: Fixed a bug where marking a chapter as unread was actually marking it as read
  • Fixed: Fixed a regression when reading epubs, the last page wouldn't count it as totally read
  • Fixed: When deleting folders in bookmark cleanup, delete empty folders correctly
  • Fixed: When a new library is created, some cards wouldn't show the library name due to caching. Reworked the caching code to be lighter on memory and fix the issue as well.
  • Fixed: Fixed a bug where some book style overrides were duplicating. New logic targets only elements that really need the tag.
  • Fixed: Fixed a bug where Filter options were not in alphabetical order
  • Fixed: Don't throw an exception when we are trying to save progress and there is nothing new to save in manga reader
  • Fixed: Fixed a bug where checking for update did no validation if current version is already ahead/same before telling UI to open modal
  • Fixed: Fixed a bug where sort options were not working on all series page
  • Fixed: Fixed an issue when downloading bookmarks, sometimes a filename conflict can occur. Filenames will be prepended by chapter Id
  • Fixed: Fixed a bug where typeahead wasn't filtering as you type and was allowing multiple selection of same item
  • Fixed: Fixed an issue where download event wasn't sending consistently when downloading files leaving the progress widget showing something downloading indefinitely
  • Fixed: Fixed a bug in the webtoon reader where we were using the wrong dimensions for fitting images to screen
  • Fixed: Fixed a bug in Get Next/Prev Chapter, where chapters were not correctly between volumes and specials. They now behave correctly. The reading order is volumes -> Chapters -> Specials.
  • Fixed: Fixed a bug where tap to paginate in the book reader would prevent the user from clicking the scrollbar

Removed

  • Removed: Account creation without emails is no longer possible.
  • Removed: Users can no longer disable authentication on their servers. All non-admins can use the default password on the wiki or Github to change their password to one of their choosing.
  • Removed: Removed old manual migrations (config change, cover images) that are from many releases ago. If you're updating from over 10 releases ago, you may loose cover images, you can update to v0.5 then to v0.5.1 to avoid that.

External Services

  • Stats: Stats services is now collecting two new fields to help collect data for future reworks. HasBookmarks to help understand how many people are using this functionality and NumberOfLibraries, which is the number of libraries. Remember, all data is anonymized and the Stat service is Open Source. Please continue to opt into data collection to help us build a better service for your needs.
Kavita - v0.5.0 - Local Metadata Support + Tachiyomi Extension

Published by majora2007 almost 3 years ago

It's been some time since our last release, so much so that I almost forget what v0.4 was all about. v0.5 is finally here and is the largest release so far with 32 features, 31 changes, 36 bugfixes delivered. Thank you for waiting and without further ado, let's get into it.

Local metadata is here and Kavita will now respect your metadata over your filenames and in addition, pull in all that data. You can now slice and dice against that metadata from collections and library detail to explore your data. In addition, some fields from EPUBs are mapped into a respective ComicInfo field, so book collectors rejoice, you can now sort by author.

In addition, we now have a Tachiyomi Extension! Starting with v0.5, you'll be able to hook up Tachiyomi with Kavita and start consuming content. While the extension is feature complete, we are still working on integrating progress sync for Kavita into the Tachiyomi application. This will come at a later date. Thank you to @ThePromidius for building the app and the discord testers for beta testing for the past month.

This release is so jam packed, it's hard to pick out some other really cool features. Some of my favorites are PDF rendering has been multi-threaded and is way faster, bookmarks are stored differently and now allow for you to see image previews and also not worry that the underlying image is changed when you swap out the file. We updated to .NET 6, which comes with a ton of performance improvements and we've reworked all the cache logic to ensure that we only open your files when something new has happened.

I want to give a special shoutout to @ChristofferGreen for again coming in and helping our downstream libraries get PDF support on ARM 64-bit machines and @ThePromidius for working extremely hard to build out a Tachiyomi Extension for Kavita.

Lastly, the next release will not be this big. This release was so large due to the scope of changes to support local metadata and the fact that I took a holiday in December. I have replanned the work for the year on the Projects tab, so take a look there if you're curious what is coming. Our wiki will have updated pages in the coming week with how all the new features work. If anyone is interested in helping with updating the wiki, please drop me a pm in discord.

Note: Docker images older than v0.4.4 have been removed. Please try to keep up to date.

Added

  • Added: The color theme (dark mode) will now tell the browser that the color scheme is dark and the browser can render the scroll bar a darker color. (#793)
  • Added: When a user is downloading files from Kavita, the events widget will now show those events (#806 )
  • Added: Version updates are now pushed to the events widget and allow the user take action from there (#806)
  • Added: Password requirements are now shown on register form in a tooltip (#804)
  • Added: Updated application to .NET 6 (#799)
  • Added: During Library Scan, Parser can now take information in ComicInfo.xml and Epub and use it for Series Name, Volume Number, Chapter Number. This will overwrite any information parsed out of the filename.
  • Added: Genres, People (Inker, Penciller, Editor, Artist/Cover Artist, Publisher, Writer, Letterer, Colorist, Character, Translator), Age Rating, and Tags are now extracted from ComicInfo.xml/epub files and related to both Chapter/Issues and Series. Series will be a summation of all genres/people on chapters/issues.
  • Added: Chapter Title can now be extracted and viewed on cards via hovering to see in tooltip or in the readers directly
  • Added: Sort Title will now be populated from books (no comicinfo.xml tag) if the tag is present in the epub and the book is not part of a series. (#817)
  • Added: AgeRating is now supported in Kavita. This is stored at both the chapter level and series level. Series level contains the highest (worst) rating of all the chapters
  • Added: ReleaseDate is now supported in Kavita. This is stored at both the chapter and series levels. At a series level, only the lowest year is stored representing the first release of the Series.
  • Added: Kavita now includes parsing support for European comics with Tome notation and HS identification. In addition, Br Fr will be cleaned out of titles. (#835)
  • Added: Tachiyomi now has a dedicated extension that works with Kavita. Requires Kavita v0.5+
  • Added: Ability to filter series from Library, On Deck, Recently Added by multiple fields, including: Genre, Format, Library, People (all people types from ComicInfo v2.1), Rating, Read Status, Collection Tags, and Tags
  • Added: Added support for ComicInfo v2.1 draft's Translator tag
  • Added: Added support for ComicInfo v2.1 draft's Tags tag
  • Added: You can now Sort by Sort Name, Created, Last Modified on screens that don't have existing sorting (ie You can't apply custom sort on Recently Added as that already uses a custom sort)
  • Added: New All Series page. This page will combine all series from all libraries in one page and let you apply custom filters on it. You can reach this page by clicking 'Libraries' on the home page
  • Added: Series can now be tagged with Language via ComicInfo and filtered in the UI.
  • Added: Added a re-occuring task to cleanup the Database of abandoned entities rather than doing the check exclusively after a scan.
  • Added: Ignore @Recently-Snapshot folders during scanning for QNAP devices
  • Added: PDF Rendering is now multi-threaded with a drastic speed up for those who are reading PDFs
  • Added: Implemented fullscreen mode in the readers.
  • Added: View bookmarks now shows the actual images due to new storage mechanism.
  • Added: Users can now reset their user preferences to Kavita Installation defaults in User Settings
  • Added: Before any database migrations run, Kavita will now perform a backup. The db itself will only be stored in temp folder and will be cleaned up the next day. If your application fails to startup, then stop Kavita, restore this db in config, and restart to try again.
  • Added: Added additional UI checks to ensure user is authenticated before loading sub-modules.
  • Added: Implemented Publication Status in SeriesMetadata and the ability to filter it. This is derived from Number and Count fields in ComicInfo.xml and will determine if a series is On Going or Completed.
  • Added: Added a tooltip to New Library modal to help explain what the different types do
  • Added: Added a exclusion to file scanning code to ignore .qpkg folders (QNAP users)
  • Added: You can now click on metadata tags from Series Detail and it will load up the search screen with a preset of said field
  • Added: Bookmarks are now backed up during backup procedures
  • Added: Delete Series will now send a UI event so series can be removed from client's UIs without refresh

Changed

  • Changed: Password requirements are now relaxed, only requiring 6-32 characters.
  • Changed: Metadata refreshing (cover images) now no longer uses a multi-threaded implementation. Due to the heavy I/O, this should not result in much performance decrease.
  • Changed: ComicInfo.xml will only be searched inside files with extension (cbz, cbr, c7, etc) to avoid extra time on files unlikely to have them in
  • Changed: Changed how metadata service selects the first volume to read summary info from. It will now select the first non-special volume rather than Volume 1.
  • Changed: Rewrote GetCachedPagePath() to be much more straightforward & performant.
  • Changed: When a card is selected for bulk actions, there is now an outline
  • Changed: From filename parsing, if a series starts with - or , Kavita will clean it out
  • Changed: Refactored natural sort order to behave closer to how Windows works. This should lead to better cover generation in more cases
  • Changed: Updated how EPUB Table of Contents are generated to handle some unique cases when Kindle packs the metadata
  • Changed: Refactored the UI to show OPDS as 3rd Party Clients since Tachiyomi now uses OPDS url scheme for authentication
  • Changed: Reduced the size of the unread badge on cards
  • Changed: New installs will start off with backups daily
  • Changed: Stack traces will be included with the error messages going forward (not exposed to UI)
  • Changed: Removed all Bitmap operations, which removes the need for libgdiplus to be installed on systems (linux/arm only)
  • Changed: Don't show an exception when bookmarking doesn't have anything to change
  • Changed: Refactored User Settings to move Password and 3rd Party Clients to a tab rather than accordion.
  • Changed: Reduced menu overlay auto close timeout to be 3 seconds
  • Changed: Overlay menus now have a blur effect (this is only on Chrome)
  • Changed: Paging direction overlay now shows arrows to help user understand which direction is next
  • Changed: Removed the color override options on manga reader
  • Changed: Bookmarks are now stored as files on the user's disk. They store the raw image from the archive/pdf/image. Due to this, we allow the user to change the bookmark directory to a custom. Do not place files in the bookmark directory manually, Kavita will delete them.
  • Changed: Updated Server Settings page to use 2 col for some rows.
  • Changed: Treat folders that start with ._ as blacklisted during scanning
  • Changed: Stack multiple user preference controls into the same row
  • Changed: (Performance) Implemented some optimizations to reduce the cover generation on second loads when files change
  • Changed: (Performance) Reduced the amount of redundant checks when processing files
  • Changed: Simplified the logic for when fit to screen rendering logic occurs. It works on all images not just cover images.
  • Changed: Parser will now clean titles by replacing multiple empty spaces with a single one. This occurs when a special keyword is being replaced from series name.
  • Changed: (Performance) Added a short circuit in CanOpen to check for rar files and force SharpCompress for deflating. This avoids an I/O and speeds up processing.
  • Changed: Tweaked how On Deck sorting works to try and better sort series with new chapters.
  • Changed: When the scanner stops a scan due to empty folders or disconnected drives, log as a critical message and inform UI that the scan stopped
  • Changed: Changed the wording on the UI to say 'Refresh Covers' rather than 'Refresh Metadata', to better reflect what is happening.

Fixed

  • Fixed: Fixed a bug where weekly checks for new versions would not send the correct name to the UI, thus the modal was not opened.
  • Fixed: Fixed a bug where OPDS pagination would send the incorrect number of entities on the feed, making the last page impossible to get to (#805)
  • Fixed: Fixed an issue where kicking off Refresh Metadata from series card would not show warning about it being an expensive operation (#779)
  • Fixed: Fixed an issue with logic around checking a file to see if it's been modified since last scan. There were inconsistencies and the time comparison was too precise, resulting in missed updates.
  • Fixed: Fixed an issue on series detail when clicking refresh metadata, then cancelling, the ... button would still be disabled.
  • Fixed: Fixed a bug where cover file cleanup wasn't properly deleting files due to a regex typo
  • Fixed: Fixed an issue where cleaning up backups wasn't properly selecting database files older than 30 days
  • Fixed: 64-bit ARM installs will now be able to read PDF files (#826)
  • Fixed: Fixed a case where chapter was being parsed incorrectly when the series title ends in a number. (ie Kaiju No. 8 036 (2021) (Digital) -> Chapter 8 036)
  • Fixed: Fixed an issue where add to collection for a single series wasn't calling the handler
  • Fixed: Fixed an issue where when looking for cover image, the file extension would throw off sorting code
  • Fixed: Fixed a rare issue where when reading manga, the code that picks the files in order would choose the wrong one due to OS sorting discrepancies. Now Kavita uses natural sort order as well.
  • Fixed: Updated parser to handle a case where there was more than one space as a separator
  • Fixed: Fixed a bug with typeahead where clicking two typeaheads would keep both their dropdown lists open
  • Fixed: Fixed a bug where running a scan in a docker container with a disconnected mount would still run.
  • Fixed: Fixed an issue when moving from Fit to Screen Splitting -> Left/Right Split, the underlying canvas wouldn't re-render or calculate correct sizing
  • Fixed: Fixed a bad optimization when rendering images on Fit to Screen
  • Fixed: Fit to screen will break the reading session if first page is low height and cover as height of canvas is fixed going forward.
  • Fixed: After rendering a Fit to Screen image, next page on tablet can still see the rendered image.
  • Fixed: Fixed a regression where custom fonts from books stopped loading in
  • Fixed: Fixed a rendering issue with margin left/right screwing book's html up.
  • Fixed: Fixed an issue where our custom line-height: 100% would break book's css if using line-height. Now we remove styles (overrides) if they are non valuable.
  • Fixed: Fixed an issue where anchors/links wouldn't be blue when reading in non-dark mode
  • Fixed: Fixed a bug where when choosing cover images, the word "backcover" would be accepted. This would lead to epubs with both cover and backcover images and no metadata to choose backcover sometimes
  • Fixed: Fixed an issue where large images could blow out the screen when reading on mobile. Now images will force to be the max width of the browser.
  • Fixed: Fixed an issue where some images in some browsers wouldn't load correctly over https when reading through a reverse proxy.
  • Fixed: Fixed a bug where on cloud mounts, some files can constantly regenerate covers on scan, despite nothing changing
  • Fixed: Fixed a bug on Changelog where multiple releases could show as Installed. For nightly users, show the last stable as installed.
  • Fixed: Fixed a bug where scanner would not delete a series if another series with same name but different format was added in that same scan
  • Fixed: Fixed a bug where last page would render twice if opening a read manga then paging backwards
  • Fixed: Fixed an overeager parse where a word with extra in it could treat the file as a special (#924)
  • Fixed: Fixed a bug where MarkChaptersAsUnread implementation wasn't consistent between different files and lead to extra row generation for no reason.
  • Fixed: An epub was not rendering images when read in Kavita due to specifying the image in metadata as absolute path (correct) then referencing it with relative path (incorrect). Kavita now checks relative paths and attempts to correct them.
  • Fixed: Fixed a rendering issue in book reader where an image would loose its aspect ratio if it has an inline style specifying height. (Thanks @andrewmackrodt for the fix)
  • Fixed: Fixed missing handlers for adding a chapter to a reading list from card details modal and adding series to collection from series detail.
  • Fixed: Fixed a bug where an existing series A has LocalizedName of B and files named A. A new series with files named B were not merging under Series A. They now properly merge (#950)
  • Fixed: Fixed a bad http call on reading list remove read and cleaned up the messaging
Kavita - v0.4.9.2 - Account Registration Regression Hotfix

Published by majora2007 almost 3 years ago

The last hotfix broke account registration for new users. Sorry about that.

Fixes

  • Fixed: Fixed a regression from previous hotfix which prevented first flow setup to not allow admin registration.
Kavita - v0.4.9.1 - Security Hotfix

Published by majora2007 almost 3 years ago

It has come to my attention that v0.4.9 has a vulnerability where non-privileged users can create admin accounts for themselves. Please update to mitigate this issue.

Fixes

  • Fixed: Fixed a critical bug where non-privileged users could create admin accounts (Fixes #894)
Kavita - v0.4.9 - Spillover + Webtoon Reader Polish

Published by majora2007 almost 3 years ago

It's been 1 year since I started on this idea of building an alternative reader to Ubooquity with the goal of being the Plex of the reading world. I wouldn't be able to believe the amount of progress that I would make nor the direction shift which would happen thanks to my vocal and understanding community. Kavita has definitely come along ways and has a long ways to go. I have many ideas still to implement and look forward to growing it with your help.

This is the last release before the initial metadata support release. As mentioned last release, this is a split of the defects and changes to polish Kavita since the next release will take quite some time to implement. By total accident, this release has a huge focus on the readers adding new functionalities like fitting covers to device, a new bookmark effect, and of course, a complete rework for the webtoon reader making it a solid reading experience.

In addition, we had a few changes. We've added an indicator to the top right of the nav bar to show you when Kavita is performing tasks like scanning the system, refreshing cover images, running backups, etc. This will expand in functionality over time, but it should give you a good insight into what's happening with the system.

We've changed what we collect from you if you opt into Stat collection. We now only collect your anonymous install id, OS, kavita version, .NET version, if you're running docker, and the number or cores you have. All data previously collected that does not fall into this set of points has been deleted with this release.

Lastly In Progress section is now called On Deck. This behaves very similar, however when a series gets a new chapter/volume added to it and you have reading progress, it will jump to the beginning. This should help you quickly see when something new comes out on series you might have fully read.

Also, if you haven't seen, we have a new feature request site up. So if you've been wanting to request something, take a browse there and request or upvote others.

Lastly, I want to thank Palace-Designs Inc, whom has offered up hosting for our VMs for free, which helps us reduce costs. Thank you for all the resources and help in getting us migrated over.

Added

  • Added: Added 'Date Added' to volume/chapter card detail modals to help users understand when new chapters are added after something has been fully read.
  • Added: When bookmarking a page in the manga reader, show a fade effect to help user understand which page was bookmarked (#667)
  • Added: Added a check during library scan to check if the drives are accessible and if any in the library root aren't, the scan will be aborted. (#713)
  • Added: In progress and Recently Added will now remove a card if the series is deleted during a scan
  • Added: Series detail page will now send user to dashboard if a series is deleted during a scan
  • Added: InstallId is now persisted to the database. InstallId is a anonymous key that is generated at startup and is used to track unique installs if you enable stat collection
  • Added: Added a select all/deselect all checkbox on Library Access for users that have a lot of libraries (#751)
  • Added: Added a widget to the nav bar which shows when the backend is processing events and tasks. Progress can be seen through this when active. (#755)
  • Added: Added progress events for Backing up Database, Cleaning Cache/Temp, Metadata Refresh for a library
  • Added: New Splitting option for cover images: FitSplit. This new method will scale the image to the display on cover images so you can see the whole image on load rather than splitting it (lessening the effect) or showing original with scrolling. This is now the default option for new readers. (#759)

Changed

  • Changed: Webtoon reader will now use fit to width instead of original to prevent overflow for high res images (#667)
  • Changed: Page prefetching and current page tracking is now separated and a page is not counted as current page without the top edge hitting top 25% of the screen. This results in much more reliable tracking on webtoon reader. (#667)
  • Changed: Moved format for card details to the highest level since all chapters and files have the same format for a series and added date added to each file/chapter to help users understand when chapters are added to the volume.
  • Changed: Don't show toasts on new series added when a user is reading
  • Changed: Book reader now scopes css to a class that has less potential for style creep
  • Changed: Some books have margins set that conflict with Kavita's reader. Added a style to avoid this case (black bars on side of book reader) (#728)
  • Changed: In Progress is now called On Deck. When a series with existing progress is updated with a new chapter, it will be pushed to the front of the list. (#742)
  • Changed: Update checks will now occur randomly between noon and 6pm daily.
  • Changed: Changed some log statements to better indicate when a series is not added due to a constraint issue
  • Changed: Implemented some performance enhancements to avoid extra array generation during library scan.
  • Changed: Improved the logging in scan loop for when duplicates or series can cause issues with adding. New messaging is now on the wiki to help user understand.
  • Changed: Allow the user to make more than 1 backup per day by including timestamp into the filename.
  • Changed: Removed most of the information gathering from the installs. Only InstallId, Number of Cores, Kavita Version, Dotnet Version, OS, and IsDocker is now tracked for all users. (#628)
  • Changed: Refactored how css variables were access through components, resulting in smaller css bundles
  • Changed: Updated readme with new host information and urls
  • Changed: Updated system tab with new urls and replaced .NET Version with InstallD, which is a unique identifier for an install.
  • Changed: Updated the default reading preferences for new users to give a better reading experience.
  • Changed: Tweaked the styling on the Changelog and added publish date as well.
  • Changed: Removed no-connection page redirects when an API fails in backend.
  • Changed: Updated the bookmark effect to have a much nicer effect rather than adjusting opacity

Fixed

  • Fixed: Fixed an issue where dragging the slider on manga reader wouldn't show tool tip dynamically. This does not work for webtoon reader. (#463)
  • Fixed: Fixed a missed case where partial volume support got missed on the epub parser. Now your books with Volume 1 and Volume 1.5 won't group. (#727 )
  • Fixed: Fixed a spec issue with entries that contain no items. We send 'Nothing here', but I forgot to send an Id for that feed.
  • Fixed: Fixed a missing migration for backup directory to the new config directory. Docker users will now have backups in config, all other users would have to manually move them over.
  • Fixed: Fixed an issue with Panels OPDS integration due to a malformed OPDS feed from our end.
  • Fixed: Last page on webtoon reader now properly counts.
  • Fixed: Fixed an issue where scrollToPage (from progress slider or go to page) would not work if the page was somehow slightly visible.
  • Fixed: Fixed an issue where register new user inputs were not styled correctly.
  • Fixed: Fixed an error being thrown when trying to rename a series to the same name as another series in the library but with a different format. (#741)
  • Fixed: Fixed backups not pointing to the correct directory (config) from previous release. Backups now contain the correct files. (#749)
  • Fixed: Fixed a bug where backup wasn't working correctly for docker users.
  • Fixed: Fixed a bug in cover image selection under a unique situation (#756)
  • Fixed: Fixed some comic parsing bugs based on user report (#758)
  • Fixed: Fixed a bug where check for update was scheduled twice with different ids.
  • Fixed: Fixed a duplicate render on automatic scaling due to emitting a value change with automatic scaling changing fit option.
  • Fixed: Fixed an issue where next/prev chapter loaders would execute when they shouldn't in webtoon reader
  • Fixed: Fixed a bug in webtoon reader where next chapter spacer when clicked would load previous chapter
  • Fixed: Ensure specials don't show their extension in reading lists (#766)
  • Fixed: Fixed a rendering issue on the book reader with long absolute positioned images causing a 2 tone background color in dark book reader
Kavita - v0.4.8 - Misc Fixes and Enhancements

Published by majora2007 almost 3 years ago

I started this release with the intention of it being small and targeted to rewrite search and make it more expansive, however half way through I realized, I really need the metadata code from the v0.5 release before I can implement my plan, so therefor, this release became a misc update aimed at fixing bugs found with the new influx of users.

This release is also smaller because I split the items going out. There was a large bug in the previous release where during scans, not all cover images would generate. I wanted to get that fix out, so I split most of the other stories (like webtoon polish) into another release (v0.4.9).

Breaking Change: Note that in this release, I have changed where all the config for the application lives. If you are not on docker, you don't need to do anything. Kavita will move your files to config/ directory on first run. If you are a docker user, all you need to do is change your mount point from:

docker run --name kavita -p 5000:5000 \
-v /your/manga/directory:/manga \
-v /kavita/data/directory:/kavita/data \
--restart unless-stopped \
-d kizaing/kavita:latest

to

docker run --name kavita -p 5000:5000 \
-v /your/manga/directory:/manga \
-v /kavita/data/directory:/kavita/config \
--restart unless-stopped \
-d kizaing/kavita:latest

aka data became config. If you forget this step, Kavita will notice and kill the server so you don't loose data.

Added

  • Added: When a series is added to the server, push that updated information to the Recently Added stream, without requiring refresh
  • Added: Recently Added and In Progress streams now have bulk actions operations
  • Added: Let the user click the incognito glasses from within the reader to turn off incognito mode. This is a one time change so they don't have to leave reader, open, and go to page.
  • Added: Added the ability to use bulk selection to add multiple series to a Collection. Using the same interface as reading lists, you can add a new collection or use an existing.
  • Added: Added missing background-image, border-image, list-style-image css property rewrites to the epub reader (common in epub-based comic books)
  • Added: Bulk deletion of series is now possible

Changed

  • Changed: Moved all config (db, logs, cache, appsettings.json, etc) to config/ directory. This is a breaking change for Docker users. You must rebuild your containers following the readme/wiki.
  • Changed: In Progress stream now shows user progress on the cards
  • Changed: When a user is logged out automatically, don't show unauthorized error, just redirect them to login
  • Changed: Do not allow non-admins to change their passwords when authentication is disabled
  • Changed: Removed some verbose debugging statements and moved some debug to information to be more prevalent to logs for default installs.
  • Changed: Reduced some error logging when an image is a cover image, we intentionally skip, so we should intentionally not log an error
  • Changed: When the DB fails to save, log out all the series the user should look into for constraint issues and push a message to the admins connected to site. This has a side effect that we will allow the rest of the chunks to process even if one fails.
  • Changed: Stat upload will now schedule itself between midnight and 6am in server time for upload
  • Changed: Epubs with only absolute positioned content (common in comics) will now suppress the bottom action bar
  • Changed: Changed how we calculate if bottom action bar is needed in the epub reader to be more reliable with absolute positioned images (comic epubs)
  • Changed: Last Active field will now be updated for a user when they open an instance of Kavita in which they are already authenticated giving a better understanding to admins on when a user was last active on their server.

Fixed

  • Fixed: Remove base url messages from screens as this feature was cut last release and shouldn't show
  • Fixed: Register user screen had white text color on a whitish text box. Colors have now been fixed across the app.
  • Fixed: Fixed an issue where inputs on the registration page were not black
  • Fixed: Fixed some resizing when typing a password and having a large amount of users with authentication off on login page
  • Fixed: Don't inform the user about authentication messages when they don't touch that control on server settings page
  • Fixed: Typeahead (collection input) now has same height as other input boxes
  • Fixed: Fixed a missing css escape for 'import url()' syntax in css files for the Book Reader
  • Fixed: Fixed a bug where backups directory wasn't mounted for docker users
  • Fixed: Fixed a critical bug which caused some series to be skipped during a library scan.
  • Fixed: Fixed a bug where searching on localized name would fail to show on the search.
  • Fixed: Fixed a bug where extra spaces would cause the search results not to show properly.
  • Fixed: Fixed a regression where specials with keywords like "oneshot" wouldn't actually become a special of the series. This was due to not falling back to parsing series from folder name and just taking filename series.
  • Fixed: Fixed a missed parsing case where comic special parsing wasn't being called on comic libraries
  • Fixed: Fixed an issue where the dropdown on the admin server page would not work on Safari or other iOS browsers.
  • Fixed: Fixed an issue when css escaping epub files, where imports would sometimes fail to rewrite url paths due to other naming convention
  • Fixed: Fixed parsing issues resulting in broken pages due to unique situations like imported css files with no content, different comment formats than expected in CSS files, etc.
  • Fixed: Removed an empty File for when covers/ had nothing in it.
  • Fixed: Fixed an issue where docker users were not properly backing up the database.
  • Fixed: Fixed a bug in the scanner where we fall back to parsing from folders for poorly named files. The code was exiting early if a chapter or volume could be parsed out.
  • Fixed: Fixed a case where cover image selection preferred nested folders vs files in root directory for archives. This results in improved cover image selection.
  • Fixed: Ignore Hidden and System folders when doing a library scan
  • Fixed: Accept all forwarded headers to fix an issue where some epubs could have nested requests on HTTP, when user is using HTTPS reverse proxy, thus causing images or fonts to fail to load.