package org.thoughtcrime.securesms.loki import android.content.ContentValues import net.sqlcipher.Cursor import net.sqlcipher.database.SQLiteDatabase import org.whispersystems.signalservice.internal.util.Base64 fun SQLiteDatabase.get(table: String, query: String, arguments: Array, get: (Cursor) -> T): T? { var cursor: Cursor? = null try { cursor = query(table, null, query, arguments, null, null, null) if (cursor != null && cursor.moveToFirst()) { return get(cursor) } } catch (e: Exception) { // Do nothing } finally { cursor?.close() } return null } fun SQLiteDatabase.getAll(table: String, query: String, arguments: Array, get: (Cursor) -> T): List { var list = mutableListOf() var cursor: Cursor? = null try { cursor = query(table, null, query, arguments, null, null, null) while (cursor != null && cursor.moveToNext()) { list.add(get(cursor)) } return list } catch (e: Exception) { // Do nothing } finally { cursor?.close() } return listOf() } fun SQLiteDatabase.insertOrUpdate(table: String, values: ContentValues, query: String, arguments: Array) { val id = insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_IGNORE).toInt() if (id == -1) { update(table, values, query, arguments) } } fun Cursor.getInt(columnName: String): Int { return getInt(getColumnIndexOrThrow(columnName)) } fun Cursor.getString(columnName: String): String { return getString(getColumnIndexOrThrow(columnName)) } fun Cursor.getBase64EncodedData(columnName: String): ByteArray { return Base64.decode(getString(columnName)) }