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