import event repeat exceptions from ics files too

This commit is contained in:
tibbi
2017-04-06 20:47:52 +02:00
parent d63e6f30b2
commit 7be0a0d333
8 changed files with 23 additions and 15 deletions

View File

@@ -261,7 +261,7 @@ class EventActivity : SimpleActivity(), DBHelper.EventUpdateListener {
if (it) { if (it) {
dbHelper.deleteEvents(arrayOf(mEvent.id.toString())) dbHelper.deleteEvents(arrayOf(mEvent.id.toString()))
} else { } else {
dbHelper.deleteEventOccurrence(mEvent.id, mEventOccurrenceTS) dbHelper.addEventRepeatException(mEvent.id, mEventOccurrenceTS)
} }
finish() finish()
} }

View File

@@ -84,7 +84,7 @@ class DayEventsAdapter(val activity: SimpleActivity, val mItems: List<Event>, va
if (it) { if (it) {
listener?.deleteItems(eventIds) listener?.deleteItems(eventIds)
} else { } else {
listener?.deleteEventOccurrences(eventIds, timestamps) listener?.addEventRepeatException(eventIds, timestamps)
} }
actMode?.finish() actMode?.finish()
} }

View File

@@ -101,7 +101,7 @@ class EventListAdapter(val activity: SimpleActivity, val mItems: List<ListItem>,
if (it) { if (it) {
listener?.deleteItems(eventIds) listener?.deleteItems(eventIds)
} else { } else {
listener?.deleteEventOccurrences(eventIds, timestamps) listener?.addEventRepeatException(eventIds, timestamps)
} }
actMode?.finish() actMode?.finish()
} }

View File

@@ -152,9 +152,9 @@ class DayFragment : Fragment(), DBHelper.EventUpdateListener, DeleteEventsListen
DBHelper.newInstance(activity.applicationContext, this).deleteEvents(eventIDs) DBHelper.newInstance(activity.applicationContext, this).deleteEvents(eventIDs)
} }
override fun deleteEventOccurrences(parentIds: ArrayList<Int>, timestamps: ArrayList<Int>) { override fun addEventRepeatException(parentIds: ArrayList<Int>, timestamps: ArrayList<Int>) {
parentIds.forEachIndexed { index, value -> parentIds.forEachIndexed { index, value ->
context.dbHelper.deleteEventOccurrence(parentIds[index], timestamps[index]) context.dbHelper.addEventRepeatException(parentIds[index], timestamps[index])
} }
(activity as DayActivity).recheckEvents() (activity as DayActivity).recheckEvents()
} }

View File

@@ -114,9 +114,9 @@ class EventListFragment : Fragment(), DBHelper.EventUpdateListener, DeleteEvents
DBHelper.newInstance(activity.applicationContext, this).deleteEvents(eventIDs) DBHelper.newInstance(activity.applicationContext, this).deleteEvents(eventIDs)
} }
override fun deleteEventOccurrences(parentIds: ArrayList<Int>, timestamps: ArrayList<Int>) { override fun addEventRepeatException(parentIds: ArrayList<Int>, timestamps: ArrayList<Int>) {
parentIds.forEachIndexed { index, value -> parentIds.forEachIndexed { index, value ->
context.dbHelper.deleteEventOccurrence(value, timestamps[index]) context.dbHelper.addEventRepeatException(value, timestamps[index])
} }
checkEvents() checkEvents()
} }

View File

