* Have language from epubs populate metadata
* series detail needs to reload the underlying volumes when scan event comes in, not just metadata.
* Added Id to chapter detail modal (for debugging)
* Implement IDisposable on applicable Unit Tests
* Removed unused using statements
* Fixed a bug where images would flash like crazy during a scan because the code to refresh the underlying image wasn't checking the entity type or Id.
* When filtering rating, only apply the filter to your account.
* Removed Disposable on tests
* Tweaked how the migration to change users with ChangePassword role happens. It will now only run once.
* Refactored bookmarks into it's own service with unit tests. Bookmark management happens in real time and we no longer delete bookmarks on a schedule. This means once you bookmark something, even if you delete the entity, the files will remain.
* Commented out a test that no longer is needed
* 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.
* Fixed some security issues in dev env
* When deleting folders in bookmark cleanup, delete empty folders correctly.
* When a new library is created and cards are added, cards can have a blank library name. Card library name code is reworked to be much lighter on memory.
* Added a config for github issues to disable blank issues.
* Skip any sort of directory iteration code if we haven't deleted any bookmarks.
* Fixed a bug where some style overrides were duplicating. Now logic is much more targetted, only applying to the correct tags.
* Applied sorting to the filtering apis.
* Reverted one of my changes for a better version Robbie did.
* Added a lot of tests
* More tests! Added a Parser.NormalizePath to normalize all paths within Kavita.
* Fixed a bug where MarkChaptersAsUnread implementation wasn't consistent between different files and lead to extra row generation for no reason.
* Added more unit tests
* Found a better implementation for Natural Sorting. Added tests and validate it works. Next commit will swap out natural Sort for new Extension.
* Replaced NaturalSortComparer with OrderByNatural.
* Drastically simplified and sped up FindFirstEntry for finding cover images in archives
* Initial fix for a epub bug where metadata defines key as absolute path but document uses a relative path. We now have a hack to correct for the epub.
* 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
* 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
* 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
* Implemented a new widget to show when operations are occuring in the backend (tasks + progress events). Fixed an oversight on progress reporting where I sent 100F instead of 1F.
* Hooked in more progress events for tasks on the backend. Cleaned up code and integrated some RBS into it. CSS needed.
* Show a colored icon when events are active
* Added some styling to the progress widget
* Refactored all the config files for Kavita to be loaded from config/. This will allow docker to just mount one folder and for Update functionality to be trivial.
* Cleaned up documentation around new update method.
* Updated docker files to support config directory
* Removed entrypoint, no longer needed
* Update appsettings to point to config directory for logs
* Updated message for docker users that are upgrading
* Ensure that docker users that have not updated their mount points from upgrade cannot start the server
* Code smells
* More cleanup
* Added entrypoint to fix bind mount issues
* Updated README with new folder structure
* Fixed build system for new setup
* Updated string path if user is docker
* Updated the migration flow for docker to work properly and Fixed LogFile configuration updating.
* Migrating docker images is now working 100%
* Fixed config from bad code
* Code cleanup
Co-authored-by: Chris Plaatjes <kizaing@gmail.com>
* 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
* Updating wording on card item when total pages is 0, to be just "Cannot Read" since it could be a non-archive file
* Refactored cover images to be stored on disk. This first commit has the extraction to disk and the metadata service to handle updating when applicable.
* Refactored code to have the actual save to cover image directory done by ImageService.
* Implemented the ability to override cover images.
* Some cleanup on Image service
* Implemented the ability to cleanup old covers nightly
* Added a migration to migrate existing covers to new cover image format (files).
* Refactored all CoverImages to just be the filename, leaving the Join with Cover directory to higher level code.
* Ensure when getting user progress, we pick the first.
* Added cleanup cover images for deleted tags. Don't pull any cover images that are blank.
* After series update, clear out cover image. No change on UI, but just keeps things clear before metadata refresh hits
* Refactored image formats for covers to ImageService.
* Fixed an issue where after refactoring how images were stored, the cleanup service was deleting them after each scan.
* Changed how ShouldUpdateCoverImage works to check if file exists or not even if cover image is locked.
* Fixed unit tests
* Added caching back to cover images.
* Caching on series as well
* Code Cleanup items
* Ensure when checking if a file exists in MetadataService, that we join for cover image directory. After we scan library, do one last filter to delete any series that have 0 pages total.
* Catch exceptions so we don't run cover migration if this is first time run.
* After a scan, only clear out the cache directory and not do a deep clean.
* Implemented the ability to backup custom locked covers only.
* Fixed unit tests
* Trying to figure out why GA crashes when running MetadataServiceTests.cs
* Some debugging on GA tests not running
* Commented out tests that were causing issues in GA.
* Fixed an issue where series cover images wouldn't migrate
* Fixed the updating of links to actually do all series and not just locked
* Removed some extra spam for the console
* Implemented the code to update RowVersion, which is our concurrency check
* Fixed a critical issue where more than one bookmark could occur for a given chapter due to a race condition. Now we use concurrency checks and we also gracefully allow more than one row, by only grabbing first.
* Cleaned up the logic for IHasConcurencyToken and updated the setters to be private.
* Lots of comments and when deleting a library, remove any user progress items for which chapters don't exist.
* When deleting a Series, cleanup user progress rows.
* Now after a scan of library, if a series is removed, collection tags are pruned as well if there are no longer any series bound to it.
* Updated the image on the Readme to show a better picture
* Small code cleanup to remove null check modifier as I check for null just before then
* Fixed images loading multiple times due to using function in binding with random. You can now click chapter images to read that chapter specifically.
* Fixed cards being different sizes when read vs unread
* Moved over Robbie's workflow changes from notifier. Commented out activity indicators as that is not shipping with this release.
* Remove code that isn't needed
* Reverted GA
* Changed GA to trigger only when HEAD is updated