feat: use revanced api for changelogs

This commit is contained in:
Ax333l 2023-10-07 17:07:19 +02:00 committed by oSumAtrIX
parent ffe5c058e0
commit c2c4895a29
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4
7 changed files with 14 additions and 67 deletions

View File

@ -11,7 +11,6 @@ import org.koin.dsl.module
val repositoryModule = module { val repositoryModule = module {
singleOf(::ReVancedAPI) singleOf(::ReVancedAPI)
singleOf(::GithubRepository)
singleOf(::Filesystem) { singleOf(::Filesystem) {
createdAtStart() createdAtStart()
} }

View File

@ -1,21 +1,11 @@
package app.revanced.manager.di package app.revanced.manager.di
import app.revanced.manager.network.service.GithubService
import app.revanced.manager.network.service.HttpService import app.revanced.manager.network.service.HttpService
import app.revanced.manager.network.service.ReVancedService import app.revanced.manager.network.service.ReVancedService
import org.koin.core.module.dsl.singleOf import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module import org.koin.dsl.module
val serviceModule = module { val serviceModule = module {
fun provideReVancedService( singleOf(::ReVancedService)
client: HttpService,
): ReVancedService {
return ReVancedService(
client = client,
)
}
single { provideReVancedService(get()) }
singleOf(::HttpService) singleOf(::HttpService)
singleOf(::GithubService)
} }

View File

@ -1,8 +0,0 @@
package app.revanced.manager.domain.repository
import app.revanced.manager.network.service.GithubService
// TODO: delete this when the revanced api adds download count.
class GithubRepository(private val service: GithubService) {
suspend fun getChangelog(repo: String) = service.getChangelog(repo)
}

View File

@ -21,7 +21,8 @@ data class ReVancedReleaseMeta(
val draft: Boolean, val draft: Boolean,
val prerelease: Boolean, val prerelease: Boolean,
@SerialName("created_at") val createdAt: String, @SerialName("created_at") val createdAt: String,
@SerialName("published_at") val publishedAt: String @SerialName("published_at") val publishedAt: String,
val body: String,
) )
@Serializable @Serializable

View File

@ -1,15 +0,0 @@
package app.revanced.manager.network.service
import app.revanced.manager.network.dto.GithubChangelog
import app.revanced.manager.network.utils.APIResponse
import io.ktor.client.request.url
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class GithubService(private val client: HttpService) {
suspend fun getChangelog(repo: String): APIResponse<GithubChangelog> = withContext(Dispatchers.IO) {
client.request {
url("https://api.github.com/repos/revanced/$repo/releases/latest")
}
}
}

View File

@ -91,21 +91,6 @@ fun ManagerUpdateChangelog(
color = MaterialTheme.colorScheme.outline, color = MaterialTheme.colorScheme.outline,
) )
} }
Row(
horizontalArrangement = Arrangement.spacedBy(6.dp),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = Icons.Outlined.FileDownload,
contentDescription = null,
modifier = Modifier.size(16.dp)
)
Text(
vm.formattedDownloadCount,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.outline,
)
}
} }
Markdown( Markdown(
vm.changelogHtml, vm.changelogHtml,

View File

@ -8,8 +8,7 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import app.revanced.manager.R import app.revanced.manager.R
import app.revanced.manager.domain.repository.GithubRepository import app.revanced.manager.network.api.ReVancedAPI
import app.revanced.manager.network.dto.GithubChangelog
import app.revanced.manager.network.utils.getOrThrow import app.revanced.manager.network.utils.getOrThrow
import app.revanced.manager.util.uiSafe import app.revanced.manager.util.uiSafe
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -18,30 +17,19 @@ import org.intellij.markdown.html.HtmlGenerator
import org.intellij.markdown.parser.MarkdownParser import org.intellij.markdown.parser.MarkdownParser
class ManagerUpdateChangelogViewModel( class ManagerUpdateChangelogViewModel(
private val githubRepository: GithubRepository, private val api: ReVancedAPI,
private val app: Application, private val app: Application,
) : ViewModel() { ) : ViewModel() {
private val markdownFlavour = GFMFlavourDescriptor() private val markdownFlavour = GFMFlavourDescriptor()
private val markdownParser = MarkdownParser(flavour = markdownFlavour) private val markdownParser = MarkdownParser(flavour = markdownFlavour)
var changelog by mutableStateOf( var changelog by mutableStateOf(
GithubChangelog( Changelog(
"...", "...",
app.getString(R.string.changelog_loading), app.getString(R.string.changelog_loading),
emptyList()
) )
) )
private set private set
val formattedDownloadCount by derivedStateOf {
val downloadCount = changelog.assets.firstOrNull()?.downloadCount?.toDouble() ?: 0.0
if (downloadCount > 1000) {
val roundedValue =
(downloadCount / 100).toInt() / 10.0 // Divide by 100 and round to one decimal place
"${roundedValue}k"
} else {
downloadCount.toString()
}
}
val changelogHtml by derivedStateOf { val changelogHtml by derivedStateOf {
val markdown = changelog.body val markdown = changelog.body
val parsedTree = markdownParser.buildMarkdownTreeFromString(markdown) val parsedTree = markdownParser.buildMarkdownTreeFromString(markdown)
@ -51,8 +39,15 @@ class ManagerUpdateChangelogViewModel(
init { init {
viewModelScope.launch { viewModelScope.launch {
uiSafe(app, R.string.changelog_download_fail, "Failed to download changelog") { uiSafe(app, R.string.changelog_download_fail, "Failed to download changelog") {
changelog = githubRepository.getChangelog("revanced-manager").getOrThrow() changelog = api.getRelease("revanced-manager").getOrThrow().let {
Changelog(it.metadata.tag, it.metadata.body)
} }
} }
} }
}
data class Changelog(
val version: String,
val body: String,
)
} }