* Implemented a basic version of enhanced search where we can return multiple types of entities in one go. Current unoptimized version is twice as expensive as normal search, but under NFR. Currently 200ms max.
* Worked in some basic code for grouped typeahead search component. Keyboard navigation is working.
* Most of the code is in place for the typeahead. Needs css work and some accessibility work.
* Hooked up filtering into all-series. Added debouncing on search, clear input field now works. Some optimizations related to memory cleanup
* Added ability to define a custom placeholder
* Hooked in noResults template and logic
* Fixed a duplicate issue in Collection tag searching and commented out old code. OPDS still needs some updates.
* Don't trigger inputChanged when reopening/clicking on input.
* Added Reading list to OPDS search
* Added a new image component so all the images can be lazyloaded without logic duplication
* Added a maxWidth/Height on the image component
* Search css update
* cursor fixes
* card changes
- fixing border radius on cards
- adding bottom card color
* Expose intenral state of if the search component has focus
* Adjusted the accessibility to not use complex keys and just use tab instead since this is a search, not a typeahead
* Cleaned up dead code, removed angular-ng-complete library as it's no longer used.
* Fixes for mobile search
* Merged code
* Fixed a bad merge and some nav bar styling
* Cleaned up the focus code for nav bar
* Removed focusIndex and just use hover state. Fixed clicking on items
* fixing overlay overlap issue
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Added an alt implementation which shows Recently Added chapters. No extra grouping is performed if multiple chapters per volume.
* Started working on a grouping implementation for series.
* Disabled the code for bookmarks cleanup as there is some critical issue in there.
* Implemented a Series Group activity stream which shows recently updated series and providers a count badge showing how many new chapters/volumes were added in that series.
* Removed the bookmark disabling code
* Cleaned up code
* One more code cleanup
* Implemented forgot password flow. Fixed a bug in manage user where admins were showing the Sharing With section.
* Cleaned up the reset password flow.
* Reverted some debug code
* Fixed an issue with invites due to ImmutableArray not being set.
* Moved the Server Settings out into a button on nav header
* Refactored Mange Users page to the new design (skeleton). Implemented skeleton code for Invite User.
* Hashed out more of the code, but need to move all the email code to a Kavita controlled API server due to password credentials.
* Cleaned up some warnings
* When no user exists for an api key in Plugin controller, throw 401.
* Hooked in the ability to check if the Kavita instance can be accessed externally so we can determine if the user can invite or not.
* Hooked up some logic if the user's server isn't accessible, then default to old flow
* Basic flow is working for confirm email. Needs validation, error handling, etc.
* Refactored Password validation to account service
* Cleaned up the code in confirm-email to work much better.
* Refactored the login page to have a container functionality, so we can reuse the styles on multiple pages (registration pages). Hooked up the code for confirm email.
* Messy code, but making progress. Refactored Register to be used only for first time user registration. Added a new register component to handle first time flow only.
* Invite works much better, still needs a bit of work for non-accessible server setup. Started work on underlying manage users page to meet new design.
* Changed (you) to a star to indicate who you're logged in as.
* Inviting a user is now working and tested fully.
* Removed the register member component as we now have invite and confirm components.
* Editing a user is now working. Username change and Role/Library access from within one screen. Email changing is on hold.
* Cleaned up code for edit user and disabled email field for now.
* Cleaned up the code to indicate changing a user's email is not possible.
* Implemented a migration for existing accounts so they can validate their emails and still login.
* Change url for email server
* Implemented the ability to resend an email confirmation code (or regenerate for non accessible servers). Fixed an overflow on the confirm dialog.
* Removed all code around disabling authentication. Users that were already disabled can look up their password on the wiki.
* Moved the Server Settings out into a button on nav header
* Refactored Mange Users page to the new design (skeleton). Implemented skeleton code for Invite User.
* Hashed out more of the code, but need to move all the email code to a Kavita controlled API server due to password credentials.
* Cleaned up some warnings
* When no user exists for an api key in Plugin controller, throw 401.
* Hooked in the ability to check if the Kavita instance can be accessed externally so we can determine if the user can invite or not.
* Hooked up some logic if the user's server isn't accessible, then default to old flow
* Basic flow is working for confirm email. Needs validation, error handling, etc.
* Refactored Password validation to account service
* Cleaned up the code in confirm-email to work much better.
* Refactored the login page to have a container functionality, so we can reuse the styles on multiple pages (registration pages). Hooked up the code for confirm email.
* Messy code, but making progress. Refactored Register to be used only for first time user registration. Added a new register component to handle first time flow only.
* Invite works much better, still needs a bit of work for non-accessible server setup. Started work on underlying manage users page to meet new design.
* Changed (you) to a star to indicate who you're logged in as.
* Inviting a user is now working and tested fully.
* Removed the register member component as we now have invite and confirm components.
* Editing a user is now working. Username change and Role/Library access from within one screen. Email changing is on hold.
* Cleaned up code for edit user and disabled email field for now.
* Cleaned up the code to indicate changing a user's email is not possible.
* Implemented a migration for existing accounts so they can validate their emails and still login.
* Change url for email server
* Implemented the ability to resend an email confirmation code (or regenerate for non accessible servers). Fixed an overflow on the confirm dialog.
* Took care of some code cleanup
* Removed 3 db calls from cover refresh and some misc cleanup
* Fixed a broken test
* Working on adding recently added chapter/volumes to dashboard. Have some progress, need to tweak grouping logic.
* Tweaked the logic to work well for grouping. Now to incorporate information for UI to provide seamless integration
* Implemented UI part for Recently Added.
* Implemented the framework for Refresh Token. Needs testing.
* Implemented Refresh Tokens. Users are issued tokens that last 7 days, just before the 7 days, the UI will request a new token to avoid having to re-authenticate.
* Implemented the ability to click a metadata tag (in series detail) and load a pre-filtered view. Apply still needs to be implemented (preset load is out of sync with external filter)
* Refactored people to properly use typeahead so duplicates don't happen and use an observable chain so we can update the screen correctly
* Many refactoring to ensure that the timings for filtering always works
* Cleaned up a ton of warnings/suggestions from the IDE.
* Fixed a bug when clearing the filters some presets could be undone.
* Renamed a class in the OPDS spec
* Simplified logic for when Fit To Screen rendering logic occurs. It now works always rather than only on cover images.
* Give some additional info to the user on what the differences between Library Types are
* Don't scan .qpkg folders (QNAP devices)
* Refactored some code to enable ability to test CoverImage Test. This is a broken test, test.zip is waiting on an issue in NetVips.
* Fixed an issue where Extra might get flagged as special too early, if in a word like Extraordinary
* Cleaned up the regex for the extra issue to be more flexible
* Implemented Publication Status in SeriesMetadata and the ability to filter it.
* Updated the docs for Language on metadata to specify it's a BCP-47 code to match Anansi Project. Fixed a bug with reader from previous PR.
* Added a tooltip to inform user that format and collection filter selections do not only show for the selected library.
* Refactored a lot of code around when we update chapter cover images. Applied an optimization for when we re-calculate volume/series covers, such that it only occurs when the first chapter's image updates.
* Updated code to ensure only lastmodified gets refreshed in metadata since it always follows a scan
* Optimized how metadata is populated on the series. Instead of re-reading the comicInfos, instead I read the data from the underlying chapter entities. This reduces N additional reads AND enables the ability in the future to show/edit chapter level metadata.
* Spelling mistake
* Fixed a concurency issue by not selecting Genres from DB. Added a test for long paths.
* Fixed a bug in filter where collection tag wasn't populating on load
* Cleaned up the logic for changelog to better compare against the installed verison. For nightly users, show the last stable as installed.
* Removed some demo code
* SplitQuery to allow loading tags much faster for series metadata load.
* Fixed a bug which didn't take sort direction when not changing sort field
* Added foundation for Bookmark refactor
* Code broken, need to take a break. Issue is Getting bookmark image needs authentication but UI doesn't send.
* Implemented the ability to send bookmarked files to the web. Implemented ability to clear bookmarks on disk on a re-occuring basis.
* Updated the bookmark design to have it's own card that is self contained. View bookmarks modal has been updated to better lay out the cards.
* Refactored download bookmark codes to select files from bookmark directory directly rather than open underlying files.
* Wrote the basic logic to kick start the bookmark migration.
Added Installed Version into the DB to allow us to know more accurately when to run migrations
* Implemented the ability to change the bookmarks directory
* Updated all references to BookmarkDirectory to use setting from the DB.
Updated Server Settings page to use 2 col for some rows.
* Refactored some code to DirectoryService (hasWriteAccess) and fixed up some unit tests from a previous PR.
* Treat folders that start with ._ as blacklisted.
* Implemented Reset User preferences. Some extra code to prep for the migration.
* Implemented a migration for existing bookmarks to using new filesystem based bookmarks
* Don't show an exception when bookmarking doesn't have anything to change.
* Cleaned up the bookmark code a bit.
* Implemented fullscreen mode in the web reader. Refactored User Settings to move Password and 3rd Party Clients to a tab rather than accordion. Removed color filters for web reader.
* Implemented fullscreen mode into book reader
* Added some code for toggling fullscreen which re-renders the screen to ensure the fitting works optimially
* Fixed an issue where moving from FitToScreen -> Split (L/R) wouldn't render the screen correctly due to canvas not being reset.
* Fixed bad optimization and scaling when drawing fit to screen
* Removed left/right highlights on page direction change in favor for icons. Double arrow will dictate the page change.
* Reduced overlay auto close time to 3 seconds
* Updated the paginging direction overlay to use icons and colors. Added a blur effect on menus
* Removed debug flags
* Added a reoccuring task to cleanup db entries that might be abandoned. On library page, the Library in question will be prepoulated.
* Laid out the foundation for customized sorting. Added all series page to the UI when clicking on Libraries section header on home page so user can apply any filtering they like.
* When filtering, the current library filter will now automatically filter out the options for people and genres.
* Implemented Sorting controls
* Clear now clears sorting and read progress. Sorting is disabled on deck and recently added.
* Fixed an issue where all-series page couldn't click to open series
* Don't let the user unselect the last read progress. Added new comicinfo v2.1 draft tags.
* Hooked in Translator tag into backend and UI.
* Fixed an issue where you could open multiple typeaheads at the same time
* Integrated Translator and Tags ComicInfo extension fields. Started work on a badge expander.
* Reworked a bit more on badge expander. Added the UI code for Age Rating and Tags
* Integrated backend for Tags, Translator, and Age Rating
* Metadata tags now collapse if more than 4 present
* Some code cleanup
* Made the not read badge slightly smaller
* Laying the foundation for the filter rework
* Filtering by Genre is now possible.
* Cleaned up code and preparing for People filtering
* People filtering is hooked up for the frontend
* Filtering now works. On Deck does not work with filtering currently due to a unique implementation.
* More cleanup
* Implemented the ability to reset the filters
* Added a mobile drawer for filtering
* Added some additional cases for NaturalSortComparer. Filter now uses a drawer on smaller screens.
* Fixed a bug where backup service was not pointing to the correct directory.
* Undid the fix, it's working as expected
* Added a new endpoint to get all Series with Progress info.
* Fixed up some potential NPEs during scan
* Commented out filter code, not ready for it.
* Fixed up a parsing case for european comics
* Refactored FilterDto to allow for specifying multiple formats to return.
* Refactored FilterDto to allow for specifying multiple formats to return.
* Refactored the UI to show OPDS as 3rd Party Clients since Tachiyomi now uses OPDS url scheme for authentication.
* Stashing code
* removed some debug code on series detail page. Now detail is collapsed by default.
* Added AgeRating
* Fixed a crash when NetVips tries to write a cover file and cover directory is not existing.
* When a card is selected for bulk actions, show an outline in addition to select box
* Added AgeRating into the metadata parsing. Added a hack where ComicInfo uses Number in ComicInfo rather than Volume. This is to test out the effects on users libraries.
* Added AgeRating and ReleaseDate to the metadata implelentation.
* 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
* Started with some basic plumbing with comic info parsing updating Series/Volume.
* We can now get chapter title from comicInfo.xml
* Hooked in the ability to store people into the chapter metadata.
* Removed no longer used imports, fixed up some foreign key constraints on deleting series with person linked.
* Refactored Summary out of the UI for Series into SeriesMetadata. Updated application to .net 6. There is a bug in metadata code for updating.
* Removed the parallel.ForEach with a normal foreach which lets us use async. For I/O heavy code, shouldn't change much.
* Refactored scan code to only check extensions with comic info, fixed a bug on scan events not using correct method name, removed summary field (still buggy)
* Fixed a bug where on cancelling a metadata request in modal, underlying button would get stuck in a disabled state.
* Changed how metadata selects the first volume to read summary info from. It will now select the first non-special volume rather than Volume 1.
* More debugging and found more bugs to fix
* Redid all the migrations as one single one. Fixed a bug with GetChapterInfo returning null when ChapterMetadata didn't exist for that Chapter.
Fixed an issue with mapper failing on GetChapterMetadata. Started work on adding people and a design for people.
* Fixed a bug where checking if file modified now takes into account if file has been processed at least once. Introduced a bug in saving people to series.
* Just made code compilable again
* Fixed up code. Now people for series and chapters add correctly without any db issues.
* Things are working, but I'm not happy with how the management of Person is. I need to take into account that 1 person needs to map to an image and role is arbitrary.
* Started adding UI code to showcase chapter metadata
* Updated workflow to be .NET 6
* WIP of updating card detail to show the information more clearly and without so many if statements
* Removed ChatperMetadata and store on the Chapter itself. Much easier to use and less joins.
* Implemented Genre on SeriesMetadata level
* Genres and People are now removed from Series level if they are no longer on comicInfo
* PeopleHelper is done with unit tests. Everything is working.
* Unit tests in place for Genre Helper
* Starting on CacheHelper
* Finished tests for ShouldUpdateCoverImage. Fixed and added tests in ArchiveService/ScannerService.
* CacheHelper is fully tested
* Some DI cleanup
* Scanner Service now calls GetComicInfo for books. Added ability to update Series Sort name from metadata files (mainly epub as comicinfo doesn't have a field)
* Forgot to move a line of code
* SortName now populates from metadata (epub only, ComicInfo has no tags)
* Cards now show the chapter title name if it's set on hover, else will default back to title.
* Fixed a major issue with how MangaFiles were being updated with LastModified, which messed up our logic for avoiding refreshes.
* Woohoo, more tests and some refactors to be able to test more services wtih mock filesystem. Fixed an issue where SortName was getting set as first chapter, but the Series was in a group.
* Refactored the MangaFile creation code into the DbFactory where we also setup the first LastModified update.
* Has file changed bug is now finally fixed
* Remove dead genres, refactor genre to use title instead of name.
* Refactored out a directory from ShouldUpdateCoverImage() to keep the code clean
* Unit tests for ComicInfo on BookService.
* Refactored series detail into it's own component
* Series-detail now received refresh metadata events to refresh what's on screen
* Removed references to Artist on PersonRole as it has no metadata mapping
* Security audit
* Fixed a benchmark
* Updated JWT Token generator to use new methods in .NET 6
* Updated all the docker and build commands to use net6.0
* Commented out sonar scan since it's not setup for net6.0 yet.
* Updated readme with new host information and new feature site.
* Implemented basic fit to screen splitting option for manga reader such that the reader will try to fit the whole cover on the screen via scaling it.
Updated a bunch of defaults in the preferences to give a better experience for first installs.
* Refactored the stat scheduling code slightly to clean it up and have better logging.
* Replaced @import with @use to lower css bundling.
* Changed up the defaults for the reading preferences to give a better experience. Fixed a duplicate render on automatic scaling due to emitting a valuechange with automatic scaling changing fit.
Implemented basic form of fit to screen. Still needs some tweaking and optimization.
* Update link to new feature server and update kavita homepage to use www.
* Updated the serverInfo to match backend. Tweaked some of the css for the changelog
* Added publish date for changelog
* First page works except for tablet
* I'm stumped, taking a break
* Hide the arrow for nav events
* Ensure specials in reading lists don't have their extensions visible
* Testing out removing no-connection
* Fixed a bug in infinite scroller where next chapter spacer when clicked would emit for prev chapter load. Fixed an issue where next/prev chapter loaders would execute when they shouldn't.
* Fit Split is working in all cases as of this code. New optimization is still needed.
* Fit to screen is now working well
* Updated the bookmark effect to look much better
* Updated new issue template to inform users to request features on our site.
* Removed an empty migration
* Fixed a duplicate check for updates. Changed checking from weekly to daily.
* Refactored how dark variables were accessed to reduce size of component css. Refactored Stats code to use lesser information for reporting.
* Use the installId from the database which is most unlikely to change.
* Fixed a missing interface with stat service
* Added DotnetVersion back into collection
* Updated url to new host.
* Added Date Added time to volume/chapter card detail modals to help users understand when new chapters are added after something has been fully read. Changed Created -> Added for better clarity.
* updating workflow discord parser
- Added ` and > to parser
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Fixed the typeahead not having the same size input box as other inputs
* Implemented the ability to add multiple series to a collection through bulk operations flow. Updated book parser to handle "@import url('...');" syntax as well as @import '...';
* Implemented the ability to create a new Collection tag via bulk operations flow.
* Added base url config
* UI side is not working
* Working base url more
* Attempt to get UI to work with base url
* Implemented the ability to set the Base URL for the app
* Hooked in Base URL as a managed setting
* Ensure we always start with / for base url
* Removed default base href from debug builds. Cleaned up an issue with base url migration.
* Fixed an issue with our BaseURL migration
* Implemented methods to parse out the whole ComicInfo file and a mock ComicInfo from epub files.
* Removed unused imports. ScanSeries needs to cleanup deleted chapters and call RefreshMetadata. Ensure after scan we cleanup tags without any series.
* Random cleanup
* Added some comments about data getting stale and not updating.
* Removed old Summary methods in favor of the ComicInfo versions
* Added a missing property
* Fixed unit test
* Implemented the ability to disable authentication on a server instance. Admins will require authentication, but non-admin accounts can be setup without any password requirements.
* WIP for new login page.
* Reworked code to handle disabled auth better. First time user flow is moved into the user login component.
* Removed debug code
* Removed home component, shakeout testing is complete.
* remove a file accidently committed
* Fixed a code smell from last PR
* Code smells
* Added a new field to Library for showing Last Scan time for a library.
Manage library page now shows last scan for each library. Tweaked the websocket code to make scan progress a bit more reliable.
* Updated docnet to provide ARM support from our recent PR. Pi users can now have a version for PDF support out of the box.
* Parser is now culture invariant to hopefully fix an issue on Italian systems not detecting . correctly
* Added the ability for the collection detail page to update when a new series is added.
* Fixed an issue where multiple chapters stacked in a volume and reading in incognito, wouldn't sort the chapters and would open the wrong one.
* Code smell
* Implemented the ability to perform multi-selections on cards. Basic selection code is done, CSS needed and exposing actions.
* Implemented a bulk selection bar. Added logic to the card on when to force show checkboxes.
* Fixed some bad parsing groups and cases for Comic Chapters.
* Hooked up some bulk actions on series detail page. Not hooked up to backend yet.
* Fixes#593. URI Enocde library names as sometimes they can have & in them.
* Implemented the ability to mark volume/chapters as read/unread.
* Hooked up mark as unread with specials as well.
* Add to reading list hooked up for Series Detail
* Implemented ability to add multiple series to a reading list.
* Implemented bulk selection for series cards
* Added comments to the new code in ReaderService.cs
* Implemented proper styling on bulk operation bar and integrated for collections.
* Fixed an issue with shift clicking
* Cleaned up css of bulk operations bar
* Code cleanup
* Fixed an issue from perf tuning where I forgot to send Pages to frontend, breaking reader.
* Built out continuous reading for webtoon reader. Still has some issues with triggering.
* Refactored GetUserByUsernameAsync to have a new flavor and allow the caller to pass in bitwise flags for what to include. This has a get by username or id variant. Code is much cleaner and snappier as we avoid many extra joins when not needed.
* Cleanup old code from UserRepository.cs
* Refactored OPDS to use faster API lookups for User
* Refactored more code to be cleaner and faster.
* Refactored GetNext/Prev ChapterIds to ReaderService.
* Refactored Repository methods to their correct entity repos.
* Refactored DTOs and overall cleanup of the code.
* Added ability to press 'b' to bookmark a page
* On hitting last page, save progress forcing last page to be read. Adjusted logic for the top and bottom spacers for triggering next/prev chapter load
* When at top or moving between chapters, scrolling down then up will now trigger page load. Show a toastr to inform the user of a change in chapter (it can be really fast to switch)
* Cleaned up scroll code
* Fixed an issue where loading a chapter with last page bookmarked, we'd load lastpage - 1
* Fixed last page of webtoon reader not being resumed on loading said chapter due to a difference in how max page is handled between infinite scroller and manga reader.
* Removed some comments
* Book reader shouldn't look at left/right tap to paginate elems for position bookmarking. Missed a few areas for saving while in incognito mode
* Added a benchmark to test out a sort code
* Updated the read status on reading list to use same style as other places
* Refactored GetNextChapterId to bring the average response time from 1.2 seconds to 400ms.
* Added a filter to add to list when there are more than 5 reading lists
* Added download reading list (will be removed, just saving for later). Fixes around styling on reading lists
* Removed ability to download reading lists
* Tweaked the logic for infinite scroller to be much smoother loading next/prev chapter. Added a bug marker for a concurrency bug.
* Updated the top spacer so that when you hit the top, you stay at the page height and can now just scroll up.
* Got the logic for scrolling up. Now just need the CSS then cont infinite scroller will be working
* More polishing on infinite scroller
* Removed IsSpecial on volumeDto, which is not used anywhere.
* Cont Reading inf scroller edition is done.
* Code smells and fixed package.json explore script
* Refactored the performance of GetChapter/BookInfo API to have a 10x speed improvement and to use common code, rather than duplicating code. Removed an api param that is no longer needed.
* Book reader now has dedicated buttons to jump to next/prev chapter as well as through page buttons
* 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
* Added some basic OPDS implementation
* Fixed an issue with feed href
* More changes
* Added library routes and moved user code to a method so we can hack in fixed code without authentication
* Images now load on the OPDS reusing our existing Image infrastructure.
* Added the ability to download and moved some download code to a dedicated service
* Download is working, pagination is implemented.
* Refactored libraries to use pagination
* Laid foundation for OpenSearch implementation
* Fixed up some serialization issues and some old code that wasn't referencing helper methods
* Ensure chapters are sorted when we send them over OPDS
* OpenSearch implemented
* Removed any support for OPDS-PS due to lack of apps supporting it.
* Don't distribute development.json nor stats directory on build.
* Implemented In Progress feed as well.
* Ability to enable OPDS for server. OPDS now accepts initial call as POST in case app uses username/password.
* UI now properly renders state for OPDS enablement. Added Collections routes.
* Fixed pagination startIndex on OPDS feeds when there is less than 1 page.
* Chunky Reader now works. It only accepts UTF-8 encodings
* More Chunky fixes
* More chunky changes, such a fussy client.
* Implemented the ability to have a custom api key assigned to a user and use that api key as your authentication token against OPDS routing.
* Implemented the ability to reset your API Key
* Fixed favicon not being sent back correctly
* Fixed an issue where images wouldn't send on OPDS feed.
* Implemented Page streaming and fixed a pagination bug
* Hooked in the ability to save progress in Kavita when Page Streaming
* Lots of cleanup on the warnings in the solution. Deprecated IsLastWriteLessThan and made a new method HasFileBeenModifiedSince.
* Added some tests for the new extension method.
* Changed filter import to use correct import
* Scan Series now uses Refresh Metadata for Series, rather than library one.
* Fixed an issue where cover generation wasn't properly taking forced update into consideration. Removed a case of cover generation for no reason.
* Fixed series downloads not triggering backend call
* Replaced profile links to anchors so we can open in new tab if we like
* Refactored how update checking works. We now explicitly check and send back on the same API. We have a weekly job that will push an update to the user.
* Implemented a changelog tab
* Ported over a GA fix for using ' in PR bodies.
* Don't check cert for Github
* ImageService had a stream reset before writting out to array. Added logging statment for updating series metadata. Removed ConcurencyCheck due to bad update issue for CollectionTag.
* Added a new screen which lets you quickly see all your bookmarks for a given user.
* Built user bookmark page in user settings. Moved user settings to it's own lazy loaded module. Removed unneded debouncing from downloader and just used throttleTime instead.
* Removed a not-yet implemented tab from series modal
* Fixed a bug in clear bookmarks and adjusted icons within anchors to have proper styling
* Added some documentation. Removed Require Admin Role from Search Tags. Added Summary to be updated on UpdateTag.
* Added Swagger xml doc generation to beef up the documentation. Started adding xml comments to the APIs. This is a needed, slow task for upcoming Plugins system.
* Implemented the ability to upload a custom series image to override the existing cover image.
Refactored some code out to use ImageService and added more documentation
* When a page cache fails, delete cache directory so user can try to reload.
* Implemented the ability to lock a series cover image such that after user uploads something, it wont get refreshed by Kavita.
* Implemented the ability to reset cover image for series by unlocking
* Kick off a series refresh after a cover is unlocked.
* Ability to press enter to load a url
* Ability to reset selection
* Cleaned up cover chooser such that reset is nicer, errors inform user to use file upload, series edit modal now doesn't use scrollable body. Mobile tweaks. CoverImageLocked is now sent to the UI.
* More css changes to look better
* When no bookmarks, don't show both markups
* Fixed issues where images wouldn't refresh after cover image was changed.
* Implemented the ability to change the cover images for collection tags.
* Added property and API for chapter cover image update
* Added UI code to prepare for updating cover image for chapters. need to rearrange components
* Moved a ton of code around to separate card related screens into their own module.
* Implemented the ability to update a chapter/volume cover image
* Refactored action for volume to say edit to reflect modal action
* Fixed issue where after editing chapter cover image, the underlying card wouldn't update
* Fixed an issue where we were passing volumeId to the reset chapter lock. Changed some logic in volume cover image generation.
* Automatically apply when you hit reset cover image
# Added
- Added: Added the ability to bookmark certain pages within the manga (image) reader and later download them from the series context menu.
# Fixed
- Fixed: Fixed an issue where after adding a new folder to an existing library, a scan wouldn't be kicked off
- Fixed: In some cases, after clicking the background of a modal, the modal would close, but state wouldn't be handled as if cancel was pushed
# Changed
- Changed: Admin contextual actions on cards will now be separated by a line to help differentiate.
- Changed: Performance enhancement on an API used before reading
# Dev
- Bumped dependencies to latest versions
=============================================
* Bumped versions of dependencies and refactored bookmark to progress.
* Refactored method names in UI from bookmark to progress to prepare for new bookmark entity
* Basic code is done, user can now bookmark a page (currently image reader only).
* Comments and pipes
* Some accessibility for new bookmark button
* Fixed up the APIs to work correctly, added a new modal to quickly explore bookmarks (not implemented, not final).
* Cleanup on the UI side to get the modal to look decent
* Added dismissed handlers for modals where appropriate
* Refactored UI to only show number of bookmarks across files to simplify delivery. Admin actionables are now separated by hr vs non-admin actions.
* Basic API implemented, now to implement the ability to actually extract files.
* Implemented the ability to download bookmarks.
* Fixed a bug where adding a new folder to an existing library would not trigger a scan library task.
* Fixed an issue that could cause bookmarked pages to get copied out of order.
* Added handler from series-card component
# Added
- Added: Added "In Progress" view to see everything you are currently reading
- Added: Added the ability to filter series based on format from "In Progress", "Recently Added", "Library Detail" pages.
- Added: Added total items to the above pages to showcase total series within Kavita
==============================
* Added filtering to recently added
* Cleaned up the documentation on the APIs and removed params no longer needed.
* Implemented Filtering on library detail, in progress, and recently added for format. UI is non-final.
* Moved filtering to an expander panel
* Cleaned up filtering UI a bit
* Cleaned up some code and added titles on touched pages
* Fixed recently added not re-rendering page
* Removed commented out code
* Version bump
* Added an animation to the filtering section
* Stashing changes, needing to switch lazy loading libraries out due to current version not trigging on dom mutation events
* Finally fixed all the lazy loading issues and made it so pagination works without reloading the whole page.
# Added
- Added: Added series format information to the search typeahead to help identify duplicate series in libraries
# Fixed
- Fixed: Fixed accent color not looking well on light theme
- Fixed: Attempted to fix the memory issues with PDF reading on Docker. Uses a Memory Pool for streams and removes a bitmap operation for fixing books with transparent backgrounds (#424)
# Changed
- Changed: Refactored download logs to use the same download code as rest of Kavita
# Dev stuff
- Added timeout for Regex's to make sure during matching, malicious filenames doesn't crash user system
- Refactored a missing GetCoverImage to use Series Format rather than old Library Type
==================================================
* Added Timeout for Regex matching to ensure malicious filenames don't crash system
* Refactored GetCoverImage to use series format rather than library type
* Refactored download logs to use the download service
* Fixed accent color not looking well on light theme
* Refactored series format into dedicated component and added to search results
* Switch to using MemoryManager for Streams to attempt to minimize GC pressure and reduced bitmap manipulation for transparency hack.
# Added
- Added support for PDFs within Kavita. PDFs will open in the Manga reader and you can read through them as images. PDFs are heavier than archives, so they may take longer to open for reading. (Fixes#187)
# Changed
- Changed: Major change in how Kavita libraries work. Kavita libraries will now allow for mixed media types, that means you can have raw images, archives, epubs, and pdfs all within your Manga library. In the case that the same Series exists between 2 different types of medias, they will be separated and an icon will show to help you identify the types. The correct reader will open regardless of what library you are on. Note: Nightly users need to delete their Raw Images libraries before updating.
# Fixed
- Fixed: Fixed an issue where checking if a file was modified since last scan always returned true, meaning we would do more I/O than was needed (Fixes#415)
- Fixed: There wasn't enough spacing on the top menu bar on the Manga reader
- Fixed: Fixed a bug where user preferences dark mode control always showed true, even if you were not using dark mode
# Dev stuff
- For image extraction, if there is only 1 image we will extract just that, else we will extract only images
- Refactored all the Parser code out of the ScannerService into a self contained class. The class should be created for any scans, allowing multiple tasks to run without any chance of cross over.
* Fixed indentation for cs files
* Fixed an issue where the logic for if a file had been modified or not was not working and always saying modified, meaning we were doing more file I/O than needed.
* Implemented the ability to have PDF books. No reader functionality.
* Implemented a basic form of scanning for PDF files. Reworked Image based libraries to remove the need to separate in a special library and instead just work within the Manga/Comic library.
* Removed the old library types.
* Removed some extra code around old raw library types
* Fully implemented PDF support into Kavita by using docnet. Removed old libraries we tried that did not work. PDFs take about 200ms to save the file to disk, so they are much slower than reading archives.
* Refactored Libraries so that they can have any file extension and the UI will decide which reader to use.
* Reworked the Series Parsing code.
We now use a separate instance for each task call, so there should be no cross over if 2 tasks are running at the same time.
Second, we now store Format with the Series, so we can have duplicate Series with the same name, but a different type of files underneath.
* Fixed PDF transparency issues
- Used this code to fix an issue when a PDF page doesn't have a background. https://github.com/GowenGit/docnet/issues/8#issuecomment-538985672
- This also fixes the same issue for cover images
* Fixed an issue where if a raw image was in a directory with non-image files, those would get moved to cache when trying to open the file.
* For image extraction, if there is only 1 image, just copy that to cache instead of everything else in the directory that is an image.
* Add some spacing to the top menu bar
* Added an icon to the card to showcase the type of file
* Added a tag badge to the series detail page
* Fixed a bug in user preferences where dark mode control would default to true, even if you weren't on it
* Fixed some tests up
* Some code smells
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Cleaned up error interceptor to avoid sending auth errors (when a 500 occurs) to sentry as auth errors aren't issues.
* Added extra stat collection
* Fixed a bad gitignore which ignored anything in a stats directory
* Code cleanup, refactored FileRepository into Unit of Work.
* Added AutoCloseMenu and ReaderMode user perferences to match UI
* Added extra information to ChapterInfo
* Build changes
* Updated the readme to have open collective information and thanks to sponsors
* Fixed an issue with UnitOfWork refactor and how stats was bootsrapped. Replaced stats.kavitareader with a temp url to test out redirection bug.
* Implemented the ability to download files (series, volume, chapter)
* Added RBS checks to ensure user is either an admin or has download role
* Added the ability to change a users feature RBS. Changed the Role seed to use reflection