* Updated number inputs with a more mobile friendly control
* Started writing lots of unit tests on PersonHelper to try and hammer out foreign constraint
* Fixes side-nav actionable alignment
* Added some unit tests
* Buffed out the unit tests
* Applied input modes throughout the app
* Fixed a small bug in refresh token validation to make it work correctly
* Try out a new way to block multithreading from interacting with people during series metadata update.
* Fixed the lock code to properly lock, which should help with any constraint issues.
* Locking notes
* Tweaked locking on people to prevent a constraint issue. This slows down the scanner a bit, but not much. Will tweak after validating on a user's server.
* Replaced all DBFactory.Series with SeriesBuilder.
* Replaced all DBFactory.Volume() with VolumeBuilder
* Replaced SeriesMetadata with Builder
* Replaced DBFactory.CollectionTag
* Lots of refactoring to streamline entity creation
* Fixed one of the unit tests
* Refactored all of new Library()
* Removed tag and genre
* Removed new SeriesMetadata
* Refactored new Volume()
* MangaFile()
* ReadingList()
* Refactored all of Chapter and ReadingList
* Add title to all event widget flows
* Updated Base Url to inform user it doesn't work for docker users with non-root user.
* Added unit test coverage to FormatChapterTitle and FormatChapterName.
* Started on Unit test for scanner, but need to finish it later.
---------
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Added playwright and started writing e2e tests.
* To make things easy, disabled other browsers while I get confortable. Added a login flow (assumes my dev env)
* More tests on login page
* Lots more testing code, trying to figure out auth code.
* Ensure we don't track DBs inside config
* Added a new date property for when chapters are added to a series which helps with OnDeck calculations. Changed a lot of heavy api calls to use IEnumerable to stream repsonse to UI.
* Fixed OnDeck with a new field for when last chapter was added on Series. This is a streamlined way to query.
Updated Reading List with NormalizedTitle, CoverImage, CoverImageLocked.
* Implemented the ability to read a random item in the reading list and for the reading list to be intact for order.
* Tweaked the style for webtoon to not span the whole width, but use max width
* When we update a cover image just send an event so we don't need to have logic for when updates occur
* Fixed a bad name for entity type on cover updates
* Aligned the edit collection tag modal to align with new tab design
* Rewrote code for picking the first file for metadata to ensure it always picks the correct file, esp if the first chapter of a series starts with a float (1.1)
* Refactored setting LastChapterAdded to ensure we do it on the Series.
* Updated Chapter updating in scan loop to avoid nested for loop and an additional loop.
* Fixed a bug where locked person fields wouldn't persist between scans.
* Updated Contributing to reflect how to view the swagger api
* 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.