<lambda>null1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.storage
3
4 import androidx.annotation.WorkerThread
5 import com.raizlabs.android.dbflow.annotation.Database
6 import com.raizlabs.android.dbflow.config.FlowManager
7 import com.raizlabs.android.dbflow.sql.language.SQLite
8 import com.raizlabs.android.dbflow.structure.database.transaction.QueryTransaction
9 import expo.modules.manifests.core.Manifest
10 import host.exp.exponent.analytics.EXL
11 import org.json.JSONException
12 import org.json.JSONObject
13
14 @Database(version = ExponentDB.VERSION)
15 object ExponentDB {
16 private val TAG = ExponentDB::class.java.simpleName
17
18 const val NAME = "ExponentKernel"
19 const val VERSION = 1
20
21 @JvmStatic fun saveExperience(exponentDBObject: ExponentDBObject) {
22 try {
23 val experience = ExperienceDBObject(
24 scopeKey = exponentDBObject.manifest.getScopeKey(),
25 manifestUrl = exponentDBObject.manifestUrl,
26 bundleUrl = exponentDBObject.bundleUrl,
27 manifest = exponentDBObject.manifest.toString()
28 )
29 FlowManager.getDatabase(ExponentDB::class.java).transactionManager.saveQueue.add(experience)
30 } catch (e: JSONException) {
31 EXL.e(TAG, e.message)
32 }
33 }
34
35 @JvmStatic fun experienceScopeKeyToExperience(
36 experienceScopeKeyString: String,
37 listener: ExperienceResultListener
38 ) {
39 SQLite.select()
40 .from(ExperienceDBObject::class.java)
41 .where(ExperienceDBObject_Table.id.`is`(experienceScopeKeyString))
42 .async()
43 .querySingleResultCallback { _: QueryTransaction<*>?, experienceDBObject: ExperienceDBObject? ->
44 if (experienceDBObject == null) {
45 listener.onFailure()
46 } else {
47 try {
48 listener.onSuccess(
49 ExponentDBObject(
50 experienceDBObject.manifestUrl!!,
51 Manifest.fromManifestJson(JSONObject(experienceDBObject.manifest!!)),
52 experienceDBObject.bundleUrl!!
53 )
54 )
55 } catch (e: JSONException) {
56 listener.onFailure()
57 }
58 }
59 }.execute()
60 }
61
62 @WorkerThread
63 @Throws(JSONException::class)
64 @JvmStatic fun experienceScopeKeyToExperienceSync(experienceScopeKeyString: String): ExponentDBObject? {
65 val experienceDBObject = SQLite.select()
66 .from(ExperienceDBObject::class.java)
67 .where(ExperienceDBObject_Table.id.`is`(experienceScopeKeyString))
68 .querySingle() ?: return null
69 return ExponentDBObject(
70 experienceDBObject.manifestUrl!!,
71 Manifest.fromManifestJson(JSONObject(experienceDBObject.manifest!!)),
72 experienceDBObject.bundleUrl!!
73 )
74 }
75
76 interface ExperienceResultListener {
77 fun onSuccess(exponentDBObject: ExponentDBObject)
78 fun onFailure()
79 }
80 }
81