From 2f30bdb6a85c046d34b13ab29da609b52a6ab37c Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Fri, 5 Apr 2024 18:34:25 -0500 Subject: [PATCH] fix: case for empty headers --- .../ani/dantotsu/download/DownloadsManager.kt | 9 +++---- .../download/anime/AnimeDownloaderService.kt | 25 +++++++++++-------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/download/DownloadsManager.kt b/app/src/main/java/ani/dantotsu/download/DownloadsManager.kt index 546137c9..30085ee0 100644 --- a/app/src/main/java/ani/dantotsu/download/DownloadsManager.kt +++ b/app/src/main/java/ani/dantotsu/download/DownloadsManager.kt @@ -53,10 +53,10 @@ class DownloadsManager(private val context: Context) { saveDownloads() } - fun removeDownload(downloadedType: DownloadedType, onFinished: () -> Unit) { + fun removeDownload(downloadedType: DownloadedType, toast: Boolean = true, onFinished: () -> Unit) { downloadsList.remove(downloadedType) CoroutineScope(Dispatchers.IO).launch { - removeDirectory(downloadedType) + removeDirectory(downloadedType, toast) withContext(Dispatchers.Main) { onFinished() } @@ -213,7 +213,7 @@ class DownloadsManager(private val context: Context) { } } - private fun removeDirectory(downloadedType: DownloadedType) { + private fun removeDirectory(downloadedType: DownloadedType, toast: Boolean) { val baseDirectory = getBaseDirectory(context, downloadedType.type) val directory = baseDirectory?.findFolder(downloadedType.title)?.findFolder(downloadedType.chapter) @@ -222,8 +222,7 @@ class DownloadsManager(private val context: Context) { if (directory?.exists() == true) { val deleted = directory.deleteRecursively(context, false) if (deleted) { - snackString("Successfully deleted") - + if (toast) snackString("Successfully deleted") } else { snackString("Failed to delete directory") } diff --git a/app/src/main/java/ani/dantotsu/download/anime/AnimeDownloaderService.kt b/app/src/main/java/ani/dantotsu/download/anime/AnimeDownloaderService.kt index daaa200e..38801e4d 100644 --- a/app/src/main/java/ani/dantotsu/download/anime/AnimeDownloaderService.kt +++ b/app/src/main/java/ani/dantotsu/download/anime/AnimeDownloaderService.kt @@ -20,6 +20,7 @@ import androidx.media3.common.util.UnstableApi import ani.dantotsu.FileUrl import ani.dantotsu.R import ani.dantotsu.connections.crashlytics.CrashlyticsInterface +import ani.dantotsu.defaultHeaders import ani.dantotsu.download.DownloadedType import ani.dantotsu.download.DownloadsManager import ani.dantotsu.download.DownloadsManager.Companion.getSubDirectory @@ -32,6 +33,7 @@ import ani.dantotsu.parsers.Subtitle import ani.dantotsu.parsers.Video import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.snackString +import ani.dantotsu.toast import ani.dantotsu.util.Logger import com.anggrayudi.storage.file.forceDelete import com.anggrayudi.storage.file.openOutputStream @@ -198,7 +200,6 @@ class AnimeDownloaderService : Service() { @androidx.annotation.OptIn(UnstableApi::class) suspend fun download(task: AnimeDownloadTask) { try { - //val downloadManager = Helper.downloadManager(this@AnimeDownloaderService) withContext(Dispatchers.Main) { val notifi = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { ContextCompat.checkSelfPermission( @@ -232,13 +233,17 @@ class AnimeDownloaderService : Service() { this@AnimeDownloaderService, outputFile.uri ) - val headersStringBuilder = StringBuilder().append(" ") + val headersStringBuilder = StringBuilder() task.video.file.headers.forEach { headersStringBuilder.append("\"${it.key}: ${it.value}\"\'\r\n\'") } - headersStringBuilder.append(" ") + if (!task.video.file.headers.containsKey("User-Agent")) { //headers should never be empty now + headersStringBuilder.append("\"").append("User-Agent: ") + .append(defaultHeaders["User-Agent"]).append("\"\'\r\n\'") + } + val probeRequest = "-headers $headersStringBuilder -i ${task.video.file.url} -show_entries format=duration -v quiet -of csv=\"p=0\"" FFprobeKit.executeAsync( - "-headers $headersStringBuilder -i ${task.video.file.url} -show_entries format=duration -v quiet -of csv=\"p=0\"", + probeRequest, { Logger.log("FFprobeKit: $it") }, { @@ -247,13 +252,10 @@ class AnimeDownloaderService : Service() { } }) - var request = "-headers" val headers = headersStringBuilder.toString() - if (task.video.file.headers.isNotEmpty()) { - request += headers - } + var request = "-headers $headers " request += "-i ${task.video.file.url} -c copy -bsf:a aac_adtstoasc -tls_verify 0 $path -v trace" - println("Request: $request") + Logger.log("Request: $request") val ffTask = FFmpegKit.executeAsync(request, { session -> @@ -310,14 +312,15 @@ class AnimeDownloaderService : Service() { } Download failed" ) notificationManager.notify(NOTIFICATION_ID, builder.build()) - snackString("${getTaskName(task.title, task.episode)} Download failed") + toast("${getTaskName(task.title, task.episode)} Download failed") Logger.log("Download failed: ${ffTask.failStackTrace}") downloadsManager.removeDownload( DownloadedType( task.title, task.episode, MediaType.ANIME, - ) + ), + false ) {} Injekt.get().logException( Exception(