mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
use ignored event daycodes instead of timestamps
This commit is contained in:
@@ -57,7 +57,7 @@ fun Context.scheduleNextEventReminder(event: Event) {
|
|||||||
reminderSeconds.forEach {
|
reminderSeconds.forEach {
|
||||||
var startTS = event.startTS - it
|
var startTS = event.startTS - it
|
||||||
if (event.repeatInterval == DAY || event.repeatInterval == WEEK || event.repeatInterval == BIWEEK) {
|
if (event.repeatInterval == DAY || event.repeatInterval == WEEK || event.repeatInterval == BIWEEK) {
|
||||||
while (startTS < now || event.ignoreEventOccurrences.contains(startTS + it)) {
|
while (startTS < now || event.ignoreEventOccurrences.contains(Formatter.getDayCodeFromTS(startTS + it).toInt())) {
|
||||||
startTS += event.repeatInterval
|
startTS += event.repeatInterval
|
||||||
}
|
}
|
||||||
nextTS = Math.min(nextTS, startTS)
|
nextTS = Math.min(nextTS, startTS)
|
||||||
|
@@ -68,7 +68,7 @@ val TRIGGER = "TRIGGER:"
|
|||||||
val RRULE = "RRULE:"
|
val RRULE = "RRULE:"
|
||||||
val CATEGORIES = "CATEGORIES:"
|
val CATEGORIES = "CATEGORIES:"
|
||||||
val STATUS = "STATUS:"
|
val STATUS = "STATUS:"
|
||||||
val EXDATE = "EXDATE:"
|
val EXDATE = "EXDATE"
|
||||||
|
|
||||||
val DISPLAY = "DISPLAY"
|
val DISPLAY = "DISPLAY"
|
||||||
val FREQ = "FREQ"
|
val FREQ = "FREQ"
|
||||||
|
@@ -239,7 +239,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
private fun fillExceptionValues(parentEventId: Int, occurrenceTS: Int): ContentValues {
|
private fun fillExceptionValues(parentEventId: Int, occurrenceTS: Int): ContentValues {
|
||||||
return ContentValues().apply {
|
return ContentValues().apply {
|
||||||
put(COL_PARENT_EVENT_ID, parentEventId)
|
put(COL_PARENT_EVENT_ID, parentEventId)
|
||||||
put(COL_OCCURRENCE_TIMESTAMP, occurrenceTS)
|
put(COL_OCCURRENCE_DAYCODE, Formatter.getDayCodeFromTS(occurrenceTS))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun deleteEventOccurrence(parentEventId: Int, occurrenceTS: Int) {
|
fun deleteEventOccurrence(parentEventId: Int, occurrenceTS: Int) {
|
||||||
val exceptionSelection = "$COL_PARENT_EVENT_ID = $parentEventId AND $COL_OCCURRENCE_TIMESTAMP = $occurrenceTS"
|
val exceptionSelection = "$COL_PARENT_EVENT_ID = $parentEventId AND $COL_OCCURRENCE_DAYCODE = ${Formatter.getDayCodeFromTS(occurrenceTS)}"
|
||||||
mDb.delete(EXCEPTIONS_TABLE_NAME, exceptionSelection, null)
|
mDb.delete(EXCEPTIONS_TABLE_NAME, exceptionSelection, null)
|
||||||
|
|
||||||
val values = fillExceptionValues(parentEventId, occurrenceTS)
|
val values = fillExceptionValues(parentEventId, occurrenceTS)
|
||||||
@@ -375,7 +375,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
|
|
||||||
events.addAll(getRepeatableEventsFor(fromTS, toTS))
|
events.addAll(getRepeatableEventsFor(fromTS, toTS))
|
||||||
|
|
||||||
val filtered = events.filterNot { it.ignoreEventOccurrences.contains(it.startTS) } as MutableList<Event>
|
val filtered = events.filterNot { it.ignoreEventOccurrences.contains(Formatter.getDayCodeFromTS(it.startTS).toInt()) } as MutableList<Event>
|
||||||
callback(filtered)
|
callback(filtered)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,23 +544,23 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getIgnoredOccurrences(eventId: Int): ArrayList<Int> {
|
private fun getIgnoredOccurrences(eventId: Int): ArrayList<Int> {
|
||||||
val projection = arrayOf(COL_OCCURRENCE_TIMESTAMP)
|
val projection = arrayOf(COL_OCCURRENCE_DAYCODE)
|
||||||
val selection = "$COL_PARENT_EVENT_ID = ?"
|
val selection = "$COL_PARENT_EVENT_ID = ?"
|
||||||
val selectionArgs = arrayOf(eventId.toString())
|
val selectionArgs = arrayOf(eventId.toString())
|
||||||
val timestamps = ArrayList<Int>()
|
val daycodes = ArrayList<Int>()
|
||||||
|
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
try {
|
try {
|
||||||
cursor = mDb.query(EXCEPTIONS_TABLE_NAME, projection, selection, selectionArgs, null, null, COL_OCCURRENCE_TIMESTAMP)
|
cursor = mDb.query(EXCEPTIONS_TABLE_NAME, projection, selection, selectionArgs, null, null, COL_OCCURRENCE_DAYCODE)
|
||||||
if (cursor?.moveToFirst() == true) {
|
if (cursor?.moveToFirst() == true) {
|
||||||
do {
|
do {
|
||||||
timestamps.add(cursor.getIntValue(COL_OCCURRENCE_TIMESTAMP))
|
daycodes.add(cursor.getIntValue(COL_OCCURRENCE_DAYCODE))
|
||||||
} while (cursor.moveToNext())
|
} while (cursor.moveToNext())
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
return timestamps
|
return daycodes
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun convertExceptionTimestampToDaycode(db: SQLiteDatabase) {
|
private fun convertExceptionTimestampToDaycode(db: SQLiteDatabase) {
|
||||||
|
@@ -60,8 +60,6 @@ object Formatter {
|
|||||||
|
|
||||||
fun getDayEndTS(dayCode: String) = getLocalDateTimeFromCode(dayCode).plusDays(1).minusMinutes(1).seconds()
|
fun getDayEndTS(dayCode: String) = getLocalDateTimeFromCode(dayCode).plusDays(1).minusMinutes(1).seconds()
|
||||||
|
|
||||||
fun getDayCodeFromTS(ts: Int) = getDateTimeFromTS(ts).toString(DAYCODE_PATTERN)
|
|
||||||
|
|
||||||
fun getDayCodeFromDateTime(dateTime: DateTime) = dateTime.toString(DAYCODE_PATTERN)
|
fun getDayCodeFromDateTime(dateTime: DateTime) = dateTime.toString(DAYCODE_PATTERN)
|
||||||
|
|
||||||
fun getDateTimeFromTS(ts: Int) = DateTime(ts * 1000L, DateTimeZone.getDefault())
|
fun getDateTimeFromTS(ts: Int) = DateTime(ts * 1000L, DateTimeZone.getDefault())
|
||||||
@@ -77,4 +75,12 @@ object Formatter {
|
|||||||
val dateTime = getDateTimeFromTS(ts)
|
val dateTime = getDateTimeFromTS(ts)
|
||||||
return "${dateTime.toString(DAYCODE_PATTERN)}T${dateTime.toString(TIME_PATTERN)}Z"
|
return "${dateTime.toString(DAYCODE_PATTERN)}T${dateTime.toString(TIME_PATTERN)}Z"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getDayCodeFromTS(ts: Int): String {
|
||||||
|
val daycode = getDateTimeFromTS(ts).toString(DAYCODE_PATTERN)
|
||||||
|
return if (daycode.isNotEmpty())
|
||||||
|
daycode
|
||||||
|
else
|
||||||
|
"0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -128,7 +128,7 @@ class IcsExporter {
|
|||||||
|
|
||||||
private fun fillIgnoredOccurrences(event: Event, out: BufferedWriter) {
|
private fun fillIgnoredOccurrences(event: Event, out: BufferedWriter) {
|
||||||
event.ignoreEventOccurrences.forEach {
|
event.ignoreEventOccurrences.forEach {
|
||||||
out.writeLn("$EXDATE${Formatter.getDayCodeFromTS(it)}")
|
out.writeLn("$EXDATE:$it}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,7 @@ import com.simplemobiletools.calendar.extensions.notifyEvent
|
|||||||
import com.simplemobiletools.calendar.extensions.scheduleNextEventReminder
|
import com.simplemobiletools.calendar.extensions.scheduleNextEventReminder
|
||||||
import com.simplemobiletools.calendar.extensions.updateListWidget
|
import com.simplemobiletools.calendar.extensions.updateListWidget
|
||||||
import com.simplemobiletools.calendar.helpers.EVENT_ID
|
import com.simplemobiletools.calendar.helpers.EVENT_ID
|
||||||
|
import com.simplemobiletools.calendar.helpers.Formatter
|
||||||
|
|
||||||
class NotificationReceiver : BroadcastReceiver() {
|
class NotificationReceiver : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
@@ -20,7 +21,7 @@ class NotificationReceiver : BroadcastReceiver() {
|
|||||||
if (event == null || event.getReminders().isEmpty())
|
if (event == null || event.getReminders().isEmpty())
|
||||||
return
|
return
|
||||||
|
|
||||||
if (!event.ignoreEventOccurrences.contains(event.startTS)) {
|
if (!event.ignoreEventOccurrences.contains(Formatter.getDayCodeFromTS(event.startTS).toInt())) {
|
||||||
context.notifyEvent(event)
|
context.notifyEvent(event)
|
||||||
}
|
}
|
||||||
context.scheduleNextEventReminder(event)
|
context.scheduleNextEventReminder(event)
|
||||||
|
Reference in New Issue
Block a user