Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
aayush262 2024-05-18 23:50:51 +05:30
commit f53d27bd53
3 changed files with 62 additions and 16 deletions

View file

@ -21,6 +21,20 @@ import eu.kanade.tachiyomi.util.system.getApplicationIcon
class AddonLoader {
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(
context: Context,
packageName: String,
@ -70,11 +84,11 @@ class AddonLoader {
val loadedClass = try {
Class.forName(className, false, classLoader)
} catch (e: ClassNotFoundException) {
Logger.log("Extension load error: $extName ($className)")
Logger.log("ClassNotFoundException load error: $extName ($className)")
Logger.log(e)
throw e
} catch (e: NoClassDefFoundError) {
Logger.log("Extension load error: $extName ($className)")
Logger.log("NoClassDefFoundError load error: $extName ($className)")
Logger.log(e)
throw e
} 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? {
return when (type) {
return try {
when (type) {
AddonType.TORRENT -> loadExtension(
context,
packageName,
@ -133,8 +155,19 @@ class AddonLoader {
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 {
return pkgInfo.packageName.equals(type)
}

View file

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.extension.util
import android.app.DownloadManager
import android.app.ForegroundServiceStartNotAllowedException
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
@ -11,9 +12,11 @@ import android.os.Environment
import androidx.core.content.ContextCompat
import androidx.core.content.getSystemService
import androidx.core.net.toUri
import ani.dantotsu.R
import ani.dantotsu.media.AddonType
import ani.dantotsu.media.MediaType
import ani.dantotsu.media.Type
import ani.dantotsu.toast
import ani.dantotsu.util.Logger
import com.jakewharton.rxrelay.PublishRelay
import eu.kanade.domain.base.BasePreferences
@ -160,7 +163,16 @@ class ExtensionInstaller(private val context: Context) {
else -> {
val intent =
ExtensionInstallService.getIntent(context, type, downloadId, uri, installer)
try {
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)
}
}
}
}

View file

@ -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="subscriptions">Subscriptions</string>
<string name="subscription_deleted">Subscription Deleted</string>
<string name="foreground_service_not_allowed">Cannot install when app is in background</string>
</resources>