From df63aa6ecb2b83a5dfd99086c42ef885201752d7 Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Sat, 14 Feb 2026 20:30:19 +0100 Subject: [PATCH] more fixes for apk packages --- .../deniscerri/ytdl/core/packages/Aria2c.kt | 2 +- .../deniscerri/ytdl/core/packages/FFmpeg.kt | 2 +- .../deniscerri/ytdl/core/packages/NodeJS.kt | 2 +- .../ytdl/core/packages/PackageBase.kt | 72 ++++++------------- .../deniscerri/ytdl/core/packages/Python.kt | 4 +- .../settings/updating/PackagesFragment.kt | 69 +++--------------- .../layout/plugin_releases_bottom_sheet.xml | 19 +---- app/src/main/res/values/strings.xml | 1 - 8 files changed, 37 insertions(+), 134 deletions(-) diff --git a/app/src/main/java/com/deniscerri/ytdl/core/packages/Aria2c.kt b/app/src/main/java/com/deniscerri/ytdl/core/packages/Aria2c.kt index 305d100a..6747ee3c 100644 --- a/app/src/main/java/com/deniscerri/ytdl/core/packages/Aria2c.kt +++ b/app/src/main/java/com/deniscerri/ytdl/core/packages/Aria2c.kt @@ -6,7 +6,7 @@ object Aria2c : PackageBase() { override val bundledZipName: String get() = "libaria2c.zip.so" override val canUninstall: Boolean = false override val bundledVersion: String get() = "v1.37.0" - override val githubRepo: String get() = "deniscerri/ytdlnis-plugins" + override val githubRepo: String get() = "deniscerri/ytdlnis-packages" override val githubPackageName: String get() = "aria2c" override val apkPackage: String get() = "com.deniscerri.ytdl.aria2c" } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/core/packages/FFmpeg.kt b/app/src/main/java/com/deniscerri/ytdl/core/packages/FFmpeg.kt index f50a9e2b..61bb1df3 100644 --- a/app/src/main/java/com/deniscerri/ytdl/core/packages/FFmpeg.kt +++ b/app/src/main/java/com/deniscerri/ytdl/core/packages/FFmpeg.kt @@ -6,7 +6,7 @@ object FFmpeg : PackageBase() { override val bundledZipName: String get() = "libffmpeg.zip.so" override val canUninstall: Boolean = false override val bundledVersion: String get() = "v7.0.1" - override val githubRepo: String get() = "deniscerri/ytdlnis-plugins" + override val githubRepo: String get() = "deniscerri/ytdlnis-packages" override val githubPackageName: String get() = "ffmpeg" override val apkPackage: String get() = "com.deniscerri.ytdl.ffmpeg" } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/core/packages/NodeJS.kt b/app/src/main/java/com/deniscerri/ytdl/core/packages/NodeJS.kt index 47f21831..90de894b 100644 --- a/app/src/main/java/com/deniscerri/ytdl/core/packages/NodeJS.kt +++ b/app/src/main/java/com/deniscerri/ytdl/core/packages/NodeJS.kt @@ -6,7 +6,7 @@ object NodeJS : PackageBase() { override val bundledZipName: String get() = "libnode.zip.so" override val canUninstall: Boolean = true override val bundledVersion: String get() = "" - override val githubRepo: String get() = "deniscerri/ytdlnis-plugins" + override val githubRepo: String get() = "deniscerri/ytdlnis-packages" override val githubPackageName: String get() = "nodejs" override val apkPackage: String get() = "com.deniscerri.ytdl.nodejs" } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/core/packages/PackageBase.kt b/app/src/main/java/com/deniscerri/ytdl/core/packages/PackageBase.kt index ef0294e0..bfe9df82 100644 --- a/app/src/main/java/com/deniscerri/ytdl/core/packages/PackageBase.kt +++ b/app/src/main/java/com/deniscerri/ytdl/core/packages/PackageBase.kt @@ -143,33 +143,37 @@ abstract class PackageBase { } fun getLocation(context: Context, baseDir: File): PackageLocation { - val mainNativeDir = context.applicationInfo.nativeLibraryDir - + //downloaded apk location var packageBinDir: String? = null if (apkPackage.isNotBlank()) { try { packageBinDir = context.packageManager.getApplicationInfo(apkPackage, 0).nativeLibraryDir } catch (e: Exception) {} } + val downloadedBinDir = File(packageBinDir ?: "") + val downloadedLDDir = getDownloadedDir(context) + val downloadedExe = File(packageBinDir, "lib$executableName.so") + + //bundled location + val bundledBinDir = File(context.applicationInfo.nativeLibraryDir) + val bundledLDDir = File(File(baseDir, packagesRoot), packageFolderName) + val bundledExe = File(bundledBinDir, "lib$executableName.so") - val packageExe = if (packageBinDir != null) File(packageBinDir, "lib$executableName.so") else null - val isPackageActive = packageExe?.exists() == true - var isBundleActive = false + val isPackageActive = downloadedExe.exists() + val isBundleActive = bundledExe.exists() val finalExe: File val binDir: File val ldDir: File if (isPackageActive) { - finalExe = packageExe - binDir = File(packageBinDir!!) - ldDir = getDownloadedDir(context) + finalExe = downloadedExe + binDir = downloadedBinDir + ldDir = downloadedLDDir } else { - val bundledDir = File(baseDir, packagesRoot) - binDir = File(context.applicationInfo.nativeLibraryDir) - ldDir = File(bundledDir, packageFolderName) - finalExe = File(binDir, "lib$executableName.so") - isBundleActive = finalExe.exists() + finalExe = bundledExe + binDir = bundledBinDir + ldDir = bundledLDDir } return PackageLocation( @@ -183,10 +187,10 @@ abstract class PackageBase { ) } - suspend fun downloadRelease(context: Context, release: PackageRelease, onProgress: (Int) -> Unit) : Result { + suspend fun downloadReleaseApk(context: Context, release: PackageRelease, onProgress: (Int) -> Unit) : Result { return withContext(Dispatchers.IO) { try { - val tempZipFile = File(context.cacheDir, "${packageFolderName}_tmp.zip") + val tempApk = File(context.cacheDir, "${packageFolderName}_${release.version.replace(".", "")}.apk") //download val request = Request.Builder() @@ -203,7 +207,7 @@ abstract class PackageBase { var bytesDownloaded = 0L body.byteStream().use { inputStream -> - tempZipFile.outputStream().use { outputStream -> + tempApk.outputStream().use { outputStream -> val buffer = ByteArray(8192) // 8KB buffer var bytesRead: Int @@ -220,47 +224,13 @@ abstract class PackageBase { } } - Result.success(DocumentFile.fromFile(tempZipFile)) + Result.success(DocumentFile.fromFile(tempApk)) } catch (e: Exception) { Result.failure(e) } } } - fun installFromZip(context: Context, zipFile: DocumentFile, versionTag: String? = null) : Result { - return kotlin.runCatching { - val runtimeDir = getDownloadedDir(context) - FileUtils.deleteQuietly(runtimeDir) - runtimeDir.mkdirs() - - // 3. Unzip the main Bundle (contains libnode.so and libnode.zip.so) - context.contentResolver.openInputStream(zipFile.uri).use { inputStream -> - ZipUtils.unzip(inputStream, runtimeDir) - } - // 4. Handle the Bootstrap Zip (Double Unzip) - // Look for any .zip.so file in the extracted directory - runtimeDir.listFiles()?.forEach { file -> - if (file.name.endsWith(".zip.so")) { - ZipUtils.unzip(file, runtimeDir) - file.delete() // Remove the internal zip to save space - } - } - - applyExecutablePermissions(runtimeDir) - // 6. Save installation state - val version = versionTag ?: "IMPORTED" - saveState(context, version) - - if (versionTag != null) { - zipFile.delete() - } - - Result.success(version) - }.getOrElse { - Result.failure(it) - } - } - fun uninstallDownloadedRuntimeDir(context: Context): Result { return kotlin.runCatching { val runtimeDir = getDownloadedDir(context) diff --git a/app/src/main/java/com/deniscerri/ytdl/core/packages/Python.kt b/app/src/main/java/com/deniscerri/ytdl/core/packages/Python.kt index 350ed4a8..e23c59d2 100644 --- a/app/src/main/java/com/deniscerri/ytdl/core/packages/Python.kt +++ b/app/src/main/java/com/deniscerri/ytdl/core/packages/Python.kt @@ -4,9 +4,9 @@ object Python : PackageBase() { override val executableName: String get() = "python" override val packageFolderName: String get() = "python" override val bundledZipName: String get() = "libpython.zip.so" - override val bundledVersion: String get() = "v3.12" + override val bundledVersion: String get() = "v3.12.11" override val canUninstall: Boolean = false - override val githubRepo: String get() = "deniscerri/ytdlnis-plugins" + override val githubRepo: String get() = "deniscerri/ytdlnis-packages" override val githubPackageName: String get() = "python" override val apkPackage: String get() = "com.deniscerri.ytdl.python" } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/PackagesFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/PackagesFragment.kt index 9eb554da..453b991d 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/PackagesFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/PackagesFragment.kt @@ -105,17 +105,6 @@ class PackagesFragment : Fragment(), PackagesAdapter.OnItemClickListener, Packag sheet.setContentView(R.layout.plugin_releases_bottom_sheet) sheet.findViewById(R.id.bottom_sheet_subtitle)?.text = item.title - sheet.findViewById