diff --git a/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt b/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt index 5d1ec154..a3c3b12f 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt @@ -1,10 +1,13 @@ package com.audiobookshelf.app import android.Manifest -import android.app.DownloadManager -import android.content.* +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection import android.content.pm.PackageManager -import android.os.* +import android.os.Bundle +import android.os.IBinder import android.util.Log import androidx.core.app.ActivityCompat import com.anggrayudi.storage.SimpleStorage @@ -140,9 +143,4 @@ class MainActivity : BridgeActivity() { // Mandatory for Activity, but not for Fragment & ComponentActivity storageHelper.onRequestPermissionsResult(requestCode, permissions, grantResults) } - -// override fun onUserInteraction() { -// super.onUserInteraction() -// Log.d(tag, "USER INTERACTION") -// } } diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt index 917f6013..231cbdc3 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonIgnoreProperties import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo -import java.util.* data class ServerConnectionConfig( var id:String, @@ -13,7 +12,8 @@ data class ServerConnectionConfig( var address:String, var userId:String, var username:String, - var token:String + var token:String, + var customHeaders:Map? ) data class DeviceData( diff --git a/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDatabase.kt b/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDatabase.kt index 183070b4..0aa82ad7 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDatabase.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDatabase.kt @@ -25,6 +25,7 @@ class AbsDatabase : Plugin() { data class LocalMediaProgressPayload(val value:List) data class LocalLibraryItemsPayload(val value:List) data class LocalFoldersPayload(val value:List) + data class ServerConnConfigPayload(val id:String?, val index:Int, val name:String?, val userId:String, val username:String, val token:String, val address:String?, val customHeaders:Map?) override fun load() { mainActivity = (activity as MainActivity) @@ -37,7 +38,7 @@ class AbsDatabase : Plugin() { @PluginMethod fun getDeviceData(call:PluginCall) { GlobalScope.launch(Dispatchers.IO) { - var deviceData = DeviceManager.dbManager.getDeviceData() + val deviceData = DeviceManager.dbManager.getDeviceData() call.resolve(JSObject(jacksonMapper.writeValueAsString(deviceData))) } } @@ -45,17 +46,17 @@ class AbsDatabase : Plugin() { @PluginMethod fun getLocalFolders(call:PluginCall) { GlobalScope.launch(Dispatchers.IO) { - var folders = DeviceManager.dbManager.getAllLocalFolders() + val folders = DeviceManager.dbManager.getAllLocalFolders() call.resolve(JSObject(jacksonMapper.writeValueAsString(LocalFoldersPayload(folders)))) } } @PluginMethod fun getLocalFolder(call:PluginCall) { - var folderId = call.getString("folderId", "").toString() + val folderId = call.getString("folderId", "").toString() GlobalScope.launch(Dispatchers.IO) { DeviceManager.dbManager.getLocalFolder(folderId)?.let { - var folderObj = jacksonMapper.writeValueAsString(it) + val folderObj = jacksonMapper.writeValueAsString(it) call.resolve(JSObject(folderObj)) } ?: call.resolve() } @@ -63,10 +64,10 @@ class AbsDatabase : Plugin() { @PluginMethod fun getLocalLibraryItem(call:PluginCall) { - var id = call.getString("id", "").toString() + val id = call.getString("id", "").toString() GlobalScope.launch(Dispatchers.IO) { - var localLibraryItem = DeviceManager.dbManager.getLocalLibraryItem(id) + val localLibraryItem = DeviceManager.dbManager.getLocalLibraryItem(id) if (localLibraryItem == null) { call.resolve() } else { @@ -77,9 +78,9 @@ class AbsDatabase : Plugin() { @PluginMethod fun getLocalLibraryItemByLLId(call:PluginCall) { - var libraryItemId = call.getString("libraryItemId", "").toString() + val libraryItemId = call.getString("libraryItemId", "").toString() GlobalScope.launch(Dispatchers.IO) { - var localLibraryItem = DeviceManager.dbManager.getLocalLibraryItemByLLId(libraryItemId) + val localLibraryItem = DeviceManager.dbManager.getLocalLibraryItemByLLId(libraryItemId) if (localLibraryItem == null) { call.resolve() } else { @@ -90,40 +91,42 @@ class AbsDatabase : Plugin() { @PluginMethod fun getLocalLibraryItems(call:PluginCall) { - var mediaType = call.getString("mediaType", "").toString() + val mediaType = call.getString("mediaType", "").toString() GlobalScope.launch(Dispatchers.IO) { - var localLibraryItems = DeviceManager.dbManager.getLocalLibraryItems(mediaType) + val localLibraryItems = DeviceManager.dbManager.getLocalLibraryItems(mediaType) call.resolve(JSObject(jacksonMapper.writeValueAsString(LocalLibraryItemsPayload(localLibraryItems)))) } } @PluginMethod fun getLocalLibraryItemsInFolder(call:PluginCall) { - var folderId = call.getString("folderId", "").toString() + val folderId = call.getString("folderId", "").toString() GlobalScope.launch(Dispatchers.IO) { - var localLibraryItems = DeviceManager.dbManager.getLocalLibraryItemsInFolder(folderId) + val localLibraryItems = DeviceManager.dbManager.getLocalLibraryItemsInFolder(folderId) call.resolve(JSObject(jacksonMapper.writeValueAsString(LocalLibraryItemsPayload(localLibraryItems)))) } } @PluginMethod fun setCurrentServerConnectionConfig(call:PluginCall) { - var serverConnectionConfigId = call.getString("id", "").toString() - var serverConnectionConfig = DeviceManager.deviceData.serverConnectionConfigs.find { it.id == serverConnectionConfigId } + Log.d(tag, "setCurrentServerConnectionConfig ${call.data}") + val serverConfigPayload = jacksonMapper.readValue(call.data.toString()) + Log.d(tag, "[TEST] Check custom headers ${serverConfigPayload.customHeaders}") + var serverConnectionConfig = DeviceManager.deviceData.serverConnectionConfigs.find { it.id == serverConfigPayload.id } - var userId = call.getString("userId", "").toString() - var username = call.getString("username", "").toString() - var token = call.getString("token", "").toString() + val userId = serverConfigPayload.userId + val username = serverConfigPayload.username + val token = serverConfigPayload.token GlobalScope.launch(Dispatchers.IO) { if (serverConnectionConfig == null) { // New Server Connection - var serverAddress = call.getString("address", "").toString() + val serverAddress = call.getString("address", "").toString() // Create new server connection config - var sscId = DeviceManager.getBase64Id("$serverAddress@$username") - var sscIndex = DeviceManager.deviceData.serverConnectionConfigs.size - serverConnectionConfig = ServerConnectionConfig(sscId, sscIndex, "$serverAddress ($username)", serverAddress, userId, username, token) + val sscId = DeviceManager.getBase64Id("$serverAddress@$username") + val sscIndex = DeviceManager.deviceData.serverConnectionConfigs.size + serverConnectionConfig = ServerConnectionConfig(sscId, sscIndex, "$serverAddress ($username)", serverAddress, userId, username, token, serverConfigPayload.customHeaders) // Add and save DeviceManager.deviceData.serverConnectionConfigs.add(serverConnectionConfig!!) @@ -140,8 +143,8 @@ class AbsDatabase : Plugin() { } // Set last connection config - if (DeviceManager.deviceData.lastServerConnectionConfigId != serverConnectionConfigId) { - DeviceManager.deviceData.lastServerConnectionConfigId = serverConnectionConfigId + if (DeviceManager.deviceData.lastServerConnectionConfigId != serverConfigPayload.id) { + DeviceManager.deviceData.lastServerConnectionConfigId = serverConfigPayload.id shouldSave = true } @@ -156,7 +159,7 @@ class AbsDatabase : Plugin() { @PluginMethod fun removeServerConnectionConfig(call:PluginCall) { GlobalScope.launch(Dispatchers.IO) { - var serverConnectionConfigId = call.getString("serverConnectionConfigId", "").toString() + val serverConnectionConfigId = call.getString("serverConnectionConfigId", "").toString() DeviceManager.deviceData.serverConnectionConfigs = DeviceManager.deviceData.serverConnectionConfigs.filter { it.id != serverConnectionConfigId } as MutableList if (DeviceManager.deviceData.lastServerConnectionConfigId == serverConnectionConfigId) { DeviceManager.deviceData.lastServerConnectionConfigId = null @@ -182,7 +185,7 @@ class AbsDatabase : Plugin() { @PluginMethod fun getAllLocalMediaProgress(call:PluginCall) { GlobalScope.launch(Dispatchers.IO) { - var localMediaProgress = DeviceManager.dbManager.getAllLocalMediaProgress() + val localMediaProgress = DeviceManager.dbManager.getAllLocalMediaProgress() call.resolve(JSObject(jacksonMapper.writeValueAsString(LocalMediaProgressPayload(localMediaProgress)))) } } @@ -331,13 +334,13 @@ class AbsDatabase : Plugin() { // Send update to server media progress is linked to a server and user is logged into that server localMediaProgress.serverConnectionConfigId?.let { configId -> if (DeviceManager.serverConnectionConfigId == configId) { - var libraryItemId = localMediaProgress.libraryItemId ?: "" - var episodeId = localMediaProgress.episodeId ?: "" - var updatePayload = JSObject() + val libraryItemId = localMediaProgress.libraryItemId ?: "" + val episodeId = localMediaProgress.episodeId ?: "" + val updatePayload = JSObject() updatePayload.put("isFinished", isFinished) apiHandler.updateMediaProgress(libraryItemId,episodeId,updatePayload) { Log.d(tag, "updateLocalMediaProgressFinished: Updated media progress isFinished on server") - var jsobj = JSObject() + val jsobj = JSObject() jsobj.put("local", true) jsobj.put("server", true) jsobj.put("localMediaProgress", JSObject(lmpstring)) @@ -346,7 +349,7 @@ class AbsDatabase : Plugin() { } } if (localMediaProgress.serverConnectionConfigId == null || DeviceManager.serverConnectionConfigId != localMediaProgress.serverConnectionConfigId) { - var jsobj = JSObject() + val jsobj = JSObject() jsobj.put("local", true) jsobj.put("server", false) jsobj.put("localMediaProgress", JSObject(lmpstring)) @@ -356,25 +359,25 @@ class AbsDatabase : Plugin() { @PluginMethod fun updateLocalTrackOrder(call:PluginCall) { - var localLibraryItemId = call.getString("localLibraryItemId", "") ?: "" - var localLibraryItem = DeviceManager.dbManager.getLocalLibraryItem(localLibraryItemId) + val localLibraryItemId = call.getString("localLibraryItemId", "") ?: "" + val localLibraryItem = DeviceManager.dbManager.getLocalLibraryItem(localLibraryItemId) if (localLibraryItem == null) { call.resolve() return } - var audioTracks = localLibraryItem.media.getAudioTracks() as MutableList + val audioTracks = localLibraryItem.media.getAudioTracks() as MutableList - var tracks:JSArray = call.getArray("tracks") ?: JSArray() + val tracks:JSArray = call.getArray("tracks") ?: JSArray() Log.d(tag, "updateLocalTrackOrder $tracks") var index = 1 var hasUpdates = false for (i in 0 until tracks.length()) { - var track = tracks.getJSONObject(i) - var localFileId = track.getString("localFileId") + val track = tracks.getJSONObject(i) + val localFileId = track.getString("localFileId") - var existingTrack = audioTracks.find{ it.localFileId == localFileId } + val existingTrack = audioTracks.find{ it.localFileId == localFileId } if (existingTrack != null) { Log.d(tag, "Found existing track ${existingTrack.localFileId} that has index ${existingTrack.index} should be index $index") if (existingTrack.index != index) hasUpdates = true diff --git a/components/connection/ServerConnectForm.vue b/components/connection/ServerConnectForm.vue index 48dba0d8..f0e2f40e 100644 --- a/components/connection/ServerConnectForm.vue +++ b/components/connection/ServerConnectForm.vue @@ -1,6 +1,6 @@