* Fixed the book reader off by one issue with loading last page
* Fixed a case where scanner would not delete a series if another series with same name but different format was added in that same scan.
* Added some missing tag generation (chapter language and summary)
* 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
* 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
* Fixed a case where chapter was being parsed incorrectly when the series title ends in a number.
* Updated Kavita to support Tome/T notation found in French comics
* Added support for identifying European specials and expanded support for cleaning some tags used in European comics. During cleaning, if series starts with - or comma, remove it.
* Fixed an issue where add to collection for a single series wasn't calling the bulk action handler
* Fixed a NPE on AgeRating conversion. Fixed a bug where when looking for cover image, file extensions was throwing off sort code.
* Refactored Natural Sort ordering to better follow how Windows behaves. This is a departure from how the original code executes.
* GetCachedPagePath now uses natural sorting to pick the images for reading in a more correct order.
* Updated parser to handle a case where there was more than one space as a separator
* 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.
* Implemented ability to see downloads users are performing on the events widget.
* Fixed a bug where version update task was calling wrong code
* Fixed a bug where when checking for updates, the event wouldn't be pushed to server with correct name.
Added update check to the event widget rather than opening a modal on the user.
* Relaxed password requirements to only be 6-32 characters and inform user on register form about the requirements
* Removed a ton of duplicate logic for series cards where the logic was already defined in action service
* Fixed OPDS total items giving a rounded number rather than total items.
* Fixed off by one issue on OPDS pagination
* 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.
* 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
* Updated some signatures to avoid a ToArray() within a loop.
* Use UpdateSeries directly when adding new series, rather than a modified version for new series only.
* Refactored some messages for scanner loop to reduce duplicate code and write messages more clear. Hooked in a RefreshMetadataProgress event (no UI changes).
* Fixed a bug on docker where backup service was using different logic than non-docker, which isn't needed after config change last release.
* Allow user to make more than 1 backup per day
* Implemented a select all checkbox for library access modal
* Fixed an issue where backups were failing due to files being in config directory
* Changed up the exception messages to be more clear when a unique constraint fails on adding a new series.
* Added the actual index that is causing the conflict.
* Fixed a bug where partial volume support got missed on the epub parser.
* When a drive is unavailable during when a scan starts, abort so user doesn't loose half library if their networked drive goes down.
* Moved format for card details to highest level (since all chapters/files have same format) and added date added to each file to help when new chapters/files are added and grouped into a volume.
* Implemented handling on the UI when a series is deleted
* Added case for series removal for series detail
* Only redirect for this series
* 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>
* 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
* Don't log a message about bad match if the file is a cover image
* Enable bulk operations for In Progress and Recently Added
* Fixed a bad logic case
* Do not allow non-admins to change their passwords when authentication is disabled
* Clean up the login page so that input field text is black
* cleanup some resizing when typing a password and having a lot of users
* Changed the LastActive for a user to not just be login, but also when they open an already authenticated session.
* Removed some verbose debugging statements and moved some debug to information to be more prevelant to logs for default installs.
* In Progress now sends progress information on the Series
* Add ability to add cards to recently added when new series are added in backend
* Implemented the ability to click the glasses icon to turn off incognito mode from within the reader so you can start tracking progress
* Don't warn the user about authentication when they don't touch that control
* Fixed some issues with base url. All Scheduled jobs are now in user's timezone
* Hide Base Url support from UI and removed some code around it on the backend to prevent it from interfering. Patched back in changes from base-href branch like Timezone on scheduled jobs and enhanced logging.
* Added parser support for "2000 AD 0366 [1984-04-28] (flopbie)" and removed for "01 Spiderman 01".
* 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
* When flattening directories, ensure the order or directories being enumerated follows a natural sort. Some users are discovering directories in a different order than other machines.
* Added a case for volume parsing and fixed a poorly designed negative lookahead.
Added a sentence case pipe for formatting things.
Added time for all dates.
* Some more sentence case
* Register user now has a white input
* Fixed an issue with Manga up/down reading mode where top of the page was going forwards, when it should have gone backwards
* Reworked some code to ensure that scanseries doesn't show errors where in fact there was just nothing to update.
* Last updated should be working as intended for new library flow.
* Code smell
* Fixed an issue where ScanSeries would not fetch all the entities and thus files would get duplicated on the Chapter
* Remove building extra language binaries on build.
* Fixed an issue where first scan would cause an issue with websocket due to trying to send NaN over the wire.
* Fixed an issue where on new scans scan in progress indicators wouldn't turn off due to the way we were consuming events off the pipe.
* Ensure login page doesn't flash on first load
* Don't process touch events at all unless selection is enabled.
* 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
* Warn the user about the dangers of refresh metadata and promote them to use a scan instead.
* Removed presence hub and moved it over to message hub.
When a library scan is in progress, now a spinner will show on manage libraries page.
* Code cleanup
* Some performance refactoring around getting Library and avoid a byte[] copy for getting cover images for epubs.
* Initial commit. Rewrote the main series scan loop to use chunks of data at a time. Not fully shaken out.
* Hooked in the ability for the UI to react to series being added or removed from the DB.
* Cleaned up the messaging in the scan loop to be more clear.
* Metadata scan and scan work as expected and populate data to the UI. There is a slow down in speed for overall operation.
Scan series and refresh series metadata does not work fully.
* Fixed a bug where MangaFiles were not having LastModified Updated correctly, meaning they were opening archives every scan.
* Modified the code to be more realistic to the underlying file
* Updated ScanService to properly handle deleted files and not result in a higher-level scan.
* Shuffled around volume related repo apis to the volume repo rather than being in series.
* Rewrote scan series to be much cleaner and more concise on the flow. Fixed an issue in UpdateVolumes such that the debug code to log out removed volumes could throw an exception and actually break updating volumes.
* Refactored the code to set MangaFile last modified timestamp into the MangaFile entity.
* Added Series Name to ScanSeries event
* Added additional checks in ScanSeries to ensure we never go outside the library folder.
Added extra debug messages for when a metadata refresh doesn't actually make changes and for when we regen cover images.
* More logging statements saying where they originate from. Fixed a critical bug which caused only 1 chunk to ever be processed.
* Fixed a concurrency issue with natural sorter which could cause issues in ArchiveService.cs.
* Log cleanups
* Fixed an issue with logging out total time of a scan.
* Only show added toastrs for admins. When kicking off a refresh metadata for series, make sure we regenerate all cover images.
* Code smells on benchmark despite it being ignored
* Added volume migrations. Added parser case for "Chapter 63 - The Promise Made for 520 Cenz.cbr"
* Added some info statements for when full library scans occur. For image apis, return the name of the file to aid in caching.
* When managing users, show the current logged in user at the top of the list. Added a message when no libraries have been setup but you are trying to add a user to a library.
* 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
* Added trackby so when series scan event comes through, cards can update too
* Added chapter boundary toasts on book reader
* Handle closing the reader when in a reading list
* Somehow the trackby save didn't happen
* Fixed an issue where after opening a chapter info modal, then trying to open another in specials tab it would fail due to a pass by reference issue with our factory.
* When a series update occurs, if we loose specials tab, but we were on it, reselect volumes/chapters tab
* Fixed an issue where older releases would show as available, even though they were already installed.
* Converted tabs within modals to use vertical orientation (except on mobile)
* Implemented webp support. Only Safari does not support this format natively. MacOS users can use an alternative browser.
* Refactored ScannerService and MetadataService to be fully async
* Added parser case for "The Duke of Death and His Black Maid - Ch. 177 - The Ball (3).cbz"
* Removed a file that is created and modified every test run.
* Fixed a bad parser case for "Batman Beyond 02 (of 6) (1999)" which was consuming too many characters
* Removed a lot of "Volume" parsing for Comics that don't make sense. This is prep work for the upcoming Comic Rework release.
* Reworked a lot of parsing cases for comics based on naming conventions observed from releases found online.
* Added a way for external scripts to use a user api key to authenticate
* Fixed an issue if the manga only had one page, the bottom menu would be missing page and chapter controls.
* Fixed a bug where on small phones, nav bar could overflow due to scroll to top
* Tweaked a lot of regex for manga parsing to handle some cases where poorly named files, like "Vol. 03 Ch. 21" would end up parsing as Series "Vol. 03".
* Even more handling of parser cases. Manga parser should be as it was but more robust to handle bad naming.
* Fixed: Don't force metadata refresh on Scan Series, only on refresh metadata
* Implemented the ability to automatically refresh after a series scan based on when server finishes. Remove a duplicate API call from series detail.
* Removed another API call for series metadata that isn't needed.
* Refactored Message creation to a factory, hardcoded strings are centralized, and RefreshSeriesMetadata sends an event and is refactored to be async.
* Fixed a bug when really poorly named files are within a folder that contains the series name, fallback couldn't occur due to it being taken as root folder. Now we detect said condition and will go one level higher, resulting in potentially more I/O, but the series will not be deleted.
* Added the Read in Incognito context item for Chapter cards
* Skip an additional check for series summary for series that aren't EPUB or Archive formats.
* Fixed an issue where cover image generation could occur due to a bad check on LastWriteTime on the underlying file.
* Added some extra comic parser tests
* Added a ScanLibrary event (not hooked up in UI)
* Performance improvement on metadata service. Now when we scan for cover image changes, we emit when a change occurs and only then do we update parent entities (array copy).
* Removed an hr from series detail and ensure we update the cover image for series when scan series finishes.
* Updated the infinite scroller to use a Flags pattern for the debug mode. Updated a few logical conditions for mobile.
* Removed the concurrency check on row progress as if too many calls hit the DB, it will throw, but it doesn't matter.
Fixed a bad logic code which could cause scrolling after hitting the bottom of the chapter.
* Ensure prefetching uses totalPages + 1 since we pass in totalPages as - 1 from manga reader
* Fixed issue where last page of webtoon wouldn't be prefetched due to a < instead of <= on prefetching code
* Implemented ability to send images from archives to the UI without incurring any extra memory pressure.
* Dropdown menus now have a darker background
* Webtoon reader now works on mobile.
* Fixed how keyboard presses for up/down/left/right work with MANGA_UD reading mode. See issue #579
* Fixed cont reader for webtoons on mobile
* Fixed a small issue where top spacer would too quickly switch to prev chapter
* Updated user preferences to use same slider style. Removed some css that is not used.
* Added comic parser case for "Saga 001 (2012) (Digital) (Empire-Zone)"
* Added accessibility toggle to reading list order and aligned sliders to all use the same style.
* Removed a todo for checking on new image serving code. It works great.
* Fixed a missing await
* Auth guard will now check if an existing toast is present giving same message before poping the toast.
* Fixed alignment on phones for reading lists
* Moved sorters so they aren't resused between multiple threads. Slightly higher memory footprint.
* Fixed a broken unit test
* Code smells
* More unit test fixing
* Refactored the scanner to hopefully fix a hard to reproduce KeyNotFoundException from GetInfosByName.
* Added parsing support for "A Compendium of Ghosts - 031 - The Third Story_ Part 12 (Digital) (Cobalt001)"
* 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
* Removed directives, ensured we delete bookmarks and reading list items when chapters are deleted.
* Added parsing support for "Kimi no Koto ga Daidaidaidaidaisuki na 100-nin no Kanojo Chapter 11-10"
* 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
* Cover generation issue on first scan flow
- Fixed logic around whether a chapter cover image should be generated. New logic adds grouping priority, changes an AND to an OR and adds an additional check to see if the cover image has been lock (custom image uploaded)
* Sonar update
* Refactored out the cover image updating logic to a new call (ShouldUpdateCoverImage) and updated ONLY chapters. Added a blank slate unit test to build out conditions.
* Fixed up unit case
* Fixed some logic on when to update a cover image
* Fixed an issue where 1) we were refreshing metadata anytime we adjusted cover image on a series and 2) Cover generation wasn't properly being handled on first run.
* Cleaned up the code for when a cover image change needs to trigger a refresh metadata task
Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>
* 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