* Refactored the way cover images are updated from SignalR to use an explicit event that is sent at a granular level for a given type of entity.
Fixed a bad event listener for RefreshMetadata (now removed) to update metadata on Series Detail. Now uses ScanService, which indicates a series has completed a scan.
* Lots of attempts at making webtoon stable. Kinda working kinda not.
* Added a new boolean to hide images until the first prefetch loads the images, to prevent jankiness
* On Search, remove : from query
* Added HasBookmark and NumberOfLibraries to stat service
* Cleaned up some dead code
* Fixed a bug where page number wasn't reset between chapter loads with infinite scroller
* Added recently added series back into the dashboard.
* Cleaned up some code in search bar
* Added ServerSettingKey's for SMTP and moved email service code to Kavita. Nothing integrated in the UI yet.
* Undo all the custom SMTP stuff and prepare for custom email service url.
* Foundation for email service to use a custom url is setup.
* Implemented the ability to hook up custom email url
* 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
* 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.
* Refactored Stats code to be much cleaner and user better naming.
* Cleaned up the actual http code to use Flurl and to return if the upload was successful or not so we can delete the file where appropriate.
* More refactoring for the stats code to clean it up and keep it consistent with our standards.
* Removed a confusing log statement
* Added support for old api key header from original stat server
* Use the correct endpoint, not the new one.
* Code smell
* Fixed opds url display
* Rewrote how stat collection works, now we check in multiple places and always run stat collection in a background thread, to not block main thread.
* Cleaned up the ParseInfoTest to be more verbose
* Added benchmarking
* Don't show bookmark context actionable for books
* Fixed an issue where when adding a collection tag, the logic wouldn't assume the tag already existed in DB and would reset it.
* After editing a series on library page, ensure we refresh collection tags.
* Reload recently added section after changing a series
* Moved all Stat logger events to Debug
* Refactored scroll logic into a single service to keep the code consistent.
* 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