Skip to content

Commit

Permalink
Use ktor to retrieve html
Browse files Browse the repository at this point in the history
  • Loading branch information
prof18 committed Jun 4, 2024
1 parent d82fc59 commit f7f7a6e
Show file tree
Hide file tree
Showing 11 changed files with 46 additions and 142 deletions.
6 changes: 6 additions & 0 deletions desktopApp/compose-desktop.pro
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,9 @@
# Compose Markdown

-keep class com.mikepenz.markdown.model.** { *; }

# Ktor

-keep class kotlin.reflect.jvm.internal.** { *; }
-keep class kotlin.text.RegexOption { *; }
-keep class io.ktor.serialization.kotlinx.json.KotlinxSerializationJsonExtensionProvider { *; }
6 changes: 4 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ kotlinx-date-time = "0.6.0-RC.2"
androidx-browser = "1.8.0"
readability4j = "1.0.8"
compose-webview = "1.9.8"
okhttp = "4.12.0"
voyager = "1.0.0"
ktor = "2.3.11"

[libraries]
about-libraries-compose = { module = "com.mikepenz:aboutlibraries-compose", version.ref = "about-libraries" }
Expand Down Expand Up @@ -116,9 +116,11 @@ kotlinx-date-time = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version
androidx-browser = { module = "androidx.browser:browser", version.ref = "androidx-browser" }
readability4j = { module = "net.dankito.readability4j:readability4j", version.ref = "readability4j" }
compose-webview = { module = "io.github.kevinnzou:compose-webview-multiplatform", version.ref = "compose-webview" }
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" }
voyager-transition = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" }
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }

