moving some event repetition handling in Room

This commit is contained in:
tibbi
2018-11-14 13:00:48 +01:00
parent 4bdd09bea9
commit 1c41b3f6a9
4 changed files with 19 additions and 15 deletions

View File

@@ -21,11 +21,11 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.app.AlarmManagerCompat import androidx.core.app.AlarmManagerCompat
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import com.simplemobiletools.calendar.pro.databases.EventsDatabase
import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.R
import com.simplemobiletools.calendar.pro.activities.EventActivity import com.simplemobiletools.calendar.pro.activities.EventActivity
import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.activities.SimpleActivity
import com.simplemobiletools.calendar.pro.activities.SnoozeReminderActivity 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.*
import com.simplemobiletools.calendar.pro.helpers.Formatter import com.simplemobiletools.calendar.pro.helpers.Formatter
import com.simplemobiletools.calendar.pro.interfaces.EventRepetitionExceptionsDao 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.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() val Context.eventRepetitionExceptionsDB: EventRepetitionExceptionsDao get() = EventsDatabase.getInstance(applicationContext).EventRepetitionExceptionsDao()

View File

@@ -11,6 +11,7 @@ import androidx.collection.LongSparseArray
import com.simplemobiletools.calendar.pro.activities.SimpleActivity import com.simplemobiletools.calendar.pro.activities.SimpleActivity
import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.extensions.*
import com.simplemobiletools.calendar.pro.models.Event 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.EventRepetitionException
import com.simplemobiletools.calendar.pro.models.EventType import com.simplemobiletools.calendar.pro.models.EventType
import com.simplemobiletools.commons.extensions.getIntValue import com.simplemobiletools.commons.extensions.getIntValue
@@ -85,8 +86,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
event.id = id event.id = id
if (event.repeatInterval != 0 && event.parentId == 0L) { if (event.repeatInterval != 0 && event.parentId == 0L) {
val metaValues = fillMetaValues(event) context.eventRepetitionsDB.insertOrUpdate(getEventRepetition(event))
mDb.insert(REPETITIONS_TABLE_NAME, null, metaValues)
} }
context.updateWidgets() context.updateWidgets()
@@ -112,8 +112,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
event.id = id event.id = id
if (event.repeatInterval != 0 && event.parentId == 0L) { if (event.repeatInterval != 0 && event.parentId == 0L) {
val metaValues = fillMetaValues(event) context.eventRepetitionsDB.insertOrUpdate(getEventRepetition(event))
mDb.insert(REPETITIONS_TABLE_NAME, null, metaValues)
} }
context.scheduleNextEventReminder(event, this) 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) mDb.update(MAIN_TABLE_NAME, values, selection, selectionArgs)
if (event.repeatInterval == 0) { if (event.repeatInterval == 0) {
val metaSelection = "$COL_EVENT_ID = ?" context.eventRepetitionsDB.deleteEventRepetitionsOfEvent(event.id!!)
mDb.delete(REPETITIONS_TABLE_NAME, metaSelection, selectionArgs)
} else { } else {
val metaValues = fillMetaValues(event) context.eventRepetitionsDB.insertOrUpdate(getEventRepetition(event))
mDb.insertWithOnConflict(REPETITIONS_TABLE_NAME, null, metaValues, SQLiteDatabase.CONFLICT_REPLACE)
} }
context.updateWidgets() 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 { return ContentValues().apply {
put(COL_EVENT_ID, event.id) put(COL_EVENT_ID, event.id)
put(COL_REPEAT_INTERVAL, event.repeatInterval) 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) { private fun fillExceptionValues(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String?, callback: (eventRepetitionException: EventRepetitionException) -> Unit) {
val childEvent = getEventWithId(parentEventId) ?: return 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) mDb.delete(MAIN_TABLE_NAME, selection, null)
val metaSelection = "$COL_EVENT_ID IN ($args)"
mDb.delete(REPETITIONS_TABLE_NAME, metaSelection, null)
context.updateWidgets() context.updateWidgets()
// temporary workaround, will be rewritten in Room // temporary workaround, will be rewritten in Room

View File

@@ -1,8 +1,16 @@
package com.simplemobiletools.calendar.pro.interfaces package com.simplemobiletools.calendar.pro.interfaces
import androidx.room.Dao import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.simplemobiletools.calendar.pro.models.EventRepetition
@Dao @Dao
interface EventRepetitionsDao { interface EventRepetitionsDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertOrUpdate(eventRepetition: EventRepetition)
@Query("DELETE FROM event_repetitions WHERE event_id = :eventId")
fun deleteEventRepetitionsOfEvent(eventId: Long)
} }

View File

@@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
@Entity(tableName = "event_repetitions", indices = [(Index(value = ["id"], unique = true))]) @Entity(tableName = "event_repetitions", indices = [(Index(value = ["id"], unique = true))])
data class EventRepetition( data class EventRepetition(
@PrimaryKey(autoGenerate = true) var id: Long?, @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_interval") val repeatInterval: Int,
@ColumnInfo(name = "repeat_rule") val repeatRule: Int, @ColumnInfo(name = "repeat_rule") val repeatRule: Int,
@ColumnInfo(name = "repeat_limit") val repeatLimit: Int) @ColumnInfo(name = "repeat_limit") val repeatLimit: Int)