* Fixed bookmarking failing to convert to webp
* Brought the ag-swipe/ng-swipe code into Kavita due to being abandoned by developer and angular requirements.
* Fixed average reading time per week finally
* Cleaned up some extra decimals on time duration pipe
* Don't try to update index.html for base url on local. Fixed ag-swipe on prod mode.
* Updated a link on theme manager to point to the new github
* Range knobs should be primary color on firefox too
* Implemented the ability to get thumbnails of pages inside an archive or pdf.
* Updated packages and fixed opds-ps 1.2 issue
* Fixed lock file
* Allow Kavita's Swagger to hit instances with CORS
* Added IP/Request logging for Security Audits
* Linked up Summary tag from CBL into Kavita.
* Redid the migration so SecurityEvent now has UTC date as well.
* Split security logging to a separate file
* Update to new versions of checkout and setup
* Added a PR check on PR body to ensure that it doesn't contain any characters that break our discord hook.
* Updating action
* optimize regex in action
* Fixed an issue where fit to width would cause the actual height of the image to be shown for pagination bars, instead of rendered.
* Added some new code in GetPageFromFiles to ensure pages that exceed array map down to last file.
* Added comment about robots
* Fixed up unit tests for new ReaderService signature
* Kavita now cleans up empty reading lists at night
* Don't allow nightly cleanup to run if we are running media conversion tasks
* Fixed some bugs in typeahead, it should behave much more reliably.
* Fix an issue where emulate comic book wasn't extending to the bottom properly
* Added support for Series Chapter 001 Volume 001
* Refactor XFrameOptions="SameOrigins" out to allow users to override in appsettings.json.
* Added a rate limiter for some endpoints, but it doesn't seem to be triggering
---------
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Use Reading Order to count epub pages rather than raw HTML files.
* Send email on background thread for initial invite flow.
* Reorder default writing style for new users so Horizontal is default
* Changed reading activity to use average hours read rather than events to bring more meaningful data.
* added ability to start reading incognito from the top of series detail, needs a bit of styling help though.
* Refactored extensions out into their own package, added new fields for reading list to cover total run, cbl import now takes those dates and overrides on import. Replaced many instances of numbers to be comma separated.
* Added ability to edit reading list run start and end year/month. Refactored some code for valid month/year into a helper method.
* Added a way to see the reading list's release years.
* Added some merged image code, but had to remove due to cover dimensions not fixed.
* tweaked style for accessibility mode on reading list items
* Tweaked css for non virtualized and virtualized containers
* Fixed release updates failing
* Commented out the merge code.
* Typo on words read per year
* Fixed unit tests
* Fixed virtualized scroll
* Cleanup CSS
* Moved Collapse Series with relationships into a user preference rather than library setting.
* Fixed bookmarks not converting to webp after initial save
* Fixed a bug where when merging we'd print out a duplicate series error when we shouldn't have
* Fixed a bug where clicking on a genre or tag from server stats wouldn't load all-series page in a filtered state.
* Implemented the ability to have Login role and thus disable accounts.
* Ensure first time flow gets the Login role
* Refactored user management screen so that pending users can be edited or deleted before the end user accepts the invite. A side effect is old legacy users that were here before email was required can now be deleted.
* Show a progress bar under the main series image on larger viewports to show whole series progress.
* Removed code no longer needed
* Cleanup tags, people, collections without connections after editing series metadata.
* Moved the Entity Builders to the main project
* 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
* Add vertical reading mode support and update API for reading mode preference
* Removed dead code, added a fix for scroll end margins in chrome when in vertical mode(book reader). Added back some comments
* Added Description()] annotation for the ReadingMode enum, like other enums, and added summary documentation
* Added the ability to scroll in vertical writing style without holding down shift. Also renamed the book reader's readingMode to writing style.
* Renamed the BookReadingMode to BookWritingStyle. And changed the migrations accordingly.
* Fixed some minor bugs, regarding scrolling and vertical writing style when the book settings is open.
* Fixed a minor bug where the graphics regarding the current page would require the mouse to be moved before it got updated when switching between writing styles.
* Fixed some bugs regarding furigana getting a bit cropped same for images
* Add vertical reading mode support and update API for reading mode preference
* Removed dead code, added a fix for scroll end margins in chrome when in vertical mode(book reader). Added back some comments
* Added Description()] annotation for the ReadingMode enum, like other enums, and added summary documentation
* Added the ability to scroll in vertical writing style without holding down shift. Also renamed the book reader's readingMode to writing style.
* Renamed the BookReadingMode to BookWritingStyle. And changed the migrations accordingly.
* Fixed some minor bugs, regarding scrolling and vertical writing style when the book settings is open.
* Fixed a minor bug where the graphics regarding the current page would require the mouse to be moved before it got updated when switching between writing styles.
* Fixed some bugs regarding furigana getting a bit cropped same for images
* Added reset support for writing style, after rebase.
* Changes pagination for vertical scrolling such as the user will need to scroll to end before being able to paginate. Previously it felt unnatural and the user could accidentally paginate while scrolling on mobile.
* Pagination would not stick to the left if the content was smaller than the reader in vertical writing style.
* Fixed summary text
* Added missing line, fixes build error
* Addresses the comments given in code-review.
* Moved columnGap outside the class, and changed it to a const
* 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.
* When skipping over folders in a scan, inform the ui
* Try out new backout condition for library watcher.
* Tweaked the code for folder watching to be more intense on killing if stuck in inotify loop.
* Streamlined my implementation of enhanced LibraryWatcher
* Added new extension method to make complex where statements cleaner.
* Added an implementation to flatten series and not show them if they have relationships defined. Only the parent would show. Currently disabled until i figure out how to apply it.
* Added the ability to collapse series that are not the primary entry point to reading. Configurable in library settings, only applies when all libraries in a filter have the property to true.
* Exclude from parsing .@_thumb directories, a QNAP system folder.
Show number of items a JumpKey has
* Refactored some time reading to display in days, months, years or minutes.
* 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
* Refactored the Genre code to be faster and used a dictonary to avoid some lookups. May fix the rare foreign constraint issue.
* Refactored tag to the same implementation as Genre. Ensure when grabbing tags from ComicInfo, we normalize and throw out duplicates.
* Removed an internal "external" field that was planned for Genres and Tags, but now with new plugin architecture, not needed.
* Made the unread badges slightly smaller and rounded on top right.
* A bit more tweaks on the not read badges. Looking really nice now.
* In order to start the work on managing collections from ScanLoop, I needed to refactor collection apis into the service layer and add unit tests.
Removed ToUpper Normalization for new tags.
* Hooked up ability to auto generate collections from SeriesGroup metadata tag.
* Don't show "not much going on" when we are actively downloading
* Swipe to paginate is now behind a flag in the user preferences.
* Added a new server setting for host name, if the server sits behind a reverse proxy. If this is set, email link generation will use it and will not perform any checks on accessibility (thus email will always send)
* Refactored the code that checks if the server is accessible to check if host name is set, and thus return rue if so.
* Added back the system drawing library for markdown parsing.
* Fixed a validation error
* Fixed a bug where folder watching could get re-triggered when it was disabled at a server level.
* Made the manga reader loader absolute positioned for better visibility
* Indentation
* Fixed a bug where when clicking on a series rating for first time, the rating wasn't populating in the modal.
* Fixed a bug on Scroll mode with immersive mode, the bottom bar could clip with the book body.
* Cleanup some uses of var
* Refactored text as json into a type so I don't have to copy/paste everywhere
* Theme styles now override the defaults and theme owners no longer need to maintain all the variables themselves.
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.
* Fixed a bug where last active on user stats wasn't for the particular user.
* Added a more accurate word count calculation and the ability to see the word counts year over year.
* Added a new table for long term statistics, like number of files over the years. No views are present for this data, I will add them later.
* Updated swiper and some packages for reported security issues
* Fixed reading lists promotion not working
* Refactor RenameFileForCopy to use iterative recursion, rather than functional.
* Ensured that bookmarks are fetched and ordered by Created date.
* Fixed a bug where bookmarks were coming back in the correct order, but due to filenames, would not sort correctly.
* Default installs to Debug log level given errors users have and Debug not being too noisy
* Added jumpbar to bookmarks page
* Now added jumpbar to bookmarks
* Refactored some code into pipes and added some debug messaging for prefetcher
* Try loading next and prev chapter's first/last page to cache so it renders faster
* Updated GetImage to do a bound check on max page.
Fixed a critical bug in how manga reader updates image elements src to prefetch/load pages. I was not creating a new reference which broke Angular's ability to update DOM on changes.
* Refactored the image setting code to use a single method which tries to use a cached image always.
* Refactored code to use getPage which favors cache and simplifies image creation code
* Started the work to split the canvas renderer into it's own component
* Refactored a lot of common methods into a service for the reader to support the upcoming renderer split
* Moved components to nested folder. Refactored more code to streamline image sending to child renderer.
Added notes across the code to help streamline flow of data and who owns what.
* Swapped out SQLite for Memory, but the one from hangfire. Added DisableConcurrentExecution on ProcessChange to avoid duplication when multiple threads execute at once.
* Basic split right to left is working with canvas renderer
* Left to right and right to left now work
* Fixed a bug where pagesplitoption wasn't being updated when modifying menu
* Canvas rendering still has a bug with switching between right to left -> left to right on the re-render, it will choose a bad state. All else works fine with it.
* Updated canvas renderer to implement the ImageRenderer interface
* Canvas renderer is done
* Setup single renderer. Need to figure out how to share CSS between renderers and also share some global stuff, like image height.
* Refactored code so that image-container is within the renderers themselves. Still broken in scaling, but working towards a solution.
* Added double click to shortcut menu
* Moved image containers within the renderers
* Pushing up for Robbie
* nothing new
* Move common css to a single scss file
* More css consolidation
* Fixed a npe in isWideImage
* Refactored page updates to renderers to include max pages. Rewrote most of renderer into observables.
* Moved bookmark for second page to double renderer
* Started hooking in double renderer renderPage()
* Fixed height scaling, but now canvas renderer is broken again
* Fixed a bug with canvas renderer not moving to next page. Streamlined the code for getting page amounts from the dfferent renderers
* Added double click to bookmark for canvas
* Stashing the code and taking a break
* Nothing much, buffer is still broken
* Got double renderer to render at least one page
* Double renderer now has access to 5 images at any time, so it can make appropriate decisions on when to render double pages.
* Fixed up double rendererer moving backward page calc
* Forward logic seems to be working
* Cleaned up dead code after testing
* Moved a few loggers in folder watching to trace
* Everything seems to work fine, time to do double manga renderer
* Moved some css around and added the reverse double component
* Only execute renderer's pipes when in the correct mode
* Still working on double renderer
* Fixed scaling issues on double
* Updating double logic
- Fixed: Fixed an issue where a second page would render when current page was wide.
* Hooked up double renderer
* Made changes but not sure if im making progress
* double manga fixes
* Claned some of robbies code
* Fixing last page bug
* Library Settings Modal + New Library Settings (#1660)
* Bump loader-utils from 2.0.3 to 2.0.4 in /UI/Web
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)
---
updated-dependencies:
- dependency-name: loader-utils
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
* Fixed want to read button on series detail not performing the correct action
* Started the library settings. Added ability to update a cover image for a library.
Updated backup db to also copy reading list (and now library) cover images.
* Integrated Edit Library into new settings (not tested) and hooked up a wizard-like flow for new library.
* Fixed a missing update event in backend when updating a library.
* Disable Save when form invalid. Do inline validation on Library name when user types to ensure the name is valid.
* Trim library names before you check anything
* General code cleanup
* Implemented advanced settings for library (include in dashboard, search, recommended) and ability to turn off folder watching for individual libraries.
Refactored some code to streamline perf in some flows.
* Removed old components replaced with new modal
* Code smells
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Bump versions by dotnet-bump-version.
* UX Alignment and bugfixes (#1663)
* 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.
* Fixed GA (#1664)
* Bump versions by dotnet-bump-version.
* Applied new _components layout structure to Kavita. All except manga as there is an open PR that drastically changes that module. (#1666)
* Fixed typeahead and updated manga reader to new layout structure
* Fixed book reader fonts lookups
* Fixed up some build issues
* Fixed a bad import of css image
* Some cleanup and rewrote how we log out data.
* Renderer can be null on first load when performing some work.
* Library Settings Modal + New Library Settings (#1660)
* Bump loader-utils from 2.0.3 to 2.0.4 in /UI/Web
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)
---
updated-dependencies:
- dependency-name: loader-utils
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
* Fixed want to read button on series detail not performing the correct action
* Started the library settings. Added ability to update a cover image for a library.
Updated backup db to also copy reading list (and now library) cover images.
* Integrated Edit Library into new settings (not tested) and hooked up a wizard-like flow for new library.
* Fixed a missing update event in backend when updating a library.
* Disable Save when form invalid. Do inline validation on Library name when user types to ensure the name is valid.
* Trim library names before you check anything
* General code cleanup
* Implemented advanced settings for library (include in dashboard, search, recommended) and ability to turn off folder watching for individual libraries.
Refactored some code to streamline perf in some flows.
* Removed old components replaced with new modal
* Code smells
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* UX Alignment and bugfixes (#1663)
* 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.
* Applied new _components layout structure to Kavita. All except manga as there is an open PR that drastically changes that module. (#1666)
* Post merge cleanup
* Again moving the file
* Fixed an issue with switching to double renderer and the image not loading for cover image.
* Fixed double manga last page repeating twice
* Added ability to quickly save a few settings to user preferences from manga reader
* Fixed up some success messaging
* Single image and canvas could stack, last page on double wouldn't render.
* Stashing code, want to work on something else
* Suppress a concurrency issue when opening a fresh chapter to read.
* Refactored a function into a pipe
* Took care of one TODO
* Tightened up the logic around single renderer handling fit to screen images.
* Added some code to see how long api takes on average.
* First pass integration of page dimensions into single renderer and base code
* Canvas renderer pass for new page dimensions
* On time left, don't use the word left again
* Moved the page dimension code into manga service to make it seemless
* Hooked in a replacement for image based isWide
* Canvas renderer is working again
* Double renderer now follows how Komga does it to keep it simple.
* Double renderer is working really well so far.
* don't use nbsp
* Added response caching to file-dimensions and chapter info api
* Allow chapter info to send back file dimensions optionally
* Fixed an issue with dimensions api locking files on Windows
* Refactored all code to use isWidePage
* More fixes and cleanup
* More double reverse logic
* Recently Read stats page will allow you to click the items.
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Fixed generating table of contents where key lookup could fail with how Sigil packs the epubs.
* Tweaked Kavita's fallback ToC generation (when one doesn't exist in the epub) to also use CoalesceKey.
* Code smells
* Refactored ResponseCache profiles into consts
* Refactored code to use an extension method for getting user library ids.
* Started server statistics, added a charting library, and added a table sort column (not finished)
* Refactored code and have a fully working example of sortable headers. Still doesn't work with default sorting state, will work on that later.
* Implemented file size, but it's too expensive, so commented out.
* Added a migration to provide extension and length/size information in the DB to allow for faster stat apis.
* Added the ability to force a library scan from library settings.
* Refactored some apis to provide more of a file breakdown rather than just file size.
* Working on visualization of file breakdown
* Fixed the file breakdown visual
* Fixed up 2 visualizations
* Added back an api for member names, started work on top reads
* Hooked up the other library types and username/days.
* Preparing to remove top reads and refactor into Top users
* Added LibraryId to AppUserProgress to help with complex lookups.
* Added the new libraryId hook into some stats methods
* Updated api methods to use libraryId for progress
* More places where LibraryId is needed
* Added some high level server stats
* Got a ton done on server stats
* Updated default theme (dark) to be the default root variables. This will allow user themes to override just what they want, rather than maintain their own css variables.
* Implemented a monster query for top users by reading time. It's very slow and can be cleaned up likely.
* Hooked up top reads. Code needs a big refactor. Handing off for Robbie treatment and I'll switch to User stats.
* Implemented last 5 recently read series (broken) and added some basic css
* Fixed recently read query
* Cleanup the css a bit, Robbie we need you
* More css love
* Cleaned up DTOs that aren't needed anymore
* Fixed top readers query
* When calculating top readers, don't include read events where nothing is read (0 pages)
* Hooked up the date into GetTopUsers
* Hooked top readers up with days and refactored and cleaned up componets not used
* Fixed up query
* Started on a day by day breakdown, but going to take a break from stats.
* Added a temp task to run some migration manually for stats to work
* Ensure OPDS-PS uses new libraryId for progress reporting
* Fixed a code smell
* Adding some styling
* adding more styles
* Removed some debug stuff from user stats
* Bump qs from 6.5.2 to 6.5.3 in /UI/Web
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)
---
updated-dependencies:
- dependency-name: qs
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
* Tweaked some code for bad data cases
* Refactored a chapter lookup to remove un-needed Volume join in 5 places across the code.
* API push
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* 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.
* Bump loader-utils from 2.0.3 to 2.0.4 in /UI/Web
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)
---
updated-dependencies:
- dependency-name: loader-utils
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
* Fixed want to read button on series detail not performing the correct action
* Started the library settings. Added ability to update a cover image for a library.
Updated backup db to also copy reading list (and now library) cover images.
* Integrated Edit Library into new settings (not tested) and hooked up a wizard-like flow for new library.
* Fixed a missing update event in backend when updating a library.
* Disable Save when form invalid. Do inline validation on Library name when user types to ensure the name is valid.
* Trim library names before you check anything
* General code cleanup
* Implemented advanced settings for library (include in dashboard, search, recommended) and ability to turn off folder watching for individual libraries.
Refactored some code to streamline perf in some flows.
* Removed old components replaced with new modal
* Code smells
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Bump loader-utils from 2.0.2 to 2.0.3 in /UI/Web
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.3/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.2...v2.0.3)
---
updated-dependencies:
- dependency-name: loader-utils
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
* Fixed is want to read coming back as a string and not working correctly.
* Changed from to Continue to be more explicit
* Added the first migration which exports data as a csv in temp/. This is the backup in case data is lost in the migration.
* Note for later
* Fixed the migration for the series relation so when deleting any series on any edge of the relationship, the SeriesRelation row deletes.
* Change buttons back to titles on series detail page
* Wrote the code to import relations from the backup.
* Added an additional version check to avoid file io on migration.
* Code cleanup
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Implemented save covers as webp. Reworked screen to provide more information up front about webp and what browsers can support it.
* cleaned up pages to use compact numbering and made compact numbering expand into one decimal place (20.5K)
* Fixed an issue with adding new device
* If a book has an invalid language set, drop the language altogether rather than reading in a corrupted entry.
* Ensure genres and tags render alphabetically.
Improved support for partial volumes in Comic parser.
* Ensure all people, tags, collections, and genres are in alphabetical order.
* Moved some code to Extensions to clean up code.
* More unit tests
* Cleaned up release year filter css
* Tweaked some code in all series to make bulk deletes cleaner on the UI.
* Trying out want to read and unread count on series detail page
* Added Want to Read button for series page to make it easy to see when something is in want to read list and toggle it.
Added tooltips instead of title to buttons, but they don't style correctly.
Added a continue point under cover image.
* Code smells
* Fixed a bad color on the PWA titlebar
* Added more unit tests, cleaned up some dead code, and made it so when age restriction is Not Applicable, the Unknowns field disables
* Don't show an empty menu when user has no permissions
* Fixed deleting a library with relation causing library deleting to fail
* Consolidated some includes code into one method for Series Repo
* Small fixes
* Fixed a scaling issue in the epub reader, where images could scale when they shouldn't.
* Removed some caching on library/ api and added more output for a foreign key constraint
* Hooked in Restricted Profile stat collection
* Added a new boolean on age restrictions to explicitly allow unknowns or not. Since unknown is the default state of metadata, if users are allowed access to Unknown, age restricted content could leak.
* Fixed a bug where sometimes series cover generation could fail under conditions where only specials existed.
* Fixed foreign constraint issue when cleaning up series not seen at end of scan loop
* Removed an additional epub parse when scanning and handled merging differently
* Code smell
* Moved UpdateRelatedSeries from controller to SeriesService.cs
* Added 2 tests.
- UpdateRelatedSeries_ShouldDeletePrequelRelation
- UpdateRelatedSeries_ShouldNotAllowDuplicates
* Some docs and codestyle nitpicks
* Simplified tests and made easier to read
* Added 'Editions' series relation
* Missing code to properly show the relations in the UI
* Create Service for GetRelatedServices
* Added unit test. Assert Edition, Prequel and Sequel do not return parent while others do
* fixed missing userRating
* Add requested changes:
- Rename one test
- Split one test into two tests
* 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
* Cleanup some messaging in the scan loop to be more context bearing
* Added Response Caching to Series Detail for 1 min, due to the heavy nature of the call.
* Refactored code to make it so that processing of series runs sync correctly.
Added a log to inform the user of corrupted volume from buggy code in v0.5.6.
* Moved folder watching out of experimental
* Fixed an issue where empty folders could break the scan loop
* Another fix for when dates aren't valid, the scanner wouldn't get the proper min and would throw an exception (develop)
* Implemented the ability to edit release year from the UI for a series.
* Added a unit test for some new logic
* Code smells
* Rewrote the handler for suspending watching to be more resilient and ensure no two threads have a race condition.
* More error handling for when a ScanFolder is invoked but multiple series belong to that folder, log it to the user and default to a library scan.
* ScanSeries now will check for kavitaignores higher than it's own folder and respect library level.
* Fixed an issue where image series with a folder name containing the word "folder" could get ignored as it thought the image was a cover image.
When a series folder is moved or deleted, skip parent ignore finding.
* Removed some old files, added in scanFolder a check if the series found for a folder is in a book library and if so to always do a library scan (as books are often nested into one folder with multiple series). Added some unit tests
* Refactored some scan loop logic into ComicInfo, wrote tests and updated some documentation to make the fields more clear.
* Added a test for GetLastWriteTime based on recent bug
* Cleaned up some redundant code
* Fixed a bad merge
* Code smells
* Removed a package that's no longer used.
* Ensure we check against ScanQueue on ScanFolder enqueuing
* Documentation and more bullet proofing to ensure Hangfire checks work more as expected
* Cleanup some messaging in the scan loop to be more context bearing
* Added Response Caching to Series Detail for 1 min, due to the heavy nature of the call.
* Refactored code to make it so that processing of series runs sync correctly.
Added a log to inform the user of corrupted volume from buggy code in v0.5.6.
* Moved folder watching out of experimental
* Fixed an issue where empty folders could break the scan loop
* Another fix for when dates aren't valid, the scanner wouldn't get the proper min and would throw an exception (develop)
* Implemented the ability to edit release year from the UI for a series.
* Added a unit test for some new logic
* Code smells
* Introduced a lock for DB work during the scan to hopefully reduce the concurrency issues
* Don't allow multiple theme scans to occur
* Fixed bulk actions not having all actions due to nested actionable menu changes
* Refactored the Scan loop to be synchronous to avoid any issues. After first loop, no real performance issues.
* Updated the LibraryWatcher when under many internal buffer full issues, to suspend watching for a full hour, to allow whatever downloading to complete.
* Removed Semaphore as it's not needed anymore
* Updated the output for logger to explicitly say from Kavita (if you're pushing to Seq)
* Fixed a broken test
* Fixed ReleaseYear not populating due to a change from a contributor around how to populate ReleaseYear.
* Ensure when scan folder runs, that we don't double enqueue the same tasks.
* Fixed user settings not loading the correct tab
* Changed the Release Year -> Release
* Added more refresh hooks in reader to hopefully ensure faster refreshes
* Reset images between chapter loads to help flush image faster. Don't show broken image icon when an image is still loading.
* Fixed the prefetcher not properly loading the correct images and hence, allowing a bit of lag between chapter loads.
* Code smells
* Fixed inputs not showing inline validation due to a missing class
* Fixed some checks
* Increased the button size on manga reader (develop)
* Migrated a type cast to a pure pipe
* Sped up the check for if SendTo should render on the menu
* Don't allow user to bookmark in bookmark mode
* Fixed a bug where Scan Series would skip over Specials due to how new scan loop works.
* Fixed scroll to top button persisting when navigating between pages
* Edit Series modal now doesn't have a lock field for Series, which can't be locked as it is inheritently locked.
Added some validation to ensure Name and SortName are required.
* Fixed up some spacing
* Fixed actionable menu not opening submenu on mobile
* Cleaned up the layout of cover image on series detail
* Show all volume or chapters (if only one volume) for cover selection on series
* Don't open submenu to right if there is no space
* Fixed up cover image not allowing custom saves of existing series/chapter/volume images.
Fixed up logging so console output matches log file.
* Implemented the ability to turn off css transitions in the UI.
* Updated a note internally
* Code smells
* Added InstallId when pinging the email service to allow throughput tracking
* Tweaked the logging output
* Started implementing some basic idea for devices
* Updated Email Service with new API routes
* Implemented basic DB structure and some APIs to prep for the UI and flows.
* Added an abstract class to make Unit testing easier.
* Removed dependency we don't need
* Updated the UI to be able to show devices and add new devices. Email field will update the platform if the user hasn't interacted with it already.
* Added ability to delete a device as well
* Basic ability to send files to devices works
* Refactored Action code to pass ActionItem back and allow for dynamic children based on an Observable (api).
Hooked in ability to send a chapter to a device. There is no logic in the FE to validate type.
* Fixed a broken unit test
* Implemented the ability to edit a device
* Code cleanup
* Fixed a bad success message
* Fixed broken unit test from updating mock layer
* Moved LibraryWatcher to utilize a queue for calculating the change event to ensure the Watcher doesn't get overwhelmed on large moves.
* Fixed a security vulnerability (https://huntr.dev/bounties/8a3e652f-d6bf-436e-877e-0eaf5c69ef95/). This will be disclosed in Stable release changelog.
* Tweaked the log message template
* Removed some dead code from Configuration json patcher
* Fixed a bug with the ComicInfo finding to properly handle root level.
Fixed a bug where sometimes scanner wouldn't choose the first file with ComicInfo for filling out information.
* Added new setting for managing how many logs files are allowed, just like how backups work.
* Added unit tests for new CleanupLogs code
* Fixed a bug where manga reader background color wasn't actually sending from the UI
* Added new stats for tracking to help understand usage in the app and what features are used or not.
* Fixed Stats url
* Fixed a bug where volumes that had larger than 1 difference wouldn't properly return next/prev chapter (for continuous reader)
* Remove a redundant test step in build pipeline, since it's already done at PR stage.
* Updated dockerfile to use the new Heath check endpoint
* Allow force to pass through to scan loop
* Removed some old config stuff from a safety check on config in entrypoint.sh
* Fixed broken unit tests due to new RBS check and how we setup mock data.
* Recreated Kavita Logging with Serilog instead of Default. This needs to be move out of the appsettings now, to allow auto updater to patch.
* Refactored the code to be completely configured via Code rather than appsettings.json. This is a required step for Auto Updating.
* Added in the ability to send logs directly to the UI only for users on the log route. Stopping implementation as Alerts page will handle the rest of the implementation.
* Fixed up the backup service to not rely on Config from appsettings.json
* Tweaked the Logging levels available
* Moved everything over to File-scoped namespaces
* Moved everything over to File-scoped namespaces
* Code cleanup, removed an old migration and changed so debug logging doesn't print sensitive db data
* Removed dead code
* Refactored invite user flow to separate error handling on create user flow and email flow. This should help users that have unique situations.
* Switch to using files to check LastWriteTime. Debug code in for Robbie to test on rclone
* Updated Parser namespace. Changed the LastWriteTime to check all files and folders.
* Hooked in a server setting to enable/disable folder watching
* Validated the file rename change event
* Validated delete file works
* Tweaked some logic to determine if a change occurs on a folder or a file.
* Added a note for an upcoming branch
* Some minor changes in the loop that just shift where code runs.
* Implemented ScanFolder api
* Ensure we restart watchers when we modify a library folder.
* Fixed a unit test
* Refactored ScanSeries to avoid a lot of extra work and fixed a bug where Scan Series would invoke the processing twice.
Refactored the series selection code during process such that we use Localized Name as well, for cases where the original name was changed.
Undid an optimization around Last Write time, since Linux file systems match how NTFS works.
* Fixed part of the query
* Added a NormalizedLocalizedName for quick searching in which a series needs grouping. Reworked scan loop code a bit to ensure we don't do extra work.
Tweaked the widget logic to help display better and not show "Nothing going on here".
* Fixed a bug where archives with ._ files would be counted as valid files, while they are actually just metadata files on Mac's.
* Fixed a broken unit test
* Staging the code for the new scan loop.
* Implemented a basic idea of changes on drives triggering scan loop. Issues: 1. Scan by folder does not work, 2. Queuing system is very hacky and needs a separate thread, 3. Performance degregation could be very real.
* Started writing unit test for new loop code
* Implemented a basic method to scan a folder path with ignore support (not implemented, code in place)
* Added some code to the parser to build out the idea of processing series in batches based on some top level folder.
* Scan Series now uses the new code (folder based parsing) and now handles the LocalizedSeries issue.
* Got library scan working with the new folder-based scan loop. Updated code to set FolderPath (for improved scan times and partial scan support).
* Wrote some notes on update library scan loop.
* Removed migration for merge
* Reapplied the SeriesFolder migration after merge
* Refactored a check that used multiple db calls into one.
* Made lots of progress on ignore support, but some confusion on underlying library. Ticket created. On hold till then.
* Updated Scan Library and Scan Series to exit early if no changes are on the underlying folders that need to be scanned.
* Implemented the ability to have .kavitaignore files within your directories and Kavita will parse them and ignore files and directories based on rules within them.
* Fixed an issue where ignore files nested wouldn't stack with higher level ignores
* Wrote out some basic code that showcases how we can scan series or library based on file events on the underlying system. Very buggy, needs lots of edge case testing and logging and dupplication checking.
* Things are working kinda. I'm getting lost in my own code and complexity. I'm not sure it's worth it.
* Refactored ScanFiles out to Directory Service.
* Refactored more code out to keep the code clean.
* More unit tests
* Refactored the signature of ParsedSeries to use IList. Started writing unit tests and reworked the UpdateLibrary to work how it used to with new scan loop code (note: using async update library/series does not work).
* Fixed the bug where processSeriesInfos was being invoked twice per series and made the code work very similar to old code (except loose leaf files dont work) but with folder based scanning.
* Prep for unit tests (updating broken ones with new implementations)
* Just some notes. Not sure I want to finish this work.
* Refactored the LibraryWatcher with some comments and state variables.
* Undid the migrations in case I don't move forward with this branch
* Started to clean the code and prepare for finishing this work.
* Fixed a bad merge
* Updated signatures to cleanup the code and commit to the new strategy for scanning.
* Swapped out the code with async processing of series on a small library
* The new scan loop is working in both Sync and Async methods. The code is slow and not optimized. This represents a good point to start polling and applying optimizations.
* Refactored UpdateSeries out of Scanner and into a dedicated file.
* Refactored how ProcessTasks are awaited to allow more async
* Fixed an issue where side nav item wouldn't show correct highlight and migrated to OnPush
* Moved where we start to stopwatch to encapsulate the full scan
* Cleaned up SignalR events to report correctly (still needs a redesign)
* Remove the "remove" code until I figure it out
* Put in extremely expensive series deletion code for library scan.
* Have Genre and Tag update the DB immediately to avoid dup issues
* Taking a break
* Moving to a lock with People was successful. Need to apply to others.
* Refactored code for series level and tag and genre with new locking strategy.
* New scan loop works. Next up optimization
* Swapped out the Kavita log with svg for faster load
* Refactored metadata updates to occur when the series are being updated.
* Code cleanup
* Added a new type of generic message (Info) to inform the user.
* Code cleanup
* Implemented an optimization which prevents any I/O (other than an attribute lookup) for Library/Series Scan. This can bring a recently updated library on network storage (650 series) to fully process in 2 seconds.
Fixed a bug where File Analysis was running everytime for each non-epub file.
* Fixed ARM x64 builds not being able to view PDF cover images due to a bad update in DocNet.
* Some code cleanup
* Added experimental signalr update code to have a more natural refresh of library-detail page
* Hooked in ability to send new series events to UI
* Moved all scan (file scan only) tasks into Scan Queue. Made it so scheduled ScanLibraries will now check if any existing task is being run and reschedule for 3 hours, and 10 mins for scan series.
* Implemented the info event in the events widget and added a clear all button to dismiss all infos and errors. Added --event-widget-info-bg-color
* Remove --drawer-background-color since it's not used
* When new series added, inject directly into the view.
* Some debug code cleanup
* Fixed up the unit tests
* Ensure all config directories exist on startup
* Disabled Library Watching (that will go in next build)
* Ensure update for series is admin only
* Lots of code changes, scan series kinda works, specials are splitting, optimizations are failing. Demotivated on this work again.
* Removed SeriesFolder migration
* Added the SeriesFolder migration
* Added a new pipe for dates so we can provide some nicer defaults. Added folder path to the series detail.
* The scan optimizations now work for NTFS systems.
* Removed a TODO
* Migrated all the times to use DateTime.Now and not Utc.
* Refactored some repo calls to use the includes flag pattern
* Implemented a check for the library scan optimization check to validate if the library was updated (type change, library rename, folder change, or series deleted) and let the optimization be bypassed.
* Added another optimization which will use just folder attribute of last write time if the drive is not NTFS.
* Fixed a unit test
* Some code cleanup
* Capture date when Kavita creates a MangaFile so we can show the date on the UI.
* On startup, exit early for migration directory if it's a fresh install and we have migrations to run but no settings stored yet.
* Blur summaries should apply when there isn't any read more collapsable
* Fixed custom theme files not loading.
* Cleaned up the logic for displaying the manga file date
* 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.
* Implemented a Want To Read list of series for all users, as a way to keep track of what you want to read.
When canceling a bulk action, like Add to Reading list, the selected cards wont de-select.
* Hooked up Remove from Want to Read
* When making bulk selection, allow the user to click on anywhere on the card
* Added no series messaging
* Code cleanup
* Implemented a manual button to allow users to setup an account, even after they invited.
Updated error toast to put "Error" in the title of the toast.
* Updated the exception middleware to always send full context instead of generic "Internal Server Error"
* Fixed a bug where cache TTL was using a field which always was 0.
* Updated Scan Series task (from UI) to always re-calculate what's on file and not rely on last update. This leads to more reliable results, despite extra overhead.
* Added image range processing on images for the reader, for slower networks or large files
* On manga (single) try to use prefetched image, rather than re-requesting an image on pagination
* Reduced some more latency when rendering first page of next chapter via continuous reading mode
* Fixed a bug where metadata filter, after updating a typeahead, collapsing filter area then re-opening, the filter would still be applied, but the typeahead wouldn't show the modification.
* Coded an idea around download reporting, commiting for history, might not go with it.
* Refactored the download indicator into it's own component. Cleaning up some code for download within card component
* Another throw away commit. Put in some temp code, not working but not sure if I'm ditching entirely.
* Updated download service to enable range processing (so downloads can resume) and to reduce re-zipping if we've just downloaded something.
* Refactored events widget download indicator to the correct design. I will be moving forward with this new functionality.
* Added Required fields to ProgressDTO
* Cleaned up the event widget and updated existing download progress to indicate preparing the download, rather than the download itself.
* Updated dependencies for security alerts
* Refactored all download code to be streamlined and globally handled
* Updated ScanSeries to find the highest folder path before library, not just within the files. This could lead to scan series missing files due to nested folders on same parent level.
* Updated the caching code to use a builtin annotation. Images are now caching correctly.
* Fixed a bad redirect on an auth guard
* Tweaked how long we allow cache for, as the cover update now doesn't work well.
* Fixed a bug on downloading bookmarks from multiple series, where it would just choose the first series id for the temp file.
* Added an extra check for downloading bookmarks
* UI Security updates, Fixed a bug on bookmark reader, the reader on last page would throw some errors and not show No Next Chapter toast.
* After scan, clear temp
* Code smells
* Updated Series Info Cards to use OnPush and hooked in progress events when we do a mark as read/unread on entities. These events update progress bars but also will now trigger a re-calculation on Read Time Left.
* Removed Library Card Component
* Refactored manga reader title and subtitle calculation to the backend.
* Coverted card actionables to onPush
* Series Card on push cleanup
* Updated edit collection tags for on push
* Update cover image chooser for on push
* Cleaned up carsouel reel
* Updated cover image to allow for uploading gif and webp files
* Bulk add to collection on push
* Updated bulk operation to use on push. Updated bulk operation to have mark as unread and read buttons explicitly. Updated so add to collection is visible and delete.
Fixed a bug where manage library component wasn't invoking the trackBy function
* Updating entity title for on push
* Removed file info component
* Updated Mange Library for on push
* Entity info cards on push
* List item on push
* Updated icon and title for on push and fixed some missing change detection on series detail
* Restricted the typeahead interface to simplify the design
* Edit Series Relation now shows a value in the dropdown for Parent relationships and disables the field.
* Updated edit series relation to focus on new typeahead when adding a new relationship
* Added some documentation and when Scanning a library, don't allow the user to enqueue the same job multiple times.
* Applied the No-enqueue if already enqueued logic to other tasks
* Library detail on push
* Updated events widget to onpush
* Card detail drawer on push. Card detail cover chooser now will show all chapter's covers for selection in cover chooser.
* Chapter metadata detail on push
* Removed Card Detail modal
* All collections on push
* Removed some comments
* Updated bulk selection to use an observable rather than function calls so new on push strategy works
* collection detail now uses on push and scroller is placed on correct element
* Updated library recommended to on push. Ensure that when mark as read occurs, the appropriate streams are refreshed.
* Updated library detail to on push
* Update metadata fiter to onpush. Bugs found and reported to Project
* person badge on push
* Read more on push
* Updated tag badge to on push
* User login on push
* When initing side nav, don't call an authenticated api until we are sure a user is logged in
* Updated splash container to on push
* Dashboard on push
* Side nav slight refactor around some api calls
* Cleaned up series card on push to use same cdRef naming convention
* Updated Static Files to use caching
* Added width and height to logo image
* shortcuts modal on push
* reading lists on push
* Reading list detail on push
* draggable ordered list on push
* Refactored reading-list-detail to use a new item which drastically reduces renders on operations
* series format on push
* circular loader on push
* Badge Expander on push
* update notification modal on push
* drawer on push
* Edit Series Modal on push
* reset password on push
* review series modal on push
* series metadata detail on push
* theme manager on push
* confirm reset password on push
* register on push
* confirm migration email on push
* confirm email on push
* add email to account migration on push
* user preferences on push. Made global settings default open
* edit series relation on push
* Fixed an edge case bug for next chapter where if the current volume had a single chapter of 1 and the next volume had a chapter number of 0, it would say there are no more chapters.
* Updated infinite scroller with on push support
* Moved some animations over to typeahead, not integrated yet.
* Manga reader is now on push
* Reader settings on push
* refactored how we close the book
* Updated table of contents for on push
* Updated book reader for on push. Fixed a bug where table of contents wasn't showing current page anchor due to a scroll calulation bug
* Small code tweak
* Icon and title on push
* nav header on push
* grouped typeahead on push
* typeahead on push and added a new trackby identity function to allow even faster rendering of big lists
* pdf reader on push
* code cleanup
* Fixed up swagger generation
* Updated Tachiyomi's latest-chapter to hopefully solve some sync issues.
* Fixed#1279 with table of contents due to new EPubReader
* When errors occur, show the event widget icon in red
* Lots of documentation added and tweaked some wording around backups and swagger
* For promidius
* Return proper ChapterDTO
* Hacks for Promidius
* Cleanup code
* No loose leaf, send max chapter
* One more encode change
* Implemented code per promiduius' requirements
* 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.
* Removed some extra comment
* Implemented the ability to change a library's type after it's been setup. This displays a warning explaining the dangers of it.
* Removed some whitespace
* Blur descriptions based on read status for list item view to avoid spoilers
* Tweaked placement of a tooltip due to new series detail styles
* Hooked up a user preference for bluring unread summaries. Fixed a bug in refresh token where we would cause re-authentication when it shouldn't be needed.
* Added --card-list-item-bg-color for the card list items
* Updated the card list item progress to match how cards render
* Implemented the ability to configure how many backups are retained.
* Fixed a bug where odd jump keys could cause a bad index error for jump bar
* Commented out more code for the pagination route if we go with that.
* Reverted a move of DisableConcurrentExecution to interface, as it seems to not work there.
* Updated manga format utility code to pipes
* Fixed bulk selection on series detail page
* Fixed bulk selection on all other pages
* Changed card item to OnPush
* Updated image component to OnPush
* Updated Series Card to OnPush
* Updated Series Detail to OnPush
* Lots of changes here. Integrated parentscroll support on card detail layout. Added jump bar (custom js implementation) on collection, reading list and all series pages. Updated UserParams to default to no pagination. Lots of cleanup all around
* Updated some notes on a module use
* Some code cleanup
* Fixed up a broken test due to the mapper not being configured in the test.
* Applied TabID pattern to edit collection tags
* Applied css from series detail to collection detail page to remove double scrollbar
* Implemented the ability to sort by Time To Read.
* Throw an error to the UI when we extract an archive and it contains invalid characters in the filename for the Server OS.
* Tweaked how the page scrolls for jumpbar on collection detail. We will have to polish another release
* Cleaned up the styling on directory picker
* Put some code in but it doesn't work for scroll to top on virtual scrolling. I'll do it later.
* Fixed a container bug
* Started on the directory picker refactor.
* Coded some basic working version. Needs styling and variable cleanup
* code cleanup
* Implemented the ability to expose swagger on non-development servers.
* Implemented the ability to expose swagger on non-development servers.
* Refactored all the code that opens the reader to use a unified function. Added new library and setup basic pdf reader route.
* Progress saving is implemented. Targeting ES6 now.
* Customized the toolbar to remove things we don't want, made the download button download with correct filename. Adjusted zoom setting to work well on first load regardless of device.
* Stream the pdf file to the UI rather than handling the download ourselves.
* Started implementing a custom toolbar.
* Fixed up the jump bar calculations
* Fixed filtering being broken
* Pushing up for Robbie to cleanup the toolbar layout
* Added an additional button. Working on logic while robbie takes styling
* Tried to fix the code for robbie
* Tweaks for fonts
* Added button for book mode, but doesn't seem to work after renderer is built
* Removed book mode
* Removed the old image caching code for pdfs as it's not needed with new reader
* Removed the interfaces to extract images from pdf.
* Fixed original pagination area not scaling correctly
* Integrated series remove events to library detail
* Cleaned up the getter naming convention
* Cleaned up some of the manga reader code to reduce cluter and improve re-use
* Implemented Japanese parser support for volume and chapters.
* Fixed a bug where resetting scroll in manga reader wasn't working
* Fixed a bug where word count grew on each scan.
* Removed unused variable
* Ensure we calculate word count on files with their own cache timestamp
* Adjusted size of reel headers
* Put some code in for moving on original image with keyboard, but it's not in use.
* Cleaned up the css for the pdf reader
* Cleaned up the code
* Tweaked the list item so we show scrollbar now when fully read
* Started with the redesign of the cover image chooser redesign to be less click intensive for volume/chapter images.
Made some headings bold in card detail drawer.
* Tweaked the styles
* Moved where the info cards show
* Added an ability to open a page settings drawer
* Cleaned up some old code that isn't needed anymore.
* Started implementing a list view. Refactored some title code to a dedicated component
* List view implemented but way too many API calls. Either need caching or adjusting the SeriesDetail api.
* Fixed a bug where if the progress bar didn't render on a card item while a download was in progress, the download indicator would be removed.
* Large refactor to move a lot of the needed fields to the chapter and volume dtos for series detail. All fields are noted when only used in series detail.
* Implemented cards for other tabs (except related)
* Fixed the unit test which needed a mocked reader service call.
* More cleanup around age rating and removing old code from the refactor. Commented out sorting till i feel motivated to work on that.
* Some cleanup and restored cards as initial layout. Time to test this out and see if there is value add.
* Added ability for Chapters tab to show the volume chapters belong to (if applicable)
* Adding style fixes
* Cover image updates, don't allow the first image (which is what is currently set) to respond to cover changes.
Hide the ID field on list item for series detail.
* Refactored the title for list item to be injectable
* Cleaned up the selection code to make it less finicky on mobile when tap scrolling.
* Refactored chapter tab to show volume as well on list view.
* Ensure word count shows for Volumes
* Started adding virtual scrolling, pushing up so Robbie can mess around
* Started adding virtual scrolling, pushing up so Robbie can mess around
* Fixed a bug where all chapters would come under specials
* Show title data as accent if set.
* Style fixes for virtual scroller
* Restyling scroll
* Implemented a way to show storyline with virtual scrolling
* Show Word Count for chapters and cleaned up some logics.
* I might have card layout working with virtual scroll code.
* Some cleanup to hide more system like properties from info bar on series detail page. Fixed some missing time estimate info on storyline chapters.
* Fixed a regression on series service when I integrated VolumeTitle.
* Refactored read time to the backend. Added WordCount to the volume itself so we don't need to calculate on frontend. When asking to analyze files from a series, force the calculation.
* Fixed SeriesDetail api code
* Fixed up the code in the drawer to better update list/card mode
* Basic infinite scroll implemented, however due to how we are updating the list to render, we are re-rending cards that haven't been touched.
* Updated how we render and layout data for infinite scroll on library detail. It's almost there.
* Started laying foundation for loading pages backwards.
Removed lazy loading of images since we are now using virtual paging.
* Hooked in some basic code to allow user to load a prev page with infinite scroll.
* Fixed up series detail api and undid the non-lazy loaded images.
Changed the router to help with this infinite loading on Firefox issue.
* Fixed up some naming issues with Series Detail and added a new test.
* This is an infinite scroll without pagination implementation. It is not fully done, but off to a good start. Virtual scroller with jump bar is working pretty well, def needs more polishing and tweaking. There are hacks in this implementation that need to be revisited.
* Refactored code so that we don't use any pagination and load all results by default.
* Misc code cleanup from build warnings.
* Cleaned up some logic for how to display titles in list view.
* More title cleanup for specials
* Hooked up page layout to user preferences and renamed an existing user pref name to match the dto.
* Swapped out everything but storyline with virtual-scroller over CDK
* Removed CDK from series detail.
* Default value for migration on page layout
* Updating card layout for library detail page
* fixing height for mobile
* Moved scrollbar
* Tweaked some styling for layouts when there is no data
* Refactored the series cards into their own component to make it re-usable.
* More tweaks on series info cards layout and enhanced a few pages with trackby functions.
* Removed some dead code
* Added download on series detail to actionables to fit in with new scroll strategy.
* Fixed language not being updated and sent to the backend for series update.
* Fixed a bad migration (if you ran any prior migration in this branch, you need to undo before you use this commit)
* Adding sticky tabs
* fixed mobile gap on sticky tab
* Enhanced the card title for books to show number up front.
* Adjusted the gutters on admin dashboard
* Removed debug code
* Removing duplicate book title
* Cleaned up old references to cdk scroller
* Implemented a basic jump bar scaling algorithm. Not perfect, but works pretty well.
* Code smells
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Adding some code for Robbie
* See more on series detail metadata area is now at the bottom on the section
* Cleaned up subtitle headings to use a single class for offset with actionables
* Added some markup for the new design, waiting for Robbie to finish it off
* styling age-rating badge
* Started hooking up basic analyze file service and hooks in the UI. Basic code to implement the count is implemented and in benchmarks.
* Hooked up analyze ui to backend
* Refactored Series Detail metadata area to use a new icon/title design
* Cleaned up the new design
* Pushing for robbie to do css
* Massive performance improvement to scan series where we only need to scan folders reported that have series in them, rather than the whole library.
* Removed theme page as we no longer need it. Added WordCount to DTOs so the UI can show them. Added new pipe to format numbers in compact mode.
* Hooked up actual reading time based on user's words per hour
* Refactor some magic numbers to consts
* Hooked in progress reporting for series word count
* Hooked up analyze files
* Re-implemented time to read on comics
* Removed the word Last Read
* Show proper language name instead of iso tag on series detail page. Added some error handling on word count code.
* Reworked error handling
* Fixed some security vulnerabilities in npm.
* Handle a case where there are no text nodes and instead of returning an empty list, htmlagilitypack returns null.
* Tweaked the styles a bit on the icon-and-title
* Code cleanup
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* When account updates occur for a user, send an event to them to tell them to refresh their account information (if they are on the site at the time). This way if we revoke permissions, the site will reactively adapt.
* Some cleanup on the user preferences to remove some calls we don't need anymore.
* Removed old bulk cleanup bookmark code as it's no longer needed.
* Tweaked the messaging for stat collection to reflect what we collect now versus when this was initially implemented.
* Implemented the ability for users to configure their servers to save bookmarks as webP. Reorganized the tabs for Admin dashboard to account for upcoming features.
* Implemented the ability to bulk convert bookmarks (as many times as the user wants).
Added a display of Reoccurring Jobs to the Tasks admin tab. Currently it's just placeholder, but will be enhanced further later in the release.
* Tweaked the wording around the convert switch.
* Moved System actions to the task tab
* Added a controller just for Tachiyomi so we can have dedicated APIs for that client. Deprecated an existing API on the Reader route.
* Fixed the unit tests