mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-08-31 15:47:13 +02:00
Moving folder to shared storage
This commit is contained in:
@@ -98,13 +98,7 @@ class DownloadItemManager(
|
|||||||
|
|
||||||
/** Processes the download item parts. */
|
/** Processes the download item parts. */
|
||||||
private fun processDownloadItemParts(nextDownloadItemParts: List<DownloadItemPart>) {
|
private fun processDownloadItemParts(nextDownloadItemParts: List<DownloadItemPart>) {
|
||||||
nextDownloadItemParts.forEach {
|
nextDownloadItemParts.forEach { startInternalDownload(it) }
|
||||||
// if (it.isInternalStorage) {
|
|
||||||
startInternalDownload(it)
|
|
||||||
// } else {
|
|
||||||
// startExternalDownload(it)
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Starts an internal download. */
|
/** Starts an internal download. */
|
||||||
@@ -137,15 +131,6 @@ class DownloadItemManager(
|
|||||||
currentDownloadItemParts.add(downloadItemPart)
|
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. */
|
/** Starts watching the downloads. */
|
||||||
private fun startWatchingDownloads() {
|
private fun startWatchingDownloads() {
|
||||||
if (isDownloading) return // Already watching
|
if (isDownloading) return // Already watching
|
||||||
@@ -157,11 +142,7 @@ class DownloadItemManager(
|
|||||||
while (currentDownloadItemParts.isNotEmpty()) {
|
while (currentDownloadItemParts.isNotEmpty()) {
|
||||||
val itemParts = currentDownloadItemParts.filter { !it.isMoving }
|
val itemParts = currentDownloadItemParts.filter { !it.isMoving }
|
||||||
for (downloadItemPart in itemParts) {
|
for (downloadItemPart in itemParts) {
|
||||||
// if (downloadItemPart.isInternalStorage) {
|
|
||||||
handleInternalDownloadPart(downloadItemPart)
|
handleInternalDownloadPart(downloadItemPart)
|
||||||
// } else {
|
|
||||||
// handleExternalDownloadPart(downloadItemPart)
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(500)
|
delay(500)
|
||||||
@@ -182,96 +163,14 @@ class DownloadItemManager(
|
|||||||
|
|
||||||
if (downloadItemPart.completed) {
|
if (downloadItemPart.completed) {
|
||||||
val downloadItem = downloadItemQueue.find { it.id == downloadItemPart.downloadItemId }
|
val downloadItem = downloadItemQueue.find { it.id == downloadItemPart.downloadItemId }
|
||||||
downloadItem?.let { checkDownloadItemFinished(it) }
|
if (!downloadItemPart.isInternalStorage) {
|
||||||
currentDownloadItemParts.remove(downloadItemPart)
|
// After downloading, move the downloaded file to the final destination
|
||||||
}
|
// After moving the file, checkDownloadItemFinished is called anyway
|
||||||
}
|
downloadItem?.let { moveDownloadedFile(it, 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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Log.d(tag, "Download ${downloadItemPart.filename} not found in dlmanager")
|
// Otherwise, just check if the full item is finished downloading
|
||||||
downloadItemPart.completed = true
|
downloadItem?.let { checkDownloadItemFinished(it) }
|
||||||
downloadItemPart.failed = true
|
|
||||||
return DownloadCheckStatus.Failed
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 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)
|
currentDownloadItemParts.remove(downloadItemPart)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user