Skip to content

Dark-mode button-text fix, Transfer tab controls, tracker edit fix, dev-client bundle ID, and lint/hooks cleanup - #215

Merged
taylorcox75 merged 14 commits into
previewfrom
release/v3.8.35
Aug 5, 2026
Merged

Dark-mode button-text fix, Transfer tab controls, tracker edit fix, dev-client bundle ID, and lint/hooks cleanup#215
taylorcox75 merged 14 commits into
previewfrom
release/v3.8.35

Conversation

@taylorcox75

@taylorcox75 taylorcox75 commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • Dark-mode dialog text — filled primary/error buttons (delete confirmation's "Torrent Only"/"With Files", InputModal, LogViewer, category editor) colored their label with colors.surface, which is near-black in dark mode, making the text unreadable on the saturated fill. Adds a new additive onAccent color (always white) for text on a filled accent background.
  • Functional gaps fixed — wires up Automatic Torrent Management toggling and adds Pause Downloads/Uploads to the Transfer tab (both existed but were unreachable), switches tracker edits to the atomic editTracker endpoint instead of remove-then-add (which could permanently lose a tracker if the add step failed), restores a missing disconnect-confirmation toast, fixes the About screen's RN version falling back to "N/A", and removes the unreachable Copy Hash action and its orphaned strings.
  • Dev-client bundle IDAPP_VARIANT=development now switches app.config.js to com.taylorcox75.expogo, so the dev-client build can install side-by-side with the App Store build instead of overwriting it. The production identifier is unchanged.
  • Lint/hooks correctness cleanup — reorders several data-loading functions ahead of the effects that call them, converts Animated.Value/PanResponder refs created via useRef(...).current to useState so they aren't read during render, reviews every exhaustive-deps warning individually (adding real missing deps, documenting deliberate omissions), and removes unused imports/vars/dead try-catch wrappers across the app and services layer.
  • Toast positioning — net no-op. Toasts were moved to a near-bottom position to clear header controls, then moved back to the top after finding the keyboard covers a bottom toast on the server add/edit modal sheets. What actually lands is unchanged vertical placement (safeTop + spacing.sm, where spacing.sm is the same 8 as the previous literal) plus slightly narrower side margins (16 → 24pt). The torrents list's pre-existing header-offset override is untouched.

Why

Several of these were found while iterating on toast positioning in this session — the dark-mode text bug and a few functional gaps were noticed along the way and fixed in the same pass. The toast work itself ended up reverting to where it started; the incidental fixes are the substance of the PR. The lint/hooks cleanup was a deliberate pass through the warnings surfaced by newer lint rules, addressing genuine issues while documenting the handful of intentional exceptions.

Commits in this PR

  • Fix functional gaps and remove dead code
  • Redesign toast positioning to avoid blocking header controls
  • Clean up lint warnings: unused code and loose types
  • Fix hooks correctness warnings from the newer lint rules
  • Give the dev-client build a distinct bundle ID
  • Fix unreadable dialog button text in dark mode
  • Move toast notifications back to the top

Test plan

  • npx tsc --noEmit — clean.
  • npm test — 69 suites / 989 tests passing (both node and rn projects).
  • npm run lint — 0 errors (37 pre-existing baseline warnings, unchanged bar).
  • npm run format — no changes needed.
  • Not run on-device (no simulator/build in this environment) — worth a manual pass over the delete-confirmation and InputModal dialogs in dark mode, the Transfer tab's new AMM/pause controls, and toast positioning on the server add/edit screens with the keyboard open.
  • This PR also bumps React Native 0.86.0 → 0.86.2, Expo 57.0.8 → 57.0.10 and reanimated 4.5.0 → 4.5.1. No JS-level check exercises the native build, so these want a npm run xcode device build before merge.

Made with Cursor

taylorcox75 and others added 10 commits August 3, 2026 23:03
* Changelog

* Clarify self-signed cert toggle label as untrusted

* Update remaining locales for untrusted self-signed cert wording
Wires up Automatic Torrent Management toggling and adds Pause
Downloads/Uploads to the Transfer tab — both were fully implemented
but never reachable from any screen. Also fixes tracker edits to use
the atomic editTracker endpoint instead of remove-then-add (which
could permanently lose a tracker if the add step failed), restores
the missing confirmation toast when disconnecting a server from
Settings, fixes the About screen's React Native version never
falling back to "N/A", and removes the unreachable Copy Hash action
along with its orphaned translation strings.
Toasts previously anchored near the top by default, directly over the
nav-bar band where each screen's own controls live — most visibly the
Search tab's Add button, which a toast would sit on top of after
every add-torrent action, blocking the next tap until it cleared.
Only the torrents list screen had opted in to a header-aware override.

Toasts now anchor near the bottom instead, clearing the tab bar by
default. This removes the entire class of collision at once rather
than requiring each screen to opt in, so the per-screen top-offset
override is no longer needed and has been removed.
Removes unused imports, variables, and vestigial state across the
app and services layer, drops try/catch wrappers that only rethrew,
attaches `cause` to a couple of rethrown errors for easier debugging,
and replaces `any` in test mocks with proper types (ReturnType casts,
ReactTestInstance, etc). No behavior change — internal cleanup only.
Reorders several data-loading functions to be declared before the
effects that call them (was relying on hoisting order rather than
normal declaration order), converts Animated.Value/PanResponder refs
created via useRef(...).current to useState so they're not read
during render, and reviews every exhaustive-deps warning individually
— adding genuinely missing dependencies where safe, and documenting
why a handful are deliberately excluded (non-memoized loaders, or
values whose object identity churns without their content changing).

A residual set of warnings — mostly "pass a stable handler into a
render-time helper function" and "sync local state when a modal
opens" — are left as-is: they're real patterns used consistently
across this codebase, not bugs, and this project doesn't build with
the React Compiler, so restructuring them now would trade real risk
for no runtime benefit.
Setting APP_VARIANT=development via eas.json's development profile
env block switches app.config.js to com.taylorcox75.expogo for that
build, so it can install side-by-side with the App Store build on
device instead of overwriting it.
Filled primary/error buttons colored their label with `colors.surface`,
which is near-white in light mode but near-black in dark mode — so the
delete confirmation's "Torrent Only" / "With Files" buttons, and the
same pattern in InputModal, LogViewer and the category editor, rendered
dark text on a saturated fill.

Adds an `onAccent` color (white in every palette) for text sitting on a
filled accent background, and uses it at those four sites. The key is
additive, so saved custom themes keep working and simply inherit the
default. It's intentionally not exposed in the color picker — on-accent
text has one correct value.

Also reverts two changes from the previous commit that traded real risk
for a silenced warning: the render-time nav-readiness ref in _layout.tsx
(the async cold-launch URL handler can resolve before passive effects
flush, and that path has regressed repeatedly), and loadServers' added
showToast/t dependencies (they feed a useFocusEffect, so an unstable
identity there risks a reload loop). Both now carry documented
suppressions instead.
The bottom position let the keyboard cover a toast on the server
add/edit sheets. Anchoring near the top again avoids that, restoring
the header-offset override for the torrents list screen so its
search/add controls stay clear, and narrowing the toast's side
margins slightly.

Co-authored-by: Cursor <cursoragent@cursor.com>
@taylorcox75 taylorcox75 changed the title Toast repositioning, dark-mode button-text fix, dev-client bundle ID, and lint/hooks cleanup Dark-mode button-text fix, Transfer tab controls, tracker edit fix, dev-client bundle ID, and lint/hooks cleanup Aug 5, 2026
taylorcox75 and others added 2 commits August 5, 2026 00:17
Replace the old appstore/appstore-ipad PNG screenshots with new JPGs,
lay out the top two README images side by side, and rewrite the
v3.8.35 changelog entry to match what actually shipped.

Co-authored-by: Cursor <cursoragent@cursor.com>
@taylorcox75
taylorcox75 force-pushed the release/v3.8.35 branch 2 times, most recently from 6e264ca to 3534928 Compare August 5, 2026 05:30
@taylorcox75
taylorcox75 merged commit d6bd2a9 into preview Aug 5, 2026
@taylorcox75
taylorcox75 deleted the release/v3.8.35 branch August 5, 2026 05:34
@taylorcox75
taylorcox75 restored the release/v3.8.35 branch August 5, 2026 05:35
@taylorcox75
taylorcox75 deleted the release/v3.8.35 branch August 5, 2026 05:36
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.

1 participant