refactor: cleanup network services
This commit is contained in:
parent
d06e8c75f1
commit
2570bc58b1
14 changed files with 29 additions and 80 deletions
|
|
@ -2,13 +2,11 @@ package com.aliucord.manager
|
|||
|
||||
import android.app.Application
|
||||
import com.aliucord.manager.di.*
|
||||
import com.aliucord.manager.domain.repository.AliucordMavenRepository
|
||||
import com.aliucord.manager.domain.repository.GithubRepository
|
||||
import com.aliucord.manager.installers.pm.PMInstaller
|
||||
import com.aliucord.manager.manager.*
|
||||
import com.aliucord.manager.manager.download.AndroidDownloadManager
|
||||
import com.aliucord.manager.manager.download.KtorDownloadManager
|
||||
import com.aliucord.manager.network.service.*
|
||||
import com.aliucord.manager.network.services.*
|
||||
import com.aliucord.manager.ui.screens.about.AboutModel
|
||||
import com.aliucord.manager.ui.screens.home.HomeModel
|
||||
import com.aliucord.manager.ui.screens.patching.PatchingScreenModel
|
||||
|
|
@ -42,14 +40,8 @@ class ManagerApplication : Application() {
|
|||
modules(module {
|
||||
singleOf(::HttpService)
|
||||
singleOf(::GithubService)
|
||||
singleOf(::MavenService)
|
||||
singleOf(::AliucordGithubService)
|
||||
})
|
||||
|
||||
// Repositories
|
||||
modules(module {
|
||||
singleOf(::GithubRepository)
|
||||
singleOf(::AliucordMavenRepository)
|
||||
singleOf(::AliucordMavenService)
|
||||
})
|
||||
|
||||
// UI Models
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
package com.aliucord.manager.domain.repository
|
||||
|
||||
import com.aliucord.manager.network.dto.GithubUser
|
||||
import com.aliucord.manager.network.service.AliucordGithubService
|
||||
import com.aliucord.manager.network.utils.transform
|
||||
|
||||
class GithubRepository(
|
||||
private val service: AliucordGithubService,
|
||||
) {
|
||||
suspend fun getContributors() = service.getContributors()
|
||||
.transform { it.sortedByDescending(GithubUser::contributions) }
|
||||
|
||||
suspend fun getDataJson() = service.getDataJson()
|
||||
|
||||
suspend fun getManagerReleases() = service.getManagerReleases()
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
* Licensed under the Open Software License version 3.0
|
||||
*/
|
||||
|
||||
package com.aliucord.manager.network.dto
|
||||
package com.aliucord.manager.network.models
|
||||
|
||||
import com.aliucord.manager.network.utils.SemVer
|
||||
import kotlinx.serialization.SerialName
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.aliucord.manager.network.dto
|
||||
package com.aliucord.manager.network.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
package com.aliucord.manager.network.service
|
||||
|
||||
import com.aliucord.manager.network.utils.ApiResponse
|
||||
import io.ktor.client.request.url
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class MavenService(
|
||||
private val http: HttpService,
|
||||
) {
|
||||
suspend fun getArtifactMetadata(baseUrl: String, artifactCoords: String): ApiResponse<String> = withContext(Dispatchers.IO) {
|
||||
http.request {
|
||||
val coords = artifactCoords.replace("[:.]".toRegex(), "/")
|
||||
url("$baseUrl/${coords}/maven-metadata.xml")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package com.aliucord.manager.network.service
|
||||
package com.aliucord.manager.network.services
|
||||
|
||||
import com.aliucord.manager.network.dto.BuildInfo
|
||||
import com.aliucord.manager.network.models.BuildInfo
|
||||
import com.aliucord.manager.network.utils.ApiResponse
|
||||
import io.ktor.client.request.url
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
|
@ -19,7 +19,6 @@ class AliucordGithubService(
|
|||
}
|
||||
|
||||
suspend fun getManagerReleases() = github.getReleases(ORG, MANAGER_REPO)
|
||||
suspend fun getContributors() = github.getContributors(ORG, MAIN_REPO)
|
||||
|
||||
companion object {
|
||||
const val ORG = "Aliucord"
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
package com.aliucord.manager.domain.repository
|
||||
package com.aliucord.manager.network.services
|
||||
|
||||
import com.aliucord.manager.network.service.MavenService
|
||||
import com.aliucord.manager.network.utils.*
|
||||
import io.ktor.client.request.url
|
||||
import io.ktor.http.HttpStatusCode
|
||||
|
||||
class AliucordMavenRepository(
|
||||
private val maven: MavenService,
|
||||
) {
|
||||
class AliucordMavenService(private val http: HttpService) {
|
||||
suspend fun getAliuhookVersion(): ApiResponse<SemVer> {
|
||||
return maven.getArtifactMetadata(BASE_URL, ALIUHOOK).transform {
|
||||
val metadataResponse = http.request<String> { url(ALIUHOOK_METADATA_URL) }
|
||||
|
||||
return metadataResponse.transform {
|
||||
val versionString = "<release>(.+?)</release>".toRegex()
|
||||
.find(it)
|
||||
?.groupValues?.get(1)
|
||||
|
|
@ -21,7 +21,7 @@ class AliucordMavenRepository(
|
|||
|
||||
companion object {
|
||||
private const val BASE_URL = "https://maven.aliucord.com/snapshots"
|
||||
private const val ALIUHOOK = "com.aliucord:Aliuhook"
|
||||
private const val ALIUHOOK_METADATA_URL = "$BASE_URL/com/aliucord/Aliuhook/maven-metadata.xml"
|
||||
|
||||
fun getAliuhookUrl(version: String): String =
|
||||
"$BASE_URL/com/aliucord/Aliuhook/$version/Aliuhook-$version.aar"
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package com.aliucord.manager.network.service
|
||||
package com.aliucord.manager.network.services
|
||||
|
||||
import com.aliucord.manager.network.dto.GithubRelease
|
||||
import com.aliucord.manager.network.dto.GithubUser
|
||||
import com.aliucord.manager.network.models.GithubRelease
|
||||
import com.aliucord.manager.network.utils.ApiResponse
|
||||
import io.ktor.client.request.url
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
|
@ -10,14 +9,6 @@ import kotlinx.coroutines.withContext
|
|||
class GithubService(
|
||||
private val http: HttpService,
|
||||
) {
|
||||
suspend fun getContributors(owner: String, repo: String): ApiResponse<List<GithubUser>> {
|
||||
return withContext(Dispatchers.IO) {
|
||||
http.request {
|
||||
url("https://api.github.com/repos/$owner/$repo/contributors")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getReleases(owner: String, repo: String): ApiResponse<List<GithubRelease>> {
|
||||
return withContext(Dispatchers.IO) {
|
||||
http.request {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.aliucord.manager.network.service
|
||||
package com.aliucord.manager.network.services
|
||||
|
||||
import android.util.Log
|
||||
import com.aliucord.manager.BuildConfig
|
||||
|
|
@ -2,8 +2,8 @@ package com.aliucord.manager.patcher.steps.download
|
|||
|
||||
import androidx.compose.runtime.Stable
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.domain.repository.AliucordMavenRepository
|
||||
import com.aliucord.manager.manager.PathManager
|
||||
import com.aliucord.manager.network.services.AliucordMavenService
|
||||
import com.aliucord.manager.network.utils.SemVer
|
||||
import com.aliucord.manager.network.utils.getOrThrow
|
||||
import com.aliucord.manager.patcher.StepRunner
|
||||
|
|
@ -21,7 +21,7 @@ import org.koin.core.component.inject
|
|||
@Stable
|
||||
class DownloadAliuhookStep : DownloadStep(), IDexProvider, KoinComponent {
|
||||
private val paths: PathManager by inject()
|
||||
private val maven: AliucordMavenRepository by inject()
|
||||
private val maven: AliucordMavenService by inject()
|
||||
|
||||
/**
|
||||
* This is populated right before the download starts (ref: [execute])
|
||||
|
|
@ -30,7 +30,7 @@ class DownloadAliuhookStep : DownloadStep(), IDexProvider, KoinComponent {
|
|||
private set
|
||||
|
||||
override val localizedName = R.string.patch_step_dl_aliuhook
|
||||
override val targetUrl get() = AliucordMavenRepository.getAliuhookUrl(targetVersion.toString())
|
||||
override val targetUrl get() = AliucordMavenService.getAliuhookUrl(targetVersion.toString())
|
||||
override val targetFile get() = paths.cachedAliuhookAAR(targetVersion)
|
||||
|
||||
override suspend fun execute(container: StepRunner) {
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ package com.aliucord.manager.patcher.steps.prepare
|
|||
|
||||
import androidx.compose.runtime.Stable
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.network.dto.BuildInfo
|
||||
import com.aliucord.manager.network.service.AliucordGithubService
|
||||
import com.aliucord.manager.network.models.BuildInfo
|
||||
import com.aliucord.manager.network.services.AliucordGithubService
|
||||
import com.aliucord.manager.network.utils.getOrThrow
|
||||
import com.aliucord.manager.patcher.StepRunner
|
||||
import com.aliucord.manager.patcher.steps.StepGroup
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ import cafe.adriel.voyager.core.model.screenModelScope
|
|||
import cafe.adriel.voyager.navigator.Navigator
|
||||
import com.aliucord.manager.BuildConfig
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.domain.repository.AliucordMavenRepository
|
||||
import com.aliucord.manager.domain.repository.GithubRepository
|
||||
import com.aliucord.manager.network.dto.BuildInfo
|
||||
import com.aliucord.manager.network.models.BuildInfo
|
||||
import com.aliucord.manager.network.services.AliucordGithubService
|
||||
import com.aliucord.manager.network.services.AliucordMavenService
|
||||
import com.aliucord.manager.network.utils.SemVer
|
||||
import com.aliucord.manager.network.utils.fold
|
||||
import com.aliucord.manager.patcher.InstallMetadata
|
||||
|
|
@ -36,8 +36,8 @@ import kotlinx.serialization.json.decodeFromStream
|
|||
|
||||
class HomeModel(
|
||||
private val application: Application,
|
||||
private val github: GithubRepository,
|
||||
private val maven: AliucordMavenRepository,
|
||||
private val github: AliucordGithubService,
|
||||
private val maven: AliucordMavenService,
|
||||
private val json: Json,
|
||||
) : ScreenModel {
|
||||
var supportedVersion by mutableStateOf<DiscordVersion>(DiscordVersion.None)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import androidx.compose.ui.unit.dp
|
|||
import cafe.adriel.voyager.core.screen.Screen
|
||||
import cafe.adriel.voyager.koin.getScreenModel
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.network.service.AliucordGithubService
|
||||
import com.aliucord.manager.network.services.AliucordGithubService
|
||||
import com.aliucord.manager.ui.components.BackButton
|
||||
import com.aliucord.manager.ui.components.MainActionButton
|
||||
import com.aliucord.manager.ui.components.settings.*
|
||||
|
|
|
|||
|
|
@ -5,17 +5,17 @@ import androidx.compose.runtime.*
|
|||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.aliucord.manager.BuildConfig
|
||||
import com.aliucord.manager.domain.repository.GithubRepository
|
||||
import com.aliucord.manager.manager.InstallerManager
|
||||
import com.aliucord.manager.manager.InstallerSetting
|
||||
import com.aliucord.manager.manager.download.KtorDownloadManager
|
||||
import com.aliucord.manager.network.services.AliucordGithubService
|
||||
import com.aliucord.manager.network.utils.SemVer
|
||||
import com.aliucord.manager.network.utils.getOrNull
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class UpdaterViewModel(
|
||||
private val github: GithubRepository,
|
||||
private val github: AliucordGithubService,
|
||||
private val downloader: KtorDownloadManager,
|
||||
private val installers: InstallerManager,
|
||||
private val application: Application,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue