diff --git a/android/app/build.gradle b/android/app/build.gradle index 39478604..c4fd591e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -38,15 +38,12 @@ repositories { } dependencies { - implementation "com.anggrayudi:storage:0.13.0" implementation fileTree(include: ['*.jar'], dir: 'libs') implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" implementation project(':capacitor-android') implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' - implementation 'com.squareup.okhttp3:okhttp:4.9.2' - testImplementation "junit:junit:$junitVersion" androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" @@ -61,6 +58,7 @@ dependencies { implementation "androidx.media:media:$androidx_media_version" + // Exo Player if (findProject(':exoplayer-library-core') != null) { implementation project(':exoplayer-library-core') implementation project(':exoplayer-library-ui') @@ -75,9 +73,18 @@ dependencies { implementation "com.google.android.exoplayer:exoplayer-hls:$exoplayer_version" } - + // Glide for images implementation "com.github.bumptech.glide:glide:$glide_version" kapt "com.github.bumptech.glide:compiler:$glide_version" + + // Paper NoSQL Db + implementation 'io.github.pilgr:paperdb:2.7.2' + + // Simple Storage + implementation "com.anggrayudi:storage:0.13.0" + + // OK HTTP + implementation 'com.squareup.okhttp3:okhttp:4.9.2' } apply from: 'capacitor.build.gradle' 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 dce50c76..95dd3868 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt @@ -6,7 +6,9 @@ import android.os.* import android.util.Log import com.anggrayudi.storage.SimpleStorage import com.anggrayudi.storage.SimpleStorageHelper +import com.audiobookshelf.app.data.DbManager import com.getcapacitor.BridgeActivity +import io.paperdb.Paper class MainActivity : BridgeActivity() { @@ -44,11 +46,14 @@ class MainActivity : BridgeActivity() { registerPlugin(MyNativeAudio::class.java) registerPlugin(AudioDownloader::class.java) registerPlugin(StorageManager::class.java) + registerPlugin(DbManager::class.java) var filter = IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE).apply { addAction(DownloadManager.ACTION_NOTIFICATION_CLICKED) } registerReceiver(broadcastReceiver, filter) + + Paper.init(applicationContext) } override fun onDestroy() { diff --git a/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt b/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt index b78abe29..4b83dc56 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt @@ -23,6 +23,7 @@ import androidx.documentfile.provider.DocumentFile import androidx.media.MediaBrowserServiceCompat import androidx.media.utils.MediaConstants import com.anggrayudi.storage.file.isExternalStorageDocument +import com.audiobookshelf.app.data.DbManager import com.getcapacitor.Bridge import com.getcapacitor.JSObject import com.google.android.exoplayer2.* @@ -39,6 +40,7 @@ import com.google.android.gms.cast.* import com.google.android.gms.cast.framework.* import kotlinx.coroutines.* import okhttp3.OkHttpClient +import org.json.JSONObject import java.util.* import kotlin.concurrent.schedule diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/DbManager.kt b/android/app/src/main/java/com/audiobookshelf/app/data/DbManager.kt new file mode 100644 index 00000000..71a87c5a --- /dev/null +++ b/android/app/src/main/java/com/audiobookshelf/app/data/DbManager.kt @@ -0,0 +1,54 @@ +package com.audiobookshelf.app.data + +import android.util.Log +import com.getcapacitor.JSObject +import com.getcapacitor.Plugin +import com.getcapacitor.PluginCall +import com.getcapacitor.PluginMethod +import com.getcapacitor.annotation.CapacitorPlugin +import io.paperdb.Paper +import org.json.JSONObject + +@CapacitorPlugin(name = "DbManager") +class DbManager : Plugin() { + val tag = "DbManager" + + fun saveObject(db:String, key:String, value:JSONObject) { + Log.d(tag, "Saving Object $key ${value.toString()}") + Paper.book(db).write(key, value) + } + + fun loadObject(db:String, key:String):JSONObject? { + var json: JSONObject? = Paper.book(db).read(key) + Log.d(tag, "Loaded Object $key $json") + return json + } + + @PluginMethod + fun saveFromWebview(call: PluginCall) { + var db = call.getString("db", "").toString() + var key = call.getString("key", "").toString() + var value = call.getObject("value") + if (db == "" || key == "" || value == null) { + Log.d(tag, "saveFromWebview Invalid key/value") + } else { + var json = value as JSONObject + saveObject(db, key, json) + } + call.resolve() + } + + @PluginMethod + fun loadFromWebview(call:PluginCall) { + var db = call.getString("db", "").toString() + var key = call.getString("key", "").toString() + if (db == "" || key == "") { + Log.d(tag, "loadFromWebview Invalid Key") + call.resolve() + return + } + var json = loadObject(db, key) + var jsobj = JSObject.fromJSONObject(json) + call.resolve(jsobj) + } +} diff --git a/nuxt.config.js b/nuxt.config.js index a3fc6480..32cb1f7a 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -37,6 +37,7 @@ export default { plugins: [ '@/plugins/server.js', '@/plugins/sqlStore.js', + '@/plugins/db.js', '@/plugins/localStore.js', '@/plugins/init.client.js', '@/plugins/axios.js', diff --git a/plugins/db.js b/plugins/db.js new file mode 100644 index 00000000..cc7c0c30 --- /dev/null +++ b/plugins/db.js @@ -0,0 +1,29 @@ +import { registerPlugin } from '@capacitor/core'; + +const DbManager = registerPlugin('DbManager'); + +class DbService { + constructor() { } + + save(db, key, value) { + return DbManager.saveFromWebview({ db, key, value }).then(() => { + console.log('Saved data', db, key, JSON.stringify(value)) + }).catch((error) => { + console.error('Failed to save data', error) + }) + } + + load(db, key) { + return DbManager.loadFromWebview({ db, key }).then((data) => { + console.log('Loaded data', db, key, JSON.stringify(data)) + return data + }).catch((error) => { + console.error('Failed to load', error) + return null + }) + } +} + +export default ({ app, store }, inject) => { + inject('db', new DbService()) +} \ No newline at end of file