diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt index 5382eb311..0aa3acc3a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt @@ -21,11 +21,11 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.core.app.AlarmManagerCompat import androidx.core.app.NotificationCompat -import com.simplemobiletools.calendar.pro.databases.EventsDatabase import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.activities.EventActivity import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.activities.SnoozeReminderActivity +import com.simplemobiletools.calendar.pro.databases.EventsDatabase import com.simplemobiletools.calendar.pro.helpers.* import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.interfaces.EventRepetitionExceptionsDao @@ -52,7 +52,7 @@ val Context.eventsDB: EventsDao get() = EventsDatabase.getInstance(applicationCo val Context.eventTypesDB: EventTypesDao get() = EventsDatabase.getInstance(applicationContext).EventTypesDao() -val Context.eventRepetitionssDB: EventRepetitionsDao get() = EventsDatabase.getInstance(applicationContext).EventRepetitionsDao() +val Context.eventRepetitionsDB: EventRepetitionsDao get() = EventsDatabase.getInstance(applicationContext).EventRepetitionsDao() val Context.eventRepetitionExceptionsDB: EventRepetitionExceptionsDao get() = EventsDatabase.getInstance(applicationContext).EventRepetitionExceptionsDao() diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt index b925e1fc7..ce19ae62a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/DBHelper.kt @@ -11,6 +11,7 @@ import androidx.collection.LongSparseArray import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.models.Event +import com.simplemobiletools.calendar.pro.models.EventRepetition import com.simplemobiletools.calendar.pro.models.EventRepetitionException import com.simplemobiletools.calendar.pro.models.EventType import com.simplemobiletools.commons.extensions.getIntValue @@ -85,8 +86,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont event.id = id if (event.repeatInterval != 0 && event.parentId == 0L) { - val metaValues = fillMetaValues(event) - mDb.insert(REPETITIONS_TABLE_NAME, null, metaValues) + context.eventRepetitionsDB.insertOrUpdate(getEventRepetition(event)) } context.updateWidgets() @@ -112,8 +112,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont event.id = id if (event.repeatInterval != 0 && event.parentId == 0L) { - val metaValues = fillMetaValues(event) - mDb.insert(REPETITIONS_TABLE_NAME, null, metaValues) + context.eventRepetitionsDB.insertOrUpdate(getEventRepetition(event)) } context.scheduleNextEventReminder(event, this) @@ -135,11 +134,9 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont mDb.update(MAIN_TABLE_NAME, values, selection, selectionArgs) if (event.repeatInterval == 0) { - val metaSelection = "$COL_EVENT_ID = ?" - mDb.delete(REPETITIONS_TABLE_NAME, metaSelection, selectionArgs) + context.eventRepetitionsDB.deleteEventRepetitionsOfEvent(event.id!!) } else { - val metaValues = fillMetaValues(event) - mDb.insertWithOnConflict(REPETITIONS_TABLE_NAME, null, metaValues, SQLiteDatabase.CONFLICT_REPLACE) + context.eventRepetitionsDB.insertOrUpdate(getEventRepetition(event)) } context.updateWidgets() @@ -169,7 +166,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont } } - private fun fillMetaValues(event: Event): ContentValues { + private fun fillRepetitionValues(event: Event): ContentValues { return ContentValues().apply { put(COL_EVENT_ID, event.id) put(COL_REPEAT_INTERVAL, event.repeatInterval) @@ -178,6 +175,8 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont } } + private fun getEventRepetition(event: Event) = EventRepetition(null, event.id!!, event.repeatInterval, event.repeatRule, event.repeatLimit) + private fun fillExceptionValues(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String?, callback: (eventRepetitionException: EventRepetitionException) -> Unit) { val childEvent = getEventWithId(parentEventId) ?: return @@ -237,9 +236,6 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont mDb.delete(MAIN_TABLE_NAME, selection, null) - val metaSelection = "$COL_EVENT_ID IN ($args)" - mDb.delete(REPETITIONS_TABLE_NAME, metaSelection, null) - context.updateWidgets() // temporary workaround, will be rewritten in Room diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt index c1ddb95da..8f1f06673 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventRepetitionsDao.kt @@ -1,8 +1,16 @@ package com.simplemobiletools.calendar.pro.interfaces import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.simplemobiletools.calendar.pro.models.EventRepetition @Dao interface EventRepetitionsDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertOrUpdate(eventRepetition: EventRepetition) + @Query("DELETE FROM event_repetitions WHERE event_id = :eventId") + fun deleteEventRepetitionsOfEvent(eventId: Long) } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt index f3059d2a6..253953ed3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventRepetition.kt @@ -8,7 +8,7 @@ import androidx.room.PrimaryKey @Entity(tableName = "event_repetitions", indices = [(Index(value = ["id"], unique = true))]) data class EventRepetition( @PrimaryKey(autoGenerate = true) var id: Long?, - @ColumnInfo(name = "event_id") val eventId: Int, + @ColumnInfo(name = "event_id") val eventId: Long, @ColumnInfo(name = "repeat_interval") val repeatInterval: Int, @ColumnInfo(name = "repeat_rule") val repeatRule: Int, @ColumnInfo(name = "repeat_limit") val repeatLimit: Int)