From 937c3db1f5b0d63cb125d385b73f1fe774fc7591 Mon Sep 17 00:00:00 2001 From: sora Date: Thu, 2 Jul 2026 02:06:08 +0200 Subject: [PATCH] Update app/src/main/java/net/helcel/cowspent/persistence/CowspentSQLiteOpenHelper.kt --- .../persistence/CowspentSQLiteOpenHelper.kt | 166 ++++-------------- 1 file changed, 33 insertions(+), 133 deletions(-) diff --git a/app/src/main/java/net/helcel/cowspent/persistence/CowspentSQLiteOpenHelper.kt b/app/src/main/java/net/helcel/cowspent/persistence/CowspentSQLiteOpenHelper.kt index 90bdca0..e80da6a 100644 --- a/app/src/main/java/net/helcel/cowspent/persistence/CowspentSQLiteOpenHelper.kt +++ b/app/src/main/java/net/helcel/cowspent/persistence/CowspentSQLiteOpenHelper.kt @@ -125,7 +125,8 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : "$key_projectid INTEGER, " + "$key_name TEXT, " + "$key_icon TEXT, " + - "$key_color TEXT)" + "$key_color TEXT, " + + "$key_state INTEGER DEFAULT 0)" ) } @@ -137,7 +138,8 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : "$key_projectid INTEGER, " + "$key_name TEXT, " + "$key_icon TEXT, " + - "$key_color TEXT)" + "$key_color TEXT, " + + "$key_state INTEGER DEFAULT 0)" ) } @@ -155,120 +157,7 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : @SuppressLint("Range") override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { - if (oldVersion < 2) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_lastPayerId INTEGER DEFAULT 0") - } - if (oldVersion < 3) { - db.execSQL("ALTER TABLE $table_bills ADD COLUMN $key_repeat TEXT") - } - if (oldVersion < 4) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_type TEXT") - val projects = getProjectsCustom("", arrayOf(), default_order, db) - for (project in projects) { - val url = project.serverUrl - project.type = if (url == null) ProjectType.LOCAL else ProjectType.COSPEND - updateProject( - project.id, project.name, project.email, - project.password, project.lastPayerId, project.type, - project.lastSyncedTimestamp, project.currencyName, - project.isDeletionDisabled, project.myAccessLevel, project.bearerToken, - project.archivedTs, db - ) - } - } - if (oldVersion < 5) { - createTableAccountProjects(db) - createIndex(db, table_account_projects) - } - if (oldVersion < 6) { - db.execSQL("ALTER TABLE $table_bills ADD COLUMN $key_payment_mode TEXT DEFAULT \"n\"") - db.execSQL("ALTER TABLE $table_bills ADD COLUMN $key_category_id INTEGER DEFAULT 0") - } - if (oldVersion < 7) { - db.execSQL("ALTER TABLE $table_members ADD COLUMN $key_r INTEGER DEFAULT NULL") - db.execSQL("ALTER TABLE $table_members ADD COLUMN $key_g INTEGER DEFAULT NULL") - db.execSQL("ALTER TABLE $table_members ADD COLUMN $key_b INTEGER DEFAULT NULL") - } - if (oldVersion < 8) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_lastSyncTimestamp INTEGER DEFAULT 0") - } - if (oldVersion < 9) { - createTableCategories(db) - createIndex(db, table_categories) - } - if (oldVersion < 10) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_currencyName TEXT") - createTableCurrencies(db) - createIndex(db, table_currencies) - } - if (oldVersion < 11) { - db.execSQL("ALTER TABLE $table_bills ADD COLUMN $key_timestamp INTEGER") - val idToTs: MutableMap = HashMap() - val sdfDate = SimpleDateFormat("yyyy-MM-dd", Locale.ROOT) - val cursor = db.query(table_bills, arrayOf(key_id, "DATE"), "", arrayOf(), null, null, null) - val dateNow = Date() - while (cursor.moveToNext()) { - val id = cursor.getLong(cursor.getColumnIndex(key_id)) - val dateStr = cursor.getString(cursor.getColumnIndex("DATE")) - val date = try { - sdfDate.parse(dateStr) - } catch (_: Exception) { - dateNow - } - val timestamp = (date?.time ?: System.currentTimeMillis()) / 1000 - idToTs[id] = timestamp - } - cursor.close() - for (billId in idToTs.keys) { - val timestamp = idToTs[billId]!! - val values = ContentValues() - values.put(key_timestamp, timestamp) - db.update(table_bills, values, "$key_id = ?", arrayOf(billId.toString())) - } - } - if (oldVersion < 12) { - db.execSQL("ALTER TABLE $table_members ADD COLUMN $key_nc_userid TEXT DEFAULT NULL") - db.execSQL("ALTER TABLE $table_members ADD COLUMN $key_avatar TEXT DEFAULT NULL") - } - if (oldVersion < 13) { - db.execSQL("ALTER TABLE $table_bills ADD COLUMN $key_comment TEXT DEFAULT \"\"") - } - if (oldVersion < 14) { - val projects = getProjectsCustom("", arrayOf(), default_order, db) - for (project in projects) { - updateProject( - project.id, project.name, project.email, - project.password, project.lastPayerId, project.type, - 0L, project.currencyName, project.isDeletionDisabled, project.myAccessLevel, project.bearerToken, - project.archivedTs, db - ) - } - } - if (oldVersion < 15) { - db.execSQL("ALTER TABLE $table_bills ADD COLUMN $key_payment_mode_id INTEGER DEFAULT 0") - for (key in DBBill.oldPmIdToNew.keys) { - val values = ContentValues() - values.put(key_payment_mode_id, DBBill.oldPmIdToNew[key]) - db.update(table_bills, values, "$key_payment_mode = ?", arrayOf(key)) - } - createTablePaymentModes(db) - createIndex(db, table_payment_modes) - } - if (oldVersion < 16) { - db.execSQL("ALTER TABLE $table_currencies ADD COLUMN $key_state INTEGER DEFAULT ${DBBill.STATE_OK}") - } - if (oldVersion < 17) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_deletionDisabled INTEGER") - } - if (oldVersion < 18) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_myAccessLevel INTEGER DEFAULT ${DBProject.ACCESS_LEVEL_UNKNOWN}") - } - if (oldVersion < 19) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_bearer_token TEXT") - } - if (oldVersion < 20) { - db.execSQL("ALTER TABLE $table_projects ADD COLUMN $key_archived INTEGER DEFAULT 0") - db.execSQL("ALTER TABLE $table_account_projects ADD COLUMN $key_archived INTEGER DEFAULT 0") + if (oldVersion < 1) { } } @@ -372,6 +261,7 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : values.put(key_name, paymentMode.name) values.put(key_icon, paymentMode.icon) values.put(key_color, paymentMode.color) + values.put(key_state, paymentMode.state) return db.insert(table_payment_modes, null, values) } @@ -412,16 +302,18 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : cursor.getLong(cursor.getColumnIndex(key_projectid)), cursor.getString(cursor.getColumnIndex(key_name)), cursor.getString(cursor.getColumnIndex(key_icon)), - cursor.getString(cursor.getColumnIndex(key_color)) + cursor.getString(cursor.getColumnIndex(key_color)), + cursor.getInt(cursor.getColumnIndex(key_state)) ) } - fun updatePaymentMode(id: Long, name: String?, icon: String?, color: String?) { + fun updatePaymentMode(id: Long, name: String?, icon: String?, color: String?, state: Int? = null) { val db = writableDatabase val values = ContentValues() if (name != null) values.put(key_name, name) if (icon != null) values.put(key_icon, icon) if (color != null) values.put(key_color, color) + if (state != null) values.put(key_state, state) if (values.size() > 0) { db.update(table_payment_modes, values, "$key_id = ?", arrayOf(id.toString())) } @@ -440,6 +332,7 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : values.put(key_name, category.name) values.put(key_icon, category.icon) values.put(key_color, category.color) + values.put(key_state, category.state) return db.insert(table_categories, null, values) } @@ -452,6 +345,11 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : return if (categories.isEmpty()) null else categories[0] } + fun getCategory(id: Long): DBCategory? { + val categories = getCategoriesCustom("$key_id = ?", arrayOf(id.toString()), null) + return if (categories.isEmpty()) null else categories[0] + } + fun getCategories(projectId: Long): List { return getCategoriesCustom("$key_projectid = ?", arrayOf(projectId.toString()), null) } @@ -480,16 +378,18 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : cursor.getLong(cursor.getColumnIndex(key_projectid)), cursor.getString(cursor.getColumnIndex(key_name)), cursor.getString(cursor.getColumnIndex(key_icon)), - cursor.getString(cursor.getColumnIndex(key_color)) + cursor.getString(cursor.getColumnIndex(key_color)), + cursor.getInt(cursor.getColumnIndex(key_state)) ) } - fun updateCategory(id: Long, name: String?, icon: String?, color: String?) { + fun updateCategory(id: Long, name: String?, icon: String?, color: String?, state: Int? = null) { val db = writableDatabase val values = ContentValues() if (name != null) values.put(key_name, name) if (icon != null) values.put(key_icon, icon) if (color != null) values.put(key_color, color) + if (state != null) values.put(key_state, state) if (values.size() > 0) { db.update(table_categories, values, "$key_id = ?", arrayOf(id.toString())) } @@ -893,8 +793,8 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : values.put(key_state, b.state) values.put(key_repeat, b.repeat) values.put(key_payment_mode, b.paymentMode) - values.put(key_payment_mode_id, b.paymentModeRemoteId) - values.put(key_category_id, b.categoryRemoteId) + values.put(key_payment_mode_id, b.paymentModeId) + values.put(key_category_id, b.categoryId) values.put(key_comment, b.comment) val billId = db.insert(table_bills, null, values) for (bo in b.billOwers) { @@ -915,8 +815,8 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : newAmount: Double?, newTimestamp: Long?, newWhat: String?, newState: Int?, newRepeat: String?, - newPaymentMode: String?, newPaymentModeRemoteId: Int?, - newCategoryId: Int?, newComment: String? + newPaymentMode: String?, newPaymentModeId: Long?, + newCategoryId: Long?, newComment: String? ) { val db = writableDatabase val values = ContentValues() @@ -928,7 +828,7 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : if (newState != null) values.put(key_state, newState) if (newRepeat != null) values.put(key_repeat, newRepeat) if (newPaymentMode != null) values.put(key_payment_mode, newPaymentMode) - if (newPaymentModeRemoteId != null) values.put(key_payment_mode_id, newPaymentModeRemoteId) + if (newPaymentModeId != null) values.put(key_payment_mode_id, newPaymentModeId) if (newCategoryId != null) values.put(key_category_id, newCategoryId) if (newComment != null) values.put(key_comment, newComment) if (values.size() > 0) { @@ -940,14 +840,14 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : bill: DBBill, newPayerId: Long, newAmount: Double, newTimestamp: Long?, newWhat: String?, newOwersIds: List?, newRepeat: String?, - newPaymentMode: String?, newPaymentModeRemoteId: Int?, - newCategoryId: Int?, + newPaymentMode: String?, newPaymentModeId: Long?, + newCategoryId: Long?, newComment: String? ) { val newState = if (bill.state == DBBill.STATE_ADDED) DBBill.STATE_ADDED else DBBill.STATE_EDITED updateBill( bill.id, null, newPayerId, newAmount, newTimestamp, newWhat, newState, - newRepeat, newPaymentMode, newPaymentModeRemoteId, newCategoryId, newComment + newRepeat, newPaymentMode, newPaymentModeId, newCategoryId, newComment ) val dbBillOwers = getBillowersOfBill(bill.id) val dbBillOwersByMemberId: MutableMap = HashMap() @@ -1107,9 +1007,9 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : cursor.getInt(cursor.getColumnIndex(key_state)), cursor.getString(cursor.getColumnIndex(key_repeat)), cursor.getString(cursor.getColumnIndex(key_payment_mode)), - cursor.getInt(cursor.getColumnIndex(key_category_id)), + cursor.getLong(cursor.getColumnIndex(key_category_id)), cursor.getString(cursor.getColumnIndex(key_comment)), - cursor.getInt(cursor.getColumnIndex(key_payment_mode_id)) + cursor.getLong(cursor.getColumnIndex(key_payment_mode_id)) ) } @@ -1165,7 +1065,7 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : @Suppress("ConstPropertyName") companion object { private val TAG = CowspentSQLiteOpenHelper::class.java.simpleName - private const val database_version = 20 + private const val database_version = 1 private const val database_name = "COWSPENT" private const val table_members = "MEMBERS" const val key_id = "ID" @@ -1237,10 +1137,10 @@ class CowspentSQLiteOpenHelper private constructor(val context: Context) : key_id, key_remoteId, key_password, key_name, key_ncUrl, key_archived ) private val columnsCategories = arrayOf( - key_id, key_remoteId, key_projectid, key_name, key_icon, key_color + key_id, key_remoteId, key_projectid, key_name, key_icon, key_color, key_state ) private val columnsPaymentModes = arrayOf( - key_id, key_remoteId, key_projectid, key_name, key_icon, key_color + key_id, key_remoteId, key_projectid, key_name, key_icon, key_color, key_state ) private val columnsCurrencies = arrayOf( key_id, key_remoteId, key_projectid, key_name, key_exchangeRate, key_state