<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