From 80bf3f12b68e04ec6360764451331b96d62942a2 Mon Sep 17 00:00:00 2001 From: Nicholas Wallace Date: Fri, 11 Apr 2025 14:46:40 -0700 Subject: [PATCH] Moving folder to shared storage --- .../app/managers/DownloadItemManager.kt | 115 ++---------------- 1 file changed, 7 insertions(+), 108 deletions(-) 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 16c52e93..8df4090a 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 @@ -98,13 +98,7 @@ class DownloadItemManager( /** Processes the download item parts. */ private fun processDownloadItemParts(nextDownloadItemParts: List) { - nextDownloadItemParts.forEach { - // if (it.isInternalStorage) { - startInternalDownload(it) - // } else { - // startExternalDownload(it) - // } - } + nextDownloadItemParts.forEach { startInternalDownload(it) } } /** Starts an internal download. */ @@ -137,15 +131,6 @@ class DownloadItemManager( currentDownloadItemParts.add(downloadItemPart) } - /** Starts an external download. */ - private fun startExternalDownload(downloadItemPart: DownloadItemPart) { - val dlRequest = downloadItemPart.getDownloadRequest() - val downloadId = downloadManager.enqueue(dlRequest) - downloadItemPart.downloadId = downloadId - Log.d(tag, "checkUpdateDownloadQueue: Starting download item part, downloadId=$downloadId") - currentDownloadItemParts.add(downloadItemPart) - } - /** Starts watching the downloads. */ private fun startWatchingDownloads() { if (isDownloading) return // Already watching @@ -157,11 +142,7 @@ class DownloadItemManager( while (currentDownloadItemParts.isNotEmpty()) { val itemParts = currentDownloadItemParts.filter { !it.isMoving } for (downloadItemPart in itemParts) { - // if (downloadItemPart.isInternalStorage) { handleInternalDownloadPart(downloadItemPart) - // } else { - // handleExternalDownloadPart(downloadItemPart) - // } } delay(500) @@ -182,96 +163,14 @@ class DownloadItemManager( if (downloadItemPart.completed) { val downloadItem = downloadItemQueue.find { it.id == downloadItemPart.downloadItemId } - downloadItem?.let { checkDownloadItemFinished(it) } - currentDownloadItemParts.remove(downloadItemPart) - } - } - - /** Handles an external download part. */ - private fun handleExternalDownloadPart(downloadItemPart: DownloadItemPart) { - val downloadCheckStatus = checkDownloadItemPart(downloadItemPart) - clientEventEmitter.onDownloadItemPartUpdate(downloadItemPart) - - // Will move to final destination, remove current item parts, and check if download item is - // finished - handleDownloadItemPartCheck(downloadCheckStatus, downloadItemPart) - } - - /** Checks the status of a download item part. */ - private fun checkDownloadItemPart(downloadItemPart: DownloadItemPart): DownloadCheckStatus { - val downloadId = downloadItemPart.downloadId ?: return DownloadCheckStatus.Failed - - val query = DownloadManager.Query().setFilterById(downloadId) - downloadManager.query(query).use { - if (it.moveToFirst()) { - val bytesColumnIndex = it.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES) - val statusColumnIndex = it.getColumnIndex(DownloadManager.COLUMN_STATUS) - val bytesDownloadedColumnIndex = - it.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR) - - val totalBytes = if (bytesColumnIndex >= 0) it.getInt(bytesColumnIndex) else 0 - val downloadStatus = if (statusColumnIndex >= 0) it.getInt(statusColumnIndex) else 0 - val bytesDownloadedSoFar = - if (bytesDownloadedColumnIndex >= 0) it.getLong(bytesDownloadedColumnIndex) else 0 - Log.d( - tag, - "checkDownloads Download ${downloadItemPart.filename} bytes $totalBytes | bytes dled $bytesDownloadedSoFar | downloadStatus $downloadStatus" - ) - - return when (downloadStatus) { - DownloadManager.STATUS_SUCCESSFUL -> { - Log.d(tag, "checkDownloads Download ${downloadItemPart.filename} Successful") - downloadItemPart.completed = true - downloadItemPart.progress = 1 - downloadItemPart.bytesDownloaded = bytesDownloadedSoFar - - DownloadCheckStatus.Successful - } - DownloadManager.STATUS_FAILED -> { - Log.d(tag, "checkDownloads Download ${downloadItemPart.filename} Failed") - downloadItemPart.completed = true - downloadItemPart.failed = true - - DownloadCheckStatus.Failed - } - else -> { - val percentProgress = - if (totalBytes > 0) ((bytesDownloadedSoFar * 100L) / totalBytes) else 0 - Log.d( - tag, - "checkDownloads Download ${downloadItemPart.filename} Progress = $percentProgress%" - ) - downloadItemPart.progress = percentProgress - downloadItemPart.bytesDownloaded = bytesDownloadedSoFar - - DownloadCheckStatus.InProgress - } - } + if (!downloadItemPart.isInternalStorage) { + // After downloading, move the downloaded file to the final destination + // After moving the file, checkDownloadItemFinished is called anyway + downloadItem?.let { moveDownloadedFile(it, downloadItemPart) } } else { - Log.d(tag, "Download ${downloadItemPart.filename} not found in dlmanager") - downloadItemPart.completed = true - downloadItemPart.failed = true - return DownloadCheckStatus.Failed + // Otherwise, just check if the full item is finished downloading + downloadItem?.let { checkDownloadItemFinished(it) } } - } - } - - /** Handles the result of a download item part check. */ - private fun handleDownloadItemPartCheck( - downloadCheckStatus: DownloadCheckStatus, - downloadItemPart: DownloadItemPart - ) { - val downloadItem = downloadItemQueue.find { it.id == downloadItemPart.downloadItemId } - if (downloadItem == null) { - Log.e( - tag, - "Download item part finished but download item not found ${downloadItemPart.filename}" - ) - currentDownloadItemParts.remove(downloadItemPart) - } else if (downloadCheckStatus == DownloadCheckStatus.Successful) { - moveDownloadedFile(downloadItem, downloadItemPart) - } else if (downloadCheckStatus != DownloadCheckStatus.InProgress) { - checkDownloadItemFinished(downloadItem) currentDownloadItemParts.remove(downloadItemPart) } }