From c79486b8be40dbd6f556dc18a145e504e1dbab6e Mon Sep 17 00:00:00 2001 From: Mitchell Syer Date: Sun, 28 Jun 2026 02:08:53 -0400 Subject: [PATCH] Manual Extension Fixes (#2139) * Fix manual extension icons * Delete extension where APK Url is null --- .../tachidesk/manga/impl/extension/Extension.kt | 14 +++++++------- .../tachidesk/manga/model/table/ExtensionTable.kt | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt index 4f06a2d31..4fbc999c0 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/extension/Extension.kt @@ -165,7 +165,7 @@ object Extension { dex2jar(apkFilePath, jarFilePath, fileNameWithoutType) extractAssetsFromApk(apkFilePath, jarFilePath) - extractAndCacheApkIcon(apkFilePath, apkName) + extractAndCacheApkIcon(apkFilePath, packageInfo.packageName) // clean up File(apkFilePath).delete() @@ -257,7 +257,7 @@ object Extension { private fun extractAndCacheApkIcon( apkFilePath: String, - apkName: String, + pkgName: String, ) { val iconCacheDir = "${applicationDirs.extensionsRoot}/icon" try { @@ -270,15 +270,15 @@ object Extension { ?.first } if (iconData == null) { - logger.warn { "No icon found in APK $apkName" } + logger.warn { "No icon found in APK $pkgName" } return } File(iconCacheDir).mkdirs() - clearCachedImage(iconCacheDir, apkName) - saveImage("$iconCacheDir/$apkName", iconData.inputStream(), null) + clearCachedImage(iconCacheDir, pkgName) + saveImage("$iconCacheDir/$pkgName", iconData.inputStream(), null) } catch (e: Exception) { - logger.warn(e) { "Failed to extract icon from APK $apkName" } + logger.warn(e) { "Failed to extract icon from APK $pkgName" } } } @@ -371,7 +371,7 @@ object Extension { SourceTable.deleteWhere { SourceTable.extension eq extensionId } - if (extensionRecord[ExtensionTable.isObsolete]) { + if (extensionRecord[ExtensionTable.isObsolete] || extensionRecord[ExtensionTable.apkUrl] == null) { ExtensionTable.deleteWhere { ExtensionTable.pkgName eq pkgName } } else { ExtensionTable.update({ ExtensionTable.pkgName eq pkgName }) { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt index 36d3e2bbe..318c43ebc 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/model/table/ExtensionTable.kt @@ -23,7 +23,7 @@ object ExtensionTable : IntIdTable() { val name = varchar("name", 128) val pkgName = varchar("pkg_name", 128) - val apkUrl = varchar("apk_url", 2048) + val apkUrl = varchar("apk_url", 2048).nullable() val extensionLib = varchar("extension_lib", 16).nullable() val versionName = varchar("version_name", 16) val versionCode = long("version_code")