* Fixed a duplicate check for updates. Changed checking from weekly to daily.
* Refactored how dark variables were accessed to reduce size of component css. Refactored Stats code to use lesser information for reporting.
* Use the installId from the database which is most unlikely to change.
* Fixed a missing interface with stat service
* Added DotnetVersion back into collection
* Updated url to new host.
* Added Date Added time to volume/chapter card detail modals to help users understand when new chapters are added after something has been fully read. Changed Created -> Added for better clarity.
* updating workflow discord parser
- Added ` and > to parser
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Fixed the typeahead not having the same size input box as other inputs
* Implemented the ability to add multiple series to a collection through bulk operations flow. Updated book parser to handle "@import url('...');" syntax as well as @import '...';
* Implemented the ability to create a new Collection tag via bulk operations flow.
* Added base url config
* UI side is not working
* Working base url more
* Attempt to get UI to work with base url
* Implemented the ability to set the Base URL for the app
* Hooked in Base URL as a managed setting
* Ensure we always start with / for base url
* Removed default base href from debug builds. Cleaned up an issue with base url migration.
* Fixed an issue with our BaseURL migration
* 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
* Implemented the ability to disable authentication on a server instance. Admins will require authentication, but non-admin accounts can be setup without any password requirements.
* WIP for new login page.
* Reworked code to handle disabled auth better. First time user flow is moved into the user login component.
* Removed debug code
* Removed home component, shakeout testing is complete.
* remove a file accidently committed
* Fixed a code smell from last PR
* Code smells
* Added a new field to Library for showing Last Scan time for a library.
Manage library page now shows last scan for each library. Tweaked the websocket code to make scan progress a bit more reliable.
* Updated docnet to provide ARM support from our recent PR. Pi users can now have a version for PDF support out of the box.
* Parser is now culture invariant to hopefully fix an issue on Italian systems not detecting . correctly
* Added the ability for the collection detail page to update when a new series is added.
* Fixed an issue where multiple chapters stacked in a volume and reading in incognito, wouldn't sort the chapters and would open the wrong one.
* Code smell
* Implemented the ability to perform multi-selections on cards. Basic selection code is done, CSS needed and exposing actions.
* Implemented a bulk selection bar. Added logic to the card on when to force show checkboxes.
* Fixed some bad parsing groups and cases for Comic Chapters.
* Hooked up some bulk actions on series detail page. Not hooked up to backend yet.
* Fixes#593. URI Enocde library names as sometimes they can have & in them.
* Implemented the ability to mark volume/chapters as read/unread.
* Hooked up mark as unread with specials as well.
* Add to reading list hooked up for Series Detail
* Implemented ability to add multiple series to a reading list.
* Implemented bulk selection for series cards
* Added comments to the new code in ReaderService.cs
* Implemented proper styling on bulk operation bar and integrated for collections.
* Fixed an issue with shift clicking
* Cleaned up css of bulk operations bar
* Code cleanup
* Fixed an issue from perf tuning where I forgot to send Pages to frontend, breaking reader.
* Built out continuous reading for webtoon reader. Still has some issues with triggering.
* Refactored GetUserByUsernameAsync to have a new flavor and allow the caller to pass in bitwise flags for what to include. This has a get by username or id variant. Code is much cleaner and snappier as we avoid many extra joins when not needed.
* Cleanup old code from UserRepository.cs
* Refactored OPDS to use faster API lookups for User
* Refactored more code to be cleaner and faster.
* Refactored GetNext/Prev ChapterIds to ReaderService.
* Refactored Repository methods to their correct entity repos.
* Refactored DTOs and overall cleanup of the code.
* Added ability to press 'b' to bookmark a page
* On hitting last page, save progress forcing last page to be read. Adjusted logic for the top and bottom spacers for triggering next/prev chapter load
* When at top or moving between chapters, scrolling down then up will now trigger page load. Show a toastr to inform the user of a change in chapter (it can be really fast to switch)
* Cleaned up scroll code
* Fixed an issue where loading a chapter with last page bookmarked, we'd load lastpage - 1
* Fixed last page of webtoon reader not being resumed on loading said chapter due to a difference in how max page is handled between infinite scroller and manga reader.
* Removed some comments
* Book reader shouldn't look at left/right tap to paginate elems for position bookmarking. Missed a few areas for saving while in incognito mode
* Added a benchmark to test out a sort code
* Updated the read status on reading list to use same style as other places
* Refactored GetNextChapterId to bring the average response time from 1.2 seconds to 400ms.
* Added a filter to add to list when there are more than 5 reading lists
* Added download reading list (will be removed, just saving for later). Fixes around styling on reading lists
* Removed ability to download reading lists
* Tweaked the logic for infinite scroller to be much smoother loading next/prev chapter. Added a bug marker for a concurrency bug.
* Updated the top spacer so that when you hit the top, you stay at the page height and can now just scroll up.
* Got the logic for scrolling up. Now just need the CSS then cont infinite scroller will be working
* More polishing on infinite scroller
* Removed IsSpecial on volumeDto, which is not used anywhere.
* Cont Reading inf scroller edition is done.
* Code smells and fixed package.json explore script
* Refactored the performance of GetChapter/BookInfo API to have a 10x speed improvement and to use common code, rather than duplicating code. Removed an api param that is no longer needed.
* Book reader now has dedicated buttons to jump to next/prev chapter as well as through page buttons
* Added continous reading to the book reader. Clicking on the max pages to right of progress bar will now go to last page.
* Forgot a file for continous book reading
* Fixed up some code regarding transitioning between chapters. Arrows now show to represent a chapter transition.
* Laid the foundation for reading lists
* All foundation is laid out. Actions are wired in the UI. Backend repository is setup. Redid the migration to have ReadingList track modification so we can order them for the user.
* Updated add modal to have basic skeleton
* Hooked up ability to fetch reading lists from backend
* Made a huge performance improvement to GetChapterIdsForSeriesAsync() by reducing a JOIN and an iteration loop. Improvement went from 2 seconds -> 200 ms.
* Implemented the ability to add all chapters in a series to a reading list.
* Fixed issue with adding new items to reading list not being in a logical order. Lots of work on getting all the information around the reading list view. Added some foreign keys back to chapter so delete should clean up after itself.
* Added ability to open directly the series
* Reading List Items now have progress attached
* Hooked up list deletion and added a case where if doesn't exist on load, then redirect to library.
* Lots of changes. Introduced a dashboard component for the main app. This will sit on libraries route for now and will have 3 tabs to show different sections.
Moved libraries reel down to bottom as people are more likely to access recently added or in progress than explore their whole library.
Note: Bundles are messed up, they need to be reoptimized and routes need to be updated.
* Added pagination to the reading lists api and implemented a page to show all lists
* Cleaned up old code from all-collections component so now it only handles all collections and doesn't have the old code for an individual collection
* Hooked in actions and navigation on reading lists
* When the user re-arranges items, they are now persisted
* Implemented remove read, but performance is pretty poor. Needs to be optimized.
* Lots of API fixes for adding items to a series, returning items, etc. Committing before fixing incorrect fetches of items for a readingListId.
* Rewrote the joins for GetReadingListItemDtosByIdAsync() to not return extra records.
* Remove bug marker now that it is fixed
* Refactor update-by-series to move more of the code to a re-usable function for update-by-volume/chapter APIs
* Implemented the ability to add via series, volume or chapter.
* Added OPDS support for reading lists. This included adding VolumeId to the ReadingListDto.
* Fixed a bug with deleting items
* After we create a library inform user that a scan has started
* Added some extra help information for users on directory picker, since linux users were getting confused.
* Setup for the reading functionality
* Fixed an issue where opening the edit series modal and pressing save without doing anything would empty collection tags. Would happen often when editing cover images.
* Fixed get-next-chapter for reading list. Refactored all methods to use the new GetUserIdByUsernameAsync(), which is much faster and uses less memory.
* Hooked in prev chapter for continuous reading with reading list
* Hooked up the read code for manga reader and book reader to have list id passed
* Manga reader now functions completely with reading lists
* Implemented reading list and incognito mode into book reader
* Refactored some common reading code into reader service
* Added support for "Series - - Vol. 03 Ch. 023.5 - Volume 3 Extras.cbz" format that can occur with FMD2.
* Implemented continuous reading with a reading list between different readers. This incurs a 3x performance hit on the book info api.
* style changes. Don't emit an event if position of draggable item hasn't changed
* Styling and added the edit reading list flow.
* Cleaned up some extra spaces when actionables isn't shown. Lots of cleanup for promoted lists.
* Refactored some filter code to a common service
* Added an RBS check in getting Items for a given user.
* Code smells
* More smells
* Added some basic OPDS implementation
* Fixed an issue with feed href
* More changes
* Added library routes and moved user code to a method so we can hack in fixed code without authentication
* Images now load on the OPDS reusing our existing Image infrastructure.
* Added the ability to download and moved some download code to a dedicated service
* Download is working, pagination is implemented.
* Refactored libraries to use pagination
* Laid foundation for OpenSearch implementation
* Fixed up some serialization issues and some old code that wasn't referencing helper methods
* Ensure chapters are sorted when we send them over OPDS
* OpenSearch implemented
* Removed any support for OPDS-PS due to lack of apps supporting it.
* Don't distribute development.json nor stats directory on build.
* Implemented In Progress feed as well.
* Ability to enable OPDS for server. OPDS now accepts initial call as POST in case app uses username/password.
* UI now properly renders state for OPDS enablement. Added Collections routes.
* Fixed pagination startIndex on OPDS feeds when there is less than 1 page.
* Chunky Reader now works. It only accepts UTF-8 encodings
* More Chunky fixes
* More chunky changes, such a fussy client.
* Implemented the ability to have a custom api key assigned to a user and use that api key as your authentication token against OPDS routing.
* Implemented the ability to reset your API Key
* Fixed favicon not being sent back correctly
* Fixed an issue where images wouldn't send on OPDS feed.
* Implemented Page streaming and fixed a pagination bug
* Hooked in the ability to save progress in Kavita when Page Streaming
* Lots of cleanup on the warnings in the solution. Deprecated IsLastWriteLessThan and made a new method HasFileBeenModifiedSince.
* Added some tests for the new extension method.
* Changed filter import to use correct import
* Scan Series now uses Refresh Metadata for Series, rather than library one.
* Fixed an issue where cover generation wasn't properly taking forced update into consideration. Removed a case of cover generation for no reason.
* Fixed series downloads not triggering backend call
* Replaced profile links to anchors so we can open in new tab if we like
* Refactored how update checking works. We now explicitly check and send back on the same API. We have a weekly job that will push an update to the user.
* Implemented a changelog tab
* Ported over a GA fix for using ' in PR bodies.
* Don't check cert for Github
* 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
* Added some documentation. Removed Require Admin Role from Search Tags. Added Summary to be updated on UpdateTag.
* Added Swagger xml doc generation to beef up the documentation. Started adding xml comments to the APIs. This is a needed, slow task for upcoming Plugins system.
* Implemented the ability to upload a custom series image to override the existing cover image.
Refactored some code out to use ImageService and added more documentation
* When a page cache fails, delete cache directory so user can try to reload.
* Implemented the ability to lock a series cover image such that after user uploads something, it wont get refreshed by Kavita.
* Implemented the ability to reset cover image for series by unlocking
* Kick off a series refresh after a cover is unlocked.
* Ability to press enter to load a url
* Ability to reset selection
* Cleaned up cover chooser such that reset is nicer, errors inform user to use file upload, series edit modal now doesn't use scrollable body. Mobile tweaks. CoverImageLocked is now sent to the UI.
* More css changes to look better
* When no bookmarks, don't show both markups
* Fixed issues where images wouldn't refresh after cover image was changed.
* Implemented the ability to change the cover images for collection tags.
* Added property and API for chapter cover image update
* Added UI code to prepare for updating cover image for chapters. need to rearrange components
* Moved a ton of code around to separate card related screens into their own module.
* Implemented the ability to update a chapter/volume cover image
* Refactored action for volume to say edit to reflect modal action
* Fixed issue where after editing chapter cover image, the underlying card wouldn't update
* Fixed an issue where we were passing volumeId to the reset chapter lock. Changed some logic in volume cover image generation.
* Automatically apply when you hit reset cover image
# Added
- Added: Added the ability to bookmark certain pages within the manga (image) reader and later download them from the series context menu.
# Fixed
- Fixed: Fixed an issue where after adding a new folder to an existing library, a scan wouldn't be kicked off
- Fixed: In some cases, after clicking the background of a modal, the modal would close, but state wouldn't be handled as if cancel was pushed
# Changed
- Changed: Admin contextual actions on cards will now be separated by a line to help differentiate.
- Changed: Performance enhancement on an API used before reading
# Dev
- Bumped dependencies to latest versions
=============================================
* Bumped versions of dependencies and refactored bookmark to progress.
* Refactored method names in UI from bookmark to progress to prepare for new bookmark entity
* Basic code is done, user can now bookmark a page (currently image reader only).
* Comments and pipes
* Some accessibility for new bookmark button
* Fixed up the APIs to work correctly, added a new modal to quickly explore bookmarks (not implemented, not final).
* Cleanup on the UI side to get the modal to look decent
* Added dismissed handlers for modals where appropriate
* Refactored UI to only show number of bookmarks across files to simplify delivery. Admin actionables are now separated by hr vs non-admin actions.
* Basic API implemented, now to implement the ability to actually extract files.
* Implemented the ability to download bookmarks.
* Fixed a bug where adding a new folder to an existing library would not trigger a scan library task.
* Fixed an issue that could cause bookmarked pages to get copied out of order.
* Added handler from series-card component
# Added
- Added: Added "In Progress" view to see everything you are currently reading
- Added: Added the ability to filter series based on format from "In Progress", "Recently Added", "Library Detail" pages.
- Added: Added total items to the above pages to showcase total series within Kavita
==============================
* Added filtering to recently added
* Cleaned up the documentation on the APIs and removed params no longer needed.
* Implemented Filtering on library detail, in progress, and recently added for format. UI is non-final.
* Moved filtering to an expander panel
* Cleaned up filtering UI a bit
* Cleaned up some code and added titles on touched pages
* Fixed recently added not re-rendering page
* Removed commented out code
* Version bump
* Added an animation to the filtering section
* Stashing changes, needing to switch lazy loading libraries out due to current version not trigging on dom mutation events
* Finally fixed all the lazy loading issues and made it so pagination works without reloading the whole page.
# Added
- Added: Added series format information to the search typeahead to help identify duplicate series in libraries
# Fixed
- Fixed: Fixed accent color not looking well on light theme
- Fixed: Attempted to fix the memory issues with PDF reading on Docker. Uses a Memory Pool for streams and removes a bitmap operation for fixing books with transparent backgrounds (#424)
# Changed
- Changed: Refactored download logs to use the same download code as rest of Kavita
# Dev stuff
- Added timeout for Regex's to make sure during matching, malicious filenames doesn't crash user system
- Refactored a missing GetCoverImage to use Series Format rather than old Library Type
==================================================
* Added Timeout for Regex matching to ensure malicious filenames don't crash system
* Refactored GetCoverImage to use series format rather than library type
* Refactored download logs to use the download service
* Fixed accent color not looking well on light theme
* Refactored series format into dedicated component and added to search results
* Switch to using MemoryManager for Streams to attempt to minimize GC pressure and reduced bitmap manipulation for transparency hack.
# Added
- Added support for PDFs within Kavita. PDFs will open in the Manga reader and you can read through them as images. PDFs are heavier than archives, so they may take longer to open for reading. (Fixes#187)
# Changed
- Changed: Major change in how Kavita libraries work. Kavita libraries will now allow for mixed media types, that means you can have raw images, archives, epubs, and pdfs all within your Manga library. In the case that the same Series exists between 2 different types of medias, they will be separated and an icon will show to help you identify the types. The correct reader will open regardless of what library you are on. Note: Nightly users need to delete their Raw Images libraries before updating.
# Fixed
- Fixed: Fixed an issue where checking if a file was modified since last scan always returned true, meaning we would do more I/O than was needed (Fixes#415)
- Fixed: There wasn't enough spacing on the top menu bar on the Manga reader
- Fixed: Fixed a bug where user preferences dark mode control always showed true, even if you were not using dark mode
# Dev stuff
- For image extraction, if there is only 1 image we will extract just that, else we will extract only images
- Refactored all the Parser code out of the ScannerService into a self contained class. The class should be created for any scans, allowing multiple tasks to run without any chance of cross over.
* Fixed indentation for cs files
* Fixed an issue where the logic for if a file had been modified or not was not working and always saying modified, meaning we were doing more file I/O than needed.
* Implemented the ability to have PDF books. No reader functionality.
* Implemented a basic form of scanning for PDF files. Reworked Image based libraries to remove the need to separate in a special library and instead just work within the Manga/Comic library.
* Removed the old library types.
* Removed some extra code around old raw library types
* Fully implemented PDF support into Kavita by using docnet. Removed old libraries we tried that did not work. PDFs take about 200ms to save the file to disk, so they are much slower than reading archives.
* Refactored Libraries so that they can have any file extension and the UI will decide which reader to use.
* Reworked the Series Parsing code.
We now use a separate instance for each task call, so there should be no cross over if 2 tasks are running at the same time.
Second, we now store Format with the Series, so we can have duplicate Series with the same name, but a different type of files underneath.
* Fixed PDF transparency issues
- Used this code to fix an issue when a PDF page doesn't have a background. https://github.com/GowenGit/docnet/issues/8#issuecomment-538985672
- This also fixes the same issue for cover images
* Fixed an issue where if a raw image was in a directory with non-image files, those would get moved to cache when trying to open the file.
* For image extraction, if there is only 1 image, just copy that to cache instead of everything else in the directory that is an image.
* Add some spacing to the top menu bar
* Added an icon to the card to showcase the type of file
* Added a tag badge to the series detail page
* Fixed a bug in user preferences where dark mode control would default to true, even if you weren't on it
* Fixed some tests up
* Some code smells
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
* Cleaned up error interceptor to avoid sending auth errors (when a 500 occurs) to sentry as auth errors aren't issues.
* Added extra stat collection
* Fixed a bad gitignore which ignored anything in a stats directory
* Code cleanup, refactored FileRepository into Unit of Work.
* Added AutoCloseMenu and ReaderMode user perferences to match UI
* Added extra information to ChapterInfo
* Build changes
* Updated the readme to have open collective information and thanks to sponsors
* Fixed an issue with UnitOfWork refactor and how stats was bootsrapped. Replaced stats.kavitareader with a temp url to test out redirection bug.
* Implemented the ability to download files (series, volume, chapter)
* Added RBS checks to ensure user is either an admin or has download role
* Added the ability to change a users feature RBS. Changed the Role seed to use reflection
* Added book reader reading direction preference
* Adds a new marker to the AppUserProgress to capture nearest anchor for resuming scroll point when reading books. Refactored bookmark api to return a BookmarkDto which includes this new data.
* Readme refactored to be more clean and clear, taking inspiration from wiki.js's readme.
* Initial backend for Collections and basic metadata implemented.
* More build flavors for Raspberry Pi users and updated Install since we don't need users to set their own JWT Token Key. Update a typo in appsettings.json file for prod.
* Fixed#224. Sort before getting a First?Last() chatper
* The rough ability to add and get series metadata and tags.
* Fix a bug on getting metadata for when it doesn't exist.
* Fixed a bug where flattening directories with some unique filenames could cause reading order of images to be out of order.
* Added a seed code to ensure all series have SeriesMetdata
* Ensure all instances of opening an epub is using "using" so we don't lock the file. When we have a malformed html file, log the issues and inform the user we can't open the file.
* Book reader now handles @Import "" statements in CSS and inlines the css into css file that references them. This allows for them to be scoped. In addition, if the html or body tag had classes, we now send back a single div with those classes.
* Fixed GetSeriesDtoForCollectionAsync which was not properly returning series
* Implemented cover image for collection tag. Fixed an issue in metadata update call.
* Add check for user access when resolving series for a collection tag. When asking for all tags, if the user is not an admin, only give promotoed tags back.
* Implemented updateTag api
* Implemented the ability to update series the tags have access to.
* Cleanup, sorting, and null check
* More sorting changes
* Ensure we can delete tags when editing a series tags
* Fix order of update to make sure a tag is properly deleted
* Code smells
* Removed an error log statment which wasn't valid. Was showing error when a comicinfo.xml was not found in a directory.
* Fixed#191. Don't overwrite summary information if we already have something set from UI.
* Fixes#192
* Fixed#194 by moving the Take to after the query runs, so we take only distinct series.
* Added another case for Regex parsing for VanDread-v01-c01.zip
* Remove automatic retry for scanLibraries as if something fails, it wont pass magically. Catch exceptions when opening books for parsing and swallow to ignore the file.
* Delete extra attempts
* Switched to using FirstOrDefault for finding existing series. This will help avoid pointless crashes.
* Updated message when duplicate series are found (not sure how this happens)
* Fixed a negation for deleting volumes where files still exist.
* Implemented the ability to automatically scale the manga reader based on screen size.
* Default to automatic scaling
* Fix an issue where malformed epubs wouldn't be readable due to incorrect keys in the OPF. We now check if key is valid and if not, try to correct it. This makes a page load about a second on malformed books.
* Fixed#176. Refactored the recently added query to be restricted to user's access to libraries.
* Fixed a one off bug with In Progress series
* Implemented the ability to refresh metadata of just a single series directly
* Remove automatic retry for scanLibraries as if something fails, it wont pass magically. Catch exceptions when opening books for parsing and swallow to ignore the file.
* Delete extra attempts
* Switched to using FirstOrDefault for finding existing series. This will help avoid pointless crashes.
* Updated message when duplicate series are found (not sure how this happens)
* Fixed a negation for deleting volumes where files still exist.
* Implemented the ability to automatically scale the manga reader based on screen size.
* Added book filetype detection and reorganized tests due to size of file
* Added ability to get basic Parse Info from Book and Pages.
* We can now scan books and get them in a library with cover images.
* Take the first image in the epub if the cover isn't set.
* Implemented the ability to unzip the ebup to cache. Implemented a test api to load html files.
* Just some test code to figure out how to approach this.
* Fixed some merge conflicts
* Removed some dead code from merge
* Snapshot: I can now load everything properly into the UI by rewriting the urls before I send them back. I don't notice any lag from this method. It can be optimized further.
* Implemented a way to load the content in the browser not via an iframe.
* Added a note
* Anchor mappings is complete. New anchors are updated so references now resolve to javascript:void() for UI to take care of internally loading and the appropriate page is mapped to it. Anchors that are external have target="_blank" added so they don't force you out of the app and styles are of course inlined.
* Oops i need this
* Table of contents api implemented (rough) and some small enhancements to codebase for books.
* GetBookPageResources now only loads files from within the book. Nested chapter list support and images now use html parsing instead of string parsing.
* Fonts now are remapped to load from endpoint.
* book-resources now uses a key, ensuring the file is in proper format for lookup. Changed chapter list based on structure with one HEADER and nested chapters.
* Properly handle svg resource requests and when there are part anchors that are clickable, make sure we handle them in the UI by adding a kavita-page handler.
* Add Chapter group page even if one isn't set by using first page (without part) from nestedChildren.
* Added extra debug code for issue #163.
* Added new user preferences for books and updated the css so we scope it to our reading section.
* Cleaned up style code
* Implemented ability to save book preferences and some cleanup on existing apis.
* Added an api for checking if a user has read something in a library type before.
* Forgot to make sure the has reading progress is against a user lol.
* Remove cacheservice code for books, sine we use an in-memory method
* Handle svg images as well
* Enhanced cover image extraction to check for a "cover" image if the cover image wasn't set in OPF before falling back to the first image.
* Fixed an issue with special books not properly generating metadata due to not having filename set.
* Cleanup, removed warmup task code from statup/program and changed taskscheduler to schedule tasks on startup only (or if tasks are changed from UI).
* Code cleanup
* Code cleanup
* So much code. Lots of refactors to try to test scanner service. Moved a lot of the queries into Extensions to allow to easier test, even though it's hacky. Support @font-face src:url swaps with ' and ". Source summary information from epubs.
* Well...baseURL needs to come from BE and not from UI lol.
* Adjusted migrations so default values match Entity
* Removed comment
* I think I finally fixed#163! The issue was that when i checked if it had a parserInfo, i wasn't considering that the chapter range might have a - in it (0-6) and so when the code to check if range could parse out a number failed, it treated it like a special and checked range against info's filename.
* Some bugfixes
* Lots of testing, extracting code to make it easier to test. This code is buggy, but fixed a bug where 1) If we changed the normalization code, we would remove the whole db during a scan and 2) We weren't actually removing series properly.
Other than that, code is being extracted to remove duplication and centralize logic.
* More code cleanup and test cleanup to ensure scan loop is working as expected and matches expectaions from tests.
* Cleaned up the code and made it so if I change normalization, which I do in this branch, it wont break existing DBs.
* Some comic parser changes for partial chapter support.
* Added some code for directory service and scanner service along with python code to generate test files (not used yet). Fixed up all the tests.
* Code smells
* More cases for parsing regex
* Fixed a bug where chapter cover images weren't being updated due to a missed not.
* Removed a piece of code that was needed for upgrading, since all beta users agreed to wipe db.
* Fixed InProgress to properly respect order and show more recent activity first. Issue is with IEntityDate LastModified not updating in DataContext.
* Updated dependencies to lastest stable.
* LastModified on Volumes wasn't updating, validated it does update when data is changed.
* Rewrote a check to avoid a small heap object warning.
* Ensure UpdateSeries checks all libraries for unique name.
* Took care of some todos, removed unused imports, on dev go ahead and schedule reoocuring jobs since LiteDB caused the locking issue.
* No Tracking when we aren't using entities.
* Added code to remove abandoned progress rows after a chapter gets deleted.
* RefreshMetadata uses one large query rather than many trips to DB for updating metadata. Significantly faster.
* Fixed a bug where UpdateSeries would always complain about a unique name even when we weren't updating name.
* Files that are linked to a series but can't parse out Vol/Chapter information are properly grouped like other Specials.
* Refresh metadata on UI should call the task directly
* Fixed a bug on updating series to make sure we don't complain if we aren't trying to update the name to an existing name.
* Fixed#142 - Library cards should be sorted.
* Refactored the name of some variables to be more agnostic to comics.
* Implemented ScanLibrary but abandoning it.
* Code Cleanup & removing ScanSeries code.
* Some more tests and new Comparators for natural sorting.
* Fixed#137 - When performing I/O on archives, ignore __MACOSX folders completely.
* Fixed#137 - When performing I/O on archives, ignore __MACOSX folders completely.
* All entities that will show under specials tab should be marked special, rather than just what has a special keyword.
* Don't let specials generate cover images
* Don't let specials generate cover images
* SearchResults should send LocalizedName back since we are searching against it.
* Added some tests around macosx folders found from my actual server.
* Put extra notes about a case where duplicates come about, logger will now tell user about this issue.
* Missed a build issue somehow...
* Some code smells