Skip to content

Commit

Permalink
Check if feed is XML first
Browse files Browse the repository at this point in the history
  • Loading branch information
jocmp committed Dec 11, 2023
1 parent 2a49a6e commit f9a2725
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 37 deletions.
23 changes: 19 additions & 4 deletions basil/src/main/java/com/jocmp/basil/Account.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.jocmp.feedfinder.FeedFinder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.net.URI
import java.net.URL
import java.util.UUID

data class Account(
Expand Down Expand Up @@ -49,15 +50,17 @@ data class Account(

val feed = Feed(
id = UUID.randomUUID().toString(),
name = entry.name,
feedURL = found.feedURL.toString()
name = entryNameOrDefault(entry, found.name),
feedURL = found.feedURL.toString(),
siteURL = entrySiteURL(found.siteURL)
)

if (entry.folderTitles.isEmpty()) {
feeds.add(feed)
} else {
entry.folderTitles.forEach { folderTitle ->
val folder = folders.find { folder -> folder.title == folderTitle } ?: Folder(title = folderTitle)
val folder = folders.find { folder -> folder.title == folderTitle }
?: Folder(title = folderTitle)

folder.feeds.add(feed)

Expand All @@ -74,6 +77,18 @@ data class Account(
return feed
}

private fun entrySiteURL(url: URL?): String {
return url?.toString() ?: ""
}

private fun entryNameOrDefault(entry: FeedFormEntry, feedName: String): String {
if (entry.name.isBlank()) {
return feedName
}

return entry.name
}

private suspend fun saveOPMLFile() = withContext(Dispatchers.IO) {
opmlFile.save()
}
Expand All @@ -95,7 +110,7 @@ fun Account.asOPML(): String {
opml += feed.asOPML(indentLevel = 2)
}

folders.sortedBy { it.title } .forEach { folder ->
folders.sortedBy { it.title }.forEach { folder ->
opml += folder.asOPML(indentLevel = 2)
}

Expand Down
4 changes: 2 additions & 2 deletions basil/src/main/java/com/jocmp/basil/Feed.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ data class Feed(
val id: String,
val name: String,
val feedURL: String,
val homepageURL: String = ""
val siteURL: String = ""
) {
override fun equals(other: Any?): Boolean {
if (other is Feed) {
Expand All @@ -21,6 +21,6 @@ data class Feed(
}

fun Feed.asOPML(indentLevel: Int): String {
val opml = "<outline text=\"${name}\" title=\"${name}\" description=\"\" type=\"rss\" version=\"RSS\" htmlUrl=\"\" xmlUrl=\"${feedURL}\"/>\n"
val opml = "<outline text=\"${name}\" title=\"${name}\" description=\"\" type=\"rss\" version=\"RSS\" htmlUrl=\"${siteURL}\" xmlUrl=\"${feedURL}\"/>\n"
return opml.prepending(tabCount = indentLevel)
}
5 changes: 1 addition & 4 deletions feedfinder/src/main/java/com/jocmp/feedfinder/FeedFinder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,6 @@ class FeedFinder internal constructor(
val url: String,
private val request: Request = DefaultRequest()
) {
// Convert URL to HTTPS if missing
// 1. Download the request using a Java HTTP connection
// 2. If the response is an XML Feed itself, return
// 3. If the response is HTML and th
internal suspend fun find(): Result = withContext(Dispatchers.IO) {
try {
val parsedURL = URI(url.withProtocol).toURL()
Expand All @@ -52,6 +48,7 @@ class FeedFinder internal constructor(

private fun sources(response: Response): List<Source> {
return listOf(
XMLSource(response),
MetaLinkSource(response = response, request = request),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ class FakeFeed: Feed {
return false
}

override val name: String
get() = "Ars Technica"

override val siteURL: URL
get() = URL("https://arstechnica.com/")

override val feedURL: URL
get() = URL("https://arstechnica.com/feed")
}
4 changes: 4 additions & 0 deletions feedfinder/src/main/java/com/jocmp/feedfinder/parser/Feed.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,9 @@ import java.net.URL
interface Feed {
fun isValid(): Boolean

val name: String

val feedURL: URL

val siteURL: URL?
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ internal class XMLFeed(
hasEntries()
}

override val name: String
get() = channel!!.title!!

override val siteURL: URL?
get() = channel?.link?.let {
URL(it)
}

private fun hasEntries(): Boolean {
return channel != null &&
channel.items.isNotEmpty()
Expand Down

This file was deleted.

18 changes: 0 additions & 18 deletions feedfinder/src/main/java/com/jocmp/feedfinder/sources/Guess.kt

This file was deleted.

0 comments on commit f9a2725

Please sign in to comment.