* Fixed up a localization lookup test case
* Refactored some webp to a unified method
* Cleaned up some code
* Expanded webp conversion for covers to all entities
* Code cleanup
* Prompt the user when they are about to delete multiple series via bulk actions
* Aligned Kavita to OPDS-PS 1.2.
* Fixed a bug where clearing metadata filter of series name didn't clear the actual field.
* Added some documentation
* Refactored how covert covers to webp works. Now we will handle all custom covers for all entities. Volumes and Series will not be touched but instead be updated via a RefreshCovers call. This will fix up the references much faster.
* Fixed up the OPDS-PS 1.2 attributes to only show on PS links
* Fixed a typo in a log
* Invalid XML files now "validate" correctly by sending back a failure.
* Cleaned up messaging on backend and frontend to provide some linking on series name when collision, handle corrupt xml files, etc.
* When reading list conflict occurs, show the reading list name that's conflicting. Started refactoring the code to allow multiple files to be imported at once.
* Started adding new CBL elements for some enhancements I have planned with maintainers.
* Default to empty string for IpAddress to allow to fallback into existing experience
* Tweaked the layout of reading list page (not complete), moved some not used much controls to page extras and reordered the buttons for reading list
* Edit Reading Lists now allows selection of cover image from existing items
* Fixed a bug where cover chooser base64 to image would fail to write webp files.
* Refactored the validate step to now handle multiple files in one go.
* Clean up code
* Don't show CBL name if there were xml errors that prevented showing it
* Don't allow user to go prev step after they perform the import.
* Cleaned up the heading code for accordions
* Fixed a bug with import keeping failed items
* Sort the failures to the bottom of result windows
* CBL import is pretty solid. Need one pass from Robbie on Reading List Page
* Updated to net7.0
* Updated GA to .net 7
* Updated System.IO.Abstractions to use New factory.
* Converted Regex into SourceGenerator in Parser.
* Updated more regex to source generators.
* Enabled Nullability and more regex changes throughout codebase.
* Parser is 100% GeneratedRegexified
* Lots of nullability code
* Enabled nullability for all repositories.
* Fixed another unit test
* Refactored some code around and took care of some todos.
* Updating code for nullability and cleaning up methods that aren't used anymore. Refctored all uses of Parser.Normalize() to use new extension
* More nullability exercises. 500 warnings to go.
* Fixed a bug where custom file uploads for entities wouldn't save in webP.
* Nullability is done for all DTOs
* Fixed all unit tests and nullability for the project. Only OPDS is left which will be done with an upcoming OPDS enhancement.
* Use localization in book service after validating
* Code smells
* Switched to preview build of swashbuckle for .net7 support
* Fixed up merge issues
* Disable emulate comic book when on single page reader
* Fixed a regression where double page renderer wouldn't layout the images correctly
* Updated to swashbuckle which support .net 7
* Fixed a bad GA action
* Some code cleanup
* More code smells
* Took care of most of nullable issues
* Fixed a broken test due to having more than one test run in parallel
* I'm really not sure why the unit tests are failing or are so extremely slow on .net 7
* Updated all dependencies
* Fixed up build and removed hardcoded framework from build scripts. (this merge removes Regex Source generators). Unit tests are completely busted.
* Unit tests and code cleanup. Needs shakeout now.
* Adjusted Series model since a few fields are not-nullable. Removed dead imports on the project.
* Refactored to use Builder pattern for all unit tests.
* Switched nullability down to warnings. It wasn't possible to switch due to constraint issues in DB Migration.
* Add ability to save readinglist comicinfo fields in Chapter.
* Added the appropriate fields and migration for Reading List generation.
* Started the reading list code
* Started building out the CBL import code with some initial unit tests.
* Fixed first unit test
* Started refactoring control code into services and writing unit tests for ReadingLists. Found a logic issue around reading list title between create/update. Will be corrected in this branch with unit tests.
* Can't figure out how to mock UserManager, so had to uncomment a few tests.
* Tooltip for total pages read shows the full number
* Tweaked the math a bit for average reading per week.
* Fixed up the reading list unit tests. Fixed an issue where when inserting chapters into a blank reading list, the initial reading list item would have an order of 1 instead of 0.
* Cleaned up the code to allow the reading list code to be localized easily and fixed up a bug in last PR.
* Fixed a sorting issue on reading activity
* Tweaked the code around reading list actionables not showing due to some weird filter.
* Fixed edit library settings not opening on library detail page
* Fixed a bug where reading activity dates would be out of order due to a bug in how charts works. A temp hack has been added.
* Disable promotion in edit reading list modal since non-admins can (and should have) been able to use it.
* Fixed a bug where non-admins couldn't update their OWN reading lists. Made uploading a cover image for readinglists now check against the user's reading list access to allow non-admin's to set images.
* Fixed an issue introduced earlier in PR where adding chapters to reading list could cause order to get skewed.
* Fixed another regression from earlier commit
* Hooked in Import CBL flow. No functionality yet.
* Code is a mess. Shifting how the whole import process is going to be done. Commiting so I can pivot drastically.
* Very rough code for first step is done.
* Ui has started, I've run out of steam for this feature.
* Cleaned up the UI code a bit to make the step tracker nature easier without a dedicated component.
* Much flow implementation and tweaking to how validation checks and what is sent back.
* Removed import via cbl code as it's not done. Pushing to next release.
* Introduced a new claim on the Token to get UserId as well as Username, thus allowing for many places of reduced DB calls. All users will need to reauthenticate.
Introduced UTC Dates throughout the application, they are not exposed in all DTOs, that will come later when we fully switch over. For now, Utc dates will be updated along side timezone specific dates.
Refactored get-progress/progress api to be 50% faster by reducing how much data is loaded from the query.
* Speed 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/
* Added a migration to sync all dates with their new UTC counterpart.
* Added LastReadingProgressUtc onto ChapterDto for some browsing apis, but not all.
Added LastReadingProgressUtc to reading list items.
Refactored the migration to run raw SQL which is much faster.
* Added LastReadingProgressUtc onto ChapterDto for some browsing apis, but not all.
Added LastReadingProgressUtc to reading list items.
Refactored the migration to run raw SQL which is much faster.
* Fixed the unit tests
* Fixed an issue with auto mapper which was causing progress page number to not get sent to UI
* series/volume has chapter last reading progress
* Added filesize and library name on reading list item dto for CDisplayEx.
* Some minor code cleanup
* Forgot to fill a field
* SeriesGroup tag can now have comma separated value to allow a series to be a part of multiple collections.
* Added a missing unit test
* Refactored how collection tags are created to work in the scan loop reliably.
* Added a unit test for RemoveTagsWithoutSeries
* Fixed a bug in reading list title generation to avoid Volume 0 if the underlying file had a title set. Fixed a misconfigured unit test.
* Refactored the design of reading list page to follow more in line with list view. Added release date on the reading list items, if it's set in underlying chapter.
Fixed a bug where reordering the list items could sometimes not update correctly with drag and drop.
* Removed a bug marker that I just fixed
* When generating library covers, make them much smaller as they are only ever icons.
* Fixed library settings not showing the correct image.
* Fixed a bug where duplicate collection tags could be created.
Fixed a bug where collection tag normalized title was being set to uppercase.
Redesigned the edit collection tag modal to align with new library settings and provide inline name checks.
* Updated edit reading list modal to align with new library settings modal pattern. Refactored the backend to ensure it flows correctly without allowing duplicate names.
Don't show Continue point on series detail if the whole series is read.
* Added some more unit tests around continue point
* 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.
* Refactored to generate an OpenAPI spec at root of Kavita. This will be loaded by a new API site for easy hosting.
Deprecated EnableSwaggerUi preference as after validation new system works, this will be removed and instances can use our hosting to hit their server (or run a debug build).
* Test GA
* Reverted GA and instead do it in the build step. This will just force developers to commit it in.
* GA please work
* Removed redundant steps from test since build already does it.
* Try another GA
* Moved all test actions into initial build step, which should drastically cut down on time. Only run sonar if the secret is present (so not for forks). Updated build requirements for develop and stable docker pushes.
* Fixed env variable
* Okay not possible to do secrets in if statement
* Fixed the build step to output the openapi.json where it's expected.
* Added ReadingList age rating from all series and started on some unit tests for the new flows.
* Wrote more unit tests for Reading Lists
* Added ability to restrict user accounts to a given age rating via admin edit user modal and invite user. This commit contains all basic code, but no query modifications.
* When updating a reading list's title via UI, explicitly check if there is an existing RL with the same title.
* Refactored Reading List calculation to work properly in the flows it's invoked from.
* Cleaned up an unused method
* Promoted Collections no longer show tags where a Series exists within them that is above the user's age rating.
* Collection search now respects age restrictions
* Series Detail page now checks if the user has explicit access (as a user might bypass with direct url access)
* Hooked up age restriction for dashboard activity streams.
* Refactored some methods from Series Controller and Library Controller to a new Search Controller to keep things organized
* Updated Search to respect age restrictions
* Refactored all the Age Restriction queries to extensions
* Related Series no longer show up if they are out of the age restriction
* Fixed a bad mapping for the update age restriction api
* Fixed a UI state change after updating age restriction
* Fixed unit test
* Added a migration for reading lists
* Code cleanup
* Updated ngx-extended-pdf-viewer to 14.5.2 + misc security vuln
* Hooked up remove from want to read AND fixed a bug in the logic that was removing everything BUT what was passed.
Allow for bookmarks to have date info for better ordering.
* Implemented a quick way to set darkneses level on manga reader for when nightlight just isn't dark enough
* Added Japanese Series name support in the Parser
* Updated our security file with our Huntr.
* Fixed a security vulnerability where through the API, an unauthorized user could delete/modify reading lists that did not belong to them.
Fixed a bug where when creating a reading list with the name of another users, the API would throw an exception (but reading list would still get created)
* Ensure all reading list apis are authorized
* Ensured all APIs require authentication, except those that explicitly don't. All APIs are default requiring Authentication.
Fixed a security vulnerability which would allow a user to take over an admin account.
* Fixed a bug where cover-upload would accept filenames that were not expected.
* Explicitly check that a user has access to the pdf file before we serve it back.
* Enabled lock out when invalid user auth occurs. After 5 invalid auths, the user account will be locked out for 10 mins.
* Fixed an issue where sometimes when loading the next page, the pagination area wouldn't be properly setup due to a missed rendering cycle
* Refactored BookController to thin it out and refactor some of the functions to apply IOC. Added some split query statements on a few queries.
* Added Split Query to many queries
* Added a visual indicator for loading state of PDF. Will spruce up css later.
* Added back in logic
* Fixed flash of white when refreshing browser
* Hooked in a loading progress bar for the pdf reader
* Close the pdf reader when pressing ESC
* From previous fix, added the other locking conditions on the update series metadata.
* Fixed a bug where custom series, collection tag, and reading list covers weren't being removed on cleanup.
* Ensure reading list detail has a margin to align to the standard
* Refactored some event stuff to use dedicated consts. Introduced a new event when users read something, which can update progress bars on cards.
* Added recomended and library tags to the library detail page. This will eventually offer more custom analytics
* Cleanup some code onc arousel
* Adjusted scale to height/width css to better fit
* Small css tweaks to better center images in the manga reader in both axis. This takes care of double page rendering as well.
* When a special has a Title set in the metadata, on series detail page, show that on the card rather than filename.
* Fixed a bug where when paging in manga reader, the scroll to top wasn't working due to changing where scrolling is done
* More css goodness for rendering images in manga reader
* Fixed a bug where clearing a typeahead externally wouldn't clear the x button
* Fixed a bug where filering then using keyboard would select wrong option
* Added a new sorting field for Last Chapter Added (new field) to get a similar on deck feel.
* Tweaked recently updated to hit the NFR of 500ms (300ms fresh start) and still give a much better experience.
* Refactored On deck to now go to all series and also sort by last updated. Recently Added Series now loads all series with sort by created.
* Some tweaks on css for cover image chooser
* Fixed a bug in pagination control where multiple pagination events could trigger on load and thus multiple requests for data on parent controller.
* Updated edit series modal to show when the last chapter was added and when user last read it.
* Implemented a highlight on the fitler button when a filter is active.
* Refactored metadata filter screens to perserve the filters in the url and thus when navigating back and forth, it will retain. users should click side nav to reset the state.
* Hide middle section on companion bar on phones
* Cleaned up some prefilters and console.logs
* Don't open drawer by default when a filter is active
* Added playwright and started writing e2e tests.
* To make things easy, disabled other browsers while I get confortable. Added a login flow (assumes my dev env)
* More tests on login page
* Lots more testing code, trying to figure out auth code.
* Ensure we don't track DBs inside config
* Added a new date property for when chapters are added to a series which helps with OnDeck calculations. Changed a lot of heavy api calls to use IEnumerable to stream repsonse to UI.
* Fixed OnDeck with a new field for when last chapter was added on Series. This is a streamlined way to query.
Updated Reading List with NormalizedTitle, CoverImage, CoverImageLocked.
* Implemented the ability to read a random item in the reading list and for the reading list to be intact for order.
* Tweaked the style for webtoon to not span the whole width, but use max width
* When we update a cover image just send an event so we don't need to have logic for when updates occur
* Fixed a bad name for entity type on cover updates
* Aligned the edit collection tag modal to align with new tab design
* Rewrote code for picking the first file for metadata to ensure it always picks the correct file, esp if the first chapter of a series starts with a float (1.1)
* Refactored setting LastChapterAdded to ensure we do it on the Series.
* Updated Chapter updating in scan loop to avoid nested for loop and an additional loop.
* Fixed a bug where locked person fields wouldn't persist between scans.
* Updated Contributing to reflect how to view the swagger api
* Fixed a bug where adding multiple series to reading list would throw an error on UI, but it was successful.
* When a series has a reading list, we now show the connection on Series detail.
* Removed all baseurl code from UI and not-connected component since we no longer use it.
* Fixed tag badges not showing a border. Added last read time to the series detail page
* Fixed up error interceptor to remove no-connection code
* Changed implementation for series detail. Book libraries will never send chapters back. Volume 0 volumes will not be sent in volumes ever. Fixed up more renaming logic on books to send more accurate representations to the UI.
* Cleaned up the selected tab and tab display logic
* Fixed a bad where statement in reading lists for series
* Fixed up tab logic again
* Fixed a small margin on search backdrop
* Made badge expander button smaller to align with badges
* Fixed a few UIs due to .form-group and .form-row being removed
* Updated Theme component page to help with style testing
* Added more components to theme tester
* Cleaned up some styling
* Fixed opacity on search item hover
* Refactored all files to have Interfaces within the same file. Started moving over to file-scoped namespaces.
* Refactored common methods for getting underlying file's cover, pages, and extracting into 1 interface.
* More refactoring around removing dependence on explicit filetype testing for getting information.
* Code is buildable, tests are broken. Huge refactor (not completed) which makes most of DirectoryService testable with a mock filesystem (and thus the services that utilize it).
* Finished porting DirectoryService to use mocked filesystem implementation.
* Added a null check
* Added a null check
* Finished all unit tests for DirectoryService.
* Some misc cleanup on the code
* Fixed up some bugs from refactoring scan loop.
* Implemented CleanupService testing and refactored more of DirectoryService to be non-static.
Fixed a bug where cover file cleanup wasn't properly finding files due to a regex bug.
* Fixed an issue in CleanupBackup() where we weren't properly selecting database files older than 30 days. Finished CleanupService Tests.
* Refactored Flatten and RemoveNonImages to directory service to allow CacheService to be testable.
* Finally have CacheService tested. Rewrote GetCachedPagePath() to be much more straightforward & performant.
* Updated DefaultParserTests.cs to contain all existing tests and follow new test layout format.
* All tests fixed up
* Cleaned up some code. Fixed an issue on books with good table of contents not allowing line tracking (progress) from being saved. Changed Save to Defaults on light mode to be primary.
* Fixed a bug where deleting reading items would not actually delete them
* Fixed a bug where after ordering reading lists then deleting the order would be undone (develop)
* Code cleanup
* Added continous reading to the book reader. Clicking on the max pages to right of progress bar will now go to last page.
* Forgot a file for continous book reading
* Fixed up some code regarding transitioning between chapters. Arrows now show to represent a chapter transition.
* Laid the foundation for reading lists
* All foundation is laid out. Actions are wired in the UI. Backend repository is setup. Redid the migration to have ReadingList track modification so we can order them for the user.
* Updated add modal to have basic skeleton
* Hooked up ability to fetch reading lists from backend
* Made a huge performance improvement to GetChapterIdsForSeriesAsync() by reducing a JOIN and an iteration loop. Improvement went from 2 seconds -> 200 ms.
* Implemented the ability to add all chapters in a series to a reading list.
* Fixed issue with adding new items to reading list not being in a logical order. Lots of work on getting all the information around the reading list view. Added some foreign keys back to chapter so delete should clean up after itself.
* Added ability to open directly the series
* Reading List Items now have progress attached
* Hooked up list deletion and added a case where if doesn't exist on load, then redirect to library.
* Lots of changes. Introduced a dashboard component for the main app. This will sit on libraries route for now and will have 3 tabs to show different sections.
Moved libraries reel down to bottom as people are more likely to access recently added or in progress than explore their whole library.
Note: Bundles are messed up, they need to be reoptimized and routes need to be updated.
* Added pagination to the reading lists api and implemented a page to show all lists
* Cleaned up old code from all-collections component so now it only handles all collections and doesn't have the old code for an individual collection
* Hooked in actions and navigation on reading lists
* When the user re-arranges items, they are now persisted
* Implemented remove read, but performance is pretty poor. Needs to be optimized.
* Lots of API fixes for adding items to a series, returning items, etc. Committing before fixing incorrect fetches of items for a readingListId.
* Rewrote the joins for GetReadingListItemDtosByIdAsync() to not return extra records.
* Remove bug marker now that it is fixed
* Refactor update-by-series to move more of the code to a re-usable function for update-by-volume/chapter APIs
* Implemented the ability to add via series, volume or chapter.
* Added OPDS support for reading lists. This included adding VolumeId to the ReadingListDto.
* Fixed a bug with deleting items
* After we create a library inform user that a scan has started
* Added some extra help information for users on directory picker, since linux users were getting confused.
* Setup for the reading functionality
* Fixed an issue where opening the edit series modal and pressing save without doing anything would empty collection tags. Would happen often when editing cover images.
* Fixed get-next-chapter for reading list. Refactored all methods to use the new GetUserIdByUsernameAsync(), which is much faster and uses less memory.
* Hooked in prev chapter for continuous reading with reading list
* Hooked up the read code for manga reader and book reader to have list id passed
* Manga reader now functions completely with reading lists
* Implemented reading list and incognito mode into book reader
* Refactored some common reading code into reader service
* Added support for "Series - - Vol. 03 Ch. 023.5 - Volume 3 Extras.cbz" format that can occur with FMD2.
* Implemented continuous reading with a reading list between different readers. This incurs a 3x performance hit on the book info api.
* style changes. Don't emit an event if position of draggable item hasn't changed
* Styling and added the edit reading list flow.
* Cleaned up some extra spaces when actionables isn't shown. Lots of cleanup for promoted lists.
* Refactored some filter code to a common service
* Added an RBS check in getting Items for a given user.
* Code smells
* More smells