* Added --card-list-item-bg-color for the card list items
* Updated the card list item progress to match how cards render
* Implemented the ability to configure how many backups are retained.
* Fixed a bug where odd jump keys could cause a bad index error for jump bar
* Commented out more code for the pagination route if we go with that.
* Reverted a move of DisableConcurrentExecution to interface, as it seems to not work there.
* Updated manga format utility code to pipes
* Fixed bulk selection on series detail page
* Fixed bulk selection on all other pages
* Changed card item to OnPush
* Updated image component to OnPush
* Updated Series Card to OnPush
* Updated Series Detail to OnPush
* Lots of changes here. Integrated parentscroll support on card detail layout. Added jump bar (custom js implementation) on collection, reading list and all series pages. Updated UserParams to default to no pagination. Lots of cleanup all around
* Updated some notes on a module use
* Some code cleanup
* Fixed up a broken test due to the mapper not being configured in the test.
* Applied TabID pattern to edit collection tags
* Applied css from series detail to collection detail page to remove double scrollbar
* Implemented the ability to sort by Time To Read.
* Throw an error to the UI when we extract an archive and it contains invalid characters in the filename for the Server OS.
* Tweaked how the page scrolls for jumpbar on collection detail. We will have to polish another release
* Cleaned up the styling on directory picker
* Put some code in but it doesn't work for scroll to top on virtual scrolling. I'll do it later.
* Fixed a container bug
* Started with the redesign of the cover image chooser redesign to be less click intensive for volume/chapter images.
Made some headings bold in card detail drawer.
* Tweaked the styles
* Moved where the info cards show
* Added an ability to open a page settings drawer
* Cleaned up some old code that isn't needed anymore.
* Started implementing a list view. Refactored some title code to a dedicated component
* List view implemented but way too many API calls. Either need caching or adjusting the SeriesDetail api.
* Fixed a bug where if the progress bar didn't render on a card item while a download was in progress, the download indicator would be removed.
* Large refactor to move a lot of the needed fields to the chapter and volume dtos for series detail. All fields are noted when only used in series detail.
* Implemented cards for other tabs (except related)
* Fixed the unit test which needed a mocked reader service call.
* More cleanup around age rating and removing old code from the refactor. Commented out sorting till i feel motivated to work on that.
* Some cleanup and restored cards as initial layout. Time to test this out and see if there is value add.
* Added ability for Chapters tab to show the volume chapters belong to (if applicable)
* Adding style fixes
* Cover image updates, don't allow the first image (which is what is currently set) to respond to cover changes.
Hide the ID field on list item for series detail.
* Refactored the title for list item to be injectable
* Cleaned up the selection code to make it less finicky on mobile when tap scrolling.
* Refactored chapter tab to show volume as well on list view.
* Ensure word count shows for Volumes
* Started adding virtual scrolling, pushing up so Robbie can mess around
* Started adding virtual scrolling, pushing up so Robbie can mess around
* Fixed a bug where all chapters would come under specials
* Show title data as accent if set.
* Style fixes for virtual scroller
* Restyling scroll
* Implemented a way to show storyline with virtual scrolling
* Show Word Count for chapters and cleaned up some logics.
* I might have card layout working with virtual scroll code.
* Some cleanup to hide more system like properties from info bar on series detail page. Fixed some missing time estimate info on storyline chapters.
* Fixed a regression on series service when I integrated VolumeTitle.
* Refactored read time to the backend. Added WordCount to the volume itself so we don't need to calculate on frontend. When asking to analyze files from a series, force the calculation.
* Fixed SeriesDetail api code
* Fixed up the code in the drawer to better update list/card mode
* Basic infinite scroll implemented, however due to how we are updating the list to render, we are re-rending cards that haven't been touched.
* Updated how we render and layout data for infinite scroll on library detail. It's almost there.
* Started laying foundation for loading pages backwards.
Removed lazy loading of images since we are now using virtual paging.
* Hooked in some basic code to allow user to load a prev page with infinite scroll.
* Fixed up series detail api and undid the non-lazy loaded images.
Changed the router to help with this infinite loading on Firefox issue.
* Fixed up some naming issues with Series Detail and added a new test.
* This is an infinite scroll without pagination implementation. It is not fully done, but off to a good start. Virtual scroller with jump bar is working pretty well, def needs more polishing and tweaking. There are hacks in this implementation that need to be revisited.
* Refactored code so that we don't use any pagination and load all results by default.
* Misc code cleanup from build warnings.
* Cleaned up some logic for how to display titles in list view.
* More title cleanup for specials
* Hooked up page layout to user preferences and renamed an existing user pref name to match the dto.
* Swapped out everything but storyline with virtual-scroller over CDK
* Removed CDK from series detail.
* Default value for migration on page layout
* Updating card layout for library detail page
* fixing height for mobile
* Moved scrollbar
* Tweaked some styling for layouts when there is no data
* Refactored the series cards into their own component to make it re-usable.
* More tweaks on series info cards layout and enhanced a few pages with trackby functions.
* Removed some dead code
* Added download on series detail to actionables to fit in with new scroll strategy.
* Fixed language not being updated and sent to the backend for series update.
* Fixed a bad migration (if you ran any prior migration in this branch, you need to undo before you use this commit)
* Adding sticky tabs
* fixed mobile gap on sticky tab
* Enhanced the card title for books to show number up front.
* Adjusted the gutters on admin dashboard
* Removed debug code
* Removing duplicate book title
* Cleaned up old references to cdk scroller
* Implemented a basic jump bar scaling algorithm. Not perfect, but works pretty well.
* Code smells
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Moved the calculation for time to read to the backend. Tweaked some logic around showing est time to complete.
* Added debug logging to help pinpoint a duplicate issue in Kavita.
* More combination logic is error checked in a special way for Robbie to reproduce an issue.
* Migrated chapter detail card to use backend for time calculation. Ensure we take all chapters into account for volume time calcs
* Tweaked messaging for some critical logs to include file
* Ensure pages count uses comma separated number
* Moved Hangfire annotations to interface level. Adjusted word count service to always recalculate when user requests via analyze series files.
* Started building out idea around detail drawer. Need code from word count to continue
* Fixed the logic for caluclating time to read on comics
* Adding styles
* more styling fixes
* Cleaned up the styles a bit more so it's at least functional. Not sure on the feature, might abandon.
* Pulled Robbie's changes in and partially migrated them to the drawer.
* Add offset overrides for offcanvas so it takes our header into account
* Implemented a basic time left to finish the series (or at least what's in Kavita). Rough around the edges.
* Cleaned up the drawer code.
* Added Quick Catch ups to recommended page. Updated the timeout for scan tasks to ensure we don't run 2 at the same time.
* Quick catchups implemented
* Added preliminary support for Korean filename parsing. Reduced an array alloc that is called many thousands of times per scan.
* Fixing drawer overflow
* Fixed a calculation bug with average reading time.
* Small spacing changes to drawer
* Don't show estimated reading time if the user hasn't read anything
* Bump eventsource from 1.1.1 to 2.0.2 in /UI/Web
Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.1.1 to 2.0.2.
- [Release notes](https://github.com/EventSource/eventsource/releases)
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.1.1...v2.0.2)
---
updated-dependencies:
- dependency-name: eventsource
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
* Added image to series detail drawer
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Adding some code for Robbie
* See more on series detail metadata area is now at the bottom on the section
* Cleaned up subtitle headings to use a single class for offset with actionables
* Added some markup for the new design, waiting for Robbie to finish it off
* styling age-rating badge
* Started hooking up basic analyze file service and hooks in the UI. Basic code to implement the count is implemented and in benchmarks.
* Hooked up analyze ui to backend
* Refactored Series Detail metadata area to use a new icon/title design
* Cleaned up the new design
* Pushing for robbie to do css
* Massive performance improvement to scan series where we only need to scan folders reported that have series in them, rather than the whole library.
* Removed theme page as we no longer need it. Added WordCount to DTOs so the UI can show them. Added new pipe to format numbers in compact mode.
* Hooked up actual reading time based on user's words per hour
* Refactor some magic numbers to consts
* Hooked in progress reporting for series word count
* Hooked up analyze files
* Re-implemented time to read on comics
* Removed the word Last Read
* Show proper language name instead of iso tag on series detail page. Added some error handling on word count code.
* Reworked error handling
* Fixed some security vulnerabilities in npm.
* Handle a case where there are no text nodes and instead of returning an empty list, htmlagilitypack returns null.
* Tweaked the styles a bit on the icon-and-title
* Code cleanup
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Refactored the drawer into offcanvas component. Had to write some hacks to emulate how bootstrap's javascript implementation works as ngBootstrap doesn't have a component yet.
* Cleaned up some of the code
* Rewrote drawer to align it with the new design
* First pass, refactored table of content into it's own component
* Refactored all of the settings logic into a separate component. Everything is broken.
* More settings on on reactive form
* More code cleanup on settings
* Misc fixes around the drawer code. Fixed a bug where range sliders were inheriting background color of normal text inputs
* Fixed dark mode with book reader.
We now clear the theme from the main app so book reader is self-contained. Styles for dark mode are injected into the reading-section. Styles that were previously in scss are now only for the actual menu system.
* Cleaned up drawer styling on header
* Removed an ngIf statement for click to paginate
* Tweaked the accent style to have smaller font size and adjusted style on light mode. Cleaned up some clearTimeout code in a further effort to streamline codebase.
* Refactored Dark mode into a basic theme. Currently styles are hardcoded.
* Patched book theme in from themes branch
* Patched in the backend for Book Theme (not tested yet)
* Fixed a bug in seeding code for book themes. Started integration of themes into the reader settings
* Everything except managing themes is working. Themes are a bit shakey, having second thoughts if we should have them or not.
* Reverted the ability to do custom user book themes. Code is stable with system themes.
* Stablize the Styles (#1128)
* Fixed a bug where adding multiple series to reading list would throw an error on UI, but it was successful.
* When a series has a reading list, we now show the connection on Series detail.
* Removed all baseurl code from UI and not-connected component since we no longer use it.
* Fixed tag badges not showing a border. Added last read time to the series detail page
* Fixed up error interceptor to remove no-connection code
* Changed implementation for series detail. Book libraries will never send chapters back. Volume 0 volumes will not be sent in volumes ever. Fixed up more renaming logic on books to send more accurate representations to the UI.
* Cleaned up the selected tab and tab display logic
* Fixed a bad where statement in reading lists for series
* Fixed up tab logic again
* Fixed a small margin on search backdrop
* Made badge expander button smaller to align with badges
* Fixed a few UIs due to .form-group and .form-row being removed
* Updated Theme component page to help with style testing
* Added more components to theme tester
* Cleaned up some styling
* Fixed opacity on search item hover
* Bump versions by dotnet-bump-version.
* Tweaked the accordion styles for light mode
* Set dark book theme as default. Refactored resetSettings to be much cleaner
* Started the refactor to allow book themes to affect global css variables
* Fixed some issues with my css variable declarations
* Fixed a close model state update
* Lots of work, but dark mode on the book reader is basically done. We have to code the themes much like the site themes
* Some black theme enhancements
* Started working on column layout in book reader.
* Cleaned up the CSS on Reader Settings
* Hooked up reading direction
* Got column and double column layout working
* Implemented some basic virtual paging and hooked in book color theme and layout mode into user preferences.
* Migration wrote, can edit page layout and color theme on book reader. Removed book dark mode since no longer needed.
Fixed a bug on login/register forms where when input is focused, text is white and not black.
* When loading book reader, apply column layout.
* Lots of work around 2 column layout, working on images not splitting. Still not working, committing so i can merge develop in and validate code with new manga reader.
* Fixed images being split into 2 BUT regression on each page boundary, total reading height is smaller and smaller
* Fixed some rendering bugs where toggling column layouts would shrink images on screen constantly.
Fixed a bug where bottom bar wouldn't render on column layout in some conditions (this might need to be reworked)
* Started progress on progress work
* Updated .NET to 6.0.4
* Fixed a bug where DataContextModelSnapshot was being removed on build thus new migrations were broken.
* Tweaked the code around progress saving so that we don't loose track of last scroll element on page load
* Trying to restore progress, but stuck
* Extra merge stuff
* Fixed a bug where volumes that are a range fail to generate series detail
* No gutters on whole app. Book reader backend now applies the image class automatically at the backend.
* Added wiki documentation into invite user flow and register admin user to help users understand email isn't required and they can host their own service.
* Removed bottom padding
* Refactored the document height to be set and removed on nav service, so the book reader and manga reader aren't broken.
* Fixed the height of the action bar to simplify logic and keep the code cleaner. Refactored book service image scoping to be much more streamlined and efficient
* Fixed the height of action bar to 62px and adjusted code to use the hardcoded px. (code commented)
* Removed commented out code from fixed action bar height
* Progress restoration seems to be working
* Code cleanup
* Ensure the bottom action bar is at the bottom of the viewport on small pages
* Fixed book fonts not setting properly and added OpenDyslexic font.
* Fixed up some font issues
* Updated drawer so all sections are open by default
* Switched some LINQ to use MinBy
* When navigating between pages and column layout, adjust the shift for the user.
* Removed some debug code
* Blacklist .qpkg folders and don't scan Recently-Snapshot or recycle folders.
* Renamed the scale width to be scoped to kavita to avoid conflicts.
* Refactored ngx-sliders out to use normal range instead. Changed up the preferences to separate image and book settinngs into own accordion.
* updated user preferences for new migration options (not committed yet)
* Removed some debug code
* Remove console.logs
* Migration committed, let's release this to users.
* A lot of crazy code just to ensure that when you close drawer the toggle reflectst that state.
* From previous fix, added the other locking conditions on the update series metadata.
* Fixed a bug where custom series, collection tag, and reading list covers weren't being removed on cleanup.
* Ensure reading list detail has a margin to align to the standard
* Refactored some event stuff to use dedicated consts. Introduced a new event when users read something, which can update progress bars on cards.
* Added recomended and library tags to the library detail page. This will eventually offer more custom analytics
* Cleanup some code onc arousel
* Adjusted scale to height/width css to better fit
* Small css tweaks to better center images in the manga reader in both axis. This takes care of double page rendering as well.
* When a special has a Title set in the metadata, on series detail page, show that on the card rather than filename.
* Fixed a bug where when paging in manga reader, the scroll to top wasn't working due to changing where scrolling is done
* More css goodness for rendering images in manga reader
* Fixed a bug where clearing a typeahead externally wouldn't clear the x button
* Fixed a bug where filering then using keyboard would select wrong option
* Added a new sorting field for Last Chapter Added (new field) to get a similar on deck feel.
* Tweaked recently updated to hit the NFR of 500ms (300ms fresh start) and still give a much better experience.
* Refactored On deck to now go to all series and also sort by last updated. Recently Added Series now loads all series with sort by created.
* Some tweaks on css for cover image chooser
* Fixed a bug in pagination control where multiple pagination events could trigger on load and thus multiple requests for data on parent controller.
* Updated edit series modal to show when the last chapter was added and when user last read it.
* Implemented a highlight on the fitler button when a filter is active.
* Refactored metadata filter screens to perserve the filters in the url and thus when navigating back and forth, it will retain. users should click side nav to reset the state.
* Hide middle section on companion bar on phones
* Cleaned up some prefilters and console.logs
* Don't open drawer by default when a filter is active
* Took care of some notes in the code
* Fixed an issue where Extra might get flagged as special too early, if in a word like Extraordinary
* Moved Tag cleanup code into Scanner service. Added a SplitQuery to another heavy API. Refactored Scan loop to remove parallelism and use async instead.
* Lots of rework on the codebase to support detailed messages and easier management of message sending. Need to take a break on this work.
* Progress is being made, but slowly. Code is broken in this commit.
* Progress is being made, but slowly. Code is broken in this commit.
* Fixed merge issue
* Fixed unit tests
* CoverUpdate is now hooked into new ProgressEvent structure
* Refactored code to remove custom observables and have everything use standard messages$
* Refactored a ton of instances to NotificationProgressEvent style and tons of the UI to respect that too. UI is still a bit buggy, but wholistically the work is done.
* Working much better. Sometimes events come in too fast. Currently cover update progress doesn't display on UI
* Fixed unit tests
* Removed SignalREvent to minimize internal event types. Updated the UI to use progress bars. Finished SiteThemeService.
* Merged metadata refresh progress events and changed library scan events to merge cleaner in the UI
* Changed RefreshMetadataProgress to CoverUpdateProgress to reflect the event better.
* Theme Cleanup (#1089)
* Fixed e-ink theme not properly applying correctly
* Fixed some seed changes. Changed card checkboxes to use our themed ones
* Fixed recently added carousel not going to recently-added page
* Fixed an issue where no results found would show when searching for a library name
* Cleaned up list a bit, typeahead dropdown still needs work
* Added a TODO to streamline series-card component
* Removed ng-lazyload-image module since we don't use it. We use lazysizes
* Darken card on hover
* Fixing accordion focus style
* ux pass updates
- Fixed typeahead width
- Fixed changelog download buttons
- Fixed a select
- Fixed various input box-shadows
- Fixed all anchors to only have underline on hover
- Added navtab hover and active effects
* more ux pass
- Fixed spacing on theme cards
- Fixed some light theme issues
- Exposed text-muted-color for theme card subtitle color
* UX pass fixes
- Changed back to bright green for primary on dark theme
- Changed fa icon to black on e-ink
* Merged changelog component
* Fixed anchor buttons text decoration
* Changed nav tabs to have a background color instead of open active state
* When user is not authenticated, make sure we set default theme (dark)
* Cleanup on carousel
* Updated Users tab to use small buttons with icons to align with Library tab
* Cleaned up brand to not underline, removed default link underline on hover in dropdown and pill tabs
* Fixed collection detail posters not rendering
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Bump versions by dotnet-bump-version.
* Tweaked some of the emitting code
* Some css, but pretty bad. Robbie please save me
* Removed a todo
* styling update
* Only send filename on FileScanProgress
* Some console.log spam cleanup
* Various updates
* Show events widget activity based on activeEvents
* progress bar color updates
* Code cleanup
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* 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
* 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
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.
* Moved the Server Settings out into a button on nav header
* Refactored Mange Users page to the new design (skeleton). Implemented skeleton code for Invite User.
* Hashed out more of the code, but need to move all the email code to a Kavita controlled API server due to password credentials.
* Cleaned up some warnings
* When no user exists for an api key in Plugin controller, throw 401.
* Hooked in the ability to check if the Kavita instance can be accessed externally so we can determine if the user can invite or not.
* Hooked up some logic if the user's server isn't accessible, then default to old flow
* Basic flow is working for confirm email. Needs validation, error handling, etc.
* Refactored Password validation to account service
* Cleaned up the code in confirm-email to work much better.
* Refactored the login page to have a container functionality, so we can reuse the styles on multiple pages (registration pages). Hooked up the code for confirm email.
* Messy code, but making progress. Refactored Register to be used only for first time user registration. Added a new register component to handle first time flow only.
* Invite works much better, still needs a bit of work for non-accessible server setup. Started work on underlying manage users page to meet new design.
* Changed (you) to a star to indicate who you're logged in as.
* Inviting a user is now working and tested fully.
* Removed the register member component as we now have invite and confirm components.
* Editing a user is now working. Username change and Role/Library access from within one screen. Email changing is on hold.
* Cleaned up code for edit user and disabled email field for now.
* Cleaned up the code to indicate changing a user's email is not possible.
* Implemented a migration for existing accounts so they can validate their emails and still login.
* Change url for email server
* Implemented the ability to resend an email confirmation code (or regenerate for non accessible servers). Fixed an overflow on the confirm dialog.
* Took care of some code cleanup
* Removed 3 db calls from cover refresh and some misc cleanup
* Fixed a broken test
* Cleaned up a ton of warnings/suggestions from the IDE.
* Fixed a bug when clearing the filters some presets could be undone.
* Renamed a class in the OPDS spec
* Simplified logic for when Fit To Screen rendering logic occurs. It now works always rather than only on cover images.
* Give some additional info to the user on what the differences between Library Types are
* Don't scan .qpkg folders (QNAP devices)
* Refactored some code to enable ability to test CoverImage Test. This is a broken test, test.zip is waiting on an issue in NetVips.
* Fixed an issue where Extra might get flagged as special too early, if in a word like Extraordinary
* Cleaned up the regex for the extra issue to be more flexible
* Refactored updating chapter metadata from ComicInfo into the Scan loop. This let's us avoid an additional N file reads (expensive) in the metadata service, as we already have to read them in the scan loop.
* Refactored Series level metadata aggregation into the scan loop. This allows for the batching of DB updates to be much smaller, thus faster without much overhead of GC.
* Refactored some of the code for ProcessFile to remove a few redundant if statements
* 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.
* Refactored the Font Escaping Regex with new unit tests.
* Fonts are now properly escaped, somehow a regression was introduced.
* Refactored most of the book page loading for the reader into the service.
* Fixed a bug where going into fullscreen in non dark mode will cause the background of the reader to go black. Fixed a rendering issue with margin left/right screwing html up. Fixed an issue where line-height: 100% would break book's css, now we remove the styles if they are non-valuable.
* Changed how I fixed the black mode in fullscreen
* Fixed an issue where anchors wouldn't be colored blue in white mode
* Fixed a bug in the code that checks if a filename is a cover where it would choose "backcover" as a cover, despite it not being a valid case.
* Validate if ReleaseYear is a valid year and if not, set it to 0 to disable it.
* Fixed an issue where some large images could blow out the screen when reading on mobile. Now images will force to be max of width of browser
* Put my hack back in for fullscreen putting background color to black
* Change forwarded headers from All to explicit names
* Fixed an issue where Scheme was not https when it should have been. Now the browser will handle which scheme to request.
* Cleaned up the user preferences to stack multiple controls onto one row
* Fixed fullscreen scroll issue with progress, but now sticky top is missing.
* Corrected the element on which we fullscreen
* Send stack trace to the UI on prod mode
* Pdfs will now generate cover images. I missed something a few releases ago.
* Ignore @Recently-Snapshot directories for QNAP.
* Refactored Bitmap code to use ImageSharp so it's truly cross platform.
* Updated pdf extraction to use a multi-threaded approach to greatly speed up pdf image extraction
* Hooked in Characters tag from ComicInfo.xml
* 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
* Added a new endpoint to get all Series with Progress info.
* Fixed up some potential NPEs during scan
* Commented out filter code, not ready for it.
* Fixed up a parsing case for european comics
* Refactored FilterDto to allow for specifying multiple formats to return.
* Refactored FilterDto to allow for specifying multiple formats to return.
* Refactored the UI to show OPDS as 3rd Party Clients since Tachiyomi now uses OPDS url scheme for authentication.
* 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
* Stashing code
* removed some debug code on series detail page. Now detail is collapsed by default.
* Added AgeRating
* Fixed a crash when NetVips tries to write a cover file and cover directory is not existing.
* When a card is selected for bulk actions, show an outline in addition to select box
* Added AgeRating into the metadata parsing. Added a hack where ComicInfo uses Number in ComicInfo rather than Volume. This is to test out the effects on users libraries.
* Added AgeRating and ReleaseDate to the metadata implelentation.
* 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 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
* Some small changes to how maxPage is handled for better page tracking on webtoon reader.
* Fixed a bug in cover image selection (#756)
* Refactored webtoon reader to report page progress exactly as manga reader does. In addition, manga reader moved progress saving to setPageNumber making them the same.
* 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
* 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".
* Use null coalescing for comicinfo
* Removed Sentry. The integrations were not providing any userful information.
* Updated to the latest versions of dependencies
* 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
* Added the ability to see when a scan started at.
* filename based hashing now uses last write time as well to ensure if the underlying file changes it sends a new copy
* Fixed a bug where we would reset dark mode on the book reader to dark mode if our site was on dark mode, despite user setting light mode.
* Added a single feed entry when some sort of collection, reading list, etc doesn't have anything in it.
* Allow + in the normalization to prevent some series that use + to denote the sequel from not getting merged together.
* 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
* 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
* 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
* 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
* Added some documentation. Removed Require Admin Role from Search Tags. Added Summary to be updated on UpdateTag.
* Added Swagger xml doc generation to beef up the documentation. Started adding xml comments to the APIs. This is a needed, slow task for upcoming Plugins system.
* Implemented the ability to upload a custom series image to override the existing cover image.
Refactored some code out to use ImageService and added more documentation
* When a page cache fails, delete cache directory so user can try to reload.
* Implemented the ability to lock a series cover image such that after user uploads something, it wont get refreshed by Kavita.
* Implemented the ability to reset cover image for series by unlocking
* Kick off a series refresh after a cover is unlocked.
* Ability to press enter to load a url
* Ability to reset selection
* Cleaned up cover chooser such that reset is nicer, errors inform user to use file upload, series edit modal now doesn't use scrollable body. Mobile tweaks. CoverImageLocked is now sent to the UI.
* More css changes to look better
* When no bookmarks, don't show both markups
* Fixed issues where images wouldn't refresh after cover image was changed.
* Implemented the ability to change the cover images for collection tags.
* Added property and API for chapter cover image update
* Added UI code to prepare for updating cover image for chapters. need to rearrange components
* Moved a ton of code around to separate card related screens into their own module.
* Implemented the ability to update a chapter/volume cover image
* Refactored action for volume to say edit to reflect modal action
* Fixed issue where after editing chapter cover image, the underlying card wouldn't update
* Fixed an issue where we were passing volumeId to the reset chapter lock. Changed some logic in volume cover image generation.
* Automatically apply when you hit reset cover image
# Added
- Added: Added series format information to the search typeahead to help identify duplicate series in libraries
# Fixed
- Fixed: Fixed accent color not looking well on light theme
- Fixed: Attempted to fix the memory issues with PDF reading on Docker. Uses a Memory Pool for streams and removes a bitmap operation for fixing books with transparent backgrounds (#424)
# Changed
- Changed: Refactored download logs to use the same download code as rest of Kavita
# Dev stuff
- Added timeout for Regex's to make sure during matching, malicious filenames doesn't crash user system
- Refactored a missing GetCoverImage to use Series Format rather than old Library Type
==================================================
* Added Timeout for Regex matching to ensure malicious filenames don't crash system
* Refactored GetCoverImage to use series format rather than library type
* Refactored download logs to use the download service
* Fixed accent color not looking well on light theme
* Refactored series format into dedicated component and added to search results
* Switch to using MemoryManager for Streams to attempt to minimize GC pressure and reduced bitmap manipulation for transparency hack.
# Fixed
- Fixed: Clean the pdf extension from Series title for PDF types
- Fixed: Fixed a bug where a forced metadata refresh wouldn't trigger a volume to force a refresh of cover image
- Fixed: Fixed an issue where Removing series no longer on disk would not use the Series Format and thus after deleting files, they would not be removed.
- Fixed: Fixed an issue with reading a single image file, where the cache code would not properly move the file
- Fixed: For Specials, Get Next/Prev Chapter should use the filename instead of arbitrary Number (which is always 0). Use the same sorting logic when requesting volumes on series detail, so sorting can happen in the backend.
# Added
- Added: (Accessibility) Nearly every page has had a title set for it
===============================================================================
* Clean the pdf extension from ParseSeries
* Fixed a bug where forced metadata refresh wouldn't trigger the volume to update it's image.
* Added titles to most pages to help distinguish back/forward history.
Fixed a bug in the scanner which didn't account for Format when calculating if we need to remove a series not on disk.
* For Specials, Get Next/Prev Chapter should use the filename instead of arbitrary Number (which is always 0). Use the same sorting logic when requesting volumes on series detail, so sorting can happen in the backend.
* Fixed unit tests
# Added
- Added support for PDFs within Kavita. PDFs will open in the Manga reader and you can read through them as images. PDFs are heavier than archives, so they may take longer to open for reading. (Fixes#187)
# Changed
- Changed: Major change in how Kavita libraries work. Kavita libraries will now allow for mixed media types, that means you can have raw images, archives, epubs, and pdfs all within your Manga library. In the case that the same Series exists between 2 different types of medias, they will be separated and an icon will show to help you identify the types. The correct reader will open regardless of what library you are on. Note: Nightly users need to delete their Raw Images libraries before updating.
# Fixed
- Fixed: Fixed an issue where checking if a file was modified since last scan always returned true, meaning we would do more I/O than was needed (Fixes#415)
- Fixed: There wasn't enough spacing on the top menu bar on the Manga reader
- Fixed: Fixed a bug where user preferences dark mode control always showed true, even if you were not using dark mode
# Dev stuff
- For image extraction, if there is only 1 image we will extract just that, else we will extract only images
- Refactored all the Parser code out of the ScannerService into a self contained class. The class should be created for any scans, allowing multiple tasks to run without any chance of cross over.
* Fixed indentation for cs files
* Fixed an issue where the logic for if a file had been modified or not was not working and always saying modified, meaning we were doing more file I/O than needed.
* Implemented the ability to have PDF books. No reader functionality.
* Implemented a basic form of scanning for PDF files. Reworked Image based libraries to remove the need to separate in a special library and instead just work within the Manga/Comic library.
* Removed the old library types.
* Removed some extra code around old raw library types
* Fully implemented PDF support into Kavita by using docnet. Removed old libraries we tried that did not work. PDFs take about 200ms to save the file to disk, so they are much slower than reading archives.
* Refactored Libraries so that they can have any file extension and the UI will decide which reader to use.
* Reworked the Series Parsing code.
We now use a separate instance for each task call, so there should be no cross over if 2 tasks are running at the same time.
Second, we now store Format with the Series, so we can have duplicate Series with the same name, but a different type of files underneath.
* Fixed PDF transparency issues
- Used this code to fix an issue when a PDF page doesn't have a background. https://github.com/GowenGit/docnet/issues/8#issuecomment-538985672
- This also fixes the same issue for cover images
* Fixed an issue where if a raw image was in a directory with non-image files, those would get moved to cache when trying to open the file.
* For image extraction, if there is only 1 image, just copy that to cache instead of everything else in the directory that is an image.
* Add some spacing to the top menu bar
* Added an icon to the card to showcase the type of file
* Added a tag badge to the series detail page
* Fixed a bug in user preferences where dark mode control would default to true, even if you weren't on it
* Fixed some tests up
* Some code smells
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>