Location.kt (2564B) - raw


      1 package me.rhunk.snapenhance.storage
      2 
      3 import android.content.ContentValues
      4 import kotlinx.coroutines.asCoroutineDispatcher
      5 import kotlinx.coroutines.runBlocking
      6 import me.rhunk.snapenhance.bridge.location.LocationCoordinates
      7 import me.rhunk.snapenhance.common.util.ktx.getDoubleOrNull
      8 import me.rhunk.snapenhance.common.util.ktx.getInteger
      9 import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
     10 
     11 
     12 fun AppDatabase.getLocationCoordinates(): List<LocationCoordinates> {
     13     return runBlocking(executor.asCoroutineDispatcher()) {
     14         database.rawQuery("SELECT * FROM location_coordinates ORDER BY id DESC", null).use { cursor ->
     15             val locationCoordinates = mutableListOf<LocationCoordinates>()
     16             while (cursor.moveToNext()) {
     17                 locationCoordinates.add(
     18                     LocationCoordinates().run {
     19                         id = cursor.getInteger("id")
     20                         name = cursor.getStringOrNull("name") ?: return@run null
     21                         latitude = cursor.getDoubleOrNull("latitude") ?: return@run null
     22                         longitude = cursor.getDoubleOrNull("longitude") ?: return@run null
     23                         radius = cursor.getDoubleOrNull("radius") ?: return@run null
     24                         this
     25                     } ?: continue
     26                 )
     27             }
     28             locationCoordinates
     29         }
     30     }
     31 }
     32 
     33 fun AppDatabase.addOrUpdateLocationCoordinate(id: Int?, locationCoordinates: LocationCoordinates): Int {
     34     return runBlocking(executor.asCoroutineDispatcher()) {
     35         if (id == null) {
     36             val resultId = database.insert("location_coordinates", null, ContentValues().apply {
     37                 put("name", locationCoordinates.name)
     38                 put("latitude", locationCoordinates.latitude)
     39                 put("longitude", locationCoordinates.longitude)
     40                 put("radius", locationCoordinates.radius)
     41             })
     42             resultId.toInt()
     43         } else {
     44             database.update("location_coordinates", ContentValues().apply {
     45                 put("name", locationCoordinates.name)
     46                 put("latitude", locationCoordinates.latitude)
     47                 put("longitude", locationCoordinates.longitude)
     48                 put("radius", locationCoordinates.radius)
     49             }, "id = ?", arrayOf(id.toString()))
     50             id
     51         }
     52     }
     53 }
     54 
     55 fun AppDatabase.removeLocationCoordinate(id: Int) {
     56     runBlocking(executor.asCoroutineDispatcher()) {
     57         database.delete("location_coordinates", "id = ?", arrayOf(id.toString()))
     58     }
     59 }
     60 
     61