AppDatabase.kt (3974B) - raw


      1 package me.rhunk.snapenhance.storage
      2 
      3 import android.database.sqlite.SQLiteDatabase
      4 import me.rhunk.snapenhance.RemoteSideContext
      5 import me.rhunk.snapenhance.common.data.MessagingFriendInfo
      6 import me.rhunk.snapenhance.common.data.MessagingGroupInfo
      7 import me.rhunk.snapenhance.common.util.SQLiteDatabaseHelper
      8 import java.util.concurrent.ExecutorService
      9 import java.util.concurrent.Executors
     10 
     11 
     12 class AppDatabase(
     13     val context: RemoteSideContext,
     14 ) {
     15     val executor: ExecutorService = Executors.newSingleThreadExecutor()
     16     lateinit var database: SQLiteDatabase
     17 
     18     var receiveMessagingDataCallback: (friends: List<MessagingFriendInfo>, groups: List<MessagingGroupInfo>) -> Unit = { _, _ -> }
     19 
     20     fun executeAsync(block: () -> Unit) {
     21         executor.execute {
     22             runCatching {
     23                 block()
     24             }.onFailure {
     25                 context.log.error("Failed to execute async block", it)
     26             }
     27         }
     28     }
     29 
     30     fun init() {
     31         database = context.androidContext.openOrCreateDatabase("main.db", 0, null)
     32         SQLiteDatabaseHelper.createTablesFromSchema(database, mapOf(
     33             "friends" to listOf(
     34                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     35                 "userId CHAR(36) UNIQUE",
     36                 "dmConversationId VARCHAR(36)",
     37                 "displayName VARCHAR",
     38                 "mutableUsername VARCHAR",
     39                 "bitmojiId VARCHAR",
     40                 "selfieId VARCHAR"
     41             ),
     42             "groups" to listOf(
     43                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     44                 "conversationId CHAR(36) UNIQUE",
     45                 "name VARCHAR",
     46                 "participantsCount INTEGER"
     47             ),
     48             "rules" to listOf(
     49                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     50                 "type VARCHAR",
     51                 "targetUuid VARCHAR"
     52             ),
     53             "streaks" to listOf(
     54                 "id VARCHAR PRIMARY KEY",
     55                 "notify BOOLEAN",
     56                 "expirationTimestamp BIGINT",
     57                 "length INTEGER"
     58             ),
     59             "enabled_scripts" to listOf(
     60                 "name VARCHAR PRIMARY KEY",
     61             ),
     62             "tracker_rules" to listOf(
     63                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     64                 "enabled BOOLEAN DEFAULT 1",
     65                 "name VARCHAR",
     66             ),
     67             "tracker_scopes" to listOf(
     68                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     69                 "rule_id INTEGER",
     70                 "scope_type VARCHAR",
     71                 "scope_id CHAR(36)"
     72             ),
     73             "tracker_rules_events" to listOf(
     74                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     75                 "rule_id INTEGER",
     76                 "flags INTEGER DEFAULT 1",
     77                 "event_type VARCHAR",
     78                 "params TEXT",
     79                 "actions TEXT"
     80             ),
     81             "friend_scores" to listOf(
     82                 "userId CHAR(36) PRIMARY KEY",
     83                 "score BIGINT"
     84             ),
     85             "quick_tiles" to listOf(
     86                 "key VARCHAR PRIMARY KEY",
     87                 "position INTEGER",
     88             ),
     89             "location_coordinates" to listOf(
     90                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     91                 "name VARCHAR",
     92                 "latitude DOUBLE",
     93                 "longitude DOUBLE",
     94                 "radius DOUBLE",
     95             ),
     96             "themes" to listOf(
     97                 "id INTEGER PRIMARY KEY AUTOINCREMENT",
     98                 "enabled BOOLEAN DEFAULT 0",
     99                 "name VARCHAR",
    100                 "description TEXT",
    101                 "version VARCHAR",
    102                 "author VARCHAR",
    103                 "updateUrl VARCHAR",
    104                 "content TEXT",
    105             ),
    106             "repositories" to listOf(
    107                 "url VARCHAR PRIMARY KEY",
    108             ),
    109             "notes" to listOf(
    110                 "id CHAR(36) PRIMARY KEY",
    111                 "content TEXT",
    112             ),
    113         ))
    114     }
    115 }