Repository navigation
v3.8.42: swipe actions, connect states, auth race, badge colors - #242
Merged
Merged
Conversation
- Swipe actions now slide in with the drag (canonical RNGH progress pattern) and are clipped to the card's bounds, fixing the action background bleeding past the card and the blank/flashing icons. - Fixed the "Authentication failed" that could appear when switching servers: the previous server's sync poll kept running through the connect and its 403 wiped the new server's fresh session cookie. apiClient now stamps each request with a session epoch and ignores a 403 from a superseded session; the poll is stopped before login, and reconnects no longer race an in-flight connect. - The torrent list now shows the skeleton while a connect is in flight instead of falling through to "No Torrents". - New withAlpha() util: appending hex alpha to an rgba() theme color silently produced an opaque fill, making the Connect pill red-on-red after a connection error. Fixed there and on the server debug rows. - A server's badge color is now a fixed default until the user picks one — it is never derived from the server name, so it no longer changes while typing or editing the name. - Added a Save button to the color picker header. - Removed the sound-effects feature (native module, preferences, settings UI and strings).
Patch-level bumps within SDK 57: expo, expo-dev-client, expo-linking, expo-router, expo-secure-store, expo-sharing, expo-updates. `expo install --check` reports the tree aligned. Leaves the 3 moderate npm audit advisories (decode-uri-component via query-string via expo-router) unaddressed on purpose — see the PR for why neither available remedy is safe to apply.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release v3.8.42.
package.jsonbumped to matchCHANGELOG[0].Fixes
Swipe actions — The action panel is
absoluteFillover the whole row while the card inside carries a 4px vertical margin and a 12/16px radius, so the orange/red backgrounds stood proud of the card with square corners. Separately, the icon scale interpolations were calibrated for a reveal animationSwipeabledoesn't perform (the panel is static; the card slides over it), so icons flashed or showed blank blocks. Actions now slide in withprogress— the library's own pattern — and the panel is clipped to the card's bounds."Authentication failed" when switching servers — The previous server's 2s
/sync/maindatapoll stayed enabled through a connect.apiClient.setServer(newServer)clears the cookie, the poll tick then 403s, and the shared 403 handler wiped the new server's just-issued session cookie — so the connect's owngetVersion()failed with an auth error. Retrying worked because the poll was disabled by then. Three-part fix:apiClientstamps each request with a session epoch and only lets a 403 clear the cookie when the request was issued under the current session; a superseded 403 throws a distinct non-reconnectable error.onMutate, stopping the poll before login runs.reconnect/checkAndReconnectno-op while a connect is in flight, the in-flight promise is keyed by server id, andServerManager.reconnect()takes an explicit server (storage's "current server" isn't written until after login, so it can still name the previous one mid-switch)."No Torrents" during a connect —
initialLoadCompleteis set once and never reset, so after any earlier session the skeleton condition was false during a connect and the screen fell through to the empty-list branch for the full 10s timeout. NewisConnectingflag onServerContextgates the skeleton.Unreadable Connect button —
colors.erroris anrgba()string, andcolors.error + '18'appends hex alpha that RN's unanchored color parser silently ignores, producing an opaque fill — error-red text on error-red. NewwithAlpha()util (hex/rgb/rgba, with tests) fixes the pill and the four server debug-row sites with the same latent bug.Server badge color changing on its own — The fallback was
avatarColor(name), rehashing an 8-colour palette on every keystroke and shifting again on rename. Servers now use a fixedDEFAULT_AVATAR_COLORuntil the user picks one.avatarColorstays for category/tag colours.Color picker — Added a Save button beside the X. Cosmetic only; selections already apply live.
Sound effects removed — Native module,
utils/sounds.ts, call sites, preference fields, settings UI and all six locales' strings.Existing users
savePreferencesspreads the stored object so they stay untouched in AsyncStorage and every other preference is preserved.ServerConfigfield changed. Servers that never had an expliciticonColorwill render with the default blue instead of a name-derived colour — a deliberate visual change, no data touched, and any colour can still be picked.colorstheme keys renamed;withAlphaonly changes how alpha is applied at render time.Test plan
npx tsc --noEmit— cleannpm test— 76 suites / 1089 tests passing (includes newtests/utils/color.test.tsand session-epoch cases intests/services/client.test.ts)npm run lint— 0 errors (38 baseline warnings)npm run formatSwipe rendering, the connect/skeleton states and the badge default need an on-device pass — they can't be verified from tests.
🤖 Generated with Claude Code