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() { public void migrateLocalTasks() {
CaldavCalendar list = caldavDao.setupLocalAccount(context); CaldavCalendar list = caldavDao.getLocalList(context);
move(taskDao.getLocalTasks(), new CaldavFilter(list)); move(taskDao.getLocalTasks(), new CaldavFilter(list));
} }

@ -42,9 +42,7 @@ class Upgrader @Inject constructor(
private val taskMover: TaskMover) { private val taskMover: TaskMover) {
fun upgrade(from: Int, to: Int) { fun upgrade(from: Int, to: Int) {
if (from == 0) { if (from > 0) {
caldavDao.setupLocalAccount(context)
} else {
run(from, V4_9_5) { removeDuplicateTags() } run(from, V4_9_5) { removeDuplicateTags() }
run(from, V5_3_0) { migrateFilters() } run(from, V5_3_0) { migrateFilters() }
run(from, V6_0_beta_1) { migrateDefaultSyncList() } 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") @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> internal abstract fun getTasksToShift(calendar: String, parent: Long, from: Long, to: Long?): List<CaldavTaskContainer>
fun setupLocalAccount(context: Context): CaldavCalendar { fun setupLocalAccount(context: Context): CaldavAccount {
val account = getAccountByUuid(LOCAL) ?: createLocalAccount() val account = getLocalAccount()
return getCalendarsByAccount(account.uuid!!).getOrElse(0) { getLocalList(context, account)
createLocalList(context, account)
}
}
private fun createLocalAccount(): CaldavAccount {
val account = CaldavAccount()
account.accountType = CaldavAccount.TYPE_LOCAL
account.uuid = LOCAL
account.id = insert(account)
return account return account
} }
private fun createLocalList(context: Context, account: CaldavAccount): CaldavCalendar { fun getLocalList(context: Context) = getLocalList(context, getLocalAccount())
val list = CaldavCalendar(context.getString(R.string.default_list), UUIDHelper.newUUID())
list.account = account.uuid private fun getLocalAccount() = getAccountByUuid(LOCAL) ?: CaldavAccount().apply {
insert(list) accountType = CaldavAccount.TYPE_LOCAL
return list 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 { companion object {
const val LOCAL = "local" const val LOCAL = "local"
} }

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

Loading…
Cancel
Save