From: Olaf Wintermann Date: Wed, 17 Sep 2025 16:16:05 +0000 (+0200) Subject: enable followRedirects in the HttpClient X-Git-Url: https://uap-core.de/gitweb/?a=commitdiff_plain;h=ee2dc5cb0a23928aec6a851c38ef6efbc39dc64b;p=rssreader.git enable followRedirects in the HttpClient --- diff --git a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt index 00dfda2..51932fa 100644 --- a/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt +++ b/rss-application/src/main/kotlin/de/unixwork/rssreader/SyncJob.kt @@ -38,7 +38,7 @@ class SyncJob(feeds: () -> List) { private suspend fun syncFeeds(feeds: List) { coroutineScope { - val client = HttpClient.newBuilder().build() + val client = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL).build() val jobs = feeds.map { feed -> async(Dispatchers.IO) { try { @@ -53,48 +53,51 @@ class SyncJob(feeds: () -> List) { val request = requestBuilder.build() val response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()) - if(response.statusCode() > 299) { - throw Exception("HTTP error: ${response.statusCode()}") - } - response.body().use { stream -> - val input = SyndFeedInput() - val syndFeed = input.build(XmlReader(stream)) - val items = mutableListOf() - println("Fetched feed: ${syndFeed.title}") - syndFeed.entries.forEach { entry -> - //println(" ${entry.title} - ${entry.link}") + val statusCode = response.statusCode() + if(statusCode > 299) { + // TODO: handle 401 + throw Exception("HTTP error: ${statusCode}") + } else { + response.body().use { stream -> + val input = SyndFeedInput() + val syndFeed = input.build(XmlReader(stream)) + val items = mutableListOf() + println("Fetched feed: ${syndFeed.title}") + syndFeed.entries.forEach { entry -> + //println(" ${entry.title} - ${entry.link}") - val item = Item(0) - item.feedId = feed.id - item.title = entry.title - item.link = entry.link - item.category = entry.categories.firstOrNull()?.name - item.description = entry.description?.value - item.author = entry.author - entry.publishedDate?.let { - item.pubDate = it.toInstant() - } - entry.updatedDate?.let { - item.updated = it.toInstant() - } - item.guid = entry.uri - val contents = entry.contents - contents.forEach { content -> - if(content.type == null) { - item.contentText = content.value - } else { - if(content.type == "html") { - item.contentHtml = content.value - } else if(content.type == "text") { + val item = Item(0) + item.feedId = feed.id + item.title = entry.title + item.link = entry.link + item.category = entry.categories.firstOrNull()?.name + item.description = entry.description?.value + item.author = entry.author + entry.publishedDate?.let { + item.pubDate = it.toInstant() + } + entry.updatedDate?.let { + item.updated = it.toInstant() + } + item.guid = entry.uri + val contents = entry.contents + contents.forEach { content -> + if(content.type == null) { item.contentText = content.value + } else { + if(content.type == "html") { + item.contentHtml = content.value + } else if(content.type == "text") { + item.contentText = content.value + } } } - } - items.add(item) + items.add(item) + } + Database.addItems(items) + Database.updateFeedDate(feed) } - Database.addItems(items) - Database.updateFeedDate(feed) } } catch (e: Exception) { println("Failed to fetch ${feed.uri}: ${e.message}")