Ensure local lists exist

e.g. after data reset
pull/1004/head
Alex Baker 4 years ago
parent e0571a0ed7
commit cc0cc79d09

@ -88,7 +88,7 @@ public class TaskMover {
}
public void migrateLocalTasks() {
CaldavCalendar list = caldavDao.setupLocalAccount(context);
CaldavCalendar list = caldavDao.getLocalList(context);
move(taskDao.getLocalTasks(), new CaldavFilter(list));
}

@ -42,9 +42,7 @@ class Upgrader @Inject constructor(
private val taskMover: TaskMover) {
fun upgrade(from: Int, to: Int) {
if (from == 0) {
caldavDao.setupLocalAccount(context)
} else {
if (from > 0) {
run(from, V4_9_5) { removeDuplicateTags() }
run(from, V5_3_0) { migrateFilters() }
run(from, V6_0_beta_1) { migrateDefaultSyncList() }

@ -245,28 +245,27 @@ abstract class CaldavDao {
@Query("SELECT task.*, caldav_task.*, IFNULL(cd_order, (created - $APPLE_EPOCH) / 1000) AS primary_sort FROM caldav_tasks AS caldav_task INNER JOIN tasks AS task ON _id = cd_task WHERE cd_calendar = :calendar AND parent = :parent AND cd_deleted = 0 AND deleted = 0 AND primary_sort >= :from AND primary_sort < IFNULL(:to, ${Long.MAX_VALUE}) ORDER BY primary_sort")
internal abstract fun getTasksToShift(calendar: String, parent: Long, from: Long, to: Long?): List<CaldavTaskContainer>
fun setupLocalAccount(context: Context): CaldavCalendar {
val account = getAccountByUuid(LOCAL) ?: createLocalAccount()
return getCalendarsByAccount(account.uuid!!).getOrElse(0) {
createLocalList(context, account)
}
}
private fun createLocalAccount(): CaldavAccount {
val account = CaldavAccount()
account.accountType = CaldavAccount.TYPE_LOCAL
account.uuid = LOCAL
account.id = insert(account)
fun setupLocalAccount(context: Context): CaldavAccount {
val account = getLocalAccount()
getLocalList(context, account)
return account
}
private fun createLocalList(context: Context, account: CaldavAccount): CaldavCalendar {
val list = CaldavCalendar(context.getString(R.string.default_list), UUIDHelper.newUUID())
list.account = account.uuid
insert(list)
return list
fun getLocalList(context: Context) = getLocalList(context, getLocalAccount())
private fun getLocalAccount() = getAccountByUuid(LOCAL) ?: CaldavAccount().apply {
accountType = CaldavAccount.TYPE_LOCAL
uuid = LOCAL
id = insert(this)
}
private fun getLocalList(context: Context, account: CaldavAccount): CaldavCalendar =
getCalendarsByAccount(account.uuid!!).getOrNull(0)
?: CaldavCalendar(context.getString(R.string.default_list), UUIDHelper.newUUID()).apply {
this.account = account.uuid
insert(this)
}
companion object {
const val LOCAL = "local"
}

@ -255,7 +255,9 @@ class FilterProvider @Inject constructor(
private val caldavFilters: Set<Map.Entry<CaldavAccount, List<Filter>>>
get() {
val accounts = caldavDao.getAccounts()
val accounts = caldavDao.getAccounts().ifEmpty {
listOf(caldavDao.setupLocalAccount(context))
}
val filters = LinkedHashMap<CaldavAccount, List<Filter>>()
for (account in accounts) {
if (account.accountType == TYPE_LOCAL) {

Loading…
Cancel
Save