diff --git a/android/app/src/main/java/com/audiobookshelf/app/managers/DownloadItemManager.kt b/android/app/src/main/java/com/audiobookshelf/app/managers/DownloadItemManager.kt index 88830a0e..6c57dc3b 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/managers/DownloadItemManager.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/managers/DownloadItemManager.kt @@ -2,6 +2,7 @@ package com.audiobookshelf.app.managers import android.app.DownloadManager import android.net.Uri +import android.os.StatFs import android.util.Log import androidx.documentfile.provider.DocumentFile import com.anggrayudi.storage.callback.FileCallback @@ -101,6 +102,22 @@ class DownloadItemManager( val file = File(downloadItemPart.destinationUri.path ?: "") file.parentFile?.mkdirs() + // Check if enough internal storage is available for downloading + val statFs = StatFs(file.parentFile?.absolutePath ?: mainActivity.filesDir.absolutePath) + val availableBytes = statFs.availableBytes + val fileSize = downloadItemPart.fileSize + + Log.d( + tag, + "Attempting to start ${downloadItemPart.filename}. Available: ${availableBytes / (1024)} KB, Required: ${fileSize / (1024)} KB" + ) + + // The margin is based on how many simultaneous downloads can be running at once + if (availableBytes < fileSize * maxSimultaneousDownloads) { + Log.w(tag, "Not enough internal storage for ${downloadItemPart.filename}, skipping for now") + return + } + val internalProgressCallback = object : InternalProgressCallback { override fun onProgress(totalBytesWritten: Long, progress: Long) {