Commit Graph

48 Commits

Author SHA1 Message Date
schroda
8a5aaf51f3 Add guard to "enable flaresolverr" setting 2026-04-07 15:16:08 +02:00
schroda
9ce273b5ce Use stable array/object constants 2026-03-20 03:02:52 +01:00
schroda
fcf1c7fa3f Fix "Maximum update depth exceeded"
Regression b63c8a548e
2026-03-20 03:01:32 +01:00
schroda
b63c8a548e Fix collectable collection selecting initial items lazily 2026-03-20 01:42:57 +01:00
schroda
33c55f8b85 Fix collectable selection hook memoization 2026-03-20 01:42:15 +01:00
schroda
9aae34b8ad Add logic to have optional page specific back button logic
Makes it possible to trigger actions on back button click and optionally prevent the actual back navigation
2026-03-20 01:42:15 +01:00
schroda
80829febb2 [skip ci] Re-add removed lint rules 2026-03-14 02:11:03 +01:00
schroda
72af9d52d1 Update lint rules 2026-03-11 19:42:02 +01:00
schroda
5dda4304d9 Migrate to oxlint + oxfmt 2026-03-11 19:41:49 +01:00
schroda
22e1b6d224 Update dependency "eslint" to v9.x
v9.39.4
2026-03-10 21:41:50 +01:00
schroda
f549658dfa Update dependencies 2026-03-09 01:13:34 +01:00
schroda
d99d950585 Fix refreshing thumbnail during manga refresh
When using blobs (e.g. due to authentication), manually refreshing caused the thumbnail to break on the manga page.
This was caused because the image got cleaned up, but did not get reloaded again because it was considered to be already loaded.

Regression 3a27461598
2026-02-13 00:58:13 +01:00
schroda
76474712a3 Use BCP-47 language codes for i18n resource files
Lingui expects the codes to be compliant to BCP-47 while weblate was not set up to create the resource files in that format.
And react-i18next was able to just handle them.

fixes #1058
2026-01-30 21:57:12 +01:00
schroda
4d7eb74a56 Merge "selected source/extension" languages 2026-01-25 17:35:42 +01:00
schroda
7ef353aa2e Fix missing pinned sources in source language filter 2026-01-14 23:39:17 +01:00
schroda
0fd5bb3284 Fix missing "custom app languages"
Regression c1ac58f4d6
2026-01-14 16:34:38 +01:00
schroda
65a9a905be Migrate to lingui
Switch to "lingui" for better DX.
Tried to persist existing languages as much as possible.

