mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 06:42:05 +01:00
Use HMPP and deduplicate a bunch of platform specific code
This commit is contained in:
@@ -57,23 +57,28 @@ kotlin {
|
||||
}
|
||||
}
|
||||
|
||||
val desktopMain by getting {
|
||||
val jvmMain by creating {
|
||||
dependsOn(commonMain)
|
||||
dependencies {
|
||||
api(kotlin("stdlib-jdk8"))
|
||||
api(libs.ktor.okHttp)
|
||||
}
|
||||
}
|
||||
val desktopTest by getting {
|
||||
}
|
||||
|
||||
val androidMain by getting {
|
||||
val desktopMain by getting {
|
||||
dependsOn(jvmMain)
|
||||
dependencies {
|
||||
api(kotlin("stdlib-jdk8"))
|
||||
api(libs.ktor.okHttp)
|
||||
}
|
||||
}
|
||||
val androidTest by getting {
|
||||
val desktopTest by getting
|
||||
|
||||
val androidMain by getting {
|
||||
dependsOn(jvmMain)
|
||||
dependencies {
|
||||
api(kotlin("stdlib-jdk8"))
|
||||
}
|
||||
}
|
||||
val androidTest by getting
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,112 +6,6 @@
|
||||
|
||||
package ca.gosyer.jui.domain
|
||||
|
||||
import ca.gosyer.jui.core.CoreComponent
|
||||
import ca.gosyer.jui.core.di.AppScope
|
||||
import ca.gosyer.jui.domain.download.service.DownloadService
|
||||
import ca.gosyer.jui.domain.extension.service.ExtensionPreferences
|
||||
import ca.gosyer.jui.domain.library.service.LibraryPreferences
|
||||
import ca.gosyer.jui.domain.library.service.LibraryUpdateService
|
||||
import ca.gosyer.jui.domain.migration.interactor.RunMigrations
|
||||
import ca.gosyer.jui.domain.migration.service.MigrationPreferences
|
||||
import ca.gosyer.jui.domain.reader.service.ReaderPreferences
|
||||
import ca.gosyer.jui.domain.server.Http
|
||||
import ca.gosyer.jui.domain.server.HttpProvider
|
||||
import ca.gosyer.jui.domain.server.service.ServerPreferences
|
||||
import ca.gosyer.jui.domain.source.service.CatalogPreferences
|
||||
import ca.gosyer.jui.domain.ui.service.UiPreferences
|
||||
import ca.gosyer.jui.domain.updates.interactor.UpdateChecker
|
||||
import ca.gosyer.jui.domain.updates.service.UpdatePreferences
|
||||
import me.tatarka.inject.annotations.Provides
|
||||
|
||||
actual interface DomainComponent : CoreComponent {
|
||||
// Providers
|
||||
val httpProvider: HttpProvider
|
||||
|
||||
// Factories
|
||||
val migrations: RunMigrations
|
||||
|
||||
val updateChecker: UpdateChecker
|
||||
|
||||
// Singletons
|
||||
val downloadService: DownloadService
|
||||
|
||||
val libraryUpdateService: LibraryUpdateService
|
||||
|
||||
val http: Http
|
||||
|
||||
val serverPreferences: ServerPreferences
|
||||
|
||||
val extensionPreferences: ExtensionPreferences
|
||||
|
||||
val catalogPreferences: CatalogPreferences
|
||||
|
||||
val libraryPreferences: LibraryPreferences
|
||||
|
||||
val readerPreferences: ReaderPreferences
|
||||
|
||||
val uiPreferences: UiPreferences
|
||||
|
||||
val migrationPreferences: MigrationPreferences
|
||||
|
||||
val updatePreferences: UpdatePreferences
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val serverPreferencesFactory: ServerPreferences
|
||||
get() = ServerPreferences(preferenceFactory.create("server"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val extensionPreferencesFactory: ExtensionPreferences
|
||||
get() = ExtensionPreferences(preferenceFactory.create("extension"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val catalogPreferencesFactory: CatalogPreferences
|
||||
get() = CatalogPreferences(preferenceFactory.create("catalog"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val libraryPreferencesFactory: LibraryPreferences
|
||||
get() = LibraryPreferences(preferenceFactory.create("library"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val readerPreferencesFactory: ReaderPreferences
|
||||
get() = ReaderPreferences(preferenceFactory.create("reader")) { name ->
|
||||
preferenceFactory.create("reader", name)
|
||||
}
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val uiPreferencesFactory: UiPreferences
|
||||
get() = UiPreferences(preferenceFactory.create("ui"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val migrationPreferencesFactory: MigrationPreferences
|
||||
get() = MigrationPreferences(preferenceFactory.create("migration"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val updatePreferencesFactory: UpdatePreferences
|
||||
get() = UpdatePreferences(preferenceFactory.create("update"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val httpFactory: Http
|
||||
get() = httpProvider.get(serverPreferences)
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val libraryUpdateServiceFactory: LibraryUpdateService
|
||||
get() = LibraryUpdateService(serverPreferences, http)
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val downloadServiceFactory: DownloadService
|
||||
get() = DownloadService(serverPreferences, http)
|
||||
|
||||
actual interface DomainComponent : SharedDomainComponent {
|
||||
companion object
|
||||
}
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
|
||||
package ca.gosyer.jui.domain
|
||||
|
||||
expect interface DomainComponent
|
||||
expect interface DomainComponent : SharedDomainComponent
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package ca.gosyer.jui.domain
|
||||
|
||||
import ca.gosyer.jui.core.CoreComponent
|
||||
import ca.gosyer.jui.core.di.AppScope
|
||||
import ca.gosyer.jui.domain.download.service.DownloadService
|
||||
import ca.gosyer.jui.domain.extension.service.ExtensionPreferences
|
||||
import ca.gosyer.jui.domain.library.service.LibraryPreferences
|
||||
import ca.gosyer.jui.domain.library.service.LibraryUpdateService
|
||||
import ca.gosyer.jui.domain.migration.interactor.RunMigrations
|
||||
import ca.gosyer.jui.domain.migration.service.MigrationPreferences
|
||||
import ca.gosyer.jui.domain.reader.service.ReaderPreferences
|
||||
import ca.gosyer.jui.domain.server.Http
|
||||
import ca.gosyer.jui.domain.server.HttpProvider
|
||||
import ca.gosyer.jui.domain.server.service.ServerPreferences
|
||||
import ca.gosyer.jui.domain.source.service.CatalogPreferences
|
||||
import ca.gosyer.jui.domain.ui.service.UiPreferences
|
||||
import ca.gosyer.jui.domain.updates.interactor.UpdateChecker
|
||||
import ca.gosyer.jui.domain.updates.service.UpdatePreferences
|
||||
import me.tatarka.inject.annotations.Provides
|
||||
|
||||
interface SharedDomainComponent : CoreComponent {
|
||||
// Providers
|
||||
val httpProvider: HttpProvider
|
||||
|
||||
// Factories
|
||||
val migrations: RunMigrations
|
||||
|
||||
val updateChecker: UpdateChecker
|
||||
|
||||
// Singletons
|
||||
val downloadService: DownloadService
|
||||
|
||||
val libraryUpdateService: LibraryUpdateService
|
||||
|
||||
val http: Http
|
||||
|
||||
val serverPreferences: ServerPreferences
|
||||
|
||||
val extensionPreferences: ExtensionPreferences
|
||||
|
||||
val catalogPreferences: CatalogPreferences
|
||||
|
||||
val libraryPreferences: LibraryPreferences
|
||||
|
||||
val readerPreferences: ReaderPreferences
|
||||
|
||||
val uiPreferences: UiPreferences
|
||||
|
||||
val migrationPreferences: MigrationPreferences
|
||||
|
||||
val updatePreferences: UpdatePreferences
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val serverPreferencesFactory: ServerPreferences
|
||||
get() = ServerPreferences(preferenceFactory.create("server"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val extensionPreferencesFactory: ExtensionPreferences
|
||||
get() = ExtensionPreferences(preferenceFactory.create("extension"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val catalogPreferencesFactory: CatalogPreferences
|
||||
get() = CatalogPreferences(preferenceFactory.create("catalog"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val libraryPreferencesFactory: LibraryPreferences
|
||||
get() = LibraryPreferences(preferenceFactory.create("library"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val readerPreferencesFactory: ReaderPreferences
|
||||
get() = ReaderPreferences(preferenceFactory.create("reader")) { name ->
|
||||
preferenceFactory.create("reader", name)
|
||||
}
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val uiPreferencesFactory: UiPreferences
|
||||
get() = UiPreferences(preferenceFactory.create("ui"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val migrationPreferencesFactory: MigrationPreferences
|
||||
get() = MigrationPreferences(preferenceFactory.create("migration"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val updatePreferencesFactory: UpdatePreferences
|
||||
get() = UpdatePreferences(preferenceFactory.create("update"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val httpFactory: Http
|
||||
get() = httpProvider.get(serverPreferences)
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val libraryUpdateServiceFactory: LibraryUpdateService
|
||||
get() = LibraryUpdateService(serverPreferences, http)
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val downloadServiceFactory: DownloadService
|
||||
get() = DownloadService(serverPreferences, http)
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import ca.gosyer.jui.domain.server.model.Auth
|
||||
import ca.gosyer.jui.domain.server.model.Proxy
|
||||
import ca.gosyer.jui.domain.server.service.ServerPreferences
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.HttpClientConfig
|
||||
import io.ktor.client.engine.HttpClientEngineConfig
|
||||
import io.ktor.client.engine.HttpClientEngineFactory
|
||||
import io.ktor.client.engine.ProxyBuilder
|
||||
@@ -32,12 +33,15 @@ import io.ktor.client.plugins.auth.Auth as AuthPlugin
|
||||
|
||||
typealias Http = HttpClient
|
||||
|
||||
@Suppress("NO_ACTUAL_FOR_EXPECT")
|
||||
expect val Engine: HttpClientEngineFactory<HttpClientEngineConfig>
|
||||
|
||||
expect fun HttpClientConfig<HttpClientEngineConfig>.configurePlatform()
|
||||
|
||||
class HttpProvider @Inject constructor() {
|
||||
fun get(serverPreferences: ServerPreferences): Http {
|
||||
return HttpClient(Engine) {
|
||||
configurePlatform()
|
||||
|
||||
engine {
|
||||
proxy = when (serverPreferences.proxy().get()) {
|
||||
Proxy.NO_PROXY -> null
|
||||
|
||||
@@ -6,129 +6,28 @@
|
||||
|
||||
package ca.gosyer.jui.domain
|
||||
|
||||
import ca.gosyer.jui.core.CoreComponent
|
||||
import ca.gosyer.jui.core.di.AppScope
|
||||
import ca.gosyer.jui.domain.download.service.DownloadService
|
||||
import ca.gosyer.jui.domain.extension.service.ExtensionPreferences
|
||||
import ca.gosyer.jui.domain.library.service.LibraryPreferences
|
||||
import ca.gosyer.jui.domain.library.service.LibraryUpdateService
|
||||
import ca.gosyer.jui.domain.migration.interactor.RunMigrations
|
||||
import ca.gosyer.jui.domain.migration.service.MigrationPreferences
|
||||
import ca.gosyer.jui.domain.reader.service.ReaderPreferences
|
||||
import ca.gosyer.jui.domain.server.Http
|
||||
import ca.gosyer.jui.domain.server.HttpProvider
|
||||
import ca.gosyer.jui.domain.server.service.ServerHostPreferences
|
||||
import ca.gosyer.jui.domain.server.service.ServerPreferences
|
||||
import ca.gosyer.jui.domain.server.service.ServerService
|
||||
import ca.gosyer.jui.domain.source.service.CatalogPreferences
|
||||
import ca.gosyer.jui.domain.ui.service.UiPreferences
|
||||
import ca.gosyer.jui.domain.updates.interactor.UpdateChecker
|
||||
import ca.gosyer.jui.domain.updates.service.UpdatePreferences
|
||||
import me.tatarka.inject.annotations.Provides
|
||||
|
||||
actual interface DomainComponent : CoreComponent {
|
||||
|
||||
// Providers
|
||||
val httpProvider: HttpProvider
|
||||
|
||||
// Factories
|
||||
val migrations: RunMigrations
|
||||
|
||||
val updateChecker: UpdateChecker
|
||||
actual interface DomainComponent : SharedDomainComponent {
|
||||
|
||||
// Singletons
|
||||
val downloadService: DownloadService
|
||||
|
||||
val libraryUpdateService: LibraryUpdateService
|
||||
|
||||
val serverService: ServerService
|
||||
|
||||
val http: Http
|
||||
|
||||
val serverHostPreferences: ServerHostPreferences
|
||||
|
||||
val serverPreferences: ServerPreferences
|
||||
|
||||
val extensionPreferences: ExtensionPreferences
|
||||
|
||||
val catalogPreferences: CatalogPreferences
|
||||
|
||||
val libraryPreferences: LibraryPreferences
|
||||
|
||||
val readerPreferences: ReaderPreferences
|
||||
|
||||
val uiPreferences: UiPreferences
|
||||
|
||||
val migrationPreferences: MigrationPreferences
|
||||
|
||||
val updatePreferences: UpdatePreferences
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val serverHostPreferencesFactory: ServerHostPreferences
|
||||
get() = ServerHostPreferences(preferenceFactory.create("host"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val serverPreferencesFactory: ServerPreferences
|
||||
get() = ServerPreferences(preferenceFactory.create("server"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val extensionPreferencesFactory: ExtensionPreferences
|
||||
get() = ExtensionPreferences(preferenceFactory.create("extension"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val catalogPreferencesFactory: CatalogPreferences
|
||||
get() = CatalogPreferences(preferenceFactory.create("catalog"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val libraryPreferencesFactory: LibraryPreferences
|
||||
get() = LibraryPreferences(preferenceFactory.create("library"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val readerPreferencesFactory: ReaderPreferences
|
||||
get() = ReaderPreferences(preferenceFactory.create("reader")) { name ->
|
||||
preferenceFactory.create("reader", name)
|
||||
}
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val uiPreferencesFactory: UiPreferences
|
||||
get() = UiPreferences(preferenceFactory.create("ui"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val migrationPreferencesFactory: MigrationPreferences
|
||||
get() = MigrationPreferences(preferenceFactory.create("migration"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val updatePreferencesFactory: UpdatePreferences
|
||||
get() = UpdatePreferences(preferenceFactory.create("update"))
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val httpFactory: Http
|
||||
get() = httpProvider.get(serverPreferences)
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val serverServiceFactory: ServerService
|
||||
get() = ServerService(serverHostPreferences)
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val libraryUpdateServiceFactory: LibraryUpdateService
|
||||
get() = LibraryUpdateService(serverPreferences, http)
|
||||
|
||||
@get:AppScope
|
||||
@get:Provides
|
||||
val downloadServiceFactory: DownloadService
|
||||
get() = DownloadService(serverPreferences, http)
|
||||
|
||||
companion object
|
||||
}
|
||||
|
||||
@@ -6,9 +6,18 @@
|
||||
|
||||
package ca.gosyer.jui.domain.server
|
||||
|
||||
import io.ktor.client.HttpClientConfig
|
||||
import io.ktor.client.engine.HttpClientEngineConfig
|
||||
import io.ktor.client.engine.HttpClientEngineFactory
|
||||
import io.ktor.client.engine.okhttp.OkHttp
|
||||
import io.ktor.client.engine.okhttp.OkHttpConfig
|
||||
|
||||
actual val Engine: HttpClientEngineFactory<HttpClientEngineConfig>
|
||||
get() = OkHttp
|
||||
|
||||
actual fun HttpClientConfig<HttpClientEngineConfig>.configurePlatform() {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(this as HttpClientConfig<OkHttpConfig>).realConfigurePlatform()
|
||||
}
|
||||
|
||||
private fun HttpClientConfig<OkHttpConfig>.realConfigurePlatform() {}
|
||||
Reference in New Issue
Block a user