From 87f1deff198a77299654befc42242cf268fb15f2 Mon Sep 17 00:00:00 2001 From: advplyr Date: Thu, 16 Sep 2021 19:41:07 -0500 Subject: [PATCH] Downloads go into sub-directory, fix text overflow in downloads modal --- android/app/build.gradle | 4 +- .../com/audiobookshelf/app/AudioDownloader.kt | 48 +++++++++++---- components/modals/DownloadsModal.vue | 38 ++++++++---- layouts/default.vue | 59 +------------------ package.json | 2 +- pages/audiobook/_id/index.vue | 2 + 6 files changed, 69 insertions(+), 84 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index d9ca252f..661dd53c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.audiobookshelf.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 10 - versionName "0.8.1-beta" + versionCode 11 + versionName "0.8.2-beta" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/android/app/src/main/java/com/audiobookshelf/app/AudioDownloader.kt b/android/app/src/main/java/com/audiobookshelf/app/AudioDownloader.kt index 6146e7b2..f23ee5e5 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/AudioDownloader.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/AudioDownloader.kt @@ -7,7 +7,6 @@ import android.net.Uri import android.os.Environment import android.provider.MediaStore import android.util.Log -import android.widget.Toast import com.getcapacitor.JSObject import com.getcapacitor.Plugin import com.getcapacitor.PluginCall @@ -23,10 +22,10 @@ class AudioDownloader : Plugin() { lateinit var mainActivity:MainActivity lateinit var downloadManager:DownloadManager - data class AudiobookDownload(val url: String, val filename:String, val downloadId: Long) + data class AudiobookDownload(val url: String, val filename: String, val downloadId: Long) var downloads:MutableList = mutableListOf() - data class CoverItem(val name:String, val coverUrl:String) + data class CoverItem(val name: String, val coverUrl: String) data class AudiobookItem(val id: Long, val uri: Uri, val name: String, val size: Int, val duration: Int, val coverUrl: String) { fun toJSObject() : JSObject { var obj = JSObject() @@ -76,7 +75,8 @@ class AudioDownloader : Plugin() { MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.SIZE, - MediaStore.Audio.Media.IS_AUDIOBOOK + MediaStore.Audio.Media.IS_AUDIOBOOK, + MediaStore.Audio.Media.RELATIVE_PATH ) var _audiobookItems:MutableList = mutableListOf() @@ -99,6 +99,7 @@ class AudioDownloader : Plugin() { cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION) val sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE) val isAudiobookColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.IS_AUDIOBOOK) + var relativePathColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.RELATIVE_PATH) while (cursor.moveToNext()) { val id = cursor.getLong(idColumn) @@ -106,6 +107,7 @@ class AudioDownloader : Plugin() { val duration = cursor.getInt(durationColumn) val size = cursor.getInt(sizeColumn) var isAudiobook = cursor.getInt(isAudiobookColumn) + var relativePath = cursor.getString(relativePathColumn) if (isAudiobook == 1) { val contentUri: Uri = ContentUris.withAppendedId( @@ -113,7 +115,7 @@ class AudioDownloader : Plugin() { id ) - Log.d(tag, "Got Content FRom MEdia STORE $id $contentUri, Name: $name, Dur: $duration, Size: $size") + Log.d(tag, "Got Content FRom MEdia STORE $id $contentUri, Name: $name, Dur: $duration, Size: $size, relativePath: $relativePath") var audiobookId = File(name).nameWithoutExtension var coverItem:CoverItem? = covers.find{it.name == audiobookId} var coverUrl = coverItem?.coverUrl ?: "" @@ -177,6 +179,7 @@ class AudioDownloader : Plugin() { @PluginMethod fun downloadCover(call: PluginCall) { + var audiobookId = call.data.getString("audiobookId", "audiobook").toString() var url = call.data.getString("downloadUrl", "unknown").toString() var title = call.data.getString("title", "Cover").toString() var filename = call.data.getString("filename", "audiobook.jpg").toString() @@ -187,7 +190,10 @@ class AudioDownloader : Plugin() { dlRequest.setTitle("Cover Art: $title") dlRequest.setDescription("Cover art for audiobook") dlRequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION) - dlRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_AUDIOBOOKS, filename) + + var file:File = File(audiobookId, filename) + Log.d(tag, "FILE ${file.path} | ${file.canonicalPath}") + dlRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_AUDIOBOOKS, file.path) var downloadId = downloadManager.enqueue(dlRequest) var progressReceiver : (prog: Long) -> Unit = { prog: Long -> @@ -212,6 +218,7 @@ class AudioDownloader : Plugin() { @PluginMethod fun download(call: PluginCall) { + var audiobookId = call.data.getString("audiobookId", "audiobook").toString() var url = call.data.getString("downloadUrl", "unknown").toString() var title = call.data.getString("title", "Audiobook").toString() var filename = call.data.getString("filename", "audiobook.mp3").toString() @@ -223,7 +230,9 @@ class AudioDownloader : Plugin() { dlRequest.setDescription("Downloading to Audiobooks directory") dlRequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION) - dlRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_AUDIOBOOKS, filename) + var file:File = File(audiobookId, filename) + Log.d(tag, "FILE ${file.path} | ${file.canonicalPath}") + dlRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_AUDIOBOOKS, file.path) var downloadId = downloadManager.enqueue(dlRequest) @@ -251,12 +260,31 @@ class AudioDownloader : Plugin() { } @PluginMethod - fun delete(call:PluginCall) { + fun delete(call: PluginCall) { + var audiobookId = call.data.getString("audiobookId", "audiobook").toString() var filename = call.data.getString("filename", "audiobook.mp3").toString() var url = call.data.getString("url", "").toString() var coverUrl = call.data.getString("coverUrl", "").toString() - Log.d(tag, "Called delete file $filename $url") + // Does Not Work +// var audiobookDirRoot = activity.applicationContext.getExternalFilesDir(Environment.DIRECTORY_AUDIOBOOKS) +// Log.d(tag, "AUDIOBOOK DIR ROOT $audiobookDirRoot") +// var result = audiobookDirRoot?.deleteRecursively() +// Log.d(tag, "DONE DELETING FOLDER $result") + + // Does Not Work +// var audiobookDir = File(audiobookDirRoot, audiobookId + "/") +// Log.d(tag, "Delete Audiobook DIR ${audiobookDir.path} is dir ${audiobookDir.isDirectory}") +// var result = audiobookDir.deleteRecursively() +// + + // Does Not Work +// var audiobookDir = activity.applicationContext.getExternalFilesDir(Environment.DIRECTORY_AUDIOBOOKS) +// Log.d(tag, "AUDIOBOOK DIR ${audiobookDir?.path}") +// var dir = File(audiobookDir, "$audiobookId/") +// Log.d(tag, "DIR DIR ${dir.path}") +// var res = dir.delete() +// Log.d(tag, "DELETED $res") var contentResolver = activity.applicationContext.contentResolver contentResolver.delete(Uri.parse(url), null, null) @@ -268,7 +296,7 @@ class AudioDownloader : Plugin() { call.resolve() } - internal class DownloadProgressUpdater(private val manager: DownloadManager, private val downloadId: Long, private var receiver:(Long) -> Unit, private var doneReceiver:(Boolean) -> Unit) : Thread() { + internal class DownloadProgressUpdater(private val manager: DownloadManager, private val downloadId: Long, private var receiver: (Long) -> Unit, private var doneReceiver: (Boolean) -> Unit) : Thread() { private val query: DownloadManager.Query = DownloadManager.Query() private var totalBytes: Int = 0 private var TAG = "DownloadProgressUpdater" diff --git a/components/modals/DownloadsModal.vue b/components/modals/DownloadsModal.vue index ac75f19a..9a2617f5 100644 --- a/components/modals/DownloadsModal.vue +++ b/components/modals/DownloadsModal.vue @@ -11,7 +11,7 @@