Fix module not loaded after update

This commit is contained in:
Nullptr 2022-05-31 23:40:19 +08:00
parent 4493c45025
commit 14bc932249
No known key found for this signature in database
GPG Key ID: 0B9D02052FF536BD
2 changed files with 20 additions and 1 deletions

View File

@ -1,5 +1,7 @@
package org.lsposed.lspatch.config package org.lsposed.lspatch.config
import android.content.pm.PackageManager
import android.util.Log
import androidx.room.Room import androidx.room.Room
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
@ -9,9 +11,12 @@ import org.lsposed.lspatch.database.entity.Module
import org.lsposed.lspatch.database.entity.Scope import org.lsposed.lspatch.database.entity.Scope
import org.lsposed.lspatch.lspApp import org.lsposed.lspatch.lspApp
import org.lsposed.lspatch.util.ModuleLoader import org.lsposed.lspatch.util.ModuleLoader
import java.io.File
object ConfigManager { object ConfigManager {
private const val TAG = "ConfigManager"
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
private val dispatcher = Dispatchers.Default.limitedParallelism(1) private val dispatcher = Dispatchers.Default.limitedParallelism(1)
@ -59,7 +64,18 @@ object ConfigManager {
suspend fun getModuleFilesForApp(pkgName: String): List<org.lsposed.lspd.models.Module> = suspend fun getModuleFilesForApp(pkgName: String): List<org.lsposed.lspd.models.Module> =
withContext(dispatcher) { withContext(dispatcher) {
val modules = scopeDao.getModulesForApp(pkgName) val modules = scopeDao.getModulesForApp(pkgName)
return@withContext modules.map { return@withContext modules.mapNotNull {
if (!File(it.apkPath).exists()) {
loadedModules.remove(it)
try {
it.apkPath = lspApp.packageManager.getApplicationInfo(it.pkgName, 0).sourceDir
} catch (e: PackageManager.NameNotFoundException) {
moduleDao.delete(moduleDao.getModule(it.pkgName))
Log.w(TAG, "Module may be uninstalled: ${it.pkgName}")
return@mapNotNull null
}
Log.i(TAG, "Module apk path updated: ${it.pkgName}")
}
loadedModules.getOrPut(it) { loadedModules.getOrPut(it) {
org.lsposed.lspd.models.Module().apply { org.lsposed.lspd.models.Module().apply {
packageName = it.pkgName packageName = it.pkgName

View File

@ -10,6 +10,9 @@ import org.lsposed.lspatch.database.entity.Module
@Dao @Dao
interface ModuleDao { interface ModuleDao {
@Query("SELECT * FROM module WHERE pkgName = :pkgName")
suspend fun getModule(pkgName: String): Module
@Query("SELECT * FROM module") @Query("SELECT * FROM module")
suspend fun getAll(): List<Module> suspend fun getAll(): List<Module>