@@ -138,9 +138,9 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
addEventType(eventType, db) addEventType(eventType, db)
} }
fun insert(event: Event) { fun insert(event: Event): Int {
if (event.startTS > event.endTS || event.title.trim().isEmpty()) if (event.startTS > event.endTS || event.title.trim().isEmpty())
return return 0
val eventValues = fillEventValues(event) val eventValues = fillEventValues(event)
val id = mDb.insert(MAIN_TABLE_NAME, null, eventValues) val id = mDb.insert(MAIN_TABLE_NAME, null, eventValues)
@@ -154,6 +154,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
context.updateWidgets() context.updateWidgets()
context.scheduleReminder(event) context.scheduleReminder(event)
mEventsListener?.eventInserted(event) mEventsListener?.eventInserted(event)
return event.id
} }
fun update(event: Event) { fun update(event: Event) {
@@ -292,10 +293,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
mEventsListener?.eventsDeleted(ids.size) mEventsListener?.eventsDeleted(ids.size)
} }
fun deleteEventOccurrence(parentEventId: Int, occurrenceTS: Int) { fun addEventRepeatException(parentEventId: Int, occurrenceTS: Int) {
val exceptionSelection = "$COL_PARENT_EVENT_ID = $parentEventId AND $COL_OCCURRENCE_DAYCODE = ${Formatter.getDayCodeFromTS(occurrenceTS)}"
mDb.delete(EXCEPTIONS_TABLE_NAME, exceptionSelection, null)
val values = fillExceptionValues(parentEventId, occurrenceTS) val values = fillExceptionValues(parentEventId, occurrenceTS)
mDb.insert(EXCEPTIONS_TABLE_NAME, null, values) mDb.insert(EXCEPTIONS_TABLE_NAME, null, values)
} }

View File

@@ -23,6 +23,7 @@ class IcsImporter {
var curImportId = "" var curImportId = ""
var curFlags = 0 var curFlags = 0
var curReminderMinutes = ArrayList<Int>() var curReminderMinutes = ArrayList<Int>()
var curRepeatExceptions = ArrayList<Int>()
var curRepeatInterval = 0 var curRepeatInterval = 0
var curRepeatLimit = 0 var curRepeatLimit = 0
var curEventType = DBHelper.REGULAR_EVENT_TYPE_ID var curEventType = DBHelper.REGULAR_EVENT_TYPE_ID
@@ -76,6 +77,8 @@ class IcsImporter {
} else if (line.startsWith(CATEGORIES)) { } else if (line.startsWith(CATEGORIES)) {
val categories = line.substring(CATEGORIES.length) val categories = line.substring(CATEGORIES.length)
tryAddCategories(categories, context) tryAddCategories(categories, context)
} else if (line.startsWith(EXDATE)) {
curRepeatExceptions.add(getTimestamp(line.substring(EXDATE.length)))
} else if (line == END_EVENT) { } else if (line == END_EVENT) {
if (curTitle.isEmpty() || curStart == -1 || curEnd == -1 || importIDs.contains(curImportId)) if (curTitle.isEmpty() || curStart == -1 || curEnd == -1 || importIDs.contains(curImportId))
continue continue
@@ -84,7 +87,13 @@ class IcsImporter {
val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes.getOrElse(0, { -1 }), val event = Event(0, curStart, curEnd, curTitle, curDescription, curReminderMinutes.getOrElse(0, { -1 }),
curReminderMinutes.getOrElse(1, { -1 }), curReminderMinutes.getOrElse(2, { -1 }), curRepeatInterval, curReminderMinutes.getOrElse(1, { -1 }), curReminderMinutes.getOrElse(2, { -1 }), curRepeatInterval,
curImportId, curFlags, curRepeatLimit, curEventType) curImportId, curFlags, curRepeatLimit, curEventType)
context.dbHelper.insert(event)
val eventId = context.dbHelper.insert(event)
for (exceptionTS in curRepeatExceptions) {
context.dbHelper.addEventRepeatException(eventId, exceptionTS)
}
eventsImported++ eventsImported++
resetValues() resetValues()
} }
@@ -216,6 +225,7 @@ class IcsImporter {
curImportId = "" curImportId = ""
curFlags = 0 curFlags = 0
curReminderMinutes = ArrayList<Int>() curReminderMinutes = ArrayList<Int>()
curRepeatExceptions = ArrayList<Int>()
curRepeatInterval = 0 curRepeatInterval = 0
curRepeatLimit = 0 curRepeatLimit = 0
curEventType = DBHelper.REGULAR_EVENT_TYPE_ID curEventType = DBHelper.REGULAR_EVENT_TYPE_ID

View File

@@ -5,5 +5,5 @@ import java.util.*
interface DeleteEventsListener { interface DeleteEventsListener {
fun deleteItems(ids: ArrayList<Int>) fun deleteItems(ids: ArrayList<Int>)
fun deleteEventOccurrences(parentIds: ArrayList<Int>, timestamps: ArrayList<Int>) fun addEventRepeatException(parentIds: ArrayList<Int>, timestamps: ArrayList<Int>)
} }