+1

Plex v3 Theme

Ronald Voter 4 weeks ago updated 2 weeks ago 4

plex-v3


Ubooquity 3.1.0 compatible Plex-style theme.

Image 860


The home page includes `Recently Added` rows and a theme-side `Continue Reading` row.

Image 861

Added a `Continue Reading` which currently implemented as a theme-side workaround using the existing Ubooquity pages and bookmark API.

Image 862

Nice Theme, I've softened the black a bit and got rid of the dividing lines. The comics no longer have the progress bar, is this a theme thing or a V3 ubooquity thing?

Image 865

+1

it's OK, I've figured you need to refresh the page after marking a book as read

Here is my slightly amended version, slight gardient tint, less rounded corners and amended spacing for a neater overall look, 

Image 866

https://drive.google.com/file/d/1Xsbq6hqvkkNmL6QCyA-O0uGddXzy7x5P/view?usp=drive_link

+1
v1.0.2 Released - Real progress bars, throttling, finished-state filter


Visual

- Continue Reading and library grid cards now show real progress percentages, sourced from `/bookdetails/{id}` instead of the unreliable library-grid `{{progress}}` template variable.

- Tracked cards show a muted loading state instead of a fake 50% bar until the real value arrives.

- New CSS rules for reading state: `status_unread` (bar hidden), `status_inprogress` (blue), `status_finished` (green) finished books are visually distinct at a glance.

- Library grid bars refresh in place after returning from the reader; no full page reload required.


Performance

- Continue Reading crawler throttled to a 30-second minimum interval. Previously it re-ran on every tab focus, hammering the server when flipping between tabs.

- Library grid progress refresh now has a 5-second cooldown and a 6-worker concurrency cap so a 48-item page doesn't fan out.

- Removed `cache: 'no-store'` from library HTML fetches so the browser can serve 304s on reload. Bookmark and details fetches that need to be fresh still bypass cache.


Correctness

- **Finished books drop out of Continue Reading. Previously, a book the user marked finished whose end-of-content bookmark string was non-zero would stay in the row indefinitely. A secondary `statusClass` check via `/bookdetails/{id}` now removes them.


Code quality

- Tracked card HTML built via DOM API instead of string concatenation; item IDs sanitized to digits before going into attributes.

- Replaced the magic-number sort sentinel (`progress: 999`) with an explicit `pinned: true` flag.


Preserved from v1.0.1

- Continue Reading membership remains scoped to the authenticated user via `/user-api/bookmark?docId=...` (the only confirmed user-scoped Ubooquity endpoint).

- Per-user `localStorage` cache keys.


Known limitation

Library grid bar percentages go through `/bookdetails/{id}`, which reads from Ubooquity's unscoped `OpusEntry` bookmark join. The displayed value on a library grid card can occasionally reflect another user's reading position. Continue Reading membership is correct; only the cosmetic bar fill on the library grid is affected. The real fix requires Ubooquity scoping the join server-side ([feature request filed upstream](https://userecho.com/)).


Install / upgrade

1. Download the source archive from this release (or pull `main`).

2. Copy the `plex-v3` folder into your Ubooquity `themes` directory, replacing the previous version.

3. Restart Ubooquity.

4. Hard-refresh the browser.