mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Log extension loading errors directly (#7716)
(cherry picked from commit 7892cc1519)
			
			
This commit is contained in:
		| @@ -4,7 +4,5 @@ sealed class LoadResult { | ||||
|  | ||||
|     class Success(val extension: Extension.Installed) : LoadResult() | ||||
|     class Untrusted(val extension: Extension.Untrusted) : LoadResult() | ||||
|     class Error(val message: String? = null) : LoadResult() { | ||||
|         constructor(exception: Throwable) : this(exception.message) | ||||
|     } | ||||
|     object Error : LoadResult() | ||||
| } | ||||
|   | ||||
| @@ -7,10 +7,12 @@ import android.content.IntentFilter | ||||
| import eu.kanade.tachiyomi.extension.model.Extension | ||||
| import eu.kanade.tachiyomi.extension.model.LoadResult | ||||
| import eu.kanade.tachiyomi.util.lang.launchNow | ||||
| import eu.kanade.tachiyomi.util.system.logcat | ||||
| import kotlinx.coroutines.CoroutineStart | ||||
| import kotlinx.coroutines.Dispatchers | ||||
| import kotlinx.coroutines.GlobalScope | ||||
| import kotlinx.coroutines.async | ||||
| import logcat.LogPriority | ||||
|  | ||||
| /** | ||||
|  * Broadcast receiver that listens for the system's packages installed, updated or removed, and only | ||||
| @@ -94,7 +96,10 @@ internal class ExtensionInstallReceiver(private val listener: Listener) : | ||||
|      */ | ||||
|     private suspend fun getExtensionFromIntent(context: Context, intent: Intent?): LoadResult { | ||||
|         val pkgName = getPackageNameFromIntent(intent) | ||||
|             ?: return LoadResult.Error("Package name not found") | ||||
|         if (pkgName == null) { | ||||
|             logcat(LogPriority.WARN) { "Package name not found" } | ||||
|             return LoadResult.Error | ||||
|         } | ||||
|         return GlobalScope.async(Dispatchers.Default, CoroutineStart.DEFAULT) { ExtensionLoader.loadExtensionFromPkgName(context, pkgName) }.await() | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -80,10 +80,12 @@ internal object ExtensionLoader { | ||||
|             context.packageManager.getPackageInfo(pkgName, PACKAGE_FLAGS) | ||||
|         } catch (error: PackageManager.NameNotFoundException) { | ||||
|             // Unlikely, but the package may have been uninstalled at this point | ||||
|             return LoadResult.Error(error) | ||||
|             logcat(LogPriority.ERROR, error) | ||||
|             return LoadResult.Error | ||||
|         } | ||||
|         if (!isPackageAnExtension(pkgInfo)) { | ||||
|             return LoadResult.Error("Tried to load a package that wasn't a extension") | ||||
|             logcat(LogPriority.WARN) { "Tried to load a package that wasn't a extension ($pkgName)" } | ||||
|             return LoadResult.Error | ||||
|         } | ||||
|         return loadExtension(context, pkgName, pkgInfo) | ||||
|     } | ||||
| @@ -102,7 +104,8 @@ internal object ExtensionLoader { | ||||
|             pkgManager.getApplicationInfo(pkgName, PackageManager.GET_META_DATA) | ||||
|         } catch (error: PackageManager.NameNotFoundException) { | ||||
|             // Unlikely, but the package may have been uninstalled at this point | ||||
|             return LoadResult.Error(error) | ||||
|             logcat(LogPriority.ERROR, error) | ||||
|             return LoadResult.Error | ||||
|         } | ||||
|  | ||||
|         val extName = pkgManager.getApplicationLabel(appInfo).toString().substringAfter("Tachiyomi: ") | ||||
| @@ -112,7 +115,7 @@ internal object ExtensionLoader { | ||||
|         if (versionName.isNullOrEmpty()) { | ||||
|             val exception = Exception("Missing versionName for extension $extName") | ||||
|             logcat(LogPriority.WARN, exception) | ||||
|             return LoadResult.Error(exception) | ||||
|             return LoadResult.Error | ||||
|         } | ||||
|  | ||||
|         // Validate lib version | ||||
| @@ -123,13 +126,14 @@ internal object ExtensionLoader { | ||||
|                     "$LIB_VERSION_MIN to $LIB_VERSION_MAX are allowed", | ||||
|             ) | ||||
|             logcat(LogPriority.WARN, exception) | ||||
|             return LoadResult.Error(exception) | ||||
|             return LoadResult.Error | ||||
|         } | ||||
|  | ||||
|         val signatureHash = getSignatureHash(pkgInfo) | ||||
|  | ||||
|         if (signatureHash == null) { | ||||
|             return LoadResult.Error("Package $pkgName isn't signed") | ||||
|             logcat(LogPriority.WARN) { "Package $pkgName isn't signed" } | ||||
|             return LoadResult.Error | ||||
|         } else if (signatureHash !in trustedSignatures) { | ||||
|             val extension = Extension.Untrusted(extName, pkgName, versionName, versionCode, signatureHash) | ||||
|             logcat(LogPriority.WARN) { "Extension $pkgName isn't trusted" } | ||||
| @@ -138,7 +142,8 @@ internal object ExtensionLoader { | ||||
|  | ||||
|         val isNsfw = appInfo.metaData.getInt(METADATA_NSFW) == 1 | ||||
|         if (!loadNsfwSource && isNsfw) { | ||||
|             return LoadResult.Error("NSFW extension $pkgName not allowed") | ||||
|             logcat(LogPriority.WARN) { "NSFW extension $pkgName not allowed" } | ||||
|             return LoadResult.Error | ||||
|         } | ||||
|  | ||||
|         val hasReadme = appInfo.metaData.getInt(METADATA_HAS_README, 0) == 1 | ||||
| @@ -165,7 +170,7 @@ internal object ExtensionLoader { | ||||
|                     } | ||||
|                 } catch (e: Throwable) { | ||||
|                     logcat(LogPriority.ERROR, e) { "Extension load error: $extName ($it)" } | ||||
|                     return LoadResult.Error(e) | ||||
|                     return LoadResult.Error | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user