From 14bc932249a394000972e18ff9b03933f09d415e Mon Sep 17 00:00:00 2001 From: Nullptr <52071314+Dr-TSNG@users.noreply.github.com> Date: Tue, 31 May 2022 23:40:19 +0800 Subject: [PATCH] Fix module not loaded after update --- .../lsposed/lspatch/config/ConfigManager.kt | 18 +++++++++++++++++- .../lsposed/lspatch/database/dao/ModuleDao.kt | 3 +++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/manager/src/main/java/org/lsposed/lspatch/config/ConfigManager.kt b/manager/src/main/java/org/lsposed/lspatch/config/ConfigManager.kt index c6977df..1717af4 100644 --- a/manager/src/main/java/org/lsposed/lspatch/config/ConfigManager.kt +++ b/manager/src/main/java/org/lsposed/lspatch/config/ConfigManager.kt @@ -1,5 +1,7 @@ package org.lsposed.lspatch.config +import android.content.pm.PackageManager +import android.util.Log import androidx.room.Room import kotlinx.coroutines.Dispatchers 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.lspApp import org.lsposed.lspatch.util.ModuleLoader +import java.io.File object ConfigManager { + private const val TAG = "ConfigManager" + @OptIn(ExperimentalCoroutinesApi::class) private val dispatcher = Dispatchers.Default.limitedParallelism(1) @@ -59,7 +64,18 @@ object ConfigManager { suspend fun getModuleFilesForApp(pkgName: String): List = withContext(dispatcher) { 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) { org.lsposed.lspd.models.Module().apply { packageName = it.pkgName diff --git a/manager/src/main/java/org/lsposed/lspatch/database/dao/ModuleDao.kt b/manager/src/main/java/org/lsposed/lspatch/database/dao/ModuleDao.kt index 828ea9a..9305e48 100644 --- a/manager/src/main/java/org/lsposed/lspatch/database/dao/ModuleDao.kt +++ b/manager/src/main/java/org/lsposed/lspatch/database/dao/ModuleDao.kt @@ -10,6 +10,9 @@ import org.lsposed.lspatch.database.entity.Module @Dao interface ModuleDao { + @Query("SELECT * FROM module WHERE pkgName = :pkgName") + suspend fun getModule(pkgName: String): Module + @Query("SELECT * FROM module") suspend fun getAll(): List