From c8975f55bfa52f73efd03682074ea63c307a02dd Mon Sep 17 00:00:00 2001 From: Ax333l Date: Sat, 13 Jul 2024 22:57:49 +0200 Subject: [PATCH] add assertions --- .../repository/DownloadedAppRepository.kt | 19 ++++++++++++++----- .../plugin/downloader/DownloadScope.kt | 2 +- .../downloader/example/ExamplePlugins.kt | 6 +++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/domain/repository/DownloadedAppRepository.kt b/app/src/main/java/app/revanced/manager/domain/repository/DownloadedAppRepository.kt index a5c3a3ee..3f005bb3 100644 --- a/app/src/main/java/app/revanced/manager/domain/repository/DownloadedAppRepository.kt +++ b/app/src/main/java/app/revanced/manager/domain/repository/DownloadedAppRepository.kt @@ -31,16 +31,25 @@ class DownloadedAppRepository(app: Application, db: AppDatabase) { // Converted integers cannot contain / or .. unlike the package name or version, so they are safer to use here. val relativePath = File(generateUid().toString()) - val savePath = dir.resolve(relativePath).also { it.mkdirs() } + val saveDir = dir.resolve(relativePath).also { it.mkdirs() } + val targetFile = saveDir.resolve("base.apk") try { val scope = object : DownloadScope { - override val saveLocation = savePath.resolve("base.apk") - override suspend fun reportProgress(bytesReceived: Int, bytesTotal: Int?) = onDownload(bytesReceived.megaBytes to bytesTotal?.megaBytes) + override val targetFile = targetFile + override suspend fun reportProgress(bytesReceived: Int, bytesTotal: Int?) { + require(bytesReceived >= 0) { "bytesReceived must not be negative" } + require(bytesTotal == null || bytesTotal >= bytesReceived) { "bytesTotal must be greater than or equal to bytesReceived" } + require(bytesTotal != 0) { "bytesTotal must not be zero" } + + onDownload(bytesReceived.megaBytes to bytesTotal?.megaBytes) + } } plugin.download(scope, app) + if (!targetFile.exists()) throw Exception("Downloader did not download any files") + dao.insert( DownloadedApp( packageName = app.packageName, @@ -49,12 +58,12 @@ class DownloadedAppRepository(app: Application, db: AppDatabase) { ) ) } catch (e: Exception) { - savePath.deleteRecursively() + saveDir.deleteRecursively() throw e } // Return the Apk file. - return getApkFileForDir(savePath) + return getApkFileForDir(saveDir) } suspend fun get(packageName: String, version: String) = dao.get(packageName, version) diff --git a/downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/DownloadScope.kt b/downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/DownloadScope.kt index a5a08a77..05f139da 100644 --- a/downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/DownloadScope.kt +++ b/downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/DownloadScope.kt @@ -6,7 +6,7 @@ interface DownloadScope { /** * The location where the downloaded APK should be saved. */ - val saveLocation: File + val targetFile: File /** * A callback for reporting download progress diff --git a/example-downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/example/ExamplePlugins.kt b/example-downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/example/ExamplePlugins.kt index 6a9a09dd..4be09a68 100644 --- a/example-downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/example/ExamplePlugins.kt +++ b/example-downloader-plugin/src/main/java/app/revanced/manager/plugin/downloader/example/ExamplePlugins.kt @@ -43,11 +43,11 @@ private fun installedAppDownloader(context: DownloaderContext) = downloader @@ -81,7 +81,7 @@ val examplePaginatedDownloader = paginatedDownloader { download { for (i in 0..5) { - reportProgress(i.megabytes , 5.megabytes) + reportProgress(i.megaBytes , 5.megaBytes) delay(1000L) }