mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
moving some event repetition handling in Room
This commit is contained in:
@@ -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()
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user