* Swapped out SQLite for Memory, but the one from hangfire. Added DisableConcurrentExecution on ProcessChange to avoid duplication when multiple threads execute at once.
* Fixed the Hangfire SQL issues with CPU/ram utilization some users are facing
* Fixed a case in SharpCompress fallback where an invalid ComicInfo wasn't picked up.
* When parsing epubs, if there is a volume in the epub title, try to parse and group. This is beneficial for Light Novels which are generally tagged this way.
* Fixed delete series in series detail not triggering
* Fixed some parsing logic for how we treat specials, like Annual and Omnibus.
* When scanning files, if the file is the cover image (loose leaf image), we reject it more quickly than previously.
* Added a potential bug marker
* Fixed a bug where Info was only showing Error level loggers
* Code smells
* Updated swiper and some packages for reported security issues
* Fixed reading lists promotion not working
* Refactor RenameFileForCopy to use iterative recursion, rather than functional.
* Ensured that bookmarks are fetched and ordered by Created date.
* Fixed a bug where bookmarks were coming back in the correct order, but due to filenames, would not sort correctly.
* Default installs to Debug log level given errors users have and Debug not being too noisy
* Added jumpbar to bookmarks page
* Now added jumpbar to bookmarks
* Refactored some code into pipes and added some debug messaging for prefetcher
* Try loading next and prev chapter's first/last page to cache so it renders faster
* Updated GetImage to do a bound check on max page.
Fixed a critical bug in how manga reader updates image elements src to prefetch/load pages. I was not creating a new reference which broke Angular's ability to update DOM on changes.
* Refactored the image setting code to use a single method which tries to use a cached image always.
* Refactored code to use getPage which favors cache and simplifies image creation code
* Fixed an issue where migrate-email could be called when an admin already existed
* When logging in, ensure there is no bias towards username or password when rejecting
* Cleaned up some messaging around anonymous apis to ensure there are no attack vectors.
* Fixed a bug where bulk selection on series detail wouldn't allow you to select the whole card, only the checkbox.
* Refactored the implementation of MarkChaptersAsRead to streamline it.
* Fixed a bug where volume cards weren't properly updating their read state based on events from backend.
* Added [ScannerService] to more loggers
* Fixed invite user flow
* Fixed broken edit user flow
* Fixed calling device service on unauthenticated screens causing redirection
* Fixed reset password via email not working when success message was sent back
* Fixed broken white theme on book reader
* Small tweaks to white theme
* More fixes
* Adjusted AutomaticRetries
* When an auth change occures, reset the devices in service so devices don't leak between profiles
* Fixed a bug where sendTo for series wasn't properly taking into account specials (on series detail page)
* Drop down how long series detail caches for to prevent signalr updates from refreshing the UI
* Close submenus when hovering over other items, not just other submenus
* Fixed a bug where scanning for themes would always report theme didn't exist
* Added Hangfire.db back in
* Fixed a bad build
* Fixed a bug where bulk selection on series detail wouldn't allow you to select the whole card, only the checkbox.
* Refactored the implementation of MarkChaptersAsRead to streamline it.
* Fixed a bug where volume cards weren't properly updating their read state based on events from backend.
* Added [ScannerService] to more loggers
* Fixed invite user flow
* Fixed broken edit user flow
* Fixed calling device service on unauthenticated screens causing redirection
* Fixed reset password via email not working when success message was sent back
* Fixed broken white theme on book reader
* Small tweaks to white theme
* More fixes
* Adjusted AutomaticRetries
* Fixed a bad color on the PWA titlebar
* Added more unit tests, cleaned up some dead code, and made it so when age restriction is Not Applicable, the Unknowns field disables
* Don't show an empty menu when user has no permissions
* Fixed deleting a library with relation causing library deleting to fail
* Consolidated some includes code into one method for Series Repo
* Small fixes
* Fixed an issue where reading list were not able to update their summary due to a duplicate title check.
* Misc code smell cleanup
* Updated .net dependencies and removed unneeded ones
* Fixed an issue where removing a series from want to read list page wouldn't update the page correctly
* Fixed age restriction not applied to Recommended page
* Ensure that Genres and Tags are age restricted gated
* Persons are now age gated as well
* When you choose a cover, the new cover will properly be selected and will focus on it, in the cases there are many other covers available.
* Fixed caching profiles
* Added in a special hook when deleting a library to clear all series Relations before we delete
* Fixed a scaling issue in the epub reader, where images could scale when they shouldn't.
* Removed some caching on library/ api and added more output for a foreign key constraint
* Hooked in Restricted Profile stat collection
* Added a new boolean on age restrictions to explicitly allow unknowns or not. Since unknown is the default state of metadata, if users are allowed access to Unknown, age restricted content could leak.
* Fixed a bug where sometimes series cover generation could fail under conditions where only specials existed.
* Fixed foreign constraint issue when cleaning up series not seen at end of scan loop
* Removed an additional epub parse when scanning and handled merging differently
* Code smell
* Moved UpdateRelatedSeries from controller to SeriesService.cs
* Added 2 tests.
- UpdateRelatedSeries_ShouldDeletePrequelRelation
- UpdateRelatedSeries_ShouldNotAllowDuplicates
* Some docs and codestyle nitpicks
* Simplified tests and made easier to read
* Added 'Editions' series relation
* Missing code to properly show the relations in the UI
* Create Service for GetRelatedServices
* Added unit test. Assert Edition, Prequel and Sequel do not return parent while others do
* fixed missing userRating
* Add requested changes:
- Rename one test
- Split one test into two tests
* Fixed a bug with RBS on non-admin accounts
* Fixed a bug where get next/prev chapter wouldn't respect floating point volume numbers
* Fixed a bad migration version check
* When building kavita ignore exclusions, ignore blank lines.
* Hooked up the GetFullSeriesByAnyName to check against OriginalName exactly
* Refactored some code for building ignore from library root, to keep the code cleaner
* Tweaked some messaging
* Fixed a bad directory join when a change event occurs in a nested series folder.
* Fixed a bug where cover generation would prioritize a special if there were only chapters in the series.
* Fixed a bug where you couldn't update a series modal if there wasn't a release year present
* Fixed an issue where renaming the Series in Kavita wouldn't allow ScanSeries to see the files, and thus would delete the Series.
* Added an additional check with Hangfire to make sure ScanFolder doesn't kick off a change when a bunch of changes come through for the same directory, but a job is already running.
* Added more documentation
* Migrated more response caching to profiles and merged 2 apis into one, since they do the same thing.
* Fixed a bug where NotApplicable age ratings were breaking Recently Updated Series
* Cleaned up some cache profiles
* More caching
* Provide response caching on Get Next/Prev Chapter
* Code smells
* Added ReadingList age rating from all series and started on some unit tests for the new flows.
* Wrote more unit tests for Reading Lists
* Added ability to restrict user accounts to a given age rating via admin edit user modal and invite user. This commit contains all basic code, but no query modifications.
* When updating a reading list's title via UI, explicitly check if there is an existing RL with the same title.
* Refactored Reading List calculation to work properly in the flows it's invoked from.
* Cleaned up an unused method
* Promoted Collections no longer show tags where a Series exists within them that is above the user's age rating.
* Collection search now respects age restrictions
* Series Detail page now checks if the user has explicit access (as a user might bypass with direct url access)
* Hooked up age restriction for dashboard activity streams.
* Refactored some methods from Series Controller and Library Controller to a new Search Controller to keep things organized
* Updated Search to respect age restrictions
* Refactored all the Age Restriction queries to extensions
* Related Series no longer show up if they are out of the age restriction
* Fixed a bad mapping for the update age restriction api
* Fixed a UI state change after updating age restriction
* Fixed unit test
* Added a migration for reading lists
* Code cleanup
* Cleanup some messaging in the scan loop to be more context bearing
* Added Response Caching to Series Detail for 1 min, due to the heavy nature of the call.
* Refactored code to make it so that processing of series runs sync correctly.
Added a log to inform the user of corrupted volume from buggy code in v0.5.6.
* Moved folder watching out of experimental
* Fixed an issue where empty folders could break the scan loop
* Another fix for when dates aren't valid, the scanner wouldn't get the proper min and would throw an exception (develop)
* Implemented the ability to edit release year from the UI for a series.
* Added a unit test for some new logic
* Code smells
* Rewrote the handler for suspending watching to be more resilient and ensure no two threads have a race condition.
* More error handling for when a ScanFolder is invoked but multiple series belong to that folder, log it to the user and default to a library scan.
* ScanSeries now will check for kavitaignores higher than it's own folder and respect library level.
* Fixed an issue where image series with a folder name containing the word "folder" could get ignored as it thought the image was a cover image.
When a series folder is moved or deleted, skip parent ignore finding.
* Removed some old files, added in scanFolder a check if the series found for a folder is in a book library and if so to always do a library scan (as books are often nested into one folder with multiple series). Added some unit tests
* Refactored some scan loop logic into ComicInfo, wrote tests and updated some documentation to make the fields more clear.
* Added a test for GetLastWriteTime based on recent bug
* Cleaned up some redundant code
* Fixed a bad merge
* Code smells
* Removed a package that's no longer used.
* Ensure we check against ScanQueue on ScanFolder enqueuing
* Documentation and more bullet proofing to ensure Hangfire checks work more as expected
* Cleanup some messaging in the scan loop to be more context bearing
* Added Response Caching to Series Detail for 1 min, due to the heavy nature of the call.
* Refactored code to make it so that processing of series runs sync correctly.
Added a log to inform the user of corrupted volume from buggy code in v0.5.6.
* Moved folder watching out of experimental
* Fixed an issue where empty folders could break the scan loop
* Another fix for when dates aren't valid, the scanner wouldn't get the proper min and would throw an exception (develop)
* Implemented the ability to edit release year from the UI for a series.
* Added a unit test for some new logic
* Code smells
* Introduced a lock for DB work during the scan to hopefully reduce the concurrency issues
* Don't allow multiple theme scans to occur
* Fixed bulk actions not having all actions due to nested actionable menu changes
* Refactored the Scan loop to be synchronous to avoid any issues. After first loop, no real performance issues.
* Updated the LibraryWatcher when under many internal buffer full issues, to suspend watching for a full hour, to allow whatever downloading to complete.
* Removed Semaphore as it's not needed anymore
* Updated the output for logger to explicitly say from Kavita (if you're pushing to Seq)
* Fixed a broken test
* Fixed ReleaseYear not populating due to a change from a contributor around how to populate ReleaseYear.
* Ensure when scan folder runs, that we don't double enqueue the same tasks.
* Fixed user settings not loading the correct tab
* Changed the Release Year -> Release
* Added more refresh hooks in reader to hopefully ensure faster refreshes
* Reset images between chapter loads to help flush image faster. Don't show broken image icon when an image is still loading.
* Fixed the prefetcher not properly loading the correct images and hence, allowing a bit of lag between chapter loads.
* Code smells
* Hooked up Send to for Series and volumes and fixed a bug where Email Service errors weren't propagating to the UI layer.
When performing actions on series detail, don't disable the button anymore.
* Added send to action to volumes
* Fixed a bug where .kavitaignore wasn't being applied at library root level
* Added a notification for when a device is being sent a file.
* Added a check in forgot password for users that do not have an email set or aren't confirmed.
* Added a new api for change email and moved change password directly into new Account tab (styling and logic needs testing)
* Save approx scroll position like with jump key, but on normal click of card.
* Implemented the ability to change your email address or set one. This requires a 2 step process using a confirmation token. This needs polishing and css.
* Removed an unused directive from codebase
* Fixed up some typos on publicly
* Updated query for Pending Invites to also check if the user account has not logged in at least once.
* Cleaned up the css for validate email change
* Hooked in an indicator to tell user that a user has an unconfirmed email
* Cleaned up code smells
* Fixed inputs not showing inline validation due to a missing class
* Fixed some checks
* Increased the button size on manga reader (develop)
* Migrated a type cast to a pure pipe
* Sped up the check for if SendTo should render on the menu
* Don't allow user to bookmark in bookmark mode
* Fixed a bug where Scan Series would skip over Specials due to how new scan loop works.
* Fixed scroll to top button persisting when navigating between pages
* Edit Series modal now doesn't have a lock field for Series, which can't be locked as it is inheritently locked.
Added some validation to ensure Name and SortName are required.
* Fixed up some spacing
* Fixed actionable menu not opening submenu on mobile
* Cleaned up the layout of cover image on series detail
* Show all volume or chapters (if only one volume) for cover selection on series
* Don't open submenu to right if there is no space
* Fixed up cover image not allowing custom saves of existing series/chapter/volume images.
Fixed up logging so console output matches log file.
* Implemented the ability to turn off css transitions in the UI.
* Updated a note internally
* Code smells
* Added InstallId when pinging the email service to allow throughput tracking
* Added Some Korean Volume Matches
* Fixed Typo And Added Test Cases
* Restore Chapter Decimal Support
* Added Decimal Volume Support to -권, -화, -회 and -장
Merged -권 Pattern to -화, -회, -장 Pattern
Added Decimal Test to ParseVolumeTest
* Grouped Korean Tests
* Fixed Regexp Comment
* Tweaked the logging output
* Started implementing some basic idea for devices
* Updated Email Service with new API routes
* Implemented basic DB structure and some APIs to prep for the UI and flows.
* Added an abstract class to make Unit testing easier.
* Removed dependency we don't need
* Updated the UI to be able to show devices and add new devices. Email field will update the platform if the user hasn't interacted with it already.
* Added ability to delete a device as well
* Basic ability to send files to devices works
* Refactored Action code to pass ActionItem back and allow for dynamic children based on an Observable (api).
Hooked in ability to send a chapter to a device. There is no logic in the FE to validate type.
* Fixed a broken unit test
* Implemented the ability to edit a device
* Code cleanup
* Fixed a bad success message
* Fixed broken unit test from updating mock layer
* Fallback to other locations when ComicInfo.xml not at root of archive
* Better ComicInfo test coverage and benchmarks
* Add a rar archive to the ComicInfo test cases
* Fixed entrypoint writing bad json (from develop)
* Fixed a bug where log file could write out a crap ton of information (serializing Series object) when a db error occurs.
* Fixed an issue with scan loop where concurrency issues could occur on new series being added.
* Tweaked the logger to suppress some noisy logs when using Debug log level.
* Fixed a regression with epub parsing from v3.2 of Vers-One's release
* Fixed up folder watching to work more reliable. Validated in production.
* Code cleanup
* Moved logic from TachiyomiController.cs to TachiyomiService.cs
* Added GetLatestChapter Unit Tests
* Tachiyomi more tests.
Implemented test for yearly volumes
* MarkVolumesUntilAsRead unit test
* Registered tachiyomi service.
Added new test
* Fixed test pages
* Added missing check if its single-file volume
* Removed dead code
* Added method documentation and breaked thousands with `_`
* Review details and renamed test method to be more descriptive
* Review changes
- Removed automapper
- Added spaces after commas
- Added class documentation (copied from controller)
- Made Culture static
- Added 'R' doc linking to docs.ms
- Added trycatch to service when saving progress and logged
- Removed redundant qualifiers
* finishing touches
Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>
* Optimize CleanTitle
* Optimize MangaEditionRegex
* Optimize special regexes
* Refactor manga|comic special parsing into simple tests
* Word bind the special regexps. Support additional "special" use cases.
* Updates to address PR comments
* CleanTitle benchmarking
* Use a smaller Comics Data set for benchmarking
* Moved LibraryWatcher to utilize a queue for calculating the change event to ensure the Watcher doesn't get overwhelmed on large moves.
* Fixed a security vulnerability (https://huntr.dev/bounties/8a3e652f-d6bf-436e-877e-0eaf5c69ef95/). This will be disclosed in Stable release changelog.
* Tweaked the log message template
* Removed some dead code from Configuration json patcher
* Fixed a bug with the ComicInfo finding to properly handle root level.
Fixed a bug where sometimes scanner wouldn't choose the first file with ComicInfo for filling out information.
* Added new setting for managing how many logs files are allowed, just like how backups work.
* Added unit tests for new CleanupLogs code
* Fixed a bug where manga reader background color wasn't actually sending from the UI
* Added new stats for tracking to help understand usage in the app and what features are used or not.
* Fixed Stats url
* Fixed a bug where volumes that had larger than 1 difference wouldn't properly return next/prev chapter (for continuous reader)
* Remove a redundant test step in build pipeline, since it's already done at PR stage.
* Updated dockerfile to use the new Heath check endpoint
* Allow force to pass through to scan loop
* Removed some old config stuff from a safety check on config in entrypoint.sh
* Fixed broken unit tests due to new RBS check and how we setup mock data.
* Updated a typo in manage tasks of Reoccuring -> Recurring
* Fixed a bug in MinimumNumberFromRange where a regex wasn't properly constructed which could skew results.
* Fixed a bug where Volume numbers that were a float wouldn't render correctly in the manga reader menu.
* Added the ability to double click on the image to bookmark it. Optimized the bookmark and unbookmark flows to remove 2 DB calls and reworked some flow of calls to speed it up.
Fixed some logic where when using double (manga) flow, both of the images wouldn't show the bookmark effect, despite both of them being saved. Likewise, fixed a bug where both images weren't updating UI state, so switching from double (manga) to single, the second image wouldn't show as bookmarked without a refresh.
* Double click works perfectly for bookmarking
* Collection cover image chooser will now prompt with all series covers by default.
Reset button is now moved up to the first slot if applicable.
* When a Completed series is fully read by a user, a nightly task will now remove that series from their Want to Read list.
* Added ability to trigger Want to Read cleanup from Tasks page.
* Moved the brightness readout to the label line and fixed a bootstrap migration bug where small buttons weren't actually small.
* Implemented ability to filter against release year (min or max or both).
* Fixed a log message that wasn't properly formatted when scan finished an no files changes.
* Cleaned up some code and merged some methods
* Implemented sort by Release year metadata filter.
* Fixed the code that finds ComicInfo.xml inside archives to only check the root and check explicitly for casing, so it must be ComicInfo.xml.
* Dependency updates
* Refactored some strings into consts and used TriggerJob rather than just enqueuing
* Fixed the prefetcher which wasn't properly loading in the correct order as it was designed.
* Cleaned up all traces of CircularArray from MangaReader
* Removed a debug code
* Fixed a bug with webtoon reader in fullscreen mode where continuous reader wouldn't trigger
* When cleaning up series from users' want to read lists, include both completed and cancelled.
* Fixed a bug where small images wouldn't have the pagination area extend to the bottom on manga reader
* Added a new method for hashing during prod builds and ensure we always use aot
* Fixed a bug where the save button wouldn't enable when color change occured.
* Cleaned up some issues in one of contributor's PR.
* Fix XML deserialization of empty elements to integers
* Fix assumption that environment uses US time format
* Use series name as SeriesSort in epub
* Address some PR comments
* Add partial Equals(0 implementation to ComicInfo
* Update ComicInfo unittest. Revert previous version
* Moved the data connection for the Database out of appsettings.json and hardcoded it. This will allow for more customization and cleaner update process.
* Removed unneeded code
* Updated pdf viewer to 15.0.0 (pdf 2.6), which now supports east-asian fonts
* Fixed up some regex parsing for volumes that have a float number.
* Fixed a bug where the tooltip for Publication Status wouldn't show
* Fixed some weird parsing rules where v1.1 would parse as volume 1 chapter 1
* Fixed a bug where bookmarking button was hidden for admins without bookmark role (due to migration)
* Unified the star rating component in series detail to match metadata filter.
* Fixed a bug in the bulk selection code when using shift selection, where the inverse of what was selected would be toggled.
* Fixed some old code where if on all series page, only English as a language would return. We now return all languages of all libraries.
* Updated api/metadata/languages documentation
* Refactored some bookmark api names: get-bookmarks -> chapter-bookmarks, get-all-bookmarks -> all-bookmarks, get-series-bookmarks -> series-bookmarks, etc.
* Refactored all cases of createSeriesFilter to filterUtiltityService.
Added ability to search for a series on Bookmarks page.
Fixed a bug where people filters wouldn't respect the disable flag froms ettings.
* Cleaned up a bit of the circular downloader code.
* Implemented Russian Parsing
* Fixed an issue where some users that had a missing theme entry wouldn't be able to update their user preferences.
* Refactored normalization to exclude !, thus allowing series with ! to be different from each other.
* Fixed a migration exit case
* Fixed broken unit test
* Recreated Kavita Logging with Serilog instead of Default. This needs to be move out of the appsettings now, to allow auto updater to patch.
* Refactored the code to be completely configured via Code rather than appsettings.json. This is a required step for Auto Updating.
* Added in the ability to send logs directly to the UI only for users on the log route. Stopping implementation as Alerts page will handle the rest of the implementation.
* Fixed up the backup service to not rely on Config from appsettings.json
* Tweaked the Logging levels available
* Moved everything over to File-scoped namespaces
* Moved everything over to File-scoped namespaces
* Code cleanup, removed an old migration and changed so debug logging doesn't print sensitive db data
* Removed dead code
* Allow .NET to optimize code as it's running.
* Implemented the ability to restrict users Bookmark ability. By default, users will need to now opt-in to get bookmark roles.
* Fixed a tachiyomi progress syncing logic bug
* Tweaked log messaging for library scan when no files were scanned.
* When a theme that is set gets removed due to a scan, inform the user to refresh.
* Fixed a typo and make Darkness -> Brightness
* Make download theme files allowed to be invoked by non-authenticated users, to allow new users to get the default theme.
* Hide all series side nav item if there are no libraries exposed to the user
* Fixed an API for Tachiyomi when syncing progress
* Fixed dashboard not responding to Series Removed and Added events.
Ensure we send SeriesRemoved events when they are deleted.
* Reverted Hangfire SQLite due to aborted jobs being resumed, when they shouldnt. Fixed some scan loop issues where cover gen wouldn't be invoked always on new libraries.
* Added a no data section to collection detail.
* Remove an optimization for skipping the whole library scan as it wasn't reliable
* When resetting password, ensure the input is colored correctly
* Fixed setting new password after resetting, throwing an error despite it actually being successful.
Fixed incorrect messaging for Password Reset page.
* Fixed a bug where reset password would show the side nav button and skew the page.
Updated a lot of references to use Typed version for formcontrols.
* Removed a migration from 0.5.0, 6 releases ago.
* Added a null check so we don't throw an exception when connecting with signalR on unauthenticated users.
* Refactored invite user flow to separate error handling on create user flow and email flow. This should help users that have unique situations.
* Switch to using files to check LastWriteTime. Debug code in for Robbie to test on rclone
* Updated Parser namespace. Changed the LastWriteTime to check all files and folders.
* Fixed a bug where typeahead wouldn't automatically show results on relationship screen without an additional click.
* Tweaked the code which checks if a modification occured to check on seconds rather than minutes
* Clear cache will now clear temp/ directory as well.
* Fixed an issue where Chrome was caching api responses when it shouldn't had.
* Added a cleanup temp code
* Ensure genres get removed during series scan when removed from metadata.
* Fixed a bug where all epubs with a volume would show as Volume 0 in reading list
* When a scan is in progress, don't let the user delete the library.
* Update to use SQLIte for Hangfire to retain information on tasks
* Updated all external links to have noopener noreferrer
* When watching folders, ensure the folders exist before creating watchers.
* Tweaked the messaging for Email Service and added link to the project.
* Sort series by chapter number only when some chapters have no volume information
* Implement a Default static instance of ChapterSortComparer
* Further use Default static Comparers
* Add missing ToLit() as per comments
* Refactored Library Watcher to use Hangfire under the hood.
* Support .kavitaignore at root level.
* Refactored a lot of the library watching code to process faster and handle when FileSystemWatcher runs out of internal buffer space. It's still not perfect, but good enough for basic use.
* Make folder watching as experimental and default it to off by default.
* Revert #1479
* Tweaked the messaging for OPDS to remove a note about download role.
Moved some code closer to where it's used.
* Cleaned up how the events widget reports
* Fixed a null issue when deleting series in the UI
* Cleaned up some debug code
* Added more information for when we skip a scan
* Cleaned up some logging messages in CoverGen tasks
* More log message tweaks
* Added some debug to help identify a rare issue
* Fixed a bug where save bookmarks as webp could get reset to false when saving other server settings
* Updated some documentation on library watcher.
* Make LibraryWatcher fire every 5 mins
* Fixed a bootstrap bug
* Fixed repeating images on collection detail
* Fixed up some logic in library watcher which wasn't processing all of the queue.
* When parsing non-epubs in Book library, use Manga parsing for Volume support to better support Light Novels
* Fixed some bugs with the tachiyomi plugin api's for progress tracking
* Tweaked a Migration to log correctly only if something is going to be done.
* Refactored Reading List Controller code into a dedicated service and cleaned up some methods that aren't needed anymore.
* Fixed a bug where adding a new item to a reading list wasn't adding it at the end.
* Fixed an issue where collection page would re-render the same covers on multiple items.
* Fixed a missing margin-top which made the page extras drawer not render correctly and hence unclosable on small screens.
* Added some timeout on manage users screen to give data time to flush.
Added a dedicated token log for account flows, in case url encoding plays a part (but from testing it doesn't).
* Reverted back to building for ES6 instead of es2020 for old Safari 12.5.5 browsers (10MB difference in build size).
* Cleaned up the logic in removing series not found during scan loop.
* Tweaked the timings for Library Watcher to 1 min and reprocess queue every 30 seconds.
* Added a ToList() to avoid a bug where a person could be removed from a list while iterating over the list.
* When deleting a series, want to read page will now automatically remove that series from the view.
* Fixed a series lookup which was ignoring format
* Ignore XML comment warnings
* Removed a note since it was already working that way
* Fixed unit test
* Updated scan time for watcher to 30 seconds for non-dev. Moved ScanFolder off the Scan queue as it doesn't need to be there. Updated loggers
* Fixed jumpbar missing
* Tweaked the messaging for CoverGen
* When we return early due to nothing being done on library and series scan, make sure we kick off other tasks that need to occur.
* Fixed a foreign constraint issue on Volumes when we were adding to a new series.
* Fixed a case where when picking normalized series, capitalization differences wouldn't stack when they should.
* Reduced the logging output on dev and prod settings.
* Fixed a bug in the code that finds the highest directory from a file, where we were not checking against a normalized path.
* Cleaned up some code
* Fixed broken unit tests
* Hooked in a server setting to enable/disable folder watching
* Validated the file rename change event
* Validated delete file works
* Tweaked some logic to determine if a change occurs on a folder or a file.
* Added a note for an upcoming branch
* Some minor changes in the loop that just shift where code runs.
* Implemented ScanFolder api
* Ensure we restart watchers when we modify a library folder.
* Fixed a unit test
* When we navigate from a page then back, resume back on the last scroll key (if clicked)
* Resume jump key position when navigating back to a page. Removed some extra blank space on collection detail when a collection doesn't have a summary or cover image.
* Ignore progress events on series cards
* Added a url to swagger for /, which could be reverse proxy url
* Added Last Folder Scanned time to series info modal.
Tweaked the info event detail modal to have a primary and thus be auto-dismissable
* Added an error event when multiple series are found in processing a series.
* Fixed a bug where a series could get stuck with other series due to a bad select query.
Started adding the force flag hook for the UI and designing the confirm.
Confirm service now also has ability to hide the close button.
Updated error events and logging in the loop, to be more informative
* Fixed a bug where confirm service wasn't showing the proper body content.
* Hooked up force scan series
* refresh metadata now has force update
* Fixed up the messaging with the prompt on scan, hooked it up properly in the scan library to avoid the check if the whole library needs to even be scanned. Fixed a bug where NormalizedLocalizedName wasn't being calculated on new entities.
Started adding unit tests for this problematic repo method.
* Fixed a bug where we updated NormalizedLocalizedName before we set it.
* Send an info to the UI when series are spread between multiple library level folders.
* Added some logger output when there are no files found in a folder. Return early if there are no files found, so we can avoid some small loops of code.
* Fixed an issue where multiple series in a folder with localized series would cause unintended grouping. This is not supported and hence we will warn them and allow the bad grouping.
* Added a case where scan series fails due to the folder being removed. We will now log an error
* Normalize paths when finding the highest directory till root.
* Fixed an issue with Scan Series where changing a series' folder to a different path but the original series folder existed with another series in it, would cause the series to not be deleted.
* Fixed some bugs around specials causing a series merge issue on scan series.
* Removed a bug marker
* Cleaned up some of the scan loop and removed a test I don't need.
* Remove any prompts for force flow, it doesn't work well. Leave the API as is though.
* Fixed up a check for duplicate ScanLibrary calls
* Refactored ScanSeries to avoid a lot of extra work and fixed a bug where Scan Series would invoke the processing twice.
Refactored the series selection code during process such that we use Localized Name as well, for cases where the original name was changed.
Undid an optimization around Last Write time, since Linux file systems match how NTFS works.
* Fixed part of the query
* Added a NormalizedLocalizedName for quick searching in which a series needs grouping. Reworked scan loop code a bit to ensure we don't do extra work.
Tweaked the widget logic to help display better and not show "Nothing going on here".
* Fixed a bug where archives with ._ files would be counted as valid files, while they are actually just metadata files on Mac's.
* Fixed a broken unit test
* Fixed collection cover images not rendering
* added a try/catch on sending email, so we fail silently if it doesn't send.
* Fixed Go Back not returning to last scroll position due to layoutmode change resetting, despite nothing changing.
* Fixed a bug where when turning between pages on default mode, the height calculations could get skewed.
* Fixed a missing case for card item where it wouldn't show tooltip title for series.