fix: case for empty headers

This commit is contained in:
rebelonion 2024-04-05 18:34:25 -05:00
parent 4d28ae2e3e
commit 2f30bdb6a8
2 changed files with 18 additions and 16 deletions

View file

@ -53,10 +53,10 @@ class DownloadsManager(private val context: Context) {
saveDownloads() saveDownloads()
} }
fun removeDownload(downloadedType: DownloadedType, onFinished: () -> Unit) { fun removeDownload(downloadedType: DownloadedType, toast: Boolean = true, onFinished: () -> Unit) {
downloadsList.remove(downloadedType) downloadsList.remove(downloadedType)
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
removeDirectory(downloadedType) removeDirectory(downloadedType, toast)
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
onFinished() 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 baseDirectory = getBaseDirectory(context, downloadedType.type)
val directory = val directory =
baseDirectory?.findFolder(downloadedType.title)?.findFolder(downloadedType.chapter) baseDirectory?.findFolder(downloadedType.title)?.findFolder(downloadedType.chapter)
@ -222,8 +222,7 @@ class DownloadsManager(private val context: Context) {
if (directory?.exists() == true) { if (directory?.exists() == true) {
val deleted = directory.deleteRecursively(context, false) val deleted = directory.deleteRecursively(context, false)
if (deleted) { if (deleted) {
snackString("Successfully deleted") if (toast) snackString("Successfully deleted")
} else { } else {
snackString("Failed to delete directory") snackString("Failed to delete directory")
} }

View file

@ -20,6 +20,7 @@ import androidx.media3.common.util.UnstableApi
import ani.dantotsu.FileUrl import ani.dantotsu.FileUrl
import ani.dantotsu.R import ani.dantotsu.R
import ani.dantotsu.connections.crashlytics.CrashlyticsInterface import ani.dantotsu.connections.crashlytics.CrashlyticsInterface
import ani.dantotsu.defaultHeaders
import ani.dantotsu.download.DownloadedType import ani.dantotsu.download.DownloadedType
import ani.dantotsu.download.DownloadsManager import ani.dantotsu.download.DownloadsManager
import ani.dantotsu.download.DownloadsManager.Companion.getSubDirectory import ani.dantotsu.download.DownloadsManager.Companion.getSubDirectory
@ -32,6 +33,7 @@ import ani.dantotsu.parsers.Subtitle
import ani.dantotsu.parsers.Video import ani.dantotsu.parsers.Video
import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.snackString import ani.dantotsu.snackString
import ani.dantotsu.toast
import ani.dantotsu.util.Logger import ani.dantotsu.util.Logger
import com.anggrayudi.storage.file.forceDelete import com.anggrayudi.storage.file.forceDelete
import com.anggrayudi.storage.file.openOutputStream import com.anggrayudi.storage.file.openOutputStream
@ -198,7 +200,6 @@ class AnimeDownloaderService : Service() {
@androidx.annotation.OptIn(UnstableApi::class) @androidx.annotation.OptIn(UnstableApi::class)
suspend fun download(task: AnimeDownloadTask) { suspend fun download(task: AnimeDownloadTask) {
try { try {
//val downloadManager = Helper.downloadManager(this@AnimeDownloaderService)
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
val notifi = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { val notifi = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
ContextCompat.checkSelfPermission( ContextCompat.checkSelfPermission(
@ -232,13 +233,17 @@ class AnimeDownloaderService : Service() {
this@AnimeDownloaderService, this@AnimeDownloaderService,
outputFile.uri outputFile.uri
) )
val headersStringBuilder = StringBuilder().append(" ") val headersStringBuilder = StringBuilder()
task.video.file.headers.forEach { task.video.file.headers.forEach {
headersStringBuilder.append("\"${it.key}: ${it.value}\"\'\r\n\'") 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( FFprobeKit.executeAsync(
"-headers $headersStringBuilder -i ${task.video.file.url} -show_entries format=duration -v quiet -of csv=\"p=0\"", probeRequest,
{ {
Logger.log("FFprobeKit: $it") Logger.log("FFprobeKit: $it")
}, { }, {
@ -247,13 +252,10 @@ class AnimeDownloaderService : Service() {
} }
}) })
var request = "-headers"
val headers = headersStringBuilder.toString() val headers = headersStringBuilder.toString()
if (task.video.file.headers.isNotEmpty()) { var request = "-headers $headers "
request += headers
}
request += "-i ${task.video.file.url} -c copy -bsf:a aac_adtstoasc -tls_verify 0 $path -v trace" 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 = val ffTask =
FFmpegKit.executeAsync(request, FFmpegKit.executeAsync(request,
{ session -> { session ->
@ -310,14 +312,15 @@ class AnimeDownloaderService : Service() {
} Download failed" } Download failed"
) )
notificationManager.notify(NOTIFICATION_ID, builder.build()) 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}") Logger.log("Download failed: ${ffTask.failStackTrace}")
downloadsManager.removeDownload( downloadsManager.removeDownload(
DownloadedType( DownloadedType(
task.title, task.title,
task.episode, task.episode,
MediaType.ANIME, MediaType.ANIME,
) ),
false
) {} ) {}
Injekt.get<CrashlyticsInterface>().logException( Injekt.get<CrashlyticsInterface>().logException(
Exception( Exception(