refactor: cleanup network services

This commit is contained in:
rushiiMachine 2025-03-22 10:36:43 -07:00
parent d06e8c75f1
commit 2570bc58b1
No known key found for this signature in database
GPG key ID: DCBE5952BB3B6420
14 changed files with 29 additions and 80 deletions

View file

@ -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

View file

@ -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()
}

View file

@ -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

View file

@ -1,4 +1,4 @@
package com.aliucord.manager.network.dto
package com.aliucord.manager.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

View file

@ -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")
}
}
}

View file

@ -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"

View file

@ -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"

View file

@ -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 {

View file

@ -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

View file

@ -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) {

View file

@ -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

View file

@ -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)

View file

@ -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.*

View file

@ -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,