Releases: Kareadita/Kavita
v0.5.1 - Search & Account Enhancements
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...
v0.5.0 - Local Metadata Support + Tachiyomi Extension
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 av...
v0.4.9.2 - Account Registration Regression Hotfix
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.
v0.4.9.1 - Security Hotfix
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)
v0.4.9 - Spillover + Webtoon Reader Polish
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
v0.4.8 - Misc Fixes and Enhancements
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.
v0.4.7 - Comic Rework
v0.4.7 is here with a large rework on how Kavita handles comics. Working with our community and some heavy comic rack users, we went to work building out the most common naming conventions. From testing for release, nearly all comics out of the box were matching correctly.
In addition, as is custom, quite a few other features made it into the release as well. The most important is a complete rewrite in how Kavita performs database updates in the Scan Loop. As mentioned in the last release, the performance improvements for memory was split into two parts, this release sees the completion of the second part. Kavita now breaks up work into smaller chunks and processes them. In addition, more pages will respond to updates from the Server, rather than making you refresh.
To wrap up, I want to highlight a few enhancements made that I think deserve a shout-out. First, we have support for half-volumes, a feathub request. Now you can have Volume 1.5 and Kavita will properly recognize and order it. Second, the book reader got some extra love and the resume feature that restores your last scroll position is now accurate to the line. Lastly, another feathub request has been implemented which is the ability to disable authentication for Kavita. You can disable the need to have passwords on your account for non-admins and login directly with your account.
Next up is an overhaul to the Search code to make it more flexible and cleanup a few bugs. Next release will be the last bite sized release before the first pass of metadata support.
Added
- Added: When a library scan is in progress, show a spinner on the Manage Libraries page in admin dashboard (#607 )
- Added: Added Last Scan on manage libraries screen to show when the last scan occurred.
- Added: Collection Detail page will now automatically load series that are added in other screens without manual refreshing
- Added: New setting to disable authentication on your Kavita instance. This opens you up to potential hacking or users logging into accounts they shouldn't. Use at your own risk. (#465)
- Added: Login page will automatically fill in username based on last login on device
- Added: (Parser) Added support for comics-downloader's default naming convention to parser: seriesname-chapterpadded.cbz (ex: spawn-023.cbz or spawn-chapter-023.cbz)
- Added: Added the ability to have decimal based volume numbers, which are common in ebooks or comics as interlude volumes. (#622 )
- Added: Manage Libraries tab in admin dashboard will now show a spinner when a library scan is in progress. Hovering over spinner shows when the scan started. Afterwards, the Last Updated will update.
- Added: When an OPDS collection is empty, we now send an Entry saying 'Nothing here'
- Added: Added parsing for multiple keywords for comic specials (OneShot, Book, Compendium, Omnibus, TPB, FCBD, Absolute, Preview).
- Added: (Parser) Expanded parser for comics to include many more common naming conventions, including those used by ComicRack users.
- Added: Scan Series, Scan Library, and Refresh Metadata now all use chunking to perform the main work. Each series is still parallelized, but only X entities are loaded into memory at once, significantly reducing memory consumption (1GB (old) vs 200MB (new) on 12k files) (#167 and #604)
- Added: UI will now show toasts when new series are added to Kavita
- Added: UI will now update on library detail view with new cards when they are added to library
- Added: We now publish some API docs on api.kavitareader.com. These are read-only, to use and test with Swagger you still need to run a local instance.
Changed
- Changed: When a user attempts to refresh metadata from UI, warn them that this is a heavy call and a scan library is likely the better option (#601)
- Changed: Docnet has been updated to latest release, which includes our contributions for ARM support. Pi users no longer need to copy the library file in manually for PDF Support (#468)
- Changed: Parser now uses culture invariant regex matching to hopefully help with very unique edge cases on Italian systems.
- Changed: New design for the Login screen to support disabled authentication. Now the login screen will show all user names on your instance and you can click to login. If authentication is disabled, you do not have to type a password assuming it is a non-admin account. Admin accounts still require authentication. If authentication is enabled, the login screen will be similar to existing with just some UX changes.
- Changed: Removed extra language binaries on build. This removes ca, fr, zh, etc folders reducing build size.
- Changed: Usernames and library names on cards now use sentence case. Capitalizing at least the first character.
- Changed: When flattening directory for caching, force the order of directories based on natural sort. Some users OS were giving different order in some rare cases.
- Changed: Hashing for images now takes into account the last time it was modified, so browser doesn't cache old entries. This usually affects when files inside an archive are modified and re-read. (#631)
- Changed: + is now allowed in normalization scheme. This allows series that use + as a way to denote sequels to not merge with their prequel series. (#632)
- Changed: We can now parse the full comicInfo.xml to spec from archives and emulate the fields of comicinfo from epub files. (this is foundational work, does not change how Kavita works)
- Changed: Removed Sentry from Kavita. It was no longer providing useful debug information (#629 )
- Changed: Book reader now has pinpoint accuracy in remembering the last line you were reading.
- Changed: Book reader's side drawer and action bars are now a darker shade of black to help them stand out from the reader (dark mode only)
- Changed: Removed the ability to Save to User preferences your book settings. This was causing more confusion than benefit.
- Changed: Cleaned up the book reader's UX by applying shadows around some of the menu components and buttons
- Changed: Changed pages throughout the app to show 'Issue' instead of 'Chapter' for Comic libraries.
- Changed: 'Volume/Chapters' to just be Chapters (or Issues if comic library, Books if Book library). This naming convention is applied throughout the application.
- Changed: Removed parser support for '01 Spider-Man & Wolverine 01.cbr'. This is a poor naming convention and is conflicting with valid cases.
- Changed: Changed Save to Defaults on light mode to be a primary button on Book reader side nav
- Changed: On Book reader, inform the user that pressing save is not required for changes to take effect and that margin will be reset if they are on mobile.
- Changed: Automatic Scaling on the Manga reader will now self-adjust after one image load occurs (non page spread) and will take into account image dimensions for choosing a better fitting option.
- Changed: (Performance) Changed some code to avoid a byte[] copy for getting cover image of epubs
- Changed: Scan Library and Refresh Metadata now saves to DB in Chunks meaning you don't have to wait for whole Library Scan to start using Kavita
- Changed: Added more checks in the Scan Series loop to ensure that we never go above the library root for handling an edge case where files are super poorly named
- Changed: Log messages in Scanner Service or Refresh Service will now have the service name in [] and are more verbose to give indication of what's happening.
- Changed: Changed how selection works on mobile to be less eager to trigger on mobile devices. Mobile now will allow a certain amount of time to pass. If you change scroll at all, the selection code will not trigger. (#606)
- Changed: Don't force title case for library name and user names. They will now capitalize the first letter and leave the rest as is.
Fixed
- Fixed: Fixed an issue where trying to read in incognito on a volume consisting of multiple chapters could grab the wrong chapter (ie chapter 3 instead of chapter 1)
- Fixed: Carousels should be back to normal now on mobile devices. Don't process touch events when selection is disabled. (#617)
- Fixed: Fixed an issue where marking multiple items as unread would render them as read on the UI.
- Fixed: User last active time now shows time
- Fixed: Manga Reader's Up/Down mode was having the wrong click direction. Up should go back a page, but in previous code was going forward.
- Fixed: Fixed a bug where we would reset dark mode on the book reader to dark mode if our site was on dark mode, despite user setting light mode. (#633)
- Fixed: Scan Series when nothing was updated in DB could skip kicking off a refresh metadata
- Fixed: After library scan, cleanup old Collection tags that have no series left
- Fixed: Fixed a small gap difference on the pagination bar in book reader drawer.
- Fixed: Next button doesn't properly show disabled state after no next chapter is found in book reader
- Fixed: Next button sometimes shows double arrows (load next chapter) when there are more pages to read in current chapter in book reader
- Fixed: Fixed padding issue causing the appearance of a block above the book reader's bottom navigation bar
- Fixed: Fixed a bug where the full file name (including file extension) was being considered for parsing as the series name for specials, rather than just the file name without the extensions
- Fixed: Implemented parser support for '2000 AD 0366' (#649 )
- Fixed: All tasks now reflect the user's timezone rather than in UTC (#651)
- Fixed: Fixed a bug where deleting items from a reading list would not actually delete them
- Fixed: Fixed a bug where we didn't save a file's last write time in the DB so we ended up opening files for page calculation each time.
- Fixed: Fixed a regression from last release where Scan Series could fall into scanning higher level folder (root folder) due to files be...
v0.4.6 - Reading Lists
This was supposed to be a small update to add reading lists, but I got carried away again. Instead, while you still get reading lists, you also get a TON of performance improvements, and UX enhancements across the board.
So what are Reading Lists? Reading lists are an order list of chapters that you have complete control over. Great for things like story arcs between multiple series, series that have unique names to read the full arc, or just a way to collect new chapters on your server to read them in one sitting. What's great about our reading lists is you can read through them in the order you defined without closing the reader. This means that once you start reading, even if the first item is a manga and the next is a book, Kavita will handle all that transition logic for you, so you just get the no distractions experience.
Next up is the performance improvements, where I wanted to tackle the memory usage in Kavita. I've planned to do this in 2 passes and what you're seeing now is the first pass. Every API in the system was looked at and optimized for speed and memory pressure. The goal was to reduce the amount of memory used while speeding up how fast Kavita processes items. This lead to changing how we handle cover images resulting in huge gains in memory pressure, but also slightly slower scans and a large migration off the bat. If you have a large library, the first run will be slow as we migrate the cover files to the new storage system. If something goes wrong, a simple scan will fix everything.
This was a really fun release tackling a lot of fun projects, like continuous reading in the webtoon reader and book reader, the performance optimizations, and the multi-selection functionalities. It is jammed pack full of new stuff not mentioned (like WebP support) in the opening post. Next release is focused on our Comic users, with a complete overhaul of the comic parser along with some further enhancements to reading lists and performance.
A few off topic notes:
- Pi users rejoice! @ChristofferGreen worked with our downstream libraries to add support for Pis. This release will now support PDFs for you. You may need to manually install libgdiplus on your system.
- Panels users (iOS OPDS app), will soon be able to interact with Kavita via OPDS. The developer has reached out to me as of this post date that Kavita is now fully functioning on their app and will be out in the next release.
Added
- Added: New reading mode called Incognito. Can be activated from a volume or chapter and persists during continuous reading. When this mode is activated, progress will not be saved to Kavita, allowing you to read a few pages before you decide to track progress. When Incognito is activated, a glasses icon will appear in the reader next to title. (#545)
- Added: Reading Lists can now be created by adding any series, volume, or chapter to an existing or new reading list. Lists can be promoted so all users on the server can read them (RBS still applies, like collection tags). You can read through a reading list (continuous reading support), remove all read items in bulk, and order your items however you want with drag and drop. (#268)
- Added: Continuous Reading for books! Books when on first or last page, will now show a double arrow to indicate that you can move to the next book (if it's in that series).
- Added: WebP support (within archives or raw images). This will work with all browsers except Safari on MacOS < Big Sur 11. Those users will need to use a different browser.
- Added: Continuous Reading between different readers! What if you have a reading list of mixed media, some archives and some epubs? No problem, go ahead and press read and the readers will make sure to move you to the correct ones without leaving the reading interface.
- Added: OPDS support updated with Reading Lists
- Added: Added a parser case for 'Series - - Vol. 03 Ch. 023.5 - Volume 3 Extras.cbz' which is a common name from FMD2
- Added: Added dedicated buttons in book drawer to jump to previous/next chapter
- Added: Added the ability to use continuous reader with webtoon reader without having to open the menu. When you scroll to the top and bottom, a new section will insert prompting you to scroll into the space to trigger the next or prev chapter load. (#565)
- Added: In manga reader, added the ability to press 'b' to bookmark/unbookmark a page. (#571)
- Added: Added a case for 'A Compendium of Ghosts - 031 - The Third Story_ Part 12 (Digital) (Cobalt001)' to be less aggressive in consuming characters until the number.
- Added: Added parser case for 'The Duke of Death and His Black Maid - Ch. 177 - The Ball (3).cbz'
- Added: Added a way for external scripts to use a user api key to authenticate (this essentially allows 3rd party scripts to interact with Kavita).
- Added: Implemented the ability to automatically refresh the web browser after a series scan based on when server finishes. This will push the event to the user and if they are on series detail, the page will automatically update to reflect new status on backend
- Added: Added many more manga and comic parsing cases which leads to catching more file naming conventions
- Added: When you cross a chapter boundary via continuous reading in book reader, a toast will show up
- Added: Added parser case for 'Chapter 63 - The Promise Made for 520 Cenz.cbr' where regex was consuming too many characters
- Added: Admins can now see themselves in the manage users page. No operations are still possible on your current account, create a secondary admin if you need to modify your permissions.
- Added: Added some messaging when you are trying to add a user to a library but haven't setup any libraries yet.
- Added: Added parsing case for 'Batman Beyond 04 (of 6) (1999)' to properly parse out chapter as 4.
Added: Added the ability to perform certain operations on multiple items in one go. For example, you can select volumes 1-10 by clicking volume 1, holding shift then clicking volume 10 and clicking the new bulk operations bar that pops up and marking as read, marking as unread, or adding to a reading list. Integrated on library detail, collection detail, and series detail page. (#549 )
Changed
- Changed: (Performance) Huge performance improvement to GetChapterIdsForSeriesAsync() by reducing a Join and iteration loop. Improvement went from 2 seconds -> 200ms.
- Changed: (Performance) Updated all APIs to use a lighter, faster GetUser call to minimize extra memory pressure where not needed.
- Changed: (Performance) Refactored the performance of GetChapter/BookInfo API to have a 10x speed improvement and to use common code, rather than duplicating code. This should speed up initially opening a book or manga for reading. (#563 )
- Changed: (Performance) Speed up SaveProgress from 50ms -> 10ms on average.
- Changed: (Performance) Speed up GetNextChapterId/GetPrevChapterId from 1.2 seconds on average -> 400ms.
- Changed: (Performance) Refactored OPDS to use faster API lookups for User
- Changed: (Performance) Removed 2 stream copies (stream copy + array copy) for SharpCompress archive cover image code and for PDF page extraction, further reducing unnecessary memory pressure.
- Changed: (Performance) Refactored GetUserByUsernameAsync to have a new flavor and allow the caller to pass in bitwise flags for what to include. This has a get by username or Id variant. Code is much cleaner and snappier as we avoid many extra joins when not needed.
- Changed: (Performance) Performance improvement on metadata service. Now when we scan for cover image changes, we emit when a change occurs and only then do we update parent entities (array copy)
- Changed: (Performance) Implemented ability to send images from archives to the UI without incurring any extra memory pressure.
- Changed: (Performance) Huge updates to metadata refresh. On 650GB, 12k file DB, metadata refresh now only takes 2.2 seconds to check all files to updates to cover images, summary, etc.
- Changed: (Performance) Removed some duplicate API calls from series detail page
- Changed: (Performance) General performance tune ups throughout the code averaging 1-4x speed ups.
- Changed: (Performance) Cover Images are now stored on disk in the covers/ directory. On first run, existing covers will be migrated from the DB to disk, which can take up to 20 mins depending on side of library (20k files took 20 mins). This change significantly decreases memory usage during scanning and during serving cover images without any degradation in experience.
- Changed: Added some extra help information for users on directory picker, since linux users were getting confused (#559)
- Changed: After adding a new library, we now show a toast informing user a scan has been scheduled (#542)
- Changed: (UX) Changed the design of accordions to match more of my style, with dedicated chevrons (#543)
- Changed: (UX) Home page now has libraries at the bottom and tag list to quickly jump between Home, Lists, and Collections
- Changed: (UX) Updated tabs to use a pill shape, rather than normal tab set (#551)
- Changed: (UX) Cleaned up some extra spaces when actionables (overflow dots) isn't shown to the left of titles.
- Changed: In webtoon reader, when you hit end of the scroller, we will automatically force the last page to be read.
- Changed: Upon moving between chapters in continuous reading, a toaster will inform you of the transition.
- Changed: Removed a lot of Volume parsing for Comics that don't make sense
- Changed: Reworked a lot of parsing cases for comics based on naming conventions observed from releases found online.
- Changed: Tweaked a lot of regex for manga parsing to handle some cases where poorly named files, like 'Vol. 03 Ch. 21' would end up parsing as Series 'Vol. 03'.
- Changed: Dropdown menus now have a darker background
- Changed: Fixed how keyboard presses for up/down/left/right work wi...
v0.4.5 - OPDS Support
OPDS support is here! This has been a hot ask from many users and we have delivered. Admins can now enable OPDS for their server and users can grab their own OPDS url from User Settings. If users are using a client that supports OPDS-PS (page streaming) then their progress will be recorded on Kavita (Currently only chunky for iOS supports this). In addition we support Open Search out of the box, for clients that support searching, you can do full text searching just like on Kavita.
In addition we fixed a rare case where stat collection would take up resources or timeout when our hosting would go down, locking up your system. Even if disabled, the collection code ran (but it wouldn't send it out) and could block the main thread. This has been resolved. If stat collection is disabled, nothing will run and in cases it is enabled, it is all done in a separate thread.
Added
- Added: OPDS with Open Search and Page Streaming support. This must be enabled at the server level for any feeds to work. Disabling it will instantly stop serving any feeds. Page Streaming means you can stream one page at a time and will capture progress. See our wiki for how this works. (#526)
- Added: API key for users. In order for users to use OPDS, they must use a uniquely generated OPDS Feed url generated for them. This uses an API key, which acts as a password for the user to load up their libraries, etc. (#526)
- Added: Timeout added for Stat collection. After 30 seconds, fail the stat collection and try again the next day. (#526)
- Added: (Parser) Added support for MangaPy's default naming convention to parser: vol_001-1.cbz (#538)
Fixed
- Fixed: Fixed an issue with ordering of chapters within a volume for selecting first cover image. (#524)
- Fixed: Fixed an issue where when new files were added, the Series cover wouldn't be set due to a logic miss when changing cover generation code from last release. (#527)
- Fixed: On desktop devices, when reading with fit to width or original, next page wouldn't reset scroll position. (#535)
Changed
- Changed: Stat collection now runs in a separate thread and will not block startup. Checks for if stat collection is enabled will now occur in more places to ensure extra work takes place if it's not enabled. (#534)
- Changed: (Accessibility) Updated Server Settings and User Settings to handle better on screen readers (#352)
v0.4.4 - Bookmarks, Custom Cover Images and Polishing
v0.4.4 is here and is a mixed bag of new features, fixes, and polishing changes. A lot has happened during this release, it's hard to get started.
Up first is Bookmarks, a feature I've been wanting to build out for a few months now. Bookmarks let a user tag pages during reading and later download them for the whole series. You can see how they work on the wiki
Next, we have Custom Covers for Series, Volumes, Chapters, and Collections. Admins can now upload custom cover art for these entities which will lock in place and stick around until they are reset or changed again. See our wiki on how to get started.
Following Custom Covers, it would be really cool if we could actually see the covers for collections when looking at the series in said collection. Well fear not, this update contains just that! We've updated to our first pass of the Collection page redesign which now lets you see the cover art up front and the summary if you've added one. We also expose filters for the collection so you can quickly use the same filters for your library view.
Our last big feature is the ability to check for updates from within the app itself. You can visit the System tab itself to view information about your install and see if there are any updates, or you can view the change log to review all the published stable builds. I know it's not auto updating, but it's the first step getting there.
There are a lot of other changes throughout Kavita, like our completely new download handler, performance improvements in the scanner, or the small polishing stories like auto focusing on username on login page. We hope you enjoy this release.
Going forward, releases will target one big feature and bugfixes or smaller changes. This will allow for us to deliver faster and have to spend less time on testing. Next up, OPDS support!
Added
- New button in manage server to manually create a backup of DB (Fixes #322)
- ._ files are now ignored from all I/O operations. This means they will not be considered when scanning a library, for cover generation, or even for comicinfo.xml selection (if you have ._comicinfo.xml and comicinfo.xml, the latter will be picked) (#440)
- Added 'In Progress' page to see everything you are currently reading (#442)
- Added the ability to filter series based on format from In Progress, Recently Added, Library Detail, Collection Detail pages. (#442)
- Added total items to the above pages to showcase total series within Kavita (#442)
- Kavita is now an official app on the Unraid software store (#429)
- Ability to check for updates (stable-only) and be notified with a changelog. (#464)
- Added the ability to bookmark certain pages within the manga (image) reader and later download them from the series context menu. (#469)
- Cards when processing a download shows a spinner for the progress of the download (#483)
- Added the ability to customize cover images on Series, Volumes, Chapters, and Collections. The new form allows you to drag and drop, upload a file from PC, or paste a url in. You can reset the cover image and it will refresh from the source files. The images after the user has uploaded is locked in place, refreshing metadata will not change the cover image. You must use the form (or API) to perform the reset action. (#499)
- Added new code to remove any user progress items after a series is deleted from DB. (#507)
- Added new code to remove collection tags after all series are deleted that had said tag (#502)
- All users can now view info about a volume/chapter. From the Chapter modal, chapters bundled into a volume can be read by clicking on the image, marked as read/unread, and reading progress can be seen.
- Added System page in admin dashboard to see current version, OS information, and links to all Kavita resources.
- Added a section in User Settings to show all bookmarks for all series you have saved bookmarks to. You can clear them, view individual chapters, and download whole series bookmarks. (#508)
- Added a new tab to Admin dashboard to show all releases (changelog). The release that is installed will be denoted by a tag badge. (#511)
Fixed
- Fixed an issue where marking a series as Unread when the DB gets skewed with duplicate progress rows for that item, would break. Now we cleanup any extra rows we see during the operation. (#435)
- Pagination is now slightly smaller (only 8 pages) as on mobile, it was cutting off screen. (#447)
- Fixed an issue in In Progress where it would not pull the series with correct pagination due to the unique situation with the query. All series that are in progress should now return. (#452)
- After marking something as read/unread or changing name on series, the in progress/recently added cards don't refresh
- Fixed an issue where after adding a new folder to an existing library, a scan wouldn't be kicked off (#469)
- In some cases, after clicking the background of a modal, the modal would close, but state wouldn't be handled as if cancel was pushed (#469)
- Fixed an issue where some series (usually pdf or image) would get deleted and recreated during library scans, thus keeping them always Recently Added (#470)
- Saving reading progress can duplicate rows which causes the chapter unable to be read unless DB modification was done. This fix will ensure in race conditions that only 1 row is ever created. For existing issues, we will always grab first row. (#507)
- Concurrency checks in the DB were not fully implemented. No user facing changes. (#507)
- Card items will remain the same size regardless of read status (previously 5px off) (#507)
- Fixed an issue where kicking off refresh metadata from Series in UI was calling wrong API and a refresh metadata was being done for the whole library rather than just for the individual series. (#512)
- Fixed a case where during refreshing metadata, volumes would re-run cover generation again, after it had already been done. (#512)
- Fixed an issue where a check to see if the underlying file had changed since we last scanned was returning true when it shouldn't have. This should reduce I/O on refreshing metadata. (#512)
Changed
- (Performance) Added the ability for epubs to cache, allowing faster page load for users with network mounted storage. (#433)
- Suppress max page error on bookmark api and just adjust the pages for the user. (#445)
- During library scan and series updates, Series names for Epubs will now trim excess white space (#447)
- Log files now roll (kavita, kavita1, etc) up to 5 files, each with a max of 10MB each. After all 5 files fill up, they will roll over. (#448)
- Moved the server actions into a dropdown as there were too many buttons on screen for mobile devices (#464)
- On load of Login Screen, auto focus the username field
- Admin contextual actions on cards will now be separated by a divider to help differentiate. (#469)
- Performance enhancement on an API used before reading (#469)
- When calculating unique filetypes used within Kavita instance, use lowercase so CBZ and cbz don't count as duplicate entities before sending to KavitaStats. (#470)
- Downloads now always take the backend filename and are streamed in a more optimal manner, reducing the javascript processing that was needed previously. (#483)
- When a file is being cached before reading, if there are any errors, delete the cache directory so next try can occur. (#499)
- Brand new Collection detail page by splitting into dedicated page and giving the user the opportunity to view the summary information around it. (#500)
- When the route changes, any open modals will dismissed (#501)
- User Settings now is within a lazy loaded module. This reduces the load time for the home page slightly. (#508)
- User Settings now uses tabs for the newly added bookmarks (#508)
- Profile links (top right) are now anchors, so you can open in a new tab if you so want to (#511)
- If you have image files that are named cover|folder.ext in your library, they will now be ignored (#513)