30 Commits

Author SHA1 Message Date
Joe Milazzo
47269b4c51
OPDS-PS v1.2 Support + a few bugfixes (#1869)
* Fixed up a localization lookup test case

* Refactored some webp to a unified method

* Cleaned up some code

* Expanded webp conversion for covers to all entities

* Code cleanup

* Prompt the user when they are about to delete multiple series via bulk actions

* Aligned Kavita to OPDS-PS 1.2.

* Fixed a bug where clearing metadata filter of series name didn't clear the actual field.

* Added some documentation

* Refactored how covert covers to webp works. Now we will handle all custom covers for all entities. Volumes and Series will not be touched but instead be updated via a RefreshCovers call. This will fix up the references much faster.

* Fixed up the OPDS-PS 1.2 attributes to only show on PS links
2023-03-09 16:41:42 -08:00
Joe Milazzo
b55d9e3994
CBL Import Rework (#1862)
* Fixed a typo in a log

* Invalid XML files now "validate" correctly by sending back a failure.

* Cleaned up messaging on backend and frontend to provide some linking on series name when collision, handle corrupt xml files, etc.

* When reading list conflict occurs, show the reading list name that's conflicting. Started refactoring the code to allow multiple files to be imported at once.

* Started adding new CBL elements for some enhancements I have planned with maintainers.

* Default to empty string for IpAddress to allow to fallback into existing experience

* Tweaked the layout of reading list page (not complete), moved some not used much controls to page extras and reordered the buttons for reading list

* Edit Reading Lists now allows selection of cover image from existing items

* Fixed a bug where cover chooser base64 to image would fail to write webp files.

* Refactored the validate step to now handle multiple files in one go.

* Clean up code

* Don't show CBL name if there were xml errors that prevented showing it

* Don't allow user to go prev step after they perform the import.

* Cleaned up the heading code for accordions

* Fixed a bug with import keeping failed items

* Sort the failures to the bottom of result windows

* CBL import is pretty solid. Need one pass from Robbie on Reading List Page
2023-03-07 13:18:26 -08:00
Joe Milazzo
5d1dd7b3f0
.NET 7 + Spring Cleaning (#1677)
* Updated to net7.0

* Updated GA to .net 7

* Updated System.IO.Abstractions to use New factory.

* Converted Regex into SourceGenerator in Parser.

* Updated more regex to source generators.

* Enabled Nullability and more regex changes throughout codebase.

* Parser is 100% GeneratedRegexified

* Lots of nullability code

* Enabled nullability for all repositories.

* Fixed another unit test

* Refactored some code around and took care of some todos.

* Updating code for nullability and cleaning up methods that aren't used anymore. Refctored all uses of Parser.Normalize() to use new extension

* More nullability exercises. 500 warnings to go.

* Fixed a bug where custom file uploads for entities wouldn't save in webP.

* Nullability is done for all DTOs

* Fixed all unit tests and nullability for the project. Only OPDS is left which will be done with an upcoming OPDS enhancement.

* Use localization in book service after validating

* Code smells

* Switched to preview build of swashbuckle for .net7 support

* Fixed up merge issues

* Disable emulate comic book when on single page reader

* Fixed a regression where double page renderer wouldn't layout the images correctly

* Updated to swashbuckle which support .net 7

* Fixed a bad GA action

* Some code cleanup

* More code smells

* Took care of most of nullable issues

* Fixed a broken test due to having more than one test run in parallel

* I'm really not sure why the unit tests are failing or are so extremely slow on .net 7

* Updated all dependencies

* Fixed up build and removed hardcoded framework from build scripts. (this merge removes Regex Source generators). Unit tests are completely busted.

* Unit tests and code cleanup. Needs shakeout now.

* Adjusted Series model since a few fields are not-nullable. Removed dead imports on the project.

* Refactored to use Builder pattern for all unit tests.

* Switched nullability down to warnings. It wasn't possible to switch due to constraint issues in DB Migration.
2023-03-05 12:55:13 -08:00
Joe Milazzo
a545f96a05
First PR of the new year (#1717)
* Fixed a bug on bookmark mode not finding correct image for prefetcher.

* Fixed up the edit series relationship modal on tablet viewports.

* On double page mode, only bookmark 1 page if only 1 pages is renderered on screen.

* Added percentage read of a given library and average hours read per week to user stats.

* Fixed a bug in the reader with paging in bookmark mode

* Added a "This Week" option to top readers history

* Added date ranges for reading time. Added dates that don't have anything, but might remove.

* On phone, when applying a metadata filter, when clicking apply, collapse the filter automatically.

* Disable jump bar and the resuming from last spot when a custom sort is applied.

* Ensure all Regex.Replace or Matches have timeouts set

* Fixed a long standing bug where fit to height on tablets wouldn't center the image

* Streamlined url parsing to be more reliable

* Reduced an additional db query in chapter info.

* Added a missing task to convert covers to webP and added messaging to help the user understand to run it after modifying the setting.

* Changed OPDS to be enabled by default for new installs. This should reduce issues with users being confused about it before it's enabled.

* When there are multiple files for a chapter, show a count card on the series detail to help user understand duplicates exist. Made the unread badge smaller to avoid collision.

* Added Word Count to user stats and wired up average reading per week.

* Fixed word count failing on some epubs

* Removed some debug code

* Don't give more information than is necessary about file paths for page dimensions.

* Fixed a bug where pagination area would be too small when the book's content was less that height on default mode.

* Updated Default layout mode to Scroll for books.

* Added bytes in the UI and at an API layer for CDisplayEx

* Don't log health checks to logs at all.

* Changed Word Count to Length to match the way pages work

* Made reading time more clear when min hours is 0

* Apply more aggressive coalescing when remapping bad metadata keys for epubs.

* Changed the amount of padding between icon and text for side nav item.

* Fixed a NPE on book reader (harmless)

* Fixed an ordering issue where Volume 1 was a single file but also tagged as Chapter 1 and Volume 2 was Chapter 0. Thus Volume 2 was being selected for continue point when Volume 1 should have been.

* When clicking on an activity stream header from dashboard, show the title on the resulting page.

* Removed a property that can't be animated

* Fixed a typeahead typescript issue

* Added Size into Series Info and Added some tooltip and spacing changes to better explain some fields.

* Added size for volume drawers and cleaned up some date edge case handling

* Fixed an annoying bug where when on mobile opening a view with a metadata filter, Kavita would open the filter automatically.
2023-01-02 14:44:29 -08:00
Joe Milazzo
b62d340bb3
Performance Improvements and Some Polish (#1702)
* Auto scale reading timeline

* Added benchmarks for SharpImage and NetVips. When an epub has a malformed page, catch the error and present it better to the user.

* Added a hint for an upcoming feature

* Slightly sped up word count for epubs

* Added one more test to reflect actual code.

* Some light cleanup

* Use compact number for stat lists

* Fixed brightness being broken on manga reader

* Replaced CoverToWebP SharpImage version with NetVips which is MUCH lighter on memory and CPU.

* Added last modified on the progress dto for CdDisplayEx.

* Code cleanup

* Forgot one cleanup
2022-12-17 07:07:30 -08:00
Joe Milazzo
089658e469
UX Alignment and bugfixes (#1663)
* Refactored the design of reading list page to follow more in line with list view. Added release date on the reading list items, if it's set in underlying chapter.

Fixed a bug where reordering the list items could sometimes not update correctly with drag and drop.

* Removed a bug marker that I just fixed

* When generating library covers, make them much smaller as they are only ever icons.

* Fixed library settings not showing the correct image.

* Fixed a bug where duplicate collection tags could be created.

Fixed a bug where collection tag normalized title was being set to uppercase.

Redesigned the edit collection tag modal to align with new library settings and provide inline name checks.

* Updated edit reading list modal to align with new library settings modal pattern. Refactored the backend to ensure it flows correctly without allowing duplicate names.

Don't show Continue point on series detail if the whole series is read.

* Added some more unit tests around continue point

* Fixed a bug on series detail when bulk selecting between volume and chapters, the code which determines which chapters are selected didn't take into account mixed layout for Storyline tab.

* Refactored to generate an OpenAPI spec at root of Kavita. This will be loaded by a new API site for easy hosting.

Deprecated EnableSwaggerUi preference as after validation new system works, this will be removed and instances can use our hosting to hit their server (or run a debug build).

* Test GA

* Reverted GA and instead do it in the build step. This will just force developers to commit it in.

* GA please work

* Removed redundant steps from test since build already does it.

* Try another GA

* Moved all test actions into initial build step, which should drastically cut down on time. Only run sonar if the secret is present (so not for forks). Updated build requirements for develop and stable docker pushes.

* Fixed env variable

* Okay not possible to do secrets in if statement

* Fixed the build step to output the openapi.json where it's expected.
2022-11-20 12:32:21 -08:00
Joe Milazzo
73d77e6264
Library Settings Modal + New Library Settings (#1660)
* Bump loader-utils from 2.0.3 to 2.0.4 in /UI/Web

Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fixed want to read button on series detail not performing the correct action

* Started the library settings. Added ability to update a cover image for a library.

Updated backup db to also copy reading list (and now library) cover images.

* Integrated Edit Library into new settings (not tested) and hooked up a wizard-like flow for new library.

* Fixed a missing update event in backend when updating a library.

* Disable Save when form invalid. Do inline validation on Library name when user types to ensure the name is valid.

* Trim library names before you check anything

* General code cleanup

* Implemented advanced settings for library (include in dashboard, search, recommended) and ability to turn off folder watching for individual libraries.

Refactored some code to streamline perf in some flows.

* Removed old components replaced with new modal

* Code smells

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 09:38:32 -06:00
Joe Milazzo
e75b208d59
WebP Covers + Series Detail Enhancements (#1652)
* Implemented save covers as webp. Reworked screen to provide more information up front about webp and what browsers can support it.

* cleaned up pages to use compact numbering and made compact numbering expand into one decimal place (20.5K)

* Fixed an issue with adding new device

* If a book has an invalid language set, drop the language altogether rather than reading in a corrupted entry.

* Ensure genres and tags render alphabetically.

Improved support for partial volumes in Comic parser.

* Ensure all people, tags, collections, and genres are in alphabetical order.

* Moved some code to Extensions to clean up code.

* More unit tests

* Cleaned up release year filter css

* Tweaked some code in all series to make bulk deletes cleaner on the UI.

* Trying out want to read and unread count on series detail page

* Added Want to Read button for series page to make it easy to see when something is in want to read list and toggle it.

Added tooltips instead of title to buttons, but they don't style correctly.

Added a continue point under cover image.

* Code smells
2022-11-14 06:43:19 -08:00
Joseph Milazzo
9cf4cf742b
Reader Bugs + New Features (#1536)
* Updated a typo in manage tasks of Reoccuring -> Recurring

* Fixed a bug in MinimumNumberFromRange where a regex wasn't properly constructed which could skew results.

* Fixed a bug where Volume numbers that were a float wouldn't render correctly in the manga reader menu.

* Added the ability to double click on the image to bookmark it. Optimized the bookmark and unbookmark flows to remove 2 DB calls and reworked some flow of calls to speed it up.

Fixed some logic where when using double (manga) flow, both of the images wouldn't show the bookmark effect, despite both of them being saved. Likewise, fixed a bug where both images weren't updating UI state, so switching from double (manga) to single, the second image wouldn't show as bookmarked without a refresh.

* Double click works perfectly for bookmarking

* Collection cover image chooser will now prompt with all series covers by default.

Reset button is now moved up to the first slot if applicable.

* When a Completed series is fully read by a user, a nightly task will now remove that series from their Want to Read list.

* Added ability to trigger Want to Read cleanup from Tasks page.

* Moved the brightness readout to the label line and fixed a bootstrap migration bug where small buttons weren't actually small.

* Implemented ability to filter against release year (min or max or both).

* Fixed a log message that wasn't properly formatted when scan finished an no files changes.

* Cleaned up some code and merged some methods

* Implemented sort by Release year metadata filter.

* Fixed the code that finds ComicInfo.xml inside archives to only check the root and check explicitly for casing, so it must be ComicInfo.xml.

* Dependency updates

* Refactored some strings into consts and used TriggerJob rather than just enqueuing

* Fixed the prefetcher which wasn't properly loading in the correct order as it was designed.

* Cleaned up all traces of CircularArray from MangaReader

* Removed a debug code

* Fixed a bug with webtoon reader in fullscreen mode where continuous reader wouldn't trigger

* When cleaning up series from users' want to read lists, include both completed and cancelled.

* Fixed a bug where small images wouldn't have the pagination area extend to the bottom on manga reader

* Added a new method for hashing during prod builds and ensure we always use aot

* Fixed a bug where the save button wouldn't enable when color change occured.

* Cleaned up some issues in one of contributor's PR.
2022-09-16 06:06:33 -07:00
Joseph Milazzo
85790dd71c
Scan Loop Last Write Time Change (#1492)
* Refactored invite user flow to separate error handling on create user flow and email flow. This should help users that have unique situations.

* Switch to using files to check LastWriteTime. Debug code in for Robbie to test on rclone

* Updated Parser namespace. Changed the LastWriteTime to check all files and folders.
2022-08-30 08:29:09 -07:00
Joseph Milazzo
88b5ebeb69
Security Hotfix (#1415)
* Updated ngx-extended-pdf-viewer to 14.5.2 + misc security vuln

* Hooked up remove from want to read AND fixed a bug in the logic that was removing everything BUT what was passed.

Allow for bookmarks to have date info for better ordering.

* Implemented a quick way to set darkneses level on manga reader for when nightlight just isn't dark enough

* Added Japanese Series name support in the Parser

* Updated our security file with our Huntr.

* Fixed a security vulnerability where through the API, an unauthorized user could delete/modify reading lists that did not belong to them.

Fixed a bug where when creating a reading list with the name of another users, the API would throw an exception (but reading list would still get created)

* Ensure all reading list apis are authorized

* Ensured all APIs require authentication, except those that explicitly don't. All APIs are default requiring Authentication.

Fixed a security vulnerability which would allow a user to take over an admin account.

* Fixed a bug where cover-upload would accept filenames that were not expected.

* Explicitly check that a user has access to the pdf file before we serve it back.

* Enabled lock out when invalid user auth occurs. After 5 invalid auths, the user account will be locked out for 10 mins.
2022-08-08 13:47:37 -07:00
Joseph Milazzo
4e49aa47ce
Change Detection: On Push aka UI Smoothness (#1369)
* Updated Series Info Cards to use OnPush and hooked in progress events when we do a mark as read/unread on entities. These events update progress bars but also will now trigger a re-calculation on Read Time Left.

* Removed Library Card Component

* Refactored manga reader title and subtitle calculation to the backend.

* Coverted card actionables to onPush

* Series Card on push cleanup

* Updated edit collection tags for on push

* Update cover image chooser for on push

* Cleaned up carsouel reel

* Updated cover image to allow for uploading gif and webp files

* Bulk add to collection on push

* Updated bulk operation to use on push. Updated bulk operation to have mark as unread and read buttons explicitly. Updated so add to collection is visible and delete.

Fixed a bug where manage library component wasn't invoking the trackBy function

* Updating entity title for on push

* Removed file info component

* Updated Mange Library for on push

* Entity info cards on push

* List item on push

* Updated icon and title for on push and fixed some missing change detection on series detail

* Restricted the typeahead interface to simplify the design

* Edit Series Relation now shows a value in the dropdown for Parent relationships and disables the field.

* Updated edit series relation to focus on new typeahead when adding a new relationship

* Added some documentation and when Scanning a library, don't allow the user to enqueue the same job multiple times.

* Applied the No-enqueue if already enqueued logic to other tasks

* Library detail on push

* Updated events widget to onpush

* Card detail drawer on push. Card detail cover chooser now will show all chapter's covers for selection in cover chooser.

* Chapter metadata detail on push

* Removed Card Detail modal

* All collections on push

* Removed some comments

* Updated bulk selection to use an observable rather than function calls so new on push strategy works

* collection detail now uses on push and scroller is placed on correct element

* Updated library recommended to on push. Ensure that when mark as read occurs, the appropriate streams are refreshed.

* Updated library detail to on push

* Update metadata fiter to onpush. Bugs found and reported to Project

* person badge on push

* Read more on push

* Updated tag badge to on push

* User login on push

* When initing side nav, don't call an authenticated api until we are sure a user is logged in

* Updated splash container to on push

* Dashboard on push

* Side nav slight refactor around some api calls

* Cleaned up series card on push to use same cdRef naming convention

* Updated Static Files to use caching

* Added width and height to logo image

* shortcuts modal on push

* reading lists on push

* Reading list detail on push

* draggable ordered list on push

* Refactored reading-list-detail to use a new item which drastically reduces renders on operations

* series format on push

* circular loader on push

* Badge Expander on push

* update notification modal on push

* drawer on push

* Edit Series Modal on push

* reset password on push

* review series modal on push

* series metadata detail on push

* theme manager on push

* confirm reset password on push

* register on push

* confirm migration email on push

* confirm email on push

* add email to account migration on push

* user preferences on push. Made global settings default open

* edit series relation on push

* Fixed an edge case bug for next chapter where if the current volume had a single chapter of 1 and the next volume had a chapter number of 0, it would say there are no more chapters.

* Updated infinite scroller with on push support

* Moved some animations over to typeahead, not integrated yet.

* Manga reader is now on push

* Reader settings on push

* refactored how we close the book

* Updated table of contents for on push

* Updated book reader for on push. Fixed a bug where table of contents wasn't showing current page anchor due to a scroll calulation bug

* Small code tweak

* Icon and title on push

* nav header on push

* grouped typeahead on push

* typeahead on push and added a new trackby identity function to allow even faster rendering of big lists

* pdf reader on push

* code cleanup
2022-07-11 08:57:07 -07:00
Joseph Milazzo
bbc48a5f5b
Infinite Scroll + List View + Cover Upload Redesign (#1319)
* 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>
2022-06-13 14:37:49 -07:00
Joseph Milazzo
e0a2fc615f
UX Changes, Tasks, WebP, and More! (#1280)
* 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
2022-05-23 16:19:52 -07:00
Joseph Milazzo
553f9b0d98
Fixes, Tweaks, and Series Filtering (#1217)
* 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
2022-04-14 14:55:06 -07:00
Joseph Milazzo
3bbb02f574
On Deck + Misc Fixes and Changes (#1215)
* 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
2022-04-11 15:43:40 -07:00
Joseph Milazzo
0e2fafe396
Took care of SonarCloud code issues (#1041) 2022-02-07 05:30:28 -08:00
Joseph Milazzo
fb71d54fe6
Misc Fixes and Changes (#927)
* 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
2022-01-12 15:00:00 -08:00
Joseph Milazzo
3b90ef96b5
Misc Fixes (#839)
* 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
2021-12-08 11:27:54 -08:00
Joseph Milazzo
af24c928d7
Feature/local metadata more tags (#832)
* 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.
2021-12-06 11:59:47 -08:00
Joseph Milazzo
bbe8f800f6
.NET 6 Coding Patterns + Unit Tests (#823)
* 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
2021-12-05 08:58:53 -08:00
Joseph Milazzo
a29b11c366
Breaking Changes: Docker Parity (#698)
* Refactored all the config files for Kavita to be loaded from config/. This will allow docker to just mount one folder and for Update functionality to be trivial.

* Cleaned up documentation around new update method.

* Updated docker files to support config directory

* Removed entrypoint, no longer needed

* Update appsettings to point to config directory for logs

* Updated message for docker users that are upgrading

* Ensure that docker users that have not updated their mount points from upgrade cannot start the server

* Code smells

* More cleanup

* Added entrypoint to fix bind mount issues

* Updated README with new folder structure

* Fixed build system for new setup

* Updated string path if user is docker

* Updated the migration flow for docker to work properly and Fixed LogFile configuration updating.

* Migrating docker images is now working 100%

* Fixed config from bad code

* Code cleanup

Co-authored-by: Chris Plaatjes <kizaing@gmail.com>
2021-11-03 06:36:04 -07:00
Joseph Milazzo
2727dfa7b9
Book Polishing (#639)
* Downgraded ExCSS, the new version has a regression that breaks toCss().

* Cleaned up the next/prev disabling to work more reliably.

Fixed an issue with double arrow on next not disappearing after hitting last page then going back one page.

* Cleaned up some css padding on the side nav progress bar

* Remove the ability to save

* Updated colors of nav bar and side drawer to be darker to separate them from the reader

* Fixed a missed element

* Removed dead code

* Removed TODO, it can't be changed

* Refactored bookmarking on the book progress to have pinpoint accuracy for remembering scroll position. Now will choose the top line on the page.

* Fixed a style issue when applying dark mode from light mode in book reader
2021-10-05 17:42:43 -07:00
Joseph Milazzo
f17d89ea47
ComicInfo Refactor (#636)
* 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
2021-10-04 16:10:48 -07:00
Joseph Milazzo
56cf7be799
Scan Chunking (#604)
* 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
2021-09-30 06:08:05 -07:00
Joseph Milazzo
82b5b599e0
Foundational Cover Image Rework (#584)
* 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
2021-09-21 19:15:29 -05:00
Joseph Milazzo
cf4fd2cb9c
Bugs, Enhancements, and Performance (#580)
* 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
2021-09-15 11:06:29 -07:00
Joseph Milazzo
68bb5ed5a8
Feature/bookmark feedback (#508)
* ImageService had a stream reset before writting out to array. Added logging statment for updating series metadata. Removed ConcurencyCheck due to bad update issue for CollectionTag.

* Added a new screen which lets you quickly see all your bookmarks for a given user.

* Built user bookmark page in user settings. Moved user settings to it's own lazy loaded module. Removed unneded debouncing from downloader and just used throttleTime instead.

* Removed a not-yet implemented tab from series modal

* Fixed a bug in clear bookmarks and adjusted icons within anchors to have proper styling
2021-08-18 17:16:05 -07:00
Joseph Milazzo
2fd02f0d2b
Custom Cover Images (#499)
* 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
2021-08-15 10:36:47 -07:00
Joseph Milazzo
2a34fe4cc7
The big one (#396)
* Refactored library card to have a custom implemenation using icons rather than images. In addition, swapped out font awesome with official version.

* Replaced pull-right with float-right due to updated bootstrap version.

* Added a new section to admin dashboard

* Added some menu system for reader, fit to width, height or original. Temp hack to make background black.

* Ability to set nav bar completely off from some pages. Removed test case that isn't used.

* Restore nav bar after reading

* Implemented ability to delete a series directly and scan from a series.

* Implemented some basic prefetching capabilities (just next page) and implemented proper reading direction support with a toggle.

* Added a no connection route for if backend goes down. Removed go to page functionality as it isn't really needed and overly complicated.

* Implemented ability to track progress and view it at a series level

* Read status enhancements, cleaned up card code a bit, styling changes on nav bar dropdown, read or continue functionality for series detail page.

* Fixed a few bugs around registering and refactored APIs to match backend.

* Lots of cleanup of the code and TODOs. Improved responsiveness on series detail page.

* Missed some changes

* Implemented ability to rate a series. review text will come in v0.2.

* Reverted some debug code for reader menu always being open. Added loader to reader as well.

* Setup for building prod for releasing Kavita server.

* After we create an admin for first time flow, refresh page so they can login.

* Small change to help user get to server settings to setup libraries

* Implemented ability to save what tab you are on or link directly to tab for admin dashboard.

* Implemented ability to reset another users password. Tweaked how error interceptor reacted to OK messages.

* Implemented general settings. Have ability to change cache directory, but disabled on BE.

* Remove SSL

* Implemented Volume 0's for series detail.

* Compressed image-placeholder and implemented refresh metadata. Refresh metadata will update cover images while scan library will just fix matching, etc.

* Refactored for backened architectural changes. Fixed some bugs around read progress off by one.

* Fixed some styling around grid layout for volume then chapters.

* On unauthorized, force logout then redirect to login page.

* Don't throw multiple toasters when somthing goes wrong due to backend going down.

* Implemented the ability to see and update server settings.

* Implemented user preferences and ability to update them. Fixed a bug in production code such that API requests are made on current domain.

* Small fixes around the app and server setting for port.

* Fixed some styling to look better on mobile devices and overflow text to eclipse.

* Cleanup and implemented card details for Volume/Chapters.

* Small tweak to card details

* Mark as Read/unread on Volumes now implemented.

* Cleaned up some code, integrated user settings into manga reader, took care of some todos.

* Forgot to sort chapters

* Fixed issue in card details with string concatentation

* Updated the Manga Reader to be better looking and simplier (code) on Desktop devices.

* Added more responsive breakpoints for overlay to look much better on more screen sizes

* Some changes for tablet. Clear out localStorage that is older than 1 page of what you're reading.

* Fix bug for continuing where you last left off.

* Fixed a bug where continue reading didn't take into account chapters.

* Cleaned up imports and added autocomplete skeleton.

* Small UX enhancements

* Moved manga-reader into it's own module to lessen default package size

* Removed route guards from reader module as it is handled by parent module.

* Responsive pass through on Series Detail page.

* Cleaned up containers and tooltips.

* Tooltip for icon only buttons

* Library editor modal cleanup

* Implemented nav bar for directory picker.

* Removed console.log

* Implemented a basic search for Kavita. Along the way did some CSS changes and error interceptor messages are better.

* Implemented a re-usable base64 image that can be styled. Not as easy as using inline styling, but easy to use.

* View encapsulation off so we can easily size these images.

* Implemented typeahead search for nav bar.

* Fix a bug when route parameters change, the series detail page wasn't updating with new information

* Implemented page splitting

* Cleaned up Card Details and split into 2 separate versions with unified Look and Feel.

* Implemented ability to mark a series as read/unread.

* Implemented Jump to First/Last page functionality as shortcuts to goToPage.

* Implemented pagination on Library Detail page

* Restore scroll position to the top on page route change

* Not sure if this changes anything, but IDE doesn't complain

* Added a cutsom favicon and small tweak on UI for library pagination controls.

* Bugfix to take into account currently reading chapter for read/continue button

* Implemented user reviews

* Forgot to hook up one click handler

* Only admins can edit a series

* Implemented edit series page. Many fields are not yet supported for modification.

* Hooked in Edit Series into backend. Fixed an ngIf on edit review button.

* Switched over existing series info modal to use the new edit one.

* Partially implemented download logs. Removed some files not needed and trialing css changes on actions menu for card items.

* Integrated Jest for Unit Testing and added one test case. Will expand and integrate into work flow.

* Cleaned up some mobile breakpoint styles. Looks much better on a phone.

* A bit more css around phones to make reader menu useable.

* Removed series-card-detail since it's been replaced with edit-series-modal.

* Implemented save logs

* Small cleanup

* More responsive breakpoint tweaks for nav bar.

* Fetching logs is fixed

* Bugfix: Search bar was visible for non-authenticated users

* Implemented the ability to correct (manually) a series title and for it to persist between scans. Small QoL changes throughout codebase.

* Added some broken test setup.

* Disable comments must start with space lint rule.

* Fixed issue where tablets wouldn't be able to render all images.

* Migrated code off localStorage and used one api to get information about chapter.

* Cleaned up the code now that we are loading images differently.

* Use circular array to cache image requests so that we can ensure next image is instantaneously available.

* Some fixes around ensuring we don't prefetch when going back a page and ensuring prefetch doesn't fetch more pages than there are left.

* Fixed #70: When marking as read from volume level, completion was off by 1 thus series level didn't show as completed.

* Fixed #72. Missing an else statement which allowed another navigate to override the correct code. Refactored hasReadingProgress to be set in setContinuePoint

* Cleaned up the User button in nav bar to be cleaner

* Implemented a custom confirm/alert service so that I have complete control over style.

* Missed LGTM exception

* First pass at removing base64 strings for images and using lazy loaded binary file images.

* Only load images that are within view (scroll port)

* Not connected message needs more top margin

* Move image handling to it's own service. Add transition for loading images and some cleanup

* Misc cleanup

* Refactored action items to a factory

* Refactored the card item actionables into factory and moved actionable rendering into one component

* Added an optional btn class input to allow styling menu as a button.

* Implemented the ability to reset your individual password.

* Wrong reset after resetting password

* Don't let user set log level. Not sure it's possible to implement in ASP.NET

* Implemented a carousel for streams component. Still needs some CSS and tweaking. Added some temp API endpoints for streams. Fixed a bug where after editing name on series underlying card didn't reflect.

* Everything but the css is done

* CSS done. Carousel components implemented

* More CSS stuff

* Small css change

* Some cleanup on code

* Add  aria-hidden="true" on icons

* Fixed css issue due to missing class

* Made scrolling carousel feel better on more screen sizes

* Fixed bug where confirm default buttons would all be cancel.

* Replaced placeholder image with a kavita placeholder. Added a theme folder for standardizing colors. Cleaned up some css here and there.

* Removed a dependency no longer needed. Implemented history based pagination for library detail page.

* Changed MangaFile numberOfPages to Page to match with new migration

* Fixed issue where if no chapters, we were just doing console.error instead of informing the user (should never happen)

* Add a todo for a future feature

* Implemented loading on series-detail volume section and fixed an issue where the whole series is just one volume and it's a special aka we can't parse vol/chapter from it, so it renders appropriately

* Fixed a rare issue where split pages would quickly flash both sides due to previously that page being fetched via onload and thus when render called, render got recalled.

* Fixed an off by 1 issue due to the fact that reading is 0-based and everything else is 1 based. (#94)

* Fixed an off by 1 issue due to the fact that reading is 0-based and everything else is 1 based. (#94) (#95)

* Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" (#96)

* Bugfixes! (#99)

* Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials"

* Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal.

* Fixed the date format showing days before months.

* Fixed a bug with scrollable modals for context info modals.

* Fixed a bug where adding a folder to a library added a / before the path, thus breaking on linux. (#101)

* Bugfixes (#103)

* Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials"

* Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal.

* Fixed the date format showing days before months.

* Fixed a bug with scrollable modals for context info modals.

* Last modified on chapters didn't really s how well and made no sense to show, removed it.

* Preparing for feature

* CSS adjustment for admin dashboard

* First flow, ensure we go directly to library tab

* When a user registers for first time, put them on login instead of relying on home page redirection.

* Fixed an issue with directory picker where the path separators didn't work for both linux and windows systems.

* Implement comic support (#104)

* Implement comic support

* Any disabled controls should show not-allowed pointer.

* Fixed a scroll bug on modal

* On connection lost, restore to previous page (#106)

* Implement comic support

* Any disabled controls should show not-allowed pointer.

* Fixed a scroll bug on modal

* If the server goes down between sessions and we go to not-connected page, try to restore previous route when connection regained.

* Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in. (#108)

* Error Cards (#110)

* Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in.

* Implemented a marker to inform the user that some archives can't be parsed.

* Don't show scrollbar if we don't have enough height to overflow

* Shows an error card when the underlying archive could not be read at all.

* Changed the card up

* Special grouping (#115)

* Implemented splitting specials into their own section for individual reading. Requires up to date backend for db changes.

* Cleaned up the code

* Replace underscores on specials if they exist. A simple name cleaning.

* Lots of Fixes (#126)

* Fixed After editing a user's library access, the Sharing details aren't updating without a refresh #116

* Fixed Series Summary & Review do not respect newline characters #114

* Default to non-specials tab and don't destroy DOM between tab changes

* Align UI api with backend

* Library icon should be "manga" for comic and Manga

* Fixed Mark Series as Read in series detail page doesn't update the volume/chapter cards unless page is refreshed. #118

* Fixed Defect: 2 Split pages in a row causes second page to not split #112

* Fixed an issue if last page is a splitpage, we wouldn't be able to see the other side of the split.

* When jumping to begining and end and both first page and last page are splitpages, make sure we set the paging direction so user can view both pages.

* Make sure we take into account splits when we try jump to first page then try to go "back" to the other split.

* Cleaned up split code a bit

* Fixed Go to Page is off by one #124

* Fixed Read button is showing continue when a show doesn't have any progress on it #121

* Implemented Read more component (Fixes #117)

* Fixed a bug in gotopage where if you went to maxPages or greater, we would always - 1 from page number.

* Forgot to commit this for Readmore component

* tslint cleanup

* Implemented Refactor Review to be bound to the star control rather than having a text review so the user can review without rating. #125

* Fixes #119 - 0 Volumes with 0 chapters were showing as specials, but should be in the special tab.

* Fixed an issue from reverting scanSeries code.

* Handle specials with a little more care

* Fixed #138. Search wasn't showing localizedName due to a rendering issue.

* Fixed an issue where L2R didn't handle multiple split pages in a row.

* Code smells

* Ensure we wipe context actions for library between login/logouts

* Fixed loading series after marking searies unread/read (#135)

* Removed isSpecial from volume (#137)

* Bugfix/gotopage (#139)

* Fixed #138

* Fixed #131 - getStem no longer removes the substring if lastPath is same as path.

* Implements Issue #129 - There is now a close book button on the menu

* Book Support (#141)

* Refactored Library Type dropdown to use an API so UI/Backend is in sync.

* Implemented the ability to load the book reader

* Book support but none of this works. Just here to keep track as I switch to other bugs

* Basic iframe implementation is now working

* Needed changes to load the content into native div rather than via iframe.

* We now have the ability to customize how we render the text.

* Removed console.log

* Implemented the ability to loadpages from remapped anchors from backend.

* Removed epubjs references and implemented table of contents api.

* Code now works for chapters with nested chapters

* Lots of changes, most of the reader is half baked, but foundation is there.

* Changed styles up a bit

* Implemented the ability to scroll to a part within a book. Added a custom font to test out.

* Show active page with a bolding when there are nested chapters

* Chapter group titles are now clickable

* Added the ability to set top offset in drawer

* Finally got style overrides to work and some other stuff

* User can now toggle menu with space

* Ensure styles don't leak. Drawer bottom was cutoff. On phone devices, default margins should be 0%.

* Use smooth scrolling when navigating between pages with scroll offset

* Added some code for checking when all images on page are loaded, added a fade in animation (doesnt work) and some media queries for top bar.

* Refactored all data structures in application into shared module

* CSS changes

* Fixed part selector query due to improper ids, now we use a more robust query type. Implemented a stack for adhoc clicks, so user can explore a bit but pagination is based on current page.

* Reverted sidenav changes. Fixed scrollTo to be more reliable with how the content comes into view.

* When you make an adhoc link jump, we now restore page and scroll position.

* Hooked in basic preferences for books and force margin settings for mobile devices.

* Book overrides now work all the time. Added a bunch of fonts for users to try out.

* Added all font faces

* A bit hacky, but darkMode now works for the reader.

* Remove styles on destroy

* First time users will have their menu open automatically

* Book format now shows on card details modal

* changed how margin updates to make more sense

* Fixed flashing by applying an opacity transition on page change.

* Code cleanup

* Reverted changes to unify series-detail page. Added some extra accessibility for book reader.

* Implement the ability to close drawer by clicking into the reader area

* Don't let the user page past where they should be able to

* Allow user to see the underlying values of customizations and when they save them, actually reset to their preferences

* Responsive top for sticky header

* Code smells

* Implemented the ability to update book settings from user settings

* code smells

* Code smells and max/mins on reader should match the user pref area

* Feature/feats and fixes (#144)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Feature/feats and fixes (#146)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Use margin-top instead of top for offsetting top

* Add a little extra spacing just in case

* Updated carousel to use a swpier

* Increased the budget and changed how vendor module is created

* Added some todos

* Implemented the ability to suppress library link on cards

* Fixed an issue with top offset for reading section

* Added the action bar to the bottom when user scrolls all the way down (Feedback)

* Added in a skip to content link for top nav

* After performing an action on library page, refresh the data on page.

* Implemented the ability to refresh metadata of a single series directly

* Implemented a progress bar for reading and a go to page by clicking the progress bar

* Only show the bottom action bar when there is a scrollbar

* Implemented the ability to tap the sides of book reader to paginate

* Book Feedback and Fixes (#147)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Use margin-top instead of top for offsetting top

* Add a little extra spacing just in case

* Updated carousel to use a swpier

* Increased the budget and changed how vendor module is created

* Added some todos

* Implemented the ability to suppress library link on cards

* Fixed an issue with top offset for reading section

* Added the action bar to the bottom when user scrolls all the way down (Feedback)

* Added in a skip to content link for top nav

* After performing an action on library page, refresh the data on page.

* Implemented the ability to refresh metadata of a single series directly

* Implemented a progress bar for reading and a go to page by clicking the progress bar

* Only show the bottom action bar when there is a scrollbar

* Implemented the ability to tap the sides of book reader to paginate

* Cleaned up carousel and fixed breakpoints so we always at least show 2 cards.

* Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers.

* Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons.

* Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on.

* Book Feedback (#148)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Use margin-top instead of top for offsetting top

* Add a little extra spacing just in case

* Updated carousel to use a swpier

* Increased the budget and changed how vendor module is created

* Added some todos

* Implemented the ability to suppress library link on cards

* Fixed an issue with top offset for reading section

* Added the action bar to the bottom when user scrolls all the way down (Feedback)

* Added in a skip to content link for top nav

* After performing an action on library page, refresh the data on page.

* Implemented the ability to refresh metadata of a single series directly

* Implemented a progress bar for reading and a go to page by clicking the progress bar

* Only show the bottom action bar when there is a scrollbar

* Implemented the ability to tap the sides of book reader to paginate

* Cleaned up carousel and fixed breakpoints so we always at least show 2 cards.

* Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers.

* Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons.

* Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on.

* Fixed issue where errors from login flow would not throw a toastr

* Moved the progress bar and go to page into the side drawer to be less distracting when reading

* Removed console.logs

* Cleaned up styles on slider to be closer to size of cards

* Fixed an issue with swiper not allowing use of touch (#149)

* Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages. (#151)

* Bugfix/in progress (#156)

* Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages.

* Actually fix in progress by only incrementing page num on bookmark when we are on the last page

* Impleents tap to paginate user setting. (#157)

* Feature/manga reader (#160)

* Implemented pressing G to open go to page. Enhanced the dialog to give how many pages you can go to. On page splitting button press, if the current page needs splitting, we will re-render with the new option.

* Added gotopage shortcut key for book reader

* Setup for new feature

* Swiper now respects card sizes

* Fixes #51 and updates dependencies for security vulnerabilities

* Implemented back to top button

* Remove the - 1 hack from series-detail

* Remove hack from carad item

* Fix a regression where book reader would +1 pageNum for bookmarking on last page, but because books don't start at 0 for page nums, it isn't necessariy

* Implemented the ability to move between volumes automatically

* Additional security fix

* Code smells

* Cleaned up the implementation to properly prevent pagination when loading next chapter/volume

* v0.4 Last touches (#162)

* PurgeCSS integration

* Changed some icons to have titles

* Automatic scaling changes

* Removed 2 font families that didn't make the release cut. Fixed an off by 1 regression with setContinuePoint

* Backed out purge css after testing

* Some cleanup of the package

* Automatic scaling adjustments

* Bugfix/release shakeout (#164)

* Fixed body color not being reset due to capturing it too late

* Removed some dead code

* v0.4 merge to stable (#165)

* Fixed an off by 1 issue due to the fact that reading is 0-based and everything else is 1 based. (#94)

* Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials" (#96)

* Bugfixes! (#99)

* Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials"

* Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal.

* Fixed the date format showing days before months.

* Fixed a bug with scrollable modals for context info modals.

* Fixed a bug where adding a folder to a library added a / before the path, thus breaking on linux. (#101)

* Bugfixes (#103)

* Fixed an issue where special case that handles no volumes was showing also when chapters also existed. Renamed "Chapter 0" as "Specials"

* Fixed a typo resulting in pages not rendering on edit series modal. Ensure chapters are sorted on edit series and card details modal.

* Fixed the date format showing days before months.

* Fixed a bug with scrollable modals for context info modals.

* Last modified on chapters didn't really s how well and made no sense to show, removed it.

* Preparing for feature

* CSS adjustment for admin dashboard

* First flow, ensure we go directly to library tab

* When a user registers for first time, put them on login instead of relying on home page redirection.

* Fixed an issue with directory picker where the path separators didn't work for both linux and windows systems.

* Implement comic support (#104)

* Implement comic support

* Any disabled controls should show not-allowed pointer.

* Fixed a scroll bug on modal

* On connection lost, restore to previous page (#106)

* Implement comic support

* Any disabled controls should show not-allowed pointer.

* Fixed a scroll bug on modal

* If the server goes down between sessions and we go to not-connected page, try to restore previous route when connection regained.

* Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in. (#108)

* Error Cards (#110)

* Fixed an issue where context menus weren't resetting when an admin logs out and a new non-admin logs in.

* Implemented a marker to inform the user that some archives can't be parsed.

* Don't show scrollbar if we don't have enough height to overflow

* Shows an error card when the underlying archive could not be read at all.

* Changed the card up

* Special grouping (#115)

* Implemented splitting specials into their own section for individual reading. Requires up to date backend for db changes.

* Cleaned up the code

* Replace underscores on specials if they exist. A simple name cleaning.

* Lots of Fixes (#126)

* Fixed After editing a user's library access, the Sharing details aren't updating without a refresh #116

* Fixed Series Summary & Review do not respect newline characters #114

* Default to non-specials tab and don't destroy DOM between tab changes

* Align UI api with backend

* Library icon should be "manga" for comic and Manga

* Fixed Mark Series as Read in series detail page doesn't update the volume/chapter cards unless page is refreshed. #118

* Fixed Defect: 2 Split pages in a row causes second page to not split #112

* Fixed an issue if last page is a splitpage, we wouldn't be able to see the other side of the split.

* When jumping to begining and end and both first page and last page are splitpages, make sure we set the paging direction so user can view both pages.

* Make sure we take into account splits when we try jump to first page then try to go "back" to the other split.

* Cleaned up split code a bit

* Fixed Go to Page is off by one #124

* Fixed Read button is showing continue when a show doesn't have any progress on it #121

* Implemented Read more component (Fixes #117)

* Fixed a bug in gotopage where if you went to maxPages or greater, we would always - 1 from page number.

* Forgot to commit this for Readmore component

* tslint cleanup

* Implemented Refactor Review to be bound to the star control rather than having a text review so the user can review without rating. #125

* Fixes #119 - 0 Volumes with 0 chapters were showing as specials, but should be in the special tab.

* Fixed an issue from reverting scanSeries code.

* Handle specials with a little more care

* Fixed #138. Search wasn't showing localizedName due to a rendering issue.

* Fixed an issue where L2R didn't handle multiple split pages in a row.

* Code smells

* Ensure we wipe context actions for library between login/logouts

* Fixed loading series after marking searies unread/read (#135)

* Removed isSpecial from volume (#137)

* Bugfix/gotopage (#139)

* Fixed #138

* Fixed #131 - getStem no longer removes the substring if lastPath is same as path.

* Implements Issue #129 - There is now a close book button on the menu

* Book Support (#141)

* Refactored Library Type dropdown to use an API so UI/Backend is in sync.

* Implemented the ability to load the book reader

* Book support but none of this works. Just here to keep track as I switch to other bugs

* Basic iframe implementation is now working

* Needed changes to load the content into native div rather than via iframe.

* We now have the ability to customize how we render the text.

* Removed console.log

* Implemented the ability to loadpages from remapped anchors from backend.

* Removed epubjs references and implemented table of contents api.

* Code now works for chapters with nested chapters

* Lots of changes, most of the reader is half baked, but foundation is there.

* Changed styles up a bit

* Implemented the ability to scroll to a part within a book. Added a custom font to test out.

* Show active page with a bolding when there are nested chapters

* Chapter group titles are now clickable

* Added the ability to set top offset in drawer

* Finally got style overrides to work and some other stuff

* User can now toggle menu with space

* Ensure styles don't leak. Drawer bottom was cutoff. On phone devices, default margins should be 0%.

* Use smooth scrolling when navigating between pages with scroll offset

* Added some code for checking when all images on page are loaded, added a fade in animation (doesnt work) and some media queries for top bar.

* Refactored all data structures in application into shared module

* CSS changes

* Fixed part selector query due to improper ids, now we use a more robust query type. Implemented a stack for adhoc clicks, so user can explore a bit but pagination is based on current page.

* Reverted sidenav changes. Fixed scrollTo to be more reliable with how the content comes into view.

* When you make an adhoc link jump, we now restore page and scroll position.

* Hooked in basic preferences for books and force margin settings for mobile devices.

* Book overrides now work all the time. Added a bunch of fonts for users to try out.

* Added all font faces

* A bit hacky, but darkMode now works for the reader.

* Remove styles on destroy

* First time users will have their menu open automatically

* Book format now shows on card details modal

* changed how margin updates to make more sense

* Fixed flashing by applying an opacity transition on page change.

* Code cleanup

* Reverted changes to unify series-detail page. Added some extra accessibility for book reader.

* Implement the ability to close drawer by clicking into the reader area

* Don't let the user page past where they should be able to

* Allow user to see the underlying values of customizations and when they save them, actually reset to their preferences

* Responsive top for sticky header

* Code smells

* Implemented the ability to update book settings from user settings

* code smells

* Code smells and max/mins on reader should match the user pref area

* Feature/feats and fixes (#144)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Feature/feats and fixes (#146)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Use margin-top instead of top for offsetting top

* Add a little extra spacing just in case

* Updated carousel to use a swpier

* Increased the budget and changed how vendor module is created

* Added some todos

* Implemented the ability to suppress library link on cards

* Fixed an issue with top offset for reading section

* Added the action bar to the bottom when user scrolls all the way down (Feedback)

* Added in a skip to content link for top nav

* After performing an action on library page, refresh the data on page.

* Implemented the ability to refresh metadata of a single series directly

* Implemented a progress bar for reading and a go to page by clicking the progress bar

* Only show the bottom action bar when there is a scrollbar

* Implemented the ability to tap the sides of book reader to paginate

* Book Feedback and Fixes (#147)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Use margin-top instead of top for offsetting top

* Add a little extra spacing just in case

* Updated carousel to use a swpier

* Increased the budget and changed how vendor module is created

* Added some todos

* Implemented the ability to suppress library link on cards

* Fixed an issue with top offset for reading section

* Added the action bar to the bottom when user scrolls all the way down (Feedback)

* Added in a skip to content link for top nav

* After performing an action on library page, refresh the data on page.

* Implemented the ability to refresh metadata of a single series directly

* Implemented a progress bar for reading and a go to page by clicking the progress bar

* Only show the bottom action bar when there is a scrollbar

* Implemented the ability to tap the sides of book reader to paginate

* Cleaned up carousel and fixed breakpoints so we always at least show 2 cards.

* Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers.

* Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons.

* Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on.

* Book Feedback (#148)

* In case a migration is poorly implemented, default on first load of bookreader.

* If there is no table of contents in epub file, inform the user

* Fixed #143 by ensuring we properly flatten the correct property when catching errors.

* Fixed #140. Search bar in nav is now more responsive than ever and properly scales down to even the smallest phone sizes (less than 300px)

* For Cards, moved the action menu into the bottom area, added Library link that said series belongs to.

* Added library to the series detail card

* Implemented the ability to automatically scale the manga reader based on screen size.

* Fix code smells

* Use margin-top instead of top for offsetting top

* Add a little extra spacing just in case

* Updated carousel to use a swpier

* Increased the budget and changed how vendor module is created

* Added some todos

* Implemented the ability to suppress library link on cards

* Fixed an issue with top offset for reading section

* Added the action bar to the bottom when user scrolls all the way down (Feedback)

* Added in a skip to content link for top nav

* After performing an action on library page, refresh the data on page.

* Implemented the ability to refresh metadata of a single series directly

* Implemented a progress bar for reading and a go to page by clicking the progress bar

* Only show the bottom action bar when there is a scrollbar

* Implemented the ability to tap the sides of book reader to paginate

* Cleaned up carousel and fixed breakpoints so we always at least show 2 cards.

* Cleaned up menu for manga reader and changed how automatic scaling works, based on ratio of width to height rather than raw numbers.

* Fixed an issue where using left/right keys on book reader wouldn't behave like clicking left/right pagination buttons.

* Dark mode and click to paginate was conflicting. The hint overlay still doesn't work when dark mode is on.

* Fixed issue where errors from login flow would not throw a toastr

* Moved the progress bar and go to page into the side drawer to be less distracting when reading

* Removed console.logs

* Cleaned up styles on slider to be closer to size of cards

* Fixed an issue with swiper not allowing use of touch (#149)

* Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages. (#151)

* Bugfix/in progress (#156)

* Fixed in progress by on last page incrementing to maxPages itself, thus ensuring it matches the sum of pages.

* Actually fix in progress by only incrementing page num on bookmark when we are on the last page

* Impleents tap to paginate user setting. (#157)

* Feature/manga reader (#160)

* Implemented pressing G to open go to page. Enhanced the dialog to give how many pages you can go to. On page splitting button press, if the current page needs splitting, we will re-render with the new option.

* Added gotopage shortcut key for book reader

* Setup for new feature

* Swiper now respects card sizes

* Fixes #51 and updates dependencies for security vulnerabilities

* Implemented back to top button

* Remove the - 1 hack from series-detail

* Remove hack from carad item

* Fix a regression where book reader would +1 pageNum for bookmarking on last page, but because books don't start at 0 for page nums, it isn't necessariy

* Implemented the ability to move between volumes automatically

* Additional security fix

* Code smells

* Cleaned up the implementation to properly prevent pagination when loading next chapter/volume

* v0.4 Last touches (#162)

* PurgeCSS integration

* Changed some icons to have titles

* Automatic scaling changes

* Removed 2 font families that didn't make the release cut. Fixed an off by 1 regression with setContinuePoint

* Backed out purge css after testing

* Some cleanup of the package

* Automatic scaling adjustments

* Bugfix/release shakeout (#164)

* Fixed body color not being reset due to capturing it too late

* Removed some dead code

* Implemented dark mode (#166)

* Implemented dark mode

* Bump version to v0.4.1, moved dark styles to own stylesheet (some files need dark overrides) and ensured all pages are styled correctly.

* Switched the code over to use bootstrap theme with Kavita color

* Bugfix/manga issues (#169)

* Fixes #168

* Fixed a bug on the manga reader that caused the background color to inherit from body rather than be forced black.
Fixed an issue where a long filename on a phone could make it hard to close menu once open.

* Sentry Integration (#170)

* Basic version of sentry is implemented

* Enhanced continuous reading to show a warning when we couldn't find the next reading point. This will also short circuit after the first warning is shown

* Implemented Sentry. Currently src maps aren't uploading

* Bugfixes/misc (#174)

* Fixes #171

* Ensure btn-information is properly styled in dark mode

* no trace sampling for UI

* Fixed an issue where when we had no read progress, when choosing firs… (#176)

* Fixed an issue where when we had no read progress, when choosing first volume, we'd use first chapter, but sometimes chapters wouldn't be ordered.

* Code smell

* Collection Support (#179)

* Home button should go to library page, so we can use back and return to where we clicked from.

* Implemented Collection Support

* Fixed an issue for search in nav bar in darkmode

* Move loading to the top of the book reader

* Added DOMHelper to help with accessibility

* Implemented a re-usable layout component for all card layout screens. Handles pagination.

* Fixes #175

* Additional RBS check for tags where the tag fragment is invalid or there are no libraries that a user has access to

* Introduced an edit collection tag modal and actionables for collection tags.

* Bump version of Sentry SDK.

* Ability to remove series from a tag in a bulk manner.

* Continue Reading Regression (#186)

* Added a dark placeholder image for dark mode and hooked it up to Image service to load correct placeholder

* Fixed #181. Rewrote the continue logic to only check chapters and removed the concept of volumes (since every volume has a chapter). Opening a volume now does it's own check if there is progress on the volume, it will open to where the user left off. Otherwise, it will grab the first chapter and start at the beginning.

* Added dark error placeholder image (#187)

* Bugfix/misc (#188)

* Fixed an issue where carousel series cards scan library would kick off for wrong library id.

* Refactored the tab code to be dynamic based on the volume/chapter/specials of the data. The correct tab will be default selected and tabs that don't need to exist wont.

* Some css adjustments for typeaheads

* Move the loader out of the action bar so if settings menu is open when navigating pages, the math doesn't break

* Fixed a bug where highlight wasn't updating correctly when we type or after we add a tag via keyboard

* Fix an exception when tags are null (due to a bug in release)

* Accessibility bugs

* Collection Tweaks (#190)

* Fixed an issue where carousel series cards scan library would kick off for wrong library id.

* Refactored the tab code to be dynamic based on the volume/chapter/specials of the data. The correct tab will be default selected and tabs that don't need to exist wont.

* Some css adjustments for typeaheads

* Move the loader out of the action bar so if settings menu is open when navigating pages, the math doesn't break

* Fixed a bug where highlight wasn't updating correctly when we type or after we add a tag via keyboard

* Fix an exception when tags are null (due to a bug in release)

* Accessibility bugs

* Fixed #189 and cleaned up series pagination.

* Major cleanup of the typeahead code. One bug remaining

* Fixed highlight issue

* Fixed #183. When using continuous manga reading, moving to another chapter within the reader now updates the url. (#191)

* Book Parity: Reading direction for books (#192)

* Fixed pagination issue on library-detail

* Implemented left to right/right to left reading mode in book reader

* feat: remove Webtoon option from Library Types (#194)

#251

* Book Reading Progress Enhancement (#196)

* Implemented the ability to bookmark and restore reading progress (scroll) for books.

* Check to make sure we have something to search before we perform a querySelectorAll

* Don't reload a page when we've hit the boundaries of min/max pages and are trying to spam left/right key.

* Fixed a bug where if kavita-part marker was on the same page, the conditional was always true, meaning that when it was on a different one, we wouldn't load it up.

* Bugfix/tab refactor (#197)

* Fixed a logic bug which hid the specials tab too aggressively

* Unsubscribe from observables on destroy of account service

* Recently Added Page (#198)

* Recently Added Page
* Changed default pagination to 30

* Update to CSS for homepage section title links (#201)

* Update to CSS for homepage section title links

* Adding :active and :focus selectors

- :active for accessibility best practice and UX.
- :focus for mobile.

* Fixed #202 - Scope list item hover styles in darkmode to only typeahead (#204)

* Double Flashing Fix (#206)

* Fixed #202 - Scope list item hover styles in darkmode to only typeahead

* Fixed #199 - Flickering when paginating

* Fixed an issue with Continue Reading not working after manually updating a volume with multiple chapters as read/unread (#211)

* Directory Picker UX Enhancements (#214)

* Added a filter and some css to the directory picker to make it more useable

* Fixed a bug where last goBack didn't reload the disks and kept the directories from the last selected node.

* Allow user to change port (#215)

* Allow the admin to configure the log level from the UI. Add a warning informing them restart is required for port and log level. (#217)

* Cleaned up some console.logs and tweaked the logic of scroll position remembering. Now the side nav chapter list will show what part you are on (if applicable). (#220)

* Specials Sort (#223)

* Implemented a natural sort (same as BE) to sort the specials so the order isn't completely random

* Added ability to push source maps tagged to a release on push to main and develop (#219)

* Create Library Feedback (#224)

# Added
- Library type and number of folders shared is now visible on Manage Libraries page

# Changed
- Directory Picker will now let you share the current folder from any time in the picker flow
- Headings are now consistent between User Preferences and Admin screen

* Fixing folder structure for sentry github action (#225)

* Updating workflow environment (#226)

Sentry workflow was giving an error: "Error: Container action is only supported on Linux"

* Fixing build dist path for sentry (#227)

* Updating workflow environment

Sentry workflow was giving an error: "Error: Container action is only supported on Linux"

* update build dist path for sentry

* fix: unable to select lib type when creating a new lib (#231)

* fix: unable to select lib type when creating a new lib

fixed #230

* fix: able to change lib type after it's creation

* Download Support (#229)

* Implemented the ability to download series/chapter/volume from server. Uses RBS to determine if a user can or cannot download.

* Safety Checks (#233)

* Fixes a safety check from Sentry ANGULAR-1Z

* Fixed a build issue from downloading branch

* Fix/234 235 login redirection and dark theme not working (#236)

* fix: login redirection not happening

#234

* fix: dark theme not working after logout

#235

* Remove SP marker from specials and also remove extension from specials. (#238)

* Remove SP marker from specials and also remove extension from specials.

* Sort first so we can take advantage of the SP number

* Error Handling Rework (#237)

* Updated ngx-toastr version (includes new styles), updated style.scss to be cleaner. Began adding Title service for accessibility.

* Reworked error interceptor and toastr service to reduce duplicates and properly show errors.

Co-authored-by: Milazzo, Joseph (jm520e) <jm520e@us.att.com>

* Fixed a prod only issue due to multi: true for provider (#243)

* Feat/usage stats collection (#245)

* feat: add client anonymous data collection

* fix: sonar issues

* Implemented a server setting to opt-out of usage collection

Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>

* Book Progress Enhancements (#250)

* Implemented the ability to bookmark any part of the book, not just the chapter parts

* Added total pages label to the book reader

* Manga Reader Redesign + Webtoon Reader (#247)

# New
- Bottom drawer has a scroller to jump to pages, jump to first/last page, and jump between volume/chapters. 
- Quick actions easily available to change reading direction, change reader mode, color tones, and access extended settings
- Extended settings area for settings unlikely changed
- Ability to auto close menu (setting)
- Ability to apply extra darkness or a sepia tone to reduce blue light
- New reader modes: Left/Right, Up/Down, Webtoon (scroll up and down)
- Information about the volume/chapter you are reading is now showed in the top drawer

# Changed
- When applying reader modes or reading directions, the clickable areas will now show an overlay to help you understand where to click.
- Image scaling and Image splitting now show some contextual icons to help the user understand what they do
- Close book button is now in the top drawer menu

* Bugfix/toastr css updates (#249)

* CSS Updates

- Removed BS4 toastr styles
- Reinstituted default non-BS4 toastr styles
- Centered login (accounting for header)
- Adjusted the carousel section heading font-size.
- Added a small padding (5px) on top of the padding for the nav, so the text isn't so close to the nav.

* Login refresh & toaster styles

- Added new font for login
- Updated login styles
- Hide nav bar on logout
- show nav bar on login
- Added images for new login
- dark styles for login
- dark styles for toastr

* minified images

* sonar bug fix

* updating style url for minified asset

* Fixes and code smells

- fix for login bg image showing up elsewhere
- fix for code smells
- added font family to nav bar

* Fixed missing label/input linking

* resized, compressed, and minified bg image

- change opacity to dark mode login

* Changed Spartan font files to variable weight

* Change requests

- Added font license
- Renamed image used for login bg
- Fixed path in styles where above file was used
- Removed now unused bs4 toastr style import

Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>

* Fix a bad version number

* hotfix for docker build issue (#251)

* updating angular.json

changing output folder

* change path

* Fixed build issues (#252)

* Bugs! (#254)

* Fix style issue where bootstrap components weren't taking kavita overrides

* Fixed a bug where after updating certain things within a card on library page, the feeds wouldn't update

* Fixed a bug where chapter sort would not behave the same way as on chrome

* Release canidate bugs (#255)


  *  Auto Close menu wasn't updating within reader
  *  (Book Reader) Enhanced scroll part code to limit elements we count for bookmarking, only calculating intersection once fully visible and saving when scroll ends
 *   Removed Image Smoothing option (chrome only) from this release. No noticeable difference having it.
 * Fixed a page reload when clicking on In Progress section title on home page

* Bugfix/webtoons (#256)

* Fixed issue where first load would not start capturing scroll events due to not knowing the scroll to an element finished.

* Changed how to figure out when to end scrolling event by calculating if the target element is visible in the viewport.

* Seems to be working pretty well. Cleaned up some of the messages for debugging.

* Simplified the intersection logic drastically

* Fixed a color issue on slider for non-dark mode

* Disable first/last page buttons if we are already on those respective pages

* Added documentation to circular array class

* Some debug code but scrolling no longer results in jank due to scrollToPage getting executed too often

* Backing out ability to use webtoon reader

* Css fix for book reader progress and light mode toastr (#257)

* Changing dark mode to default (#262)

- Changed user-preferences site dark mode to default true

* added logo and css for logo (#260)

* added logo and css for logo

- max-height is to prevent the image from increasing the height of the navbar.
- middle middle vertical align didn't look to match up as expected, so a top middle was implemented based on chrome and firefox renderings.

* Adding requested accessibility changes

* Added Kavita-webui repo to UI/Web

* Special parsing issues (#361)

* Update README.md

Added demo link to Readme and tweaked Sentry icon

* Adds some regex cases from manga downloaded through FMD2. For parsing specials, if the marker is found, try to overwrite the series with the folder the manga is in, rather than what we parse from filename.

* Version bump

* Changed company to point to our domain

* Fixed copyright to point to our domain

* Adding test github workflow and test build file (#362)

* Fixing copy fail in monorepo-test workflow

* fixing shell script to be executable

* fixing permission issue

* Folder Parsing (#366)

* New: Ability to parse volume and chapter from directory tree, rather than exclusively from filename. (#313)
* Fixed: Fixed an edge case where GetFoldersTillRoot if given a non-existent root in the file path, would result in an infinite loop.

* Book Reader Bugs (#367)

* Fixed:  Fixed an issue where when tap to paginate is on, clicking off the settings menu doesn't close it.
* Fixed: Fixed the tint color on book reader being different from manga reader.
* Fixed: Reworked the clickable overlay for tap to paginate so links are still clickable when tap to paginate is on.

* Build on monorepo

* Book Reader Intersection Handler not firing  (#369)

* Fixed: Fixed an issue where intersection observer wouldn't be triggered when book page had no images (Book reader bookmark not firing while scrolling #360)

* Raw Image Support (#375)

* New: Ability to add Raw Image folders to Kavita via new library Types Images (Comic) and Images (Manga). Images must belong to a folder, they cannot exist in the root directory. It is important to at least put a second folder (minimum) with a Volume of Chapter, else you will end up with each image as a special which is not easily readable.
* Changed: When caching images for raw images, do it much faster and return earlier if the files have already been cached.


Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>

* Fixed a bug in the circular array which would not properly roll index over for applyFor (#377)

* Fixed: Manga reader's prefetching buffer had issues with rolling over index, which would require a manual image load every 7 pages. (#372)

* Adding new ui dist folder to gitignore

* Added stats folder persistence (#382)

* Added demo link to Readme and tweaked Sentry icon

* Added a symbolic link to persist the stats folder between docker container updates.

Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>

* Lots of UI fixes and changes (#383)

* After we flatten, remove any non image files as we shouldn't iterate over them

* Fixed a case for next/prev chapter where if we have a volume then chapters attached afterwards, there would be improper movement due to how sorting works.

* Fixed an issue where no-connection would not resume where the loss of connection occured

* Fixed an issue where after creating a new user, their Last Active Date would show as a weird date, instead of "Never"

* Sort files in card detail to mimic reading order

* Implemented a single source of executing actions (card or main page) and added actionables on library detail page.

* Refactored series actions into action service

* Implemented common handling for entity actions in a dedicated service

* Fixed build script for new monorepo layout.

* Cleaned up nav header subscriptions

* Updated the favicon/icons to work on different devices as home screen shortcuts


* Fixed: Fixed issue where if you had a volume with 1 volume based file and a chapter file, the next/prev chapters wouldn't work (Fixes #380)
* Fixed: When connection is lost to backend, saving current page url and resuming when connection reestablished was not working (Fixes #379)
* Fixed: When creating a new user, a strange date format was shown in Last Active due to not having been active. Now "Never" shows (Fixes #376)
* Fixed: When showing files for a volume/chapter, the files are now sorted in the order you will read them in (Fixes #378)
* Added: Library detail now has actionable menu next to header, so you can kick off a scan or metadata refresh (Closes #363)
* Changed: When performing actions like marking as read/unread on series detail page, the actionable button will disable until the request finishes. (Closes #381)
* Changed: Favicon and Icons have been updated so when saving webpage to home screen, it should show a proper icon (Closes #356)

* Lots of Bugfixes and Tweaks (#387)

* Fixed: Fixed a bug in how we get images. When dealing with raw images, we need special logic (Monorepo)
* Added: (Manga Reader) When we are within 10 pages of the beginning of a manga, prefetch the prev chapter
* Fixed: (Manga Reader) The slider would sometime skip pages and would have leftover track on last page. 
* Fixed: (Raw Images) When calculating cover image for Raw Image entities, only select image files
* Fixed: Fixed a logic bug where raw image based entities wouldn't send back the correct page (Monorepo)
* Changed: When deleting a library, it can take a long time. Disable delete buttons until the deletion finishes
* Added: (Parser) Added a regex case for "Series - Ch. 20 - Part"
* Changed: Try to show the files in volume/chapter detail modal in the reading order. 
* Fixed: Next/Previous chapter was not working in all cases from previous Monorepo commit.

* Bugfix/locked name reset (#389)

* Fixed: Fixed an issue where if you manually rename a series, then remove/modify an entity related to the series, the series would be deleted and re-created with the original, parsed name.

* Scan Series (#390)

* Refactored Library delete to use a transaction.

* Ensure we parse "Series Name - Chapter XXX" before "Series Name - Vol XXX"

* Ensure if GetFoldersTillRoot is called with a fullPath containing a file, that we ignore the file for returned folders.

* Changed: From the series actionable menu, instead of scan library, which would kick off a filesystem scan on the library the series belonged to, instead we have "scan series" which will scan the folders represented by that series. If that series has files in the root of the library, the library root is scanned, but only said series files will be processed. This can make a refresh occur in under 500 ms (Fixes #371)
* Fixed: Fixed a bad parsing case for "Series Name - Vol.01 Chapter 029 8 Years Ago" where somehow the chapter would parse as "029 8", thus making the file a special rather than chapter 29.

* Fixes a bug where the root path and the full path share a common word, like root: "/Test library" and full path "/Test library/Test" which caused "/Test" to be taken out of root and thus GetFoldersTillRoot would never finish

* About Section (#394)


* Added: Added an about section with version, links to discord, github, donations, etc.
* Fixed: Fixed some parsing issues that caused "Series Name - Volume X Chapter Y" to parse as "Series Name - Volume X" from a previous change in develop.

* Cleaning up monorepo build files

* Fixing permission issues

Co-authored-by: Leonardo Dias <leo.rock14@gmail.com>
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
Co-authored-by: Leonardo Dias <contato.leonardod@yahoo.com>
Co-authored-by: Milazzo, Joseph (jm520e) <jm520e@us.att.com>
Co-authored-by: Chris Plaatjes <kizaing@gmail.com>
2021-07-17 14:03:11 -05:00