Removed "vite-plugin-node-polyfills" because it's incompatible with "lingui"
2026-01-13 17:33:36 +01:00
schroda
c1ac58f4d6 Split up language utils file 2026-01-13 17:33:34 +01:00
schroda
5def0ea818 Add new image processing settings on serve 2025-12-23 02:10:06 +01:00
schroda
cedb865a42 Add "images" settings page 2025-12-23 02:08:14 +01:00
schroda
bded64b0b1 Convert "download conversions" setting to a page 2025-12-22 12:31:54 +01:00
Zeedif
84cfa6bea5 Update KOReader Sync settings (#1030)
* feat(settings): refactor and implement KOReader Sync settings page

Refactors the KOReader Sync settings section into its own dedicated page and implements the full connection and configuration flow.

The previous implementation in the main server settings was outdated and incomplete. This change aligns the frontend with the latest backend logic and provides a complete user experience.

Key changes include:
- Separated the UI into two states: a login form for initial connection and a configuration panel for existing connections.
- Implemented `connectKoSyncAccount` and `logoutKoSyncAccount` mutations to handle authentication with the KOReader Sync server.
- Updated the `SERVER_SETTINGS` GraphQL fragment to use the new `koreaderSyncStrategyForward` and `koreaderSyncStrategyBackward` fields, removing the deprecated `koreaderSyncStrategy`.
- Moved all KOReader Sync settings from the generic Server Settings page to a dedicated route at `/settings/koreader-sync`.
- Restructured and improved i18n keys for better clarity and consistency.

Ran `yarn gql:codegen` to regenerate GraphQL types and helpers.

* Extract credentials login into component

* Update to server changes and cleanup

---------

Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>
2025-12-06 19:59:39 +01:00
schroda
36248e17f0 Change add to library "show duplicate entry" button to be a link 2025-12-02 22:12:49 +01:00
schroda
3a27461598 Prevent triggering load of already loaded image
This caused the reader to "jump to random pages" because it caused the image to get unrendered and rendered again, leading to layout shifts.

This issue existed already for a long time but could only rarely be observed because of the hacky "cache check" logic.
The changes from 9ed05f3fc0 caused this issue to be consistent in case the new service worker could not get installed due to not meeting the required installation prerequisites. If that was the case, the cache check always returned false causing the above-described behavior.

fixes #929
2025-11-28 23:09:35 +01:00
schroda
87c3f03f3d Fix calling SpinnerImage load, error callbacks 2025-11-23 00:27:02 +01:00
schroda
fe4bfd922e Queue image requests per source
If http protocol is h2 or newer, allow:
 - 5 requests per source
 - unlimited local source requests
2025-11-23 00:08:23 +01:00
schroda
890b304b4a Ignore source/extension, tracker icon and thumbnails requests from image queue
The server is not requesting these images through an extension; thus, it is not a problem to send them directly to the server since there is no problem of getting the server "stuck" due to extension rate limits.
2025-11-22 23:50:05 +01:00
schroda
9ed05f3fc0 Cache images via service worker
Improves the image request logic by making it possible to check if an image is cached.
In case an image is cached, it does not need to be put into the image queue because it won't be sent to the server.
2025-11-22 23:50:03 +01:00
schroda
704d3b191f Flag event listeners as passive 2025-11-22 19:14:43 +01:00
schroda
02621dec98 Introduce "awaitable-component" 2025-11-03 21:45:53 +01:00
schroda
7502393f40 Fix back button when previous page should be ignored
In case the previous page in the history should be ignored, the back button just went back to the root page (library).
Instead, it should try to go back to the next page in the history until there is no page to go back to anymore.
2025-10-30 00:26:19 +01:00
schroda
258d1a496a Remove "auth required flag" from session storage
With 12ef012e4b this has no benefit anymore, because the app now always checks if authentication is enabled by the server first before any other request can be sent.
2025-10-16 22:46:03 +02:00
schroda
f539afb404 Introduce "koration" duration api 2025-10-14 21:14:52 +02:00
schroda
3e98b5172d Move "SelectableCollection" to "base" folder 2025-10-04 14:49:01 +02:00
schroda
9329ef5fdc Improve logic to show dialog outside of components 2025-10-04 14:49:00 +02:00
schroda
121c74ed73 Fix source iso language detection
Caused issue for some languages, e.g., for all the different chinese languages, which are not all specified in the "IsoLanguages". These languages all incorrectly used the standard native chinese name which resulted in multiple different source groups with the same group name.
2025-10-01 01:44:30 +02:00
schroda
ad3b8d4567 Update server injected subpath detection 2025-09-25 00:20:31 +02:00
schroda
a2d7091712 Remove "forwardRef" usage 2025-09-25 00:20:10 +02:00
Soner Köksal
4d4477640e Add dynamic subpath support (#1011)
* Add dynamic subpath support for WebUI

- Add SubpathConfig utility for server-side subpath detection
- Configure React Router basename from server config
- Update API base URL handling for subpath compatibility
- Fix asset loading with relative paths
- Add VITE_SUBPATH environment variable for development
- Update locales and manifest paths for subpath support

Closes #174

* Move VITE_SUBPATH interface to vite-env.d.ts

* Ensure production bundle always uses relative base
2025-09-23 23:23:19 +02:00
schroda
b13bb86f40 Move app theme related types to dedicated file
Fixes circular dependency.
2025-09-21 01:16:42 +02:00
schroda
fb70d89940 Move reader "tap zone state" to "reader store" 2025-09-21 01:16:30 +02:00
schroda
a3603c475e [skip ci] Cleanup "useMouseDragScroll" array access 2025-08-26 23:11:23 +02:00
schroda
ece31ddc18 Fix mouse cursor drift during drag scroll
Previously, the drag-scroll implementation used incremental relative positioning
  which accumulated rounding errors over time. This caused the mouse cursor to
  gradually drift away from its original position during prolonged drag operations,
  particularly noticeable on slower hardware or systems with lower frame rates.

  The fix switches from cumulative delta updates to absolute positioning:
  - Track initial mouse and scroll positions when drag starts
  - Calculate scroll position as: initialScroll - (currentMouse - initialMouse)
  - This ensures the visual position remains locked throughout the entire drag

  This change eliminates drift by avoiding cumulative floating-point
  errors that occurred with the previous += approach.

  1. Inverted Logic: The code adds the mouse delta to scrollLeft/scrollTop, but this is backwards. When you drag right, you want the content to move left (scroll increases), and vice versa.
  2. Cumulative Rounding Errors: Using += with floating-point deltas accumulates rounding errors over time, especially on slower hardware where mousemove events may be processed less frequently or with more delay.
  3. Frame Rate Dependency: On slower hardware, if the browser can't keep up with all mouse events, some movements get skipped, but the positions still update, causing the reference point to drift.
2025-08-26 23:06:45 +02:00
schroda
4aad410957 Add "ui login" support 2025-08-26 23:06:44 +02:00
schroda
bfb10ad204 Fix app storage "null" and "undefined" value handling 2025-08-24 20:48:31 +02:00
bornav
f851c04932 [Improvment] Drag scrolling inertia calculation no longer locked to 60hz (#1003)
* feat/make-drag-scroll-not-locked-to-60

* fixup-addresing comments
2025-08-24 20:46:32 +02:00
schroda
f13fcc0e8c Move type "NullAndUndefined" to util types 2025-08-16 17:10:48 +02:00
schroda
9e5af57a5f Move "core" folder out of "features" into "base" 2025-08-16 15:44:17 +02:00