Skip to content

feat: search and full history in the activity list - #157

Merged
builtbyproxy merged 10 commits into
mainfrom
audit/stack-10-activity-search
Oct 8, 2026
Merged

builtbyproxy merged 10 commits into
mainfrom
audit/stack-10-activity-search

Conversation

@builtbyproxy

@builtbyproxy builtbyproxy commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Layer 12 of the audit fix stack (releases 2.12.0, a minor feature release). Fixes audit finding UI-27 plus two small dashboard items found in earlier layers. Stacked on #156.

Includes two commits by @WouterStulp from his fork (search, episode grouping and older history in the activity list; binge runs grouped in the admin Activity log), applied under his authorship and adapted to layers 6 to 8.

Release notes

The activity list now reaches your whole history. A search box above the status filters finds any title. A "Load older history" button pages back through everything Jellyscribe has logged, instead of the list quietly stopping after a couple of hundred entries. A binge of one show folds into a single row that shows the episode range and any failures, and opens with a click or the keyboard. Prev and Next switch off at the ends. The same works on the admin dashboard's overview and its Activity tab. In the account dialog, the watchlist option's description now changes when you switch a new account between Serializd and Letterboxd, and the service names read "Serializd: TV" and "Letterboxd: Film". Thanks to Wouter Stulp, whose search, episode grouping and older-history work is included.

What's broken

  • The activity list stops at the newest couple of hundred events and gives no sign that more exists. The user page asks each History endpoint for 250 events. The server caps Letterboxd at 200, and the pager pages the merged list as if it were complete. On a long history, everything older is out of reach.
  • There is no way to find a title, and a binge of one show fills whole pages with single episodes.
  • In the account dialog, switching a new account from Serializd to Letterboxd leaves the watchlist option describing a TV collection.

Why it happens

  • Each page fetched one page of History and treated it as everything. Nothing read the server's total, and nothing fetched an offset beyond 0.
  • The toggle descriptions in the account dialog are rendered once, for the service selected when it opened. onSvcChange updated the other fields but not that text.

What this PR does

  • Includes Wouter Stulp's work, applied onto the reworked pages (his authorship kept):
    • a title search;
    • consecutive episodes of one show folded into one expandable row (a real button with aria-expanded);
    • a "Load older history" button that pages History by offset and shows "N of M events loaded";
    • Prev and Next disabled at the ends, the admin Activity tab included.
  • On top of that:
    • Each page asks for 200, which works with today's server cap. The admin Overview pages the same way.
    • An event that a later page repeats is shown once. Offset paging shifts rows when new events are logged.
    • The merged list stops where a service with more to load stops, so one service's old rows never show with the other's missing. Only the filtered services count.
    • A failed load says so and can be retried, and a reload discards stale pages.
    • A folded run belongs to one account and shows the true episode range. A failure inside it shows on its row.
    • An empty search says when older history is still left to load.
    • The search box is labelled, and folded rows keep the phone-width date.
  • The account dialog rewords the watchlist option whenever the service changes, on both pages. The service names read "Serializd: TV" and "Letterboxd: Film".
  • README describes the search and older history.

How it was tested

  • dotnet test: 1313 passed. The new markup tests fail with the old pages.
  • Stub harness with 600 placeholder events (360 films and 240 episodes, served with the real page caps): 68 checks on both pages.
    • search and its empty states;
    • grouping and keyboard toggling;
    • paging to all 600 with 200-event requests;
    • dedupe after 5 events are logged between loads;
    • failure and retry;
    • the filter cut-off, account-split runs, episode ranges and failed counts;
    • hostile data stays text;
    • phone width;
    • the dialog wording.
  • All pass. The base fails 30. The earlier flows, accessibility, layout, theme and poller suites still pass.
  • Live smoke on throwaway Jellyfin 12.0 and on 10.11 under /jellyfin, with History faked by request interception and no real service contacted. On each, the in-app page loads "400 of 600 events loaded", Load older reaches the end, search filters, a group opens by keyboard, and there are no page errors.

Screenshots

Taken on throwaway Jellyfin test servers with placeholder users and generated placeholder history.

Search

Before After
before after

End of the list

Before After
before after

Account dialog after switching to Letterboxd

Before After
before after

A folded binge run, opened

after

@builtbyproxy
builtbyproxy added this pull request to stack #150 October 8, 2026 00:16
@builtbyproxy builtbyproxy changed the title audit/stack 10 activity search feat: search and full history in the activity list Oct 8, 2026
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch 2 times, most recently from e6f263f to 5337a60 Compare October 8, 2026 02:18
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch from 5337a60 to b52b96c Compare October 8, 2026 02:18
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch 3 times, most recently from f8f4b77 to c391189 Compare October 8, 2026 02:26
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch from c391189 to 82ea967 Compare October 8, 2026 02:28
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch 2 times, most recently from 4175c56 to c825698 Compare October 8, 2026 02:32
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch 2 times, most recently from 46ecca1 to d1eb439 Compare October 8, 2026 02:36
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch from d1eb439 to a01f586 Compare October 8, 2026 02:39
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch 2 times, most recently from 040bb5a to 0c698d2 Compare October 8, 2026 02:44
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch 3 times, most recently from ff42e07 to 8b707a4 Compare October 8, 2026 02:53
Base automatically changed from audit/stack-09-sync-followups to main October 8, 2026 02:57
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch from 8b707a4 to 81704a4 Compare October 8, 2026 02:57
@builtbyproxy
builtbyproxy force-pushed the audit/stack-10-activity-search branch from 81704a4 to 2cfd99d Compare October 8, 2026 03:00
@builtbyproxy
builtbyproxy merged commit 94e6aa4 into main Oct 8, 2026
5 checks passed
@builtbyproxy
builtbyproxy deleted the audit/stack-10-activity-search branch October 8, 2026 03:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants