offline manga fix

This commit is contained in:
Finnley Somdahl 2023-12-01 00:58:58 -06:00
parent c7bc1ffe9e
commit f792296f78
6 changed files with 227 additions and 104 deletions

View file

@ -231,6 +231,15 @@ internal class NovelExtensionInstaller(private val context: Context) {
val destination = File(destinationPath)
destination.setWritable(true)
//delete the file if it already exists
if (destination.exists()) {
if (destination.delete()) {
Log.i("File Copy", "File deleted successfully.")
} else {
Log.e("File Copy", "Failed to delete file.")
}
}
var inputChannel: FileChannel? = null
var outputChannel: FileChannel? = null
try {

View file

@ -2,9 +2,13 @@ package ani.dantotsu.parsers.novel
import android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager.GET_SIGNATURES
import android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES
import android.os.Build
import android.util.Log
import ani.dantotsu.logger
import ani.dantotsu.parsers.NovelInterface
import ani.dantotsu.snackString
import com.google.firebase.crashlytics.FirebaseCrashlytics
import dalvik.system.PathClassLoader
import eu.kanade.tachiyomi.extension.anime.util.AnimeExtensionLoader
@ -60,9 +64,15 @@ internal object NovelExtensionLoader {
return loadExtension(context, File(path))
}
@Suppress("DEPRECATION")
fun loadExtension(context: Context, file: File): NovelLoadResult {
val packageInfo = context.packageManager.getPackageArchiveInfo(file.absolutePath, 0)
?: return NovelLoadResult.Error(Exception("Failed to load extension"))
val packageInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
context.packageManager.getPackageArchiveInfo(file.absolutePath, GET_SIGNING_CERTIFICATES)
?: return NovelLoadResult.Error(Exception("Failed to load extension"))
} else {
context.packageManager.getPackageArchiveInfo(file.absolutePath, GET_SIGNATURES)
?: return NovelLoadResult.Error(Exception("Failed to load extension"))
}
val appInfo = packageInfo.applicationInfo
?: return NovelLoadResult.Error(Exception("Failed to load Extension Info"))
appInfo.sourceDir = file.absolutePath;
@ -70,10 +80,11 @@ internal object NovelExtensionLoader {
val signatureHash = getSignatureHash(packageInfo)
if (signatureHash == null || signatureHash != officialSignature) {
if ((signatureHash == null) || !signatureHash.contains(officialSignature)) {
logger("Package ${packageInfo.packageName} isn't signed")
logger("signatureHash: $signatureHash")
//return NovelLoadResult.Error(Exception("Extension not signed"))
snackString("Package ${packageInfo.packageName} isn't signed")
return NovelLoadResult.Error(Exception("Extension not signed"))
}
val extension = NovelExtension.Installed(
@ -92,10 +103,15 @@ internal object NovelExtensionLoader {
return NovelLoadResult.Success(extension)
}
private fun getSignatureHash(pkgInfo: PackageInfo): String? {
val signatures = pkgInfo.signatures
@Suppress("DEPRECATION")
private fun getSignatureHash(pkgInfo: PackageInfo): List<String>? {
val signatures = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
pkgInfo.signingInfo.apkContentsSigners
} else {
pkgInfo.signatures
}
return if (signatures != null && signatures.isNotEmpty()) {
Hash.sha256(signatures.first().toByteArray())
signatures.map { Hash.sha256(it.toByteArray()) }
} else {
null
}

View file

@ -206,7 +206,7 @@ class NovelExtensionManager(private val context: Context) {
override fun onExtensionFileCreated(file: File) {
NovelExtensionLoader.loadExtension(context, file).let {
if (it is NovelLoadResult.Success) {
registerNewExtension(it.extension)
registerNewExtension(it.extension.withUpdateCheck())
}
}
}
@ -217,7 +217,7 @@ class NovelExtensionManager(private val context: Context) {
override fun onExtensionFileModified(file: File) {
NovelExtensionLoader.loadExtension(context, file).let {
if (it is NovelLoadResult.Success) {
registerUpdatedExtension(it.extension)
registerUpdatedExtension(it.extension.withUpdateCheck())
}
}
}