summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/ui/AddFeedScreen.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui/AddFeedScreen.kt')
-rw-r--r--app/src/main/java/org/terst/feedreader/ui/AddFeedScreen.kt19
1 files changed, 15 insertions, 4 deletions
diff --git a/app/src/main/java/org/terst/feedreader/ui/AddFeedScreen.kt b/app/src/main/java/org/terst/feedreader/ui/AddFeedScreen.kt
index 5d19c90..066d8d9 100644
--- a/app/src/main/java/org/terst/feedreader/ui/AddFeedScreen.kt
+++ b/app/src/main/java/org/terst/feedreader/ui/AddFeedScreen.kt
@@ -63,7 +63,14 @@ fun AddFeedScreen(onDone: () -> Unit) {
// as some larger number even though upsert already collapses them to one row each.
val uniqueFeeds = imported.distinctBy { it.xmlUrl }
for (feed in uniqueFeeds) {
- db.feedDao().upsert(FeedEntity(id = feed.xmlUrl, title = feed.title, siteUrl = feed.htmlUrl))
+ // upsert() REPLACEs the whole row -- for a feed that's already subscribed,
+ // building a bare FeedEntity here would silently wipe readerModeDisabled
+ // (and etag/lastModified/lastError) back to defaults on every re-import.
+ // Preserve the existing row's other fields; only title/siteUrl come from OPML.
+ val existing = db.feedDao().getById(feed.xmlUrl)
+ val entity = existing?.copy(title = feed.title, siteUrl = feed.htmlUrl ?: existing.siteUrl)
+ ?: FeedEntity(id = feed.xmlUrl, title = feed.title, siteUrl = feed.htmlUrl)
+ db.feedDao().upsert(entity)
}
FeedFetchWorker.fetchNow(context)
status = "Imported ${uniqueFeeds.size} feed(s)"
@@ -145,9 +152,13 @@ private suspend fun addFeedByUrl(context: android.content.Context, db: AppDataba
if (!it.isSuccessful) return@withContext "Couldn't fetch feed: HTTP ${it.code}"
val body = it.body ?: return@withContext "Empty response"
val parsed = FeedParser.parse(body.byteStream())
- db.feedDao().upsert(
- FeedEntity(id = feedUrl, title = parsed.title.ifBlank { feedUrl }, siteUrl = parsed.siteUrl)
- )
+ // Same REPLACE-wipes-other-fields concern as the OPML import path.
+ val existing = db.feedDao().getById(feedUrl)
+ val entity = existing?.copy(
+ title = parsed.title.ifBlank { feedUrl },
+ siteUrl = parsed.siteUrl ?: existing.siteUrl
+ ) ?: FeedEntity(id = feedUrl, title = parsed.title.ifBlank { feedUrl }, siteUrl = parsed.siteUrl)
+ db.feedDao().upsert(entity)
}
FeedFetchWorker.fetchNow(context)
"Added"