<feed xmlns='http://www.w3.org/2005/Atom'>
<title>feedreader.git/app/src/main/java/org/terst/feedreader/stash, branch master</title>
<subtitle>FeeDreader — personal Android RSS reader
</subtitle>
<id>https://git.terst.org/feedreader.git/atom?h=master</id>
<link rel='self' href='https://git.terst.org/feedreader.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/feedreader.git/'/>
<updated>2026-08-22T00:54:44+00:00</updated>
<entry>
<title>StashClient: cancellable requests, longer sync timeout, defensive parsing</title>
<updated>2026-08-22T00:54:44+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-08-22T00:54:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/feedreader.git/commit/?id=fccbaf8b647cf9350a00e76bab02c129dbad7dca'/>
<id>urn:sha1:fccbaf8b647cf9350a00e76bab02c129dbad7dca</id>
<content type='text'>
Uses the new Call.await() instead of a thread-blocking execute(). The
sync=true save endpoint can take up to ~30s (server-side extract +
summary), longer than the shared client's stock 10s read timeout --
overridden per-call so feed fetches don't inherit a 35s timeout they
don't need. A 409 (duplicate) is authoritative from the status code
alone; a body that doesn't match DuplicateErrorResponse's exact shape
no longer downgrades a real "already saved" into a misleading
"save failed".
</content>
</entry>
<entry>
<title>Text-only bottom bar, re-extract action, fix YouTube thumbnails, verify Stash creds before saving</title>
<updated>2026-07-25T00:55:59+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-25T00:55:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/feedreader.git/commit/?id=f202c603259c40c4d21a4385c9f69a3efca87acc'/>
<id>urn:sha1:f202c603259c40c4d21a4385c9f69a3efca87acc</id>
<content type='text'>
- Bottom bar: Previous/Keep unread/Next are now plain text labels, no icons
- Add "Re-download and re-extract" to the overflow menu (ReaderScreen and
  LinkReaderScreen) to force a fresh fetch + Readability pass on demand,
  overwriting whatever's cached
- Fix a real compile bug in the previous commit's reader-mode-off handler
  (passed null into a non-null setExtractedContent) via a proper
  clearExtractedContent() DAO query
- YouTube embeds: fixed the broken-image-glyph bug two ways -- (1) an
  11-char video-ID regex was accidentally matching a playlist embed's
  literal "videoseries" placeholder path, building a thumbnail URL for a
  video that doesn't exist, and (2) Readability's link-density cleanup was
  discarding the replacement entirely (a bare &lt;a&gt;&lt;img&gt;&lt;/a&gt; reads as an
  ad/share unit). Restructured as a &lt;figure&gt;/&lt;figcaption&gt; pair -- the same
  shape a normal captioned photo takes -- confirmed live this survives
  extraction intact
- Stash settings: API key field is now a password field with a show/hide
  toggle, and "Verify and save" makes a real authenticated request before
  persisting anything, showing why it failed instead of silently saving
  bad credentials

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01EZ7ikw2ukGJFTHE3bJS7zL
</content>
</entry>
<entry>
<title>Initial commit: Feeds, an Android RSS reader</title>
<updated>2026-07-22T08:08:58+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-22T08:08:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/feedreader.git/commit/?id=d8ce4b3c0f383e844b125d2d3abd618715bb3c89'/>
<id>urn:sha1:d8ce4b3c0f383e844b125d2d3abd618715bb3c89</id>
<content type='text'>
Feed subscriptions (RSS 2.0 + Atom, hand-rolled parser), OPML
import/export, WorkManager periodic fetch with conditional GET,
Room-backed local storage (feeds/articles/filter rules), keyword
mute/highlight filtering.

Reader mode: on-device extraction via Mozilla's Readability.js
(vendored from github.com/mozilla/readability, pinned to release
0.6.0) run in a hidden WebView, for feed articles whose provided
content is too thin to be the real article body.

Save: explicit action (from a feed article, or the Android share-sheet
target for any URL) archives to Stash via POST /artifacts?sync=true,
while a local on-device copy (Readability-extracted) is always kept so
saved articles read offline regardless of Stash's reachability.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01EZ7ikw2ukGJFTHE3bJS7zL
</content>
</entry>
</feed>