[bundles]
compose = [
Expand Down
4 changes: 3 additions & 1 deletion shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ kotlin {
implementation(libs.com.prof18.rss.parser)
implementation(libs.multiplatform.settings)
implementation(libs.kotlinx.date.time)
implementation(libs.ktor.client.core)

api(project(":core"))
api(project(":i18n"))
Expand All @@ -86,7 +87,7 @@ kotlin {
dependencies {
implementation(libs.jsoup)
implementation(libs.readability4j)
implementation(libs.okhttp)
implementation(libs.ktor.client.okhttp)
}
}

Expand Down Expand Up @@ -134,6 +135,7 @@ kotlin {

dependencies {
api(libs.touchlab.kermit.simple)
implementation(libs.ktor.client.darwin)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ import app.cash.sqldelight.db.SqlDriver
import com.prof18.feedflow.core.utils.AppEnvironment
import com.prof18.feedflow.database.createDatabaseDriver
import com.prof18.feedflow.shared.domain.HtmlParser
import com.prof18.feedflow.shared.domain.HtmlRetriever
import com.prof18.feedflow.shared.domain.JvmHtmlParser
import com.prof18.feedflow.shared.domain.JvmHtmlRetriever
import com.prof18.feedflow.shared.domain.ReaderModeExtractor
import com.prof18.feedflow.shared.domain.opml.OpmlFeedHandler
import com.prof18.feedflow.shared.presentation.BaseViewModel
Expand Down Expand Up @@ -61,13 +59,6 @@ internal actual fun getPlatformModule(appEnvironment: AppEnvironment): Module =
}
}

factory<HtmlRetriever> {
JvmHtmlRetriever(
dispatcherProvider = get(),
logger = getWith("JvmHtmlRetriever"),
)
}

factory {
ReaderModeExtractor(
dispatcherProvider = get(),
Expand Down

This file was deleted.

13 changes: 13 additions & 0 deletions shared/src/commonMain/kotlin/com/prof18/feedflow/shared/di/Koin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.prof18.feedflow.core.utils.AppEnvironment
import com.prof18.feedflow.database.DatabaseHelper
import com.prof18.feedflow.shared.data.SettingsHelper
import com.prof18.feedflow.shared.domain.DateFormatter
import com.prof18.feedflow.shared.domain.HtmlRetriever
import com.prof18.feedflow.shared.domain.browser.BrowserSettingsRepository
import com.prof18.feedflow.shared.domain.feed.FeedSourceLogoRetriever
import com.prof18.feedflow.shared.domain.feed.FeedUrlRetriever
Expand All @@ -23,6 +24,7 @@ import com.prof18.feedflow.shared.presentation.ImportExportViewModel
import com.prof18.feedflow.shared.presentation.SearchViewModel
import com.prof18.feedflow.shared.presentation.SettingsViewModel
import com.prof18.rssparser.RssParser
import io.ktor.client.HttpClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import org.koin.core.KoinApplication
Expand Down Expand Up @@ -196,6 +198,17 @@ private val coreModule = module {
htmlRetriever = get(),
)
}

single {
HttpClient()
}

factory {
HtmlRetriever(
logger = getWith("HtmlRetriever"),
client = get(),
)
}
}

internal expect fun getPlatformModule(appEnvironment: AppEnvironment): Module
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
package com.prof18.feedflow.shared.domain

internal interface HtmlRetriever {
suspend fun retrieveHtml(url: String): String?
import co.touchlab.kermit.Logger
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.client.statement.bodyAsText

internal class HtmlRetriever(
private val logger: Logger,
private val client: HttpClient,
) {
suspend fun retrieveHtml(url: String): String? {
try {
val response = client.get(url)
return response.bodyAsText()
} catch (e: Throwable) {
logger.e(e) { "Unable to retrieve HTML, skipping" }
return null
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import com.prof18.feedflow.i18n.EnFeedFlowStrings
import com.prof18.feedflow.i18n.FeedFlowStrings
import com.prof18.feedflow.i18n.feedFlowStrings
import com.prof18.feedflow.shared.domain.HtmlParser
import com.prof18.feedflow.shared.domain.HtmlRetriever
import com.prof18.feedflow.shared.domain.IosHtmlRetriever
import com.prof18.feedflow.shared.domain.browser.BrowserSettingsRepository
import com.prof18.feedflow.shared.domain.opml.OpmlFeedHandler
import com.prof18.feedflow.shared.domain.settings.SettingsRepository
Expand Down Expand Up @@ -80,13 +78,6 @@ internal actual fun getPlatformModule(appEnvironment: AppEnvironment): Module =
single<Settings> {
KeychainSettings(service = "FeedFlow")
}

factory<HtmlRetriever> {
IosHtmlRetriever(
dispatcherProvider = get(),
logger = getWith("IosHtmlRetriever"),
)
}
}

@Suppress("unused") // Called from Swift
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import app.cash.sqldelight.db.SqlDriver
import com.prof18.feedflow.core.utils.AppEnvironment
import com.prof18.feedflow.database.createDatabaseDriver
import com.prof18.feedflow.shared.domain.HtmlParser
import com.prof18.feedflow.shared.domain.HtmlRetriever
import com.prof18.feedflow.shared.domain.JvmHtmlParser
import com.prof18.feedflow.shared.domain.JvmHtmlRetriever
import com.prof18.feedflow.shared.domain.ReaderModeExtractor
import com.prof18.feedflow.shared.domain.opml.OpmlFeedHandler
import com.prof18.feedflow.shared.presentation.BaseViewModel
Expand Down Expand Up @@ -72,13 +70,6 @@ internal actual fun getPlatformModule(appEnvironment: AppEnvironment): Module =
PreferencesSettings(preferences)
}

factory<HtmlRetriever> {
JvmHtmlRetriever(
dispatcherProvider = get(),
logger = getWith("JvmHtmlRetriever"),
)
}

factory {
ReaderModeExtractor(
dispatcherProvider = get(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowRight
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
import androidx.compose.material.icons.outlined.AddCircleOutline
import androidx.compose.material.icons.outlined.DeleteOutline
import androidx.compose.material3.Icon
Expand Down Expand Up @@ -85,7 +85,7 @@ internal fun CategoriesSelector(
Text(header)

Icon(
imageVector = Icons.Default.KeyboardArrowRight,
imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight,
contentDescription = null,
modifier = Modifier.rotate(degrees),
)
Expand Down

0 comments on commit f7f7a6e

Please sign in to comment.