moving some event repetition related things into Room
This commit is contained in:
parent
c91a32ccf4
commit
92862d1193
|
@ -680,7 +680,7 @@ class EventActivity : SimpleActivity() {
|
||||||
DeleteEventDialog(this, arrayListOf(mEvent.id!!), mEvent.repeatInterval > 0) {
|
DeleteEventDialog(this, arrayListOf(mEvent.id!!), mEvent.repeatInterval > 0) {
|
||||||
Thread {
|
Thread {
|
||||||
when (it) {
|
when (it) {
|
||||||
DELETE_SELECTED_OCCURRENCE -> dbHelper.addEventRepeatException(mEvent.id!!, mEventOccurrenceTS, true)
|
DELETE_SELECTED_OCCURRENCE -> EventsHelper(applicationContext).addEventRepeatException(mEvent.id!!, mEventOccurrenceTS, true)
|
||||||
DELETE_FUTURE_OCCURRENCES -> EventsHelper(applicationContext).addEventRepeatLimit(mEvent.id!!, mEventOccurrenceTS)
|
DELETE_FUTURE_OCCURRENCES -> EventsHelper(applicationContext).addEventRepeatLimit(mEvent.id!!, mEventOccurrenceTS)
|
||||||
DELETE_ALL_OCCURRENCES -> EventsHelper(applicationContext).deleteEvent(mEvent.id!!, true)
|
DELETE_ALL_OCCURRENCES -> EventsHelper(applicationContext).deleteEvent(mEvent.id!!, true)
|
||||||
}
|
}
|
||||||
|
@ -817,7 +817,7 @@ class EventActivity : SimpleActivity() {
|
||||||
}.start()
|
}.start()
|
||||||
} else {
|
} else {
|
||||||
Thread {
|
Thread {
|
||||||
dbHelper.addEventRepeatException(mEvent.id!!, mEventOccurrenceTS, true)
|
EventsHelper(applicationContext).addEventRepeatException(mEvent.id!!, mEventOccurrenceTS, true)
|
||||||
mEvent.apply {
|
mEvent.apply {
|
||||||
parentId = id!!.toLong()
|
parentId = id!!.toLong()
|
||||||
id = null
|
id = null
|
||||||
|
|
|
@ -448,7 +448,7 @@ fun Context.handleEventDeleting(eventIds: List<Long>, timestamps: List<Int>, act
|
||||||
when (action) {
|
when (action) {
|
||||||
DELETE_SELECTED_OCCURRENCE -> {
|
DELETE_SELECTED_OCCURRENCE -> {
|
||||||
eventIds.forEachIndexed { index, value ->
|
eventIds.forEachIndexed { index, value ->
|
||||||
dbHelper.addEventRepeatException(value, timestamps[index], true)
|
EventsHelper(this).addEventRepeatException(value, timestamps[index], true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DELETE_FUTURE_OCCURRENCES -> {
|
DELETE_FUTURE_OCCURRENCES -> {
|
||||||
|
|
|
@ -9,7 +9,10 @@ import android.provider.CalendarContract
|
||||||
import android.provider.CalendarContract.Reminders
|
import android.provider.CalendarContract.Reminders
|
||||||
import android.util.SparseIntArray
|
import android.util.SparseIntArray
|
||||||
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.config
|
||||||
|
import com.simplemobiletools.calendar.pro.extensions.eventsDB
|
||||||
|
import com.simplemobiletools.calendar.pro.extensions.refreshCalDAVCalendars
|
||||||
|
import com.simplemobiletools.calendar.pro.extensions.scheduleCalDAVSync
|
||||||
import com.simplemobiletools.calendar.pro.models.CalDAVCalendar
|
import com.simplemobiletools.calendar.pro.models.CalDAVCalendar
|
||||||
import com.simplemobiletools.calendar.pro.models.Event
|
import com.simplemobiletools.calendar.pro.models.Event
|
||||||
import com.simplemobiletools.calendar.pro.models.EventType
|
import com.simplemobiletools.calendar.pro.models.EventType
|
||||||
|
@ -152,7 +155,7 @@ class CalDAVHandler(val context: Context) {
|
||||||
private fun fetchCalDAVCalendarEvents(calendarId: Int, eventTypeId: Long, activity: SimpleActivity?) {
|
private fun fetchCalDAVCalendarEvents(calendarId: Int, eventTypeId: Long, activity: SimpleActivity?) {
|
||||||
val importIdsMap = HashMap<String, Event>()
|
val importIdsMap = HashMap<String, Event>()
|
||||||
val fetchedEventIds = ArrayList<String>()
|
val fetchedEventIds = ArrayList<String>()
|
||||||
val existingEvents = context.dbHelper.getEventsFromCalDAVCalendar(calendarId)
|
val existingEvents = context.eventsDB.getEventsFromCalDAVCalendar("$CALDAV-$calendarId")
|
||||||
existingEvents.forEach {
|
existingEvents.forEach {
|
||||||
importIdsMap[it.importId] = it
|
importIdsMap[it.importId] = it
|
||||||
}
|
}
|
||||||
|
@ -232,7 +235,7 @@ class CalDAVHandler(val context: Context) {
|
||||||
val parentEventId = context.eventsDB.getEventIdWithImportId(parentImportId)
|
val parentEventId = context.eventsDB.getEventIdWithImportId(parentImportId)
|
||||||
if (parentEventId != null) {
|
if (parentEventId != null) {
|
||||||
event.parentId = parentEventId
|
event.parentId = parentEventId
|
||||||
context.dbHelper.addEventRepeatException(parentEventId, (originalInstanceTime / 1000).toInt(), false, event.importId)
|
EventsHelper(context).addEventRepeatException(parentEventId, (originalInstanceTime / 1000).toInt(), false, event.importId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import android.text.TextUtils
|
||||||
import androidx.collection.LongSparseArray
|
import androidx.collection.LongSparseArray
|
||||||
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.EventRepetitionException
|
|
||||||
import com.simplemobiletools.commons.extensions.getIntValue
|
import com.simplemobiletools.commons.extensions.getIntValue
|
||||||
import com.simplemobiletools.commons.extensions.getLongValue
|
import com.simplemobiletools.commons.extensions.getLongValue
|
||||||
import com.simplemobiletools.commons.extensions.getStringValue
|
import com.simplemobiletools.commons.extensions.getStringValue
|
||||||
|
@ -56,48 +55,6 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||||
|
|
||||||
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {}
|
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {}
|
||||||
|
|
||||||
private fun fillExceptionValues(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String?, callback: (eventRepetitionException: EventRepetitionException) -> Unit) {
|
|
||||||
val childEvent = context.eventsDB.getEventWithId(parentEventId) ?: return
|
|
||||||
|
|
||||||
childEvent.apply {
|
|
||||||
id = 0
|
|
||||||
parentId = parentEventId
|
|
||||||
startTS = 0
|
|
||||||
endTS = 0
|
|
||||||
if (childImportId != null) {
|
|
||||||
importId = childImportId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EventsHelper(context).insertEvent(null, childEvent, false) {
|
|
||||||
val childEventId = it
|
|
||||||
val eventRepetitionException = EventRepetitionException(null, Formatter.getDayCodeFromTS(occurrenceTS), parentEventId)
|
|
||||||
callback(eventRepetitionException)
|
|
||||||
|
|
||||||
Thread {
|
|
||||||
if (addToCalDAV && context.config.caldavSync) {
|
|
||||||
val parentEvent = context.eventsDB.getEventWithId(parentEventId)
|
|
||||||
if (parentEvent != null) {
|
|
||||||
val newId = CalDAVHandler(context).insertEventRepeatException(parentEvent, occurrenceTS)
|
|
||||||
val newImportId = "${parentEvent.source}-$newId"
|
|
||||||
context.eventsDB.updateEventImportIdAndSource(newImportId, parentEvent.source, childEventId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.start()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addEventRepeatException(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String? = null) {
|
|
||||||
fillExceptionValues(parentEventId, occurrenceTS, addToCalDAV, childImportId) {
|
|
||||||
context.eventRepetitionExceptionsDB.insert(it)
|
|
||||||
|
|
||||||
val parentEvent = context.eventsDB.getEventWithId(parentEventId)
|
|
||||||
if (parentEvent != null) {
|
|
||||||
context.scheduleNextEventReminder(parentEvent, this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getEvents(fromTS: Int, toTS: Int, eventId: Long = -1L, applyTypeFilter: Boolean = true, callback: (events: ArrayList<Event>) -> Unit) {
|
fun getEvents(fromTS: Int, toTS: Int, eventId: Long = -1L, applyTypeFilter: Boolean = true, callback: (events: ArrayList<Event>) -> Unit) {
|
||||||
Thread {
|
Thread {
|
||||||
getEventsInBackground(fromTS, toTS, eventId, applyTypeFilter, callback)
|
getEventsInBackground(fromTS, toTS, eventId, applyTypeFilter, callback)
|
||||||
|
@ -350,13 +307,6 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||||
return events
|
return events
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getEventsFromCalDAVCalendar(calendarId: Int): List<Event> {
|
|
||||||
val selection = "$COL_EVENT_SOURCE = ?"
|
|
||||||
val selectionArgs = arrayOf("$CALDAV-$calendarId")
|
|
||||||
val cursor = getEventsCursor(selection, selectionArgs)
|
|
||||||
return fillEvents(cursor)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getEventsCursor(selection: String = "", selectionArgs: Array<String>? = null): Cursor? {
|
private fun getEventsCursor(selection: String = "", selectionArgs: Array<String>? = null): Cursor? {
|
||||||
return mDb.query(MAIN_TABLE_NAME, allColumns, selection, selectionArgs, null, null, COL_START_TS)
|
return mDb.query(MAIN_TABLE_NAME, allColumns, selection, selectionArgs, null, null, COL_START_TS)
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Context
|
||||||
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.EventRepetitionException
|
||||||
import com.simplemobiletools.calendar.pro.models.EventType
|
import com.simplemobiletools.calendar.pro.models.EventType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -208,4 +209,46 @@ class EventsHelper(val context: Context) {
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun addEventRepeatException(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String? = null) {
|
||||||
|
EventsHelper(context).fillExceptionValues(parentEventId, occurrenceTS, addToCalDAV, childImportId) {
|
||||||
|
context.eventRepetitionExceptionsDB.insert(it)
|
||||||
|
|
||||||
|
val parentEvent = eventsDB.getEventWithId(parentEventId)
|
||||||
|
if (parentEvent != null) {
|
||||||
|
//context.scheduleNextEventReminder(parentEvent, this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun fillExceptionValues(parentEventId: Long, occurrenceTS: Int, addToCalDAV: Boolean, childImportId: String?, callback: (eventRepetitionException: EventRepetitionException) -> Unit) {
|
||||||
|
val childEvent = eventsDB.getEventWithId(parentEventId) ?: return
|
||||||
|
|
||||||
|
childEvent.apply {
|
||||||
|
id = 0
|
||||||
|
parentId = parentEventId
|
||||||
|
startTS = 0
|
||||||
|
endTS = 0
|
||||||
|
if (childImportId != null) {
|
||||||
|
importId = childImportId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
insertEvent(null, childEvent, false) {
|
||||||
|
val childEventId = it
|
||||||
|
val eventRepetitionException = EventRepetitionException(null, Formatter.getDayCodeFromTS(occurrenceTS), parentEventId)
|
||||||
|
callback(eventRepetitionException)
|
||||||
|
|
||||||
|
Thread {
|
||||||
|
if (addToCalDAV && config.caldavSync) {
|
||||||
|
val parentEvent = eventsDB.getEventWithId(parentEventId)
|
||||||
|
if (parentEvent != null) {
|
||||||
|
val newId = CalDAVHandler(context).insertEventRepeatException(parentEvent, occurrenceTS)
|
||||||
|
val newImportId = "${parentEvent.source}-$newId"
|
||||||
|
eventsDB.updateEventImportIdAndSource(newImportId, parentEvent.source, childEventId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package com.simplemobiletools.calendar.pro.helpers
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.simplemobiletools.calendar.pro.R
|
import com.simplemobiletools.calendar.pro.R
|
||||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.calendar.pro.extensions.dbHelper
|
|
||||||
import com.simplemobiletools.calendar.pro.extensions.eventsDB
|
import com.simplemobiletools.calendar.pro.extensions.eventsDB
|
||||||
import com.simplemobiletools.calendar.pro.helpers.IcsImporter.ImportResult.*
|
import com.simplemobiletools.calendar.pro.helpers.IcsImporter.ImportResult.*
|
||||||
import com.simplemobiletools.calendar.pro.models.Event
|
import com.simplemobiletools.calendar.pro.models.Event
|
||||||
|
@ -161,7 +160,7 @@ class IcsImporter(val activity: SimpleActivity) {
|
||||||
} else {
|
} else {
|
||||||
EventsHelper(activity).insertEvent(activity, event, true) {
|
EventsHelper(activity).insertEvent(activity, event, true) {
|
||||||
for (exceptionTS in curRepeatExceptions) {
|
for (exceptionTS in curRepeatExceptions) {
|
||||||
activity.dbHelper.addEventRepeatException(it, exceptionTS, true)
|
EventsHelper(activity).addEventRepeatException(it, exceptionTS, true)
|
||||||
}
|
}
|
||||||
existingEvents.add(event)
|
existingEvents.add(event)
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,9 @@ interface EventsDao {
|
||||||
@Query("SELECT * FROM events WHERE import_id != \"\"")
|
@Query("SELECT * FROM events WHERE import_id != \"\"")
|
||||||
fun getEventsWithImportIds(): List<Event>
|
fun getEventsWithImportIds(): List<Event>
|
||||||
|
|
||||||
|
@Query("SELECT * FROM events WHERE source = :source")
|
||||||
|
fun getEventsFromCalDAVCalendar(source: String): List<Event>
|
||||||
|
|
||||||
@Query("SELECT id FROM events WHERE source = :source AND import_id != \"\"")
|
@Query("SELECT id FROM events WHERE source = :source AND import_id != \"\"")
|
||||||
fun getCalDAVCalendarEvents(source: String): List<Long>
|
fun getCalDAVCalendarEvents(source: String): List<Long>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue