The safe area inset wasn't applied everywhere, which potentially caused the scrollbar to appear while the pages should be fitting the screen
fixes#1102
When changing a setting from DEFAULT to another value, the value was incorrectly wrapped in an array which lead to an invalid value to get set.
This then caused an error to be thrown, making the reader unusable
fixes#1099
In case the extensions has an available update and is obsolete at the same time, the uninstall button was shown twice.
An obsolete extension is not updatable; thus, the second button for the "update" action should not be shown.
When migrating an entry to the same source as it already is from, the source queues got blocked, preventing any progress.
Since the migration does not do any request to the source of the entry to migrate, it is not required to go through the queue for the source.
There is a possibility that the source changed the manga title after the track record was bound.
In that case it is possible that the track record won't be found anymore when executing the search.
Thus, instead of using the manga title as the search string, the existing track records title should be used instead to make sure that the bound track record will be included in the search results.
Regression a7dcdd5651
"usePrevious" uses "useEffect" to update the ref while the fix of the commit updated the state during the render function call.
This causes the component to not actually render and immediately call the render function again. Which then leads to the "usePrevious" hooks "useEffect" to never getting called.
For the bulk selection the "download ahead" option only downloaded chapter in case there weren't enough downloaded chapters.
In the single mode, this wasn't the case. There was "logic" to make this happen; however, it was not working as expected
Regression 9ed05f3fc0
Due to the change to check if an image is cached, which is done async, it was possible that the image request was aborted before the request actually got queued.
In that case, the abort was called against the "noop" function and did not actually abort the triggered request.
Thus, after the image got queued, we have to optionally abort it again to ensure that the request really gets aborted.
Obsolete extensions are not grouped at the top of the extension page anymore and instead show an "OBSOLETE" warning text with a the "uninstall" action.
The vite legacy plugin injects the modern polyfill script at the start of the header.
This is a problem because it will be injected above the base tag, which results in an invalid url and causing the script load to fail
Injecting the base tag via a script causes assets to be requested once from an invalid url and then again from the correct one after the base tag got injected.
Setting it statically won't cause any problems with the servers subpath injection, because the browser will just use the first base tag in case there are multiple.
fixes#1096
In these modes the reader does not load leading pages to prevent the resulting layout shift on load.
This behavior prevented the retry button functionality.
Due to the way loading/failed pages are rendered and how the current page is detected, it's possible that the retry button for a leading page is visible, which resulted in showing a retry button without any functionality.
fixes#1088