Repository navigation
fix(sync): re-check dead feed addresses, fall back to /sync for failing feeds, follow moved feeds - #1160
Merged
Conversation
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
📒 Files selected for processing: 19
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ashwkun
force-pushed
the
feed-address-fixes
branch
2 times, most recently
from
October 22, 2026 15:58
ddca3db to
5dbd45c
Compare
ashwkun
force-pushed
the
feed-address-fixes
branch
from
October 22, 2026 16:32
5dbd45c to
909c9d2
Compare
|
ashwkun
enabled auto-merge (squash)
October 22, 2026 16:44
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.



Summary
/syncinstead of nothing.itunes:new-feed-url) has its new address saved when the new feed serves the same show.Motivation
SubscriptionForegroundSyncsent only shows without a saved HTTPS address to/sync. A show whose saved feed was dead got no latest episode at all: Home, notifications and auto-download stayed on an old episode.itunes:new-feed-urlwasn't read.What changed
:core:rss: feed read errors are typed (FeedHttpExceptionwith the status code,NotAFeedException), both stillIllegalArgumentExceptions with the same messages.FeedReadFailure.isAddressGonereads 401/403/404/410/451, no such host, a failing certificate and a non-feed body as a dead address; timeouts, 5xx, 429 and dropped connections are passing trouble. A refresh failure carries it asRefreshOutcome.Failure.addressGone.:core:rss:RssFetchResult.movedTo(final address when every redirect was 301/308),ParsedRssFeed.newFeedUrl(both parsers), andconfirmedMove, used whenRefreshRequest.detectMoveis set: a new HTTPS address that differs from the saved one and serves the same show by title. A declared address is read once to confirm; temporary redirects never move a feed.:core:catalog: after the feed reads,recoverFailedDirectFeedsre-checks dead addresses (recheckGoneFeedAddress:GET /podcast, once a day per show, counted only once the server answers), reads a new address at once, and sends shows still failing to/syncthrough the ordinary save, which never replaces a newer tip. A confirmed move is saved throughensureHttpsFeedUrl. Never forrss:shows, whose address is their identity and notification consent.:core:domain:RefreshOutcome.Failure.addressGone,RefreshOutcome.Success.movedTo,RefreshRequest.detectMove(all defaulted).:app:feed-fix-address-recheck-off,feed-fix-sync-fallback-off,feed-fix-moved-feed-offkill switches passed asFeedFixToggles; each fix stays on without an answer from PostHog.:core:testing:FakeLocalEpisodeCatalogPortcan return a chosen refresh outcome./syncdescription in:core:catalog.Behavior & compatibility
/podcastlookup per dead show per day, one extra read for a declared new address, and one/synccall per pass for failing shows.Impact (required)
User impact — pick exactly one
user-impact-criticaluser-impact-highuser-impact-mediumuser-impact-lowno-user-impactListener impact — required when
user-impact-critical,user-impact-high, oruser-impact-mediumWhat changes in the user’s life:
Backend — optional, pairable with any user-impact level
backend-changeRelease copy (verbatim — highest priority)
CHANGELOG.md (required developer copy)
Fixed
GET /podcastonce a day per show and reads a new address at once; shows whose own feed failed get their latest episode from/sync.itunes:new-feed-url, same show title) has its new HTTPS address saved; temporary redirects andrss:shows are never moved.FeedHttpException,NotAFeedException) and classified byFeedReadFailure; PostHog kill switchesfeed-fix-address-recheck-off,feed-fix-sync-fallback-off,feed-fix-moved-feed-off.README What's New / Upcoming (required for user-impact changes)
Critical
Fixes
Test plan
:core:domain,:core:testing,:core:network,:core:database,:core:rss,:core:catalog,:core:downloads,:feature:infoand:appunit tests pass locally;detektclean;:app:lintDebugwith no findings in changed filesFeedReadFailureTest,FeedMoveTest(redirect chains,itunes:new-feed-url, same-show check, a declared address that fails or points to itself),LocalEpisodeCatalogRepositoryTest(dead-address flag, permanent move reported only when asked and the show matches),SubscriptionForegroundSyncTest(re-check and re-read,/syncfallback and its switch, once-a-day re-check counting only answered lookups, move adoption only with the switch on and never forrss:)./gradlew installDebug)