VendettaManager/app/src/main/java/dev/beefers/vendetta/manager/ui/viewmodel/main/MainViewModel.kt

65 lines
2.3 KiB
Kotlin
Raw Normal View History

2023-03-14 22:43:14 +00:00
package dev.beefers.vendetta.manager.ui.viewmodel.main
import android.content.Context
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import cafe.adriel.voyager.core.model.ScreenModel
import cafe.adriel.voyager.core.model.coroutineScope
2023-03-21 22:19:45 +00:00
import dev.beefers.vendetta.manager.BuildConfig
2023-03-14 22:43:14 +00:00
import dev.beefers.vendetta.manager.domain.manager.DownloadManager
2023-03-18 16:30:54 +00:00
import dev.beefers.vendetta.manager.domain.manager.PreferenceManager
import dev.beefers.vendetta.manager.domain.repository.RestRepository
2023-03-14 22:43:14 +00:00
import dev.beefers.vendetta.manager.installer.util.installApks
import dev.beefers.vendetta.manager.network.dto.Release
import dev.beefers.vendetta.manager.network.utils.dataOrNull
2023-03-18 16:30:54 +00:00
import dev.beefers.vendetta.manager.network.utils.ifSuccessful
2023-03-14 22:43:14 +00:00
import kotlinx.coroutines.launch
import java.io.File
class MainViewModel(
private val repo: RestRepository,
2023-03-14 22:43:14 +00:00
private val downloadManager: DownloadManager,
2023-03-18 16:30:54 +00:00
private val preferenceManager: PreferenceManager,
2023-03-14 22:43:14 +00:00
private val context: Context
) : ScreenModel {
2023-03-18 16:30:54 +00:00
private val cacheDir = context.externalCacheDir
2023-03-14 22:43:14 +00:00
var release by mutableStateOf<Release?>(null)
private set
2023-03-21 22:19:45 +00:00
var showUpdateDialog by mutableStateOf(false)
var isUpdating by mutableStateOf(false)
2023-03-14 22:43:14 +00:00
init {
checkForUpdate()
}
private fun checkForUpdate() {
coroutineScope.launch {
2023-03-18 16:30:54 +00:00
release = repo.getLatestRelease("VendettaManager").dataOrNull
2023-03-21 22:19:45 +00:00
release?.let {
showUpdateDialog = it.tagName.toInt() > BuildConfig.VERSION_CODE
}
2023-03-18 16:30:54 +00:00
repo.getLatestRelease("VendettaXposed").ifSuccessful {
if (preferenceManager.moduleVersion != it.tagName) {
preferenceManager.moduleVersion = it.tagName
val module = File(cacheDir, "vendetta.apk")
if (module.exists()) module.delete()
}
}
2023-03-14 22:43:14 +00:00
}
}
fun downloadAndInstallUpdate() {
coroutineScope.launch {
2023-03-18 16:30:54 +00:00
val update = File(cacheDir, "update.apk")
2023-03-21 22:19:45 +00:00
if(update.exists()) update.delete()
isUpdating = true
2023-03-14 22:43:14 +00:00
downloadManager.downloadUpdate(update)
2023-03-21 22:19:45 +00:00
isUpdating = false
2023-03-14 22:43:14 +00:00
context.installApks(false, update)
}
}
}