fix: some error checking
This commit is contained in:
parent
df2867c7db
commit
949bcc418a
3 changed files with 62 additions and 16 deletions
|
@ -21,6 +21,20 @@ import eu.kanade.tachiyomi.util.system.getApplicationIcon
|
||||||
|
|
||||||
class AddonLoader {
|
class AddonLoader {
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load an extension from a package name with a specific class name
|
||||||
|
* @param context the context
|
||||||
|
* @param packageName the package name of the extension
|
||||||
|
* @param type the type of extension
|
||||||
|
* @return the loaded extension
|
||||||
|
* @throws IllegalStateException if the extension is not of the correct type
|
||||||
|
* @throws ClassNotFoundException if the extension class is not found
|
||||||
|
* @throws NoClassDefFoundError if the extension class is not found
|
||||||
|
* @throws Exception if any other error occurs
|
||||||
|
* @throws PackageManager.NameNotFoundException if the package is not found
|
||||||
|
* @throws IllegalStateException if the extension is not found
|
||||||
|
*/
|
||||||
fun loadExtension(
|
fun loadExtension(
|
||||||
context: Context,
|
context: Context,
|
||||||
packageName: String,
|
packageName: String,
|
||||||
|
@ -70,11 +84,11 @@ class AddonLoader {
|
||||||
val loadedClass = try {
|
val loadedClass = try {
|
||||||
Class.forName(className, false, classLoader)
|
Class.forName(className, false, classLoader)
|
||||||
} catch (e: ClassNotFoundException) {
|
} catch (e: ClassNotFoundException) {
|
||||||
Logger.log("Extension load error: $extName ($className)")
|
Logger.log("ClassNotFoundException load error: $extName ($className)")
|
||||||
Logger.log(e)
|
Logger.log(e)
|
||||||
throw e
|
throw e
|
||||||
} catch (e: NoClassDefFoundError) {
|
} catch (e: NoClassDefFoundError) {
|
||||||
Logger.log("Extension load error: $extName ($className)")
|
Logger.log("NoClassDefFoundError load error: $extName ($className)")
|
||||||
Logger.log(e)
|
Logger.log(e)
|
||||||
throw e
|
throw e
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
@ -117,8 +131,16 @@ class AddonLoader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load an extension from a package name (class is determined by type)
|
||||||
|
* @param context the context
|
||||||
|
* @param packageName the package name of the extension
|
||||||
|
* @param type the type of extension
|
||||||
|
* @return the loaded extension
|
||||||
|
*/
|
||||||
fun loadFromPkgName(context: Context, packageName: String, type: AddonType): LoadResult? {
|
fun loadFromPkgName(context: Context, packageName: String, type: AddonType): LoadResult? {
|
||||||
return when (type) {
|
return try {
|
||||||
|
when (type) {
|
||||||
AddonType.TORRENT -> loadExtension(
|
AddonType.TORRENT -> loadExtension(
|
||||||
context,
|
context,
|
||||||
packageName,
|
packageName,
|
||||||
|
@ -133,8 +155,19 @@ class AddonLoader {
|
||||||
type
|
type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Logger.log("Error loading extension from package name: $packageName")
|
||||||
|
Logger.log(e)
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a package is an extension by comparing the package name
|
||||||
|
* @param type the type of extension
|
||||||
|
* @param pkgInfo the package info
|
||||||
|
* @return true if the package is an extension
|
||||||
|
*/
|
||||||
private fun isPackageAnExtension(type: String, pkgInfo: PackageInfo): Boolean {
|
private fun isPackageAnExtension(type: String, pkgInfo: PackageInfo): Boolean {
|
||||||
return pkgInfo.packageName.equals(type)
|
return pkgInfo.packageName.equals(type)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package eu.kanade.tachiyomi.extension.util
|
package eu.kanade.tachiyomi.extension.util
|
||||||
|
|
||||||
import android.app.DownloadManager
|
import android.app.DownloadManager
|
||||||
|
import android.app.ForegroundServiceStartNotAllowedException
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
@ -11,9 +12,11 @@ import android.os.Environment
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import ani.dantotsu.R
|
||||||
import ani.dantotsu.media.AddonType
|
import ani.dantotsu.media.AddonType
|
||||||
import ani.dantotsu.media.MediaType
|
import ani.dantotsu.media.MediaType
|
||||||
import ani.dantotsu.media.Type
|
import ani.dantotsu.media.Type
|
||||||
|
import ani.dantotsu.toast
|
||||||
import ani.dantotsu.util.Logger
|
import ani.dantotsu.util.Logger
|
||||||
import com.jakewharton.rxrelay.PublishRelay
|
import com.jakewharton.rxrelay.PublishRelay
|
||||||
import eu.kanade.domain.base.BasePreferences
|
import eu.kanade.domain.base.BasePreferences
|
||||||
|
@ -160,7 +163,16 @@ class ExtensionInstaller(private val context: Context) {
|
||||||
else -> {
|
else -> {
|
||||||
val intent =
|
val intent =
|
||||||
ExtensionInstallService.getIntent(context, type, downloadId, uri, installer)
|
ExtensionInstallService.getIntent(context, type, downloadId, uri, installer)
|
||||||
|
try {
|
||||||
ContextCompat.startForegroundService(context, intent)
|
ContextCompat.startForegroundService(context, intent)
|
||||||
|
} catch (e: RuntimeException) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && e is ForegroundServiceStartNotAllowedException) {
|
||||||
|
toast(context.getString(R.string.error_msg, context.getString(R.string.foreground_service_not_allowed)))
|
||||||
|
} else {
|
||||||
|
toast(context.getString(R.string.error_msg, e.message))
|
||||||
|
}
|
||||||
|
Logger.log(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -995,4 +995,5 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc
|
||||||
<string name="view_subscriptions_desc">View and edit all your subscriptions</string>
|
<string name="view_subscriptions_desc">View and edit all your subscriptions</string>
|
||||||
<string name="subscriptions">Subscriptions</string>
|
<string name="subscriptions">Subscriptions</string>
|
||||||
<string name="subscription_deleted">Subscription Deleted</string>
|
<string name="subscription_deleted">Subscription Deleted</string>
|
||||||
|
<string name="foreground_service_not_allowed">Cannot install when app is in background</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue