Make alarm immutable

pull/2906/head
Alex Baker 2 weeks ago
parent 5bd0cef42e
commit 74fca07c1b

@ -90,7 +90,7 @@ class ReminderTests : BaseTaskEditViewModelTest() {
save()
assertEquals(
listOf(whenOverdue(1).apply { id = 1 }),
listOf(whenOverdue(1).copy(id = 1)),
alarmDao.getAlarms(task.id)
)
}

@ -45,19 +45,13 @@ class AlarmService @Inject constructor(
suspend fun synchronizeAlarms(taskId: Long, alarms: MutableSet<Alarm>): Boolean {
var changed = false
for (existing in alarmDao.getAlarms(taskId)) {
if (!alarms.removeIf {
it.type == existing.type &&
it.time == existing.time &&
it.repeat == existing.repeat &&
it.interval == existing.interval
}) {
if (!alarms.removeIf { it.same(existing)}) {
alarmDao.delete(existing)
changed = true
}
}
for (alarm in alarms) {
alarm.task = taskId
alarmDao.insert(alarm)
alarmDao.insert(alarms.map { it.copy(task = taskId) })
if (alarms.isNotEmpty()) {
changed = true
}
if (changed) {

@ -8,15 +8,15 @@ package com.todoroo.astrid.repeats
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.alarms.AlarmService
import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import com.todoroo.astrid.gcal.GCalHelper
import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.Recur
import net.fortuna.ical4j.model.WeekDay
import org.tasks.LocalBroadcastManager
import org.tasks.data.createDueDate
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.createDueDate
import org.tasks.data.entity.Task
import org.tasks.data.setRecurrence
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.repeats.RecurrenceUtils.newRecur
@ -115,9 +115,11 @@ class RepeatTaskHelper @Inject constructor(
}
alarmService.getAlarms(taskId)
.filter { it.type != TYPE_SNOOZE }
.onEach {
.map {
if (it.type == Alarm.TYPE_DATE_TIME) {
it.time += newDueDate - oldDueDate
it.copy(time = it.time + newDueDate - oldDueDate)
} else {
it
}
}
.let { alarmService.synchronizeAlarms(taskId, it.toMutableSet()) }

@ -5,8 +5,8 @@ package com.todoroo.astrid.service
import org.tasks.caldav.VtodoCache
import org.tasks.caldav.iCalendar
import org.tasks.caldav.iCalendar.Companion.reminders
import org.tasks.data.dao.AlarmDao
import org.tasks.data.CaldavTaskContainer
import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.TaskDao
import org.tasks.data.dao.UpgraderDao
import javax.inject.Inject
@ -25,7 +25,7 @@ class Upgrade_12_4 @Inject constructor(
remoteTask
.reminders
.filter { existingAlarms.find { e -> e.task == task.task && e.same(it) } == null }
.onEach { it.task = task.task }
.map { it.copy(task = task.task) }
.let { alarmDao.insert(it) }
}
taskDao.touch(existingAlarms.map { it.task }.toSet().toList())

@ -202,10 +202,7 @@ class TasksJsonImporter @Inject constructor(
taskDao.createNew(task)
val taskId = task.id
val taskUuid = task.uuid
for (alarm in backup.alarms) {
alarm.task = taskId
alarmDao.insert(alarm)
}
alarmDao.insert(backup.alarms.map { it.copy(task = taskId) })
if (version < V12_4) {
task.defaultReminders(task.ringFlags)
alarmDao.insert(task.getDefaultAlarms())

@ -249,9 +249,8 @@ class iCalendar @Inject constructor(
task.setDefaultReminders(preferences)
alarmService.synchronizeAlarms(task.id, task.getDefaultAlarms().toMutableSet())
} else if (account.reminderSync) {
val alarms = alarmDao.getAlarms(task.id).onEach {
it.id = 0
it.task = 0
val alarms = alarmDao.getAlarms(task.id).map {
it.copy(id = 0, task = 0)
}
val randomReminders = alarms.filter { it.type == TYPE_RANDOM }
val localReminders =

@ -29,18 +29,18 @@ data class Alarm(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")
@Transient
var id: Long = 0,
val id: Long = 0,
@ColumnInfo(name = "task", index = true)
@Transient
var task: Long = 0,
val task: Long = 0,
@ColumnInfo(name = "time")
var time: Long = 0,
val time: Long = 0,
@ColumnInfo(name = "type", defaultValue = "0")
var type: Int = 0,
val type: Int = 0,
@ColumnInfo(name = "repeat", defaultValue = "0")
var repeat: Int = 0,
val repeat: Int = 0,
@ColumnInfo(name = "interval", defaultValue = "0")
var interval: Long = 0,
val interval: Long = 0,
) : Parcelable {
fun same(other: Alarm) =
type == other.type &&

Loading…
Cancel
Save