Add manual feed subscription #3

Merged
claude-bot merged 4 commits from worktree-manual-feed-subscribe into main 2026-08-21 14:54:28 +00:00

4 commits

Author SHA1 Message Date
Austin Schaefer
f28ed7b758 Fix CI: cargo fmt and clippy -D warnings failures
All checks were successful
CI / check (pull_request) Successful in 6m40s
CI / test (pull_request) Successful in 3m18s
CI / audit (pull_request) Successful in 11s
- cargo fmt: reformat a match arm in app.rs and drop trailing blank
  lines the dx-components generator left in two mod.rs files
- clippy -D warnings (feedsignal-web, server feature): the generated
  ButtonVariant/ButtonSize enums have variants this app doesn't use yet
  (they're part of the component library's API surface, not dead code
  in the ordinary sense) — clippy's dead_code lint was failing the
  build under -D warnings, fixed with a scoped #[allow(dead_code)]

Verified all three CI jobs locally: cargo fmt --check, clippy for
native crates + both feedsignal-web feature sets, cargo test
--workspace --exclude feedsignal-web, and cargo audit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJJQb2DWZZwQ1yPiaAQQoY
2026-08-21 15:41:16 +02:00
Austin Schaefer
e621720e47 Split has_content test into three cases per reviewer request
Some checks failed
CI / check (pull_request) Failing after 34s
CI / test (pull_request) Has been skipped
CI / audit (pull_request) Has been skipped
Separate tests for empty/whitespace/non-blank input so a regression
points at the exact case that broke instead of a single bundled test.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJJQb2DWZZwQ1yPiaAQQoY
2026-08-21 15:38:52 +02:00
Austin Schaefer
8d316408b8 Address review feedback on manual feed subscription
Some checks failed
CI / check (pull_request) Failing after 16s
CI / test (pull_request) Has been skipped
CI / audit (pull_request) Has been skipped
- Annotate the form onsubmit event type for clarity
- Disable the Subscribe button while the URL field is blank
- Rename title -> feed_title and invert the blank-title filter into a
  positively-named has_content helper, with a unit test
- Guard fetch_feed with error_for_status() so a well-formed URL that
  points at nothing (404/5xx) surfaces a clear error instead of an
  opaque feed-rs parse failure
- Collapse subscribe_feed_impl's two upsert_feed writes into one: fetch
  under a throwaway id first, then let upsert_feed be the single source
  of truth for the real feed id (existing id on re-subscribe, fresh
  otherwise), remapping fetched articles onto it before inserting. This
  also means a failed subscribe no longer leaves a placeholder row behind.
- Move the blank-URL check ahead of trimming

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJJQb2DWZZwQ1yPiaAQQoY
2026-08-21 15:32:39 +02:00
Austin Schaefer
d40c90552c Add manual feed subscription
Some checks failed
CI / check (pull_request) Failing after 32s
CI / test (pull_request) Has been skipped
CI / audit (pull_request) Has been skipped
Adds a URL input + Subscribe button (dx-components Input/Button) to the
UI, wired to a new subscribe_feed server function that upserts the feed
row and does an immediate first fetch so the reader isn't empty until
the next scheduled poll. feedsignal_feeds::fetch_feed now also returns
the feed's title, used to replace the URL placeholder once fetched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJJQb2DWZZwQ1yPiaAQQoY
2026-08-21 15:15:50 +02:00