* 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>
* When account updates occur for a user, send an event to them to tell them to refresh their account information (if they are on the site at the time). This way if we revoke permissions, the site will reactively adapt.
* Some cleanup on the user preferences to remove some calls we don't need anymore.
* Removed old bulk cleanup bookmark code as it's no longer needed.
* Tweaked the messaging for stat collection to reflect what we collect now versus when this was initially implemented.
* Implemented the ability for users to configure their servers to save bookmarks as webP. Reorganized the tabs for Admin dashboard to account for upcoming features.
* Implemented the ability to bulk convert bookmarks (as many times as the user wants).
Added a display of Reoccurring Jobs to the Tasks admin tab. Currently it's just placeholder, but will be enhanced further later in the release.
* Tweaked the wording around the convert switch.
* Moved System actions to the task tab
* Added a controller just for Tachiyomi so we can have dedicated APIs for that client. Deprecated an existing API on the Reader route.
* Fixed the unit tests
* Fixed an issue with fit to screen where spread images would fail to generate a paging area long enough.
* Fixed pagination placement on original scaling
* Fixed an issue with webtoon reader not reporting scroll events due to a fix from manga reader.
* Fixing select on black book-reader theme
* Fixing canvas split centering
* Fixed a bug with white mode in book reader not rendering correctly. When bookmarking new pages after previously have viewing bookmarks for a series, ensure we clear out the temp cache else your new files wont be visible till next day.
* Use grid on related tab
* Clear bookmarks was not hooked up. Bulk add to collection didn't have label hidden
* Fixed bug where filter might stay open between pages
* Fixed typo on relationship for Adaptation
* Contains was missing from series relation modal
* Tweaked some methods and wording on reading list page
* Cleaned up the phrasing when we abort a scan.
* Fixed issue where typeahead wasn't reopening and it wasn't filtering selected options
* Fixed some typeahead bugs and decreased interval for docker health check
* Cleaned up and fixed some logic with receiving cover image update events
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Fixed image scoping breaking and books not being able to load images
* Cleaned up a lot of variables and added more jsdoc. After shifting the margin, we try to recover the column layout width,height, and scroll posisiton.
* Tap to paginate is working on first load now
* On resize, rescroll to attempt to avoid breakage
* Fixed transparent background for action bar on white theme
* Moved some lists to immutable arrays
* Actually fixed backgournd now
* Fixed some settings not updating in book reader on load
* Put some code in place to test out opening menu with clicking on the document
* Fixed settings not propagating to the reader
* Fixing 2 column when loading annd ios mobile
* Fixed an issue where paging to prev page would sometimes skip the first page.
* Fixing previous page skipping first page of chapter
* removing console logs
* Save progress when we page
* Click on document to show the side nav
* Removed columns auto because it could render more columns than applicable. Don't explicitly call saveProgress on prev page, as we already do in another call.
Adjusted the logic to calculate windowHeight and width to be the same throughout the reader.
* Setting select fix and settings polish
* Fixed awkward tooltip wording
* Added a message for when there is nothing to show on recommended tab
* Removed bug marker, there was no bug after all
* Fixing book title truncation in action bar
* When counting volumes or chapters that have range, count the max part of the range for publication status.
* Fixing TOC rendering issue
* Styling fixes
- Fixed an issue where the image height in the book reader was the column height plus padding so it was breaking pagination calc.
- Centered book reader setting pills
- Made inactive setting pill into a ghost button
- Fixed spacing across the reader settings drawer
* Added a bit of code to allow us to disable buttons before we click for next chapter load
* Removed titles from action bars
* The next page button will now show as the primary color to indicate to the user what the next forward page is.
* Added a view series to bookmark page and removed actions from header since it didn't work
* Fixed a bug where pagination wasn't mutating url state
* Lots of changes, code is kinda working.
Added Immersive Mode, but didn't generate migration.
Added concept of virtual pages with ability to see them. Math is still slightly off.
Cleaned up prefetching code so we do it much earlier.
Added some code that doesn't work to disable buttons with virtual paging included.
* When turning immersive mode on, force tap to paginate
* Refactored out the book reader state as it wasn't very beneficial
* Fixed total virtual page calculation
* Next/prev page seems to be working pretty well
* Applied Robbie's virtual page logic and fixed a bug in prev page code
* Changed the next page to use same virtual page logic
* Getting back and forward working...somehow.
* removing redundant code
* Fixing book title overflow from new action bar changes
* Polishing pagination styles
* Changing chapter to section
* Fixing up other book reader themes
* Fixed the login header being off-center
* Fixing styling to follow approach
* Refactored the pagination buttons to properly call next/prev page based on reading direction
* Drawer pagination buttons now respect when there is no chapters (prev/next)
* Everything except disabling buttons when on last possible page working
* Added Book Reader immersive mode migration
* Disable next/prev buttons for continuous reading before we request next/prev chapter if there is no chapter.
* Show a tooltip for the title
* Fixed unit test
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.
* Pull progress information for some of the recommended stuff.
* Fixed some redirection code from last PR
* Implemented the ability to search for files in the search and open the series directly.
* Fixed nav search bar expanding too much
* Fixed a bug in nav module not having router so some links broke
* Fixed an issue where with new localized series tag, merging could fail if the user had 2 series with the series and localized series.
Added extra error handling for tracking series parsed from disk.
* Fixed the slowness when typing in a typeahead by using auditTime vs debounceTime
* Removed some cleaning of Edition tags from the Parser. Only Omnibus and Uncensored will be ignored when cleaning titles, Full Color, Full Contact, etc will now stay in the title for Series name.
* Implemented ability to search against chapter's title (from epub or title in comicinfo). This should help users search for books in a series a lot easier.
* Restrict each search type to 15 records only to keep query performant and UI useful.
* Wrote some extra messaging on invite user flow around email.
* Messaging update
* Fixed a bug where publication status could show as filled in when total number is 0 but there is a max count.
Add ComicInfo support for LocalizedSeries which will populate a Series LocalizedName.
Fixed an issue in tag constraint issues.
* Hooked in LocalizedSeries tag into merge step in scanner.
* Hooked in LocalizedSeries from ComicInfo into Kavita and also use it to help during merge phase to avoid 2 different series, if one file is using the name of the localized series.
* Reduced some extra string creation and updated epub library to ignore bad ToCs.
* Bumped dependencies to latest. When an epub doesn't have a dc:date with publication event type, default back to just a normal dc:date tag.
* Fixed a bug where webtoon reader would error out on first load due to how we passed the function to the reader
* Reverted the centering code
* Trim when reading some fields from ComicInfo. Adjusted css on the site to reduce nbsp
* Added Cancelled as a publication status
* Ensure we track volume number from ComicInfo for the count to determine publication status
* Publication Status will now check against volume number or chapter number (parsed or comicinfo). The UI will now display the progress, ie) 10/15 and will show the series as completed with a green tag badge if the progress is 100%.
* Tweaked the ordering of the tabs to make it more streamlined in the reading ordering of Kavita
* Tweaked the logic for filling in tag badge
* Added a new publication status of Ended for series that have finished releasing, but not all items are in Kavita
* Added some fields to edit series modal
* Implemented the ability to link different series together through Edit Series. CSS pending.
* Fixed up the css for related cards to show the relation
* Working on making all tabs in edit seris modal save in one go. Taking a break.
* Some fixes for Robbie to help with styling on
* Linked series pill, center library
* Centering library detail and related pill spacing
- Library detail cards are now centered if total number of items is > 6 or if mobile.
- Added ability to determine if mobile (viewport width <= 480px
- Fixed related card spacing
- Fixed related card pill spacing
* Updating relation form spacing
* Fixed a bug in card detail layout when there is no pagination, we create one in a way that all items render at once.
* Only auto-close side nav on phones, not tablets
* Fixed a bug where we had flipped state on sideNavCollapsed$
* Cleaned up some misleading comments
* Implemented RBS back in and now if you have a relationship besides prequel/sequel, the target series will show a link back to it's parent.
* Added Parentto pipe
* Missed a relationship type
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Added playwright and started writing e2e tests.
* To make things easy, disabled other browsers while I get confortable. Added a login flow (assumes my dev env)
* More tests on login page
* Lots more testing code, trying to figure out auth code.
* Ensure we don't track DBs inside config
* Added a new date property for when chapters are added to a series which helps with OnDeck calculations. Changed a lot of heavy api calls to use IEnumerable to stream repsonse to UI.
* Fixed OnDeck with a new field for when last chapter was added on Series. This is a streamlined way to query.
Updated Reading List with NormalizedTitle, CoverImage, CoverImageLocked.
* Implemented the ability to read a random item in the reading list and for the reading list to be intact for order.
* Tweaked the style for webtoon to not span the whole width, but use max width
* When we update a cover image just send an event so we don't need to have logic for when updates occur
* Fixed a bad name for entity type on cover updates
* Aligned the edit collection tag modal to align with new tab design
* Rewrote code for picking the first file for metadata to ensure it always picks the correct file, esp if the first chapter of a series starts with a float (1.1)
* Refactored setting LastChapterAdded to ensure we do it on the Series.
* Updated Chapter updating in scan loop to avoid nested for loop and an additional loop.
* Fixed a bug where locked person fields wouldn't persist between scans.
* Updated Contributing to reflect how to view the swagger api
* Fixed an issue where when falling back to folder parsing, sometimes the folder name wouldn't parse well, like "Foo 50" which parses as "Foo". Now the fallback will check if we have a solid series parsed from filename before we attempt to parse a folder.
* Ensure SortName is set during a scan loop even if locked and it's empty string.
* Added some null checks for metadata update
* Fixed a bug where Updating a series name with a name of an existing series wouldn't properly check for existing series.
* Tweaked the logic of OnDeck to consider LastChapterCreated from all chapters in a series, not just those with progress.
* Fixed a bug where the hamburger menu was still visible on login/registration page despite not functioning
* Tweaked the logic of OnDeck to consider LastChapterCreated from all chapters in a series, not just those with progress.
* Removed 2 unused packages from ui
* Fixed some bugs around determining what the current installed version is in Announcements
* Use AnyAsync for a query to improve performance
* Fixed up some fallback code
* Tests are finally fixed
* Code cleanup.
When copying files, if the target file already exists, append (1), (2), etc onto the file (this is enhancing existing implementation to allow multiple numbers)
* Added a ton of null checks to UpdateSeriesMetadata and made the code work on the rare case (not really possible) that SeriesMetadata doesn't exist.
* Updated Genre code to use strings to ensure a better, more fault tolerant update experience.
* More cleanup on the codebase
* Fixed a bug where Series SortName was getting emptied on file scan
* Fixed a bad copy
* Fixed unit tests
* Cleaned up some styles on the progress bar in book reader
* Fixed up some phone-hidden classes and added titles around the codebase. Stat reporting on first run now takes into account that admin user wont exist.
* Fixed manage library page not updating last scan time when a notification event comes in.
* Integrated SeriesSort ComicInfo tag (somehow it got missed)
* Some minor style changes and no results found for bookmarks on chapter detail modal
* Fixed the labels in action bar on book reader so Prev/Next are in same place
* Cleaned up some responsive styles around images and reduced custom classes in light of new display classes on collection detail and series detail pages
* Fixed an issue with webkit browsers and book reader where the scroll to would fail as the document wasn't fully rendered. A 10ms delay seems to fix the issue.
* Cleaned up some code and filtering for collections. Collection detail is missing filtering functionality somehow, disabled the button and will add in future release
* Correctly validate and show a message when a user is not an admin or has change password role when going through forget password flow.
* Fixed a bug on manage libraries where library last scan didn't work on first scan of a library, due to there being no updated series.
* Fixed a rendering issue with text being focused on confirm email page textboxes. Fixed a bug where when deleting a theme that was default, Kavita didn't reset Dark as the default theme.
* Cleaned up the naming and styles for side nav active item hover
* Fixed event widget to have correct styling on eink and light
* Tried to fix a rendering issue on side nav for light themes, but can't figure it out
* On light more, ensure switches are green
* Fixed a bug where opening a page with a preselected filter, the filter toggle button would require 2 clicks to collapse
* Reverted the revert of On Deck.
* Improved the upload by url experience by sending a custom fail error to UI when a url returns 401.
* When deleting a library, emit a series removed event for each series removed so user's dashboards/screens update.
* Fixed an api throwing an error due to text being sent back instead of json.
* Fixed a refresh bug with refreshing pending invites after deleting an invite. Ensure we always refresh pending invites even if user cancel's from invite, as they might invite, then hit cancel, where invite is still active.
* Fixed a bug where invited users with + in the email would fail due to validation, but UI wouldn't properly inform user.
* Fixed a bug where GetNextChapter would return a loose leaf chapter from a special when it should return nothing.
* Fixed a bug in events widget when an update comes in after a user refreshes, the active event counter could get out of sync, thus showing "Nothing going on here"
Refactored the events widget to be named appropriately.
* Refactored code to have errors during threaded tasks propagate to the UI via events widget (css still needed).
Removed ScanLibraryError in favor of generic Error event.
* Fixed up some code and added ability to remove the event from events widget
* Fixed a bug where modifiying certain fields, like summary, wouldn't lock the field
* Fixed a few bugs where lock state was not being set in the DB correctly nor were certain combinations of locking fields and editing fields.
* Removed debug code
* Updated the discord alert to tag new group
* Refactored cover upload to actually handle uploading a temp file via url on the backend so that users can user change cover by url. Fixed up some bugs that occured when chaning the image container in a previous PR.
* Code cleanup
* Cleaned up the css on the error items
* Code cleanup
* Added the skeleton code for layout, hooked up Age Rating, Publication Status, and Tags
* Tweaked message of Scan service to Finished scan of to better indicate the total scan time
* Hooked in foundation for person typeaheads
* Fixed people not populating typeaheads on load
* For manga/comics, when parsing, set the SeriesSort from ComicInfo if it exists.
* Implemented the ability to override and create new genre tags. Code is ready to flush out the rest.
* Ability to update metadata from the UI is hooked up. Next is locking.
* Updated typeahead to allow for non-multiple usage. Implemented ability to update Language tag in Series Metadata.
* Fixed a bug in GetContinuePoint for a case where we have Volumes, Loose Leaf chapters and no read progress.
* Added ETag headers on Images to allow for better caching (bookmarks and images in manga reader)
* Built out UI code to show locked indication to user
* Implemented Series locking and refactored a lot of styles in typeahead to make the lock setting work, plus misc cleanup.
* Added locked properties to dtos. Updated typeahead loading indicator to not interfere with close button if present
* Hooked up locking flags in UI
* Integrated regular field locking/unlocking
* Removed some old code
* Prevent input group from wrapping
* Implemented some basic layout for metadata on volume/chapter card modal. Refactored out all metadata from Chapter object in terms of UI and put into a separate call to ensure speedy delivery and simplicity of code.
* Refactored code to hide covers section if not an admin
* Implemented ability to modify a chapter/volume cover from the detail modal
* Removed a few variables and change cover image modal
* Added bookmark to single chapter view
* Put a temp fix in for a ngb v12 z-index bug (reported). Bumped ngb to 12.0 stable and fixed some small rendering bugs
* loading buttons ftw
* Lots of cleanup, looks like the story is finished
* Changed action name from Info to Details
* Style tweaks
* Fixed an issue where Summary would assume it's locked due to a subscription firing on setting the model
* Fixed some misc bugs
* Code smells
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Fixed a bug where ComicInfo Count can be a float and we threw a parse error.
* Fixed a bug in download bookmarks which didn't properly create the filepaths for copying. Refactored into a service with a unit test.
In Scanner, repull genres, people and tags between chunk saves to ensure no unique constraint issues.
* Fixed a bug where card detail layout wouldn't refresh the library name on the card between pages
* Fixed an issue where a check to scrolling page back to top was missing in manga reader
* Fixed a bug where cleaning up collection tags without Series was missing after editing a Series.
* Cleaned up the styles for cover chooser
* Added Regex support for "Series 001 (Digital) (somethingwith1234)" and removed support for "A Compendium of Ghosts - 031 - The Third Story_ Part 12" due to complexity in parsing.
* Fixed a miscommunication on how Tachiyomi needs the API MarkChaptersUntilAsRead implemented. Now 0 chapter volumes will be marked.
* Removed unneeded DI
* Scanner event hub fix
- Fixed an issue where the scanner would error when adding a new series because the series didn't have a library name yet. (develop)
* Removing library.type
* 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>
* Fixed an issue where cover update events wouldn't refresh an image after the second event came through due to randomization
* Fixed an issue where download event wasn't send consistently when downloading files.
* Fixed a bug where you couldn't add a new role to a user
* Fixed a bug where if you went to edit user library, the roles would get reset to nothing
* Adjust the rendering on reading list page to be better on smaller screens (and worse on larger ones)
* Tweaked the refresh covers message to use queued and not started
* Cleaned up the code for image on when to update based on CoverUpdate event. On dashboard, don't spam reload recently added on every series update or scan complete. Debouce for 1 second between calls.
* Fixed an issue where we sent an error on forgot password confirmation, but really, it was successful.
* Added Reading Lists and Library to search results
* Fixed a bug in the search component where hitting esc to close overlay then typing again wouldn't reopen the overlay
* When resending invites, send the correct link for an invite
* Tell the admin an email was sent on invite
* Fixed the error interceptor to flatten validation error messages more robustly and now confirm email will show validation exceptions
* Fixed a bug in webtoon reader where we were reading the wrong dimension for fitting images to screen on render
* When generating email links, inform who they are for in the logs.
Fixed an issue with an error message on login when password was incorrect, but user hadn't confirmed email yet.
Fixed multiple cases where migration wasn't sending error messages back correctly and hence the user never saw them.
* Show errors on migration UI form
* Changed log rolling to be easier to understand
* Added some extra logic to throw unauthorized
* Tweaked some wording to inform user how to best find email link
* Fixed a code smell
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 some old code in download bookmark that could create pointless temp folders.
* Fixed a bad http call on reading list remove read and cleaned up the messaging
* Undid an optimization in finding cover image due to it perfoming depth first rather than breadth.
* Updated CleanComicInfo to have Translators and CoverArtists, which were previously missing.
* Renamed Refresh Metadata to Refresh Covers on the UI, given Metadata refresh is done in Scan.
* Library detail will now retain the search query in the UI. Reduced the amount of api calls to the backend on load.
* Reverted allowing the filter to reside in the UI (even though it does work).
* Updated the Age Rating to match the v2.1 spec.
* Fixed a bug where progress wasn't being saved
* Fixed line height not having any effect due to not applying to children elements in the reader
* Fixed some wording for Refresh Covers confirmation
* Delete Series will now send an event to the UI informing that series was deleted.
* Change Progress widget to show Refreshing Covers for
* When we exit early due to potential missing folders/drives in a scan, tell the UI that scan is 100% done.
* Fixed manage library not supressing scan loader when a complete came in
* Fixed a spelling difference for Publication Status between filter and series detail
* Fixed a bug where collection detail page would flash on first load due to duplicate load events
* Added bookmarks to backups
* Fixed issues where fullscreen mode would break infinite scroller contiunous reader
* Normalized paths on download controller and when scan is killed due to missing or empty folders, log a critical error.
* Tweaked the query for OnDeck to better promote recently added chapters in a series with read progress, but it's still not perfect.
* Fixed an issue where up/down key weren't working unless you clicked on the book explicitly
* Fixed an issue where infinite scroller was broken in fullscreen mode
* When toggling fullscreen mode on infinite scroller, the current page is retained as current position
* Fixed an issue where a double render would occur when we didn't need to render as fit split
* Stop showing loader when not using fit split
* When performing a scan, series should group if they share the same localized name as a pre-existing series.
* Fixed a bug where a series with a different name and localized name weren't merging with a different set of files with the same naming as localized name.
* Added a lot of tests
* More tests! Added a Parser.NormalizePath to normalize all paths within Kavita.
* Fixed a bug where MarkChaptersAsUnread implementation wasn't consistent between different files and lead to extra row generation for no reason.
* Added more unit tests
* Found a better implementation for Natural Sorting. Added tests and validate it works. Next commit will swap out natural Sort for new Extension.
* Replaced NaturalSortComparer with OrderByNatural.
* Drastically simplified and sped up FindFirstEntry for finding cover images in archives
* Initial fix for a epub bug where metadata defines key as absolute path but document uses a relative path. We now have a hack to correct for the epub.
* 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.
* Fixed a bug which didn't take sort direction when not changing sort field
* Added foundation for Bookmark refactor
* Code broken, need to take a break. Issue is Getting bookmark image needs authentication but UI doesn't send.
* Implemented the ability to send bookmarked files to the web. Implemented ability to clear bookmarks on disk on a re-occuring basis.
* Updated the bookmark design to have it's own card that is self contained. View bookmarks modal has been updated to better lay out the cards.
* Refactored download bookmark codes to select files from bookmark directory directly rather than open underlying files.
* Wrote the basic logic to kick start the bookmark migration.
Added Installed Version into the DB to allow us to know more accurately when to run migrations
* Implemented the ability to change the bookmarks directory
* Updated all references to BookmarkDirectory to use setting from the DB.
Updated Server Settings page to use 2 col for some rows.
* Refactored some code to DirectoryService (hasWriteAccess) and fixed up some unit tests from a previous PR.
* Treat folders that start with ._ as blacklisted.
* Implemented Reset User preferences. Some extra code to prep for the migration.
* Implemented a migration for existing bookmarks to using new filesystem based bookmarks
* Fixed a case where chapter was being parsed incorrectly when the series title ends in a number.
* Updated Kavita to support Tome/T notation found in French comics
* Added support for identifying European specials and expanded support for cleaning some tags used in European comics. During cleaning, if series starts with - or comma, remove it.
* Fixed an issue where add to collection for a single series wasn't calling the bulk action handler
* Fixed a NPE on AgeRating conversion. Fixed a bug where when looking for cover image, file extensions was throwing off sort code.
* Refactored Natural Sort ordering to better follow how Windows behaves. This is a departure from how the original code executes.
* GetCachedPagePath now uses natural sorting to pick the images for reading in a more correct order.
* Updated parser to handle a case where there was more than one space as a separator
* Refactored all files to have Interfaces within the same file. Started moving over to file-scoped namespaces.
* Refactored common methods for getting underlying file's cover, pages, and extracting into 1 interface.
* More refactoring around removing dependence on explicit filetype testing for getting information.
* Code is buildable, tests are broken. Huge refactor (not completed) which makes most of DirectoryService testable with a mock filesystem (and thus the services that utilize it).
* Finished porting DirectoryService to use mocked filesystem implementation.
* Added a null check
* Added a null check
* Finished all unit tests for DirectoryService.
* Some misc cleanup on the code
* Fixed up some bugs from refactoring scan loop.
* Implemented CleanupService testing and refactored more of DirectoryService to be non-static.
Fixed a bug where cover file cleanup wasn't properly finding files due to a regex bug.
* Fixed an issue in CleanupBackup() where we weren't properly selecting database files older than 30 days. Finished CleanupService Tests.
* Refactored Flatten and RemoveNonImages to directory service to allow CacheService to be testable.
* Finally have CacheService tested. Rewrote GetCachedPagePath() to be much more straightforward & performant.
* Updated DefaultParserTests.cs to contain all existing tests and follow new test layout format.
* All tests fixed up
* Started with some basic plumbing with comic info parsing updating Series/Volume.
* We can now get chapter title from comicInfo.xml
* Hooked in the ability to store people into the chapter metadata.
* Removed no longer used imports, fixed up some foreign key constraints on deleting series with person linked.
* Refactored Summary out of the UI for Series into SeriesMetadata. Updated application to .net 6. There is a bug in metadata code for updating.
* Removed the parallel.ForEach with a normal foreach which lets us use async. For I/O heavy code, shouldn't change much.
* Refactored scan code to only check extensions with comic info, fixed a bug on scan events not using correct method name, removed summary field (still buggy)
* Fixed a bug where on cancelling a metadata request in modal, underlying button would get stuck in a disabled state.
* Changed how metadata selects the first volume to read summary info from. It will now select the first non-special volume rather than Volume 1.
* More debugging and found more bugs to fix
* Redid all the migrations as one single one. Fixed a bug with GetChapterInfo returning null when ChapterMetadata didn't exist for that Chapter.
Fixed an issue with mapper failing on GetChapterMetadata. Started work on adding people and a design for people.
* Fixed a bug where checking if file modified now takes into account if file has been processed at least once. Introduced a bug in saving people to series.
* Just made code compilable again
* Fixed up code. Now people for series and chapters add correctly without any db issues.
* Things are working, but I'm not happy with how the management of Person is. I need to take into account that 1 person needs to map to an image and role is arbitrary.
* Started adding UI code to showcase chapter metadata
* Updated workflow to be .NET 6
* WIP of updating card detail to show the information more clearly and without so many if statements
* Removed ChatperMetadata and store on the Chapter itself. Much easier to use and less joins.
* Implemented Genre on SeriesMetadata level
* Genres and People are now removed from Series level if they are no longer on comicInfo
* PeopleHelper is done with unit tests. Everything is working.
* Unit tests in place for Genre Helper
* Starting on CacheHelper
* Finished tests for ShouldUpdateCoverImage. Fixed and added tests in ArchiveService/ScannerService.
* CacheHelper is fully tested
* Some DI cleanup
* Scanner Service now calls GetComicInfo for books. Added ability to update Series Sort name from metadata files (mainly epub as comicinfo doesn't have a field)
* Forgot to move a line of code
* SortName now populates from metadata (epub only, ComicInfo has no tags)
* Cards now show the chapter title name if it's set on hover, else will default back to title.
* Fixed a major issue with how MangaFiles were being updated with LastModified, which messed up our logic for avoiding refreshes.
* Woohoo, more tests and some refactors to be able to test more services wtih mock filesystem. Fixed an issue where SortName was getting set as first chapter, but the Series was in a group.
* Refactored the MangaFile creation code into the DbFactory where we also setup the first LastModified update.
* Has file changed bug is now finally fixed
* Remove dead genres, refactor genre to use title instead of name.
* Refactored out a directory from ShouldUpdateCoverImage() to keep the code clean
* Unit tests for ComicInfo on BookService.
* Refactored series detail into it's own component
* Series-detail now received refresh metadata events to refresh what's on screen
* Removed references to Artist on PersonRole as it has no metadata mapping
* Security audit
* Fixed a benchmark
* Updated JWT Token generator to use new methods in .NET 6
* Updated all the docker and build commands to use net6.0
* Commented out sonar scan since it's not setup for net6.0 yet.
* Implemented a new widget to show when operations are occuring in the backend (tasks + progress events). Fixed an oversight on progress reporting where I sent 100F instead of 1F.
* Hooked in more progress events for tasks on the backend. Cleaned up code and integrated some RBS into it. CSS needed.
* Show a colored icon when events are active
* Added some styling to the progress widget
* Updated some signatures to avoid a ToArray() within a loop.
* Use UpdateSeries directly when adding new series, rather than a modified version for new series only.
* Refactored some messages for scanner loop to reduce duplicate code and write messages more clear. Hooked in a RefreshMetadataProgress event (no UI changes).
* Fixed a bug on docker where backup service was using different logic than non-docker, which isn't needed after config change last release.
* Allow user to make more than 1 backup per day
* Implemented a select all checkbox for library access modal
* Fixed an issue where backups were failing due to files being in config directory
* Changed up the exception messages to be more clear when a unique constraint fails on adding a new series.
* Added the actual index that is causing the conflict.
* Fixed a bug where partial volume support got missed on the epub parser.
* When a drive is unavailable during when a scan starts, abort so user doesn't loose half library if their networked drive goes down.
* Moved format for card details to highest level (since all chapters/files have same format) and added date added to each file to help when new chapters/files are added and grouped into a volume.
* Implemented handling on the UI when a series is deleted
* Added case for series removal for series detail
* Only redirect for this series
* Do not allow non-admins to change their passwords when authentication is disabled
* Clean up the login page so that input field text is black
* cleanup some resizing when typing a password and having a lot of users
* Changed the LastActive for a user to not just be login, but also when they open an already authenticated session.
* Removed some verbose debugging statements and moved some debug to information to be more prevelant to logs for default installs.
* In Progress now sends progress information on the Series
* Add ability to add cards to recently added when new series are added in backend
* Implemented the ability to click the glasses icon to turn off incognito mode from within the reader so you can start tracking progress
* Don't warn the user about authentication when they don't touch that control
* Fixed some issues with base url. All Scheduled jobs are now in user's timezone
* Hide Base Url support from UI and removed some code around it on the backend to prevent it from interfering. Patched back in changes from base-href branch like Timezone on scheduled jobs and enhanced logging.
* Added parser support for "2000 AD 0366 [1984-04-28] (flopbie)" and removed for "01 Spiderman 01".
* Implemented methods to parse out the whole ComicInfo file and a mock ComicInfo from epub files.
* Removed unused imports. ScanSeries needs to cleanup deleted chapters and call RefreshMetadata. Ensure after scan we cleanup tags without any series.
* Random cleanup
* Added some comments about data getting stale and not updating.
* Removed old Summary methods in favor of the ComicInfo versions
* Added a missing property
* Fixed unit test
* When flattening directories, ensure the order or directories being enumerated follows a natural sort. Some users are discovering directories in a different order than other machines.
* Added a case for volume parsing and fixed a poorly designed negative lookahead.
Added a sentence case pipe for formatting things.
Added time for all dates.
* Some more sentence case
* Register user now has a white input
* Fixed an issue with Manga up/down reading mode where top of the page was going forwards, when it should have gone backwards
* Reworked some code to ensure that scanseries doesn't show errors where in fact there was just nothing to update.
* Last updated should be working as intended for new library flow.
* Code smell
* Fixed an issue where ScanSeries would not fetch all the entities and thus files would get duplicated on the Chapter
* Remove building extra language binaries on build.
* Fixed an issue where first scan would cause an issue with websocket due to trying to send NaN over the wire.
* Fixed an issue where on new scans scan in progress indicators wouldn't turn off due to the way we were consuming events off the pipe.
* Ensure login page doesn't flash on first load
* Don't process touch events at all unless selection is enabled.
* Added a new field to Library for showing Last Scan time for a library.
Manage library page now shows last scan for each library. Tweaked the websocket code to make scan progress a bit more reliable.
* Updated docnet to provide ARM support from our recent PR. Pi users can now have a version for PDF support out of the box.
* Parser is now culture invariant to hopefully fix an issue on Italian systems not detecting . correctly
* Added the ability for the collection detail page to update when a new series is added.
* Fixed an issue where multiple chapters stacked in a volume and reading in incognito, wouldn't sort the chapters and would open the wrong one.
* Code smell
* Warn the user about the dangers of refresh metadata and promote them to use a scan instead.
* Removed presence hub and moved it over to message hub.
When a library scan is in progress, now a spinner will show on manage libraries page.
* Code cleanup
* Some performance refactoring around getting Library and avoid a byte[] copy for getting cover images for epubs.
* Initial commit. Rewrote the main series scan loop to use chunks of data at a time. Not fully shaken out.
* Hooked in the ability for the UI to react to series being added or removed from the DB.
* Cleaned up the messaging in the scan loop to be more clear.
* Metadata scan and scan work as expected and populate data to the UI. There is a slow down in speed for overall operation.
Scan series and refresh series metadata does not work fully.
* Fixed a bug where MangaFiles were not having LastModified Updated correctly, meaning they were opening archives every scan.
* Modified the code to be more realistic to the underlying file
* Updated ScanService to properly handle deleted files and not result in a higher-level scan.
* Shuffled around volume related repo apis to the volume repo rather than being in series.
* Rewrote scan series to be much cleaner and more concise on the flow. Fixed an issue in UpdateVolumes such that the debug code to log out removed volumes could throw an exception and actually break updating volumes.
* Refactored the code to set MangaFile last modified timestamp into the MangaFile entity.
* Added Series Name to ScanSeries event
* Added additional checks in ScanSeries to ensure we never go outside the library folder.
Added extra debug messages for when a metadata refresh doesn't actually make changes and for when we regen cover images.
* More logging statements saying where they originate from. Fixed a critical bug which caused only 1 chunk to ever be processed.
* Fixed a concurrency issue with natural sorter which could cause issues in ArchiveService.cs.
* Log cleanups
* Fixed an issue with logging out total time of a scan.
* Only show added toastrs for admins. When kicking off a refresh metadata for series, make sure we regenerate all cover images.
* Code smells on benchmark despite it being ignored
* Added volume migrations. Added parser case for "Chapter 63 - The Promise Made for 520 Cenz.cbr"
* Added some info statements for when full library scans occur. For image apis, return the name of the file to aid in caching.
* When managing users, show the current logged in user at the top of the list. Added a message when no libraries have been setup but you are trying to add a user to a library.