Code review

pull/2146/head
Alex Baker 1 year ago
parent 120eb4dd30
commit 3131c56651

@ -104,7 +104,7 @@ class FilterViewHolder internal constructor(
}
return when (filter) {
is TagFilter -> R.drawable.ic_outline_label_24px
is GtasksFilter -> R.drawable.ic_list_24px
is GtasksFilter,
is CaldavFilter -> R.drawable.ic_list_24px
is CustomFilter -> R.drawable.ic_outline_filter_list_24px
is PlaceFilter -> R.drawable.ic_outline_place_24px

@ -251,7 +251,7 @@ open class TaskAdapter(
)
} else {
task.parent = newParent.id
task.caldavTask = CaldavTask(task.id, list)
task.caldavTask = CaldavTask(task.id, list, remoteId = null)
googleTaskDao.insertAndShift(task.task, task.caldavTask, newTasksOnTop)
}
taskDao.touch(task.id)

@ -72,10 +72,6 @@ public class GtasksFilter extends Filter {
return values;
}
public String getListId() {
return list.getUuid();
}
public String getAccount() {
return list.getAccount();
}

@ -56,7 +56,7 @@ class TaskCreator @Inject constructor(
if (task.hasTransitory(GoogleTask.KEY)) {
googleTaskDao.insertAndShift(
task,
CaldavTask(task.id, task.getTransitory<String>(GoogleTask.KEY)!!),
CaldavTask(task.id, task.getTransitory<String>(GoogleTask.KEY)!!, remoteId = null),
addToTop
)
} else if (task.hasTransitory(CaldavTask.KEY)) {
@ -67,7 +67,7 @@ class TaskCreator @Inject constructor(
if (remoteList is GtasksFilter) {
googleTaskDao.insertAndShift(
task,
CaldavTask(task.id, remoteList.remoteId),
CaldavTask(task.id, remoteList.remoteId, remoteId = null),
addToTop
)
} else if (remoteList is CaldavFilter) {

@ -57,7 +57,11 @@ class TaskDuplicator @Inject constructor(
val googleTask = googleTaskDao.getByTaskId(originalId)
val addToTop = preferences.addTasksToTop()
if (googleTask != null) {
googleTaskDao.insertAndShift(clone, CaldavTask(clone.id, googleTask.calendar!!), addToTop)
googleTaskDao.insertAndShift(
clone,
CaldavTask(clone.id, googleTask.calendar!!, remoteId = null),
addToTop
)
}
val caldavTask = caldavDao.getTask(originalId)
if (caldavTask != null) {

@ -89,9 +89,13 @@ class TaskMover @Inject constructor(
when(selected) {
is GtasksFilter -> {
val listId = selected.remoteId
googleTaskDao.insertAndShift(task, CaldavTask(id, listId), preferences.addTasksToTop())
googleTaskDao.insertAndShift(
task = task,
caldavTask = CaldavTask(id, listId, remoteId = null),
top = preferences.addTasksToTop()
)
children.takeIf { it.isNotEmpty() }
?.map { CaldavTask(it, listId) }
?.map { CaldavTask(task = it, calendar = listId, remoteId = null) }
?.let { googleTaskDao.insert(it) }
}
is CaldavFilter -> {
@ -172,11 +176,11 @@ class TaskMover @Inject constructor(
val listId = filter.remoteId
googleTaskDao.insertAndShift(
task,
CaldavTask(id, listId, remoteId = null, `object` = null),
CaldavTask(id, listId, remoteId = null),
preferences.addTasksToTop()
)
children.takeIf { it.isNotEmpty() }
?.map { CaldavTask(it, listId, remoteId = null, `object` = null) }
?.map { CaldavTask(it, listId, remoteId = null) }
?.let { googleTaskDao.insert(it) }
}
}

@ -35,7 +35,6 @@ class Upgrader @Inject constructor(
private val filterDao: FilterDao,
private val defaultFilterProvider: DefaultFilterProvider,
private val googleTaskListDao: GoogleTaskListDao,
private val googleTaskDao: GoogleTaskDao,
private val userActivityDao: UserActivityDao,
private val taskAttachmentDao: TaskAttachmentDao,
private val caldavDao: CaldavDao,
@ -56,7 +55,6 @@ class Upgrader @Inject constructor(
run(from, V4_9_5) { removeDuplicateTags() }
run(from, V5_3_0) { migrateFilters() }
run(from, V6_0_beta_1) { migrateDefaultSyncList() }
run(from, V6_0_beta_2) { migrateGoogleTaskAccount() }
run(from, V6_4) { migrateUris() }
run(from, V6_7) { this.migrateGoogleTaskFilters() }
run(from, V6_8_1) { this.migrateCaldavFilters() }
@ -242,22 +240,6 @@ class Upgrader @Inject constructor(
}
}
private suspend fun migrateGoogleTaskAccount() {
// TODO: migrate google task accounts?
// val account = preferences.getStringValue("gtasks_user")
// if (!isNullOrEmpty(account)) {
// val caldavAccount = CaldavAccount()
// caldavAccount.uuid = account
// caldavAccount.name = account
// caldavAccount.username = account
// caldavDao.insert(caldavAccount)
// for (list in googleTaskListDao.getAllLists()) {
// list.account = account
// googleTaskListDao.insertOrReplace(list)
// }
// }
}
private suspend fun migrateUris() {
migrateUriPreference(R.string.p_backup_dir)
migrateUriPreference(R.string.p_attachment_dir)
@ -337,7 +319,6 @@ class Upgrader @Inject constructor(
private const val V4_9_5 = 434
private const val V5_3_0 = 491
private const val V6_0_beta_1 = 522
private const val V6_0_beta_2 = 523
const val V6_4 = 546
private const val V6_7 = 585
private const val V6_8_1 = 607

@ -191,7 +191,6 @@ class TasksJsonImporter @Inject constructor(
task = taskId,
calendar = googleTask.listId,
remoteId = googleTask.remoteId,
`object` = null,
).apply {
remoteOrder = googleTask.remoteOrder
remoteParent = googleTask.remoteParent

@ -28,13 +28,12 @@ import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.data.Task
import org.tasks.compose.*
import org.tasks.data.CaldavTask
import org.tasks.data.TaskContainer
@Composable
fun SubtaskRow(
originalFilter: Filter?,
filter: Filter?,
googleTask: CaldavTask?,
hasParent: Boolean,
desaturate: Boolean,
existingSubtasks: List<TaskContainer>,
@ -62,9 +61,11 @@ fun SubtaskRow(
},
content = {
Column {
val isGoogleTaskChild =
filter is GtasksFilter && hasParent && googleTask?.calendar == filter.remoteId
hasParent &&
filter is GtasksFilter &&
originalFilter is GtasksFilter &&
originalFilter.remoteId == filter.remoteId
if (isGoogleTaskChild) {
DisabledText(
text = stringResource(id = org.tasks.R.string.subtasks_multilevel_google_task),
@ -208,8 +209,8 @@ fun ExistingSubtaskRow(
fun NoSubtasks() {
MdcTheme {
SubtaskRow(
originalFilter = null,
filter = null,
googleTask = null,
hasParent = false,
desaturate = true,
existingSubtasks = emptyList(),
@ -230,8 +231,8 @@ fun NoSubtasks() {
fun SubtasksPreview() {
MdcTheme {
SubtaskRow(
originalFilter = null,
filter = null,
googleTask = null,
hasParent = false,
desaturate = true,
existingSubtasks = listOf(

@ -65,7 +65,7 @@ class CaldavTask {
}
@Ignore
constructor(task: Long, calendar: String?, remoteId: String?, `object`: String?) {
constructor(task: Long, calendar: String?, remoteId: String?, `object`: String? = null) {
this.task = task
this.calendar = calendar
this.remoteId = remoteId
@ -75,7 +75,7 @@ class CaldavTask {
fun isDeleted() = deleted > 0
override fun toString(): String =
"CaldavTask(id=$id, task=$task, calendar=$calendar, `object`=$`object`, remoteId=$remoteId, etag=$etag, lastSync=$lastSync, deleted=$deleted, remoteParent=$remoteParent)"
"CaldavTask(id=$id, task=$task, calendar=$calendar, `object`=$`object`, remoteId=$remoteId, etag=$etag, lastSync=$lastSync, deleted=$deleted, remoteParent=$remoteParent, isMoved=$isMoved, remoteOrder=$remoteOrder)"
companion object {
const val KEY = "caldav"

@ -55,9 +55,6 @@ WHERE recurring = 1
ids.eachChunk(this::markDeletedInternal)
}
@Query("SELECT * FROM caldav_lists WHERE cdl_account = :account ORDER BY cdl_name ASC")
abstract suspend fun getLists(account: String): List<CaldavCalendar>
@Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_deleted = 0")
internal abstract suspend fun getActiveCaldavTasks(calendar: String): List<Long>

@ -2,7 +2,6 @@ package org.tasks.data
import androidx.room.*
import com.todoroo.astrid.data.Task
import kotlinx.coroutines.flow.Flow
import org.tasks.data.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
@Dao
@ -63,9 +62,6 @@ abstract class GoogleTaskDao {
@Query("SELECT caldav_tasks.* FROM caldav_tasks INNER JOIN caldav_lists ON cdl_uuid = cd_calendar INNER JOIN caldav_accounts ON cda_uuid = cdl_account WHERE cd_task = :taskId AND cd_deleted = 0 AND cda_account_type = $TYPE_GOOGLE_TASKS LIMIT 1")
abstract suspend fun getByTaskId(taskId: Long): CaldavTask?
@Query("SELECT caldav_tasks.* FROM caldav_tasks INNER JOIN caldav_lists ON cdl_uuid = cd_calendar INNER JOIN caldav_accounts ON cda_uuid = cdl_account WHERE cd_task = :taskId AND cd_deleted = 0 AND cda_account_type = $TYPE_GOOGLE_TASKS LIMIT 1")
abstract fun watchGoogleTask(taskId: Long): Flow<CaldavTask?>
@Update
abstract suspend fun update(googleTask: CaldavTask)

@ -36,7 +36,6 @@ internal object TaskListQueryRecursive {
private val SUBTASK_QUERY =
QueryTemplate()
.join(Join.inner(RECURSIVE, Task.PARENT.eq(RECURSIVE_TASK)))
// .join(Join.left(CaldavTask.TABLE, Criterion.and(CaldavTask.TASK.eq(Task.ID), CaldavTask.DELETED.eq(0))))
.where(activeAndVisible())
fun getRecursiveQuery(
@ -46,19 +45,15 @@ internal object TaskListQueryRecursive {
var joinedQuery = JOINS
var where = " WHERE recursive_tasks.hidden = 0"
val parentQuery: String
val subtaskQuery: QueryTemplate
when (filter) {
is CaldavFilter -> {
parentQuery = newCaldavQuery(filter.uuid)
subtaskQuery = SUBTASK_QUERY
}
is GtasksFilter -> {
parentQuery = newCaldavQuery(filter.list.uuid!!)
subtaskQuery = SUBTASK_QUERY
}
else -> {
parentQuery = PermaSql.replacePlaceholdersForQuery(filter.getSqlQuery())
subtaskQuery = SUBTASK_QUERY
joinedQuery += " LEFT JOIN (SELECT task, max(indent) AS max_indent FROM recursive_tasks GROUP BY task) AS recursive_indents ON recursive_indents.task = tasks._id "
where += " AND indent = max_indent "
}
@ -96,7 +91,7 @@ internal object TaskListQueryRecursive {
SELECT tasks._id, $parentCompleted as parent_complete, 0 as subtask_complete, $completionSort as completion_sort, 0 as parent, tasks.collapsed as collapsed, 0 as hidden, 0 AS sort_indent, UPPER(tasks.title) AS sort_title, $sortSelect, $sortField as primary_sort, NULL as secondarySort, ${SortHelper.getSortGroup(sortMode)} FROM tasks
$parentQuery
UNION ALL SELECT tasks._id, recursive_tasks.parent_complete, $parentCompleted as subtask_complete, $completionSort as completion_sort, recursive_tasks.task as parent, tasks.collapsed as collapsed, CASE WHEN recursive_tasks.collapsed > 0 OR recursive_tasks.hidden > 0 THEN 1 ELSE 0 END as hidden, recursive_tasks.indent+1 AS sort_indent, UPPER(tasks.title) AS sort_title, $sortSelect, recursive_tasks.primary_sort as primary_sort, $sortField as secondary_sort, recursive_tasks.sort_group FROM tasks
$subtaskQuery
$SUBTASK_QUERY
ORDER BY parent_complete ASC, sort_indent DESC, subtask_complete ASC, completion_sort DESC, ${SortHelper.orderForSortTypeRecursive(sortMode, reverseSort)}
) SELECT * FROM recursive_tasks
""".trimIndent()

@ -146,7 +146,6 @@ class FilterCriteriaProvider @Inject constructor(
context.getString(R.string.custom_filter_is_subtask),
select(Task.ID)
.from(Task.TABLE)
.join(inner(CaldavTask.TABLE, CaldavTask.TASK.eq(Task.ID)))
.where(field("${Task.PARENT}>0").eq(1))
.toString()
)

@ -170,7 +170,7 @@ class GoogleTaskSynchronizer @Inject constructor(
@Throws(IOException::class)
private suspend fun pushLocalChanges(account: CaldavAccount, gtasksInvoker: GtasksInvoker) {
val tasks = taskDao.getGoogleTasksToPush(account.username!!)
val tasks = taskDao.getGoogleTasksToPush(account.uuid!!)
for (task in tasks) {
pushTask(task, gtasksInvoker)
}
@ -302,7 +302,7 @@ class GoogleTaskSynchronizer @Inject constructor(
var googleTask = googleTaskDao.getByRemoteId(remoteId)
var task: com.todoroo.astrid.data.Task? = null
if (googleTask == null) {
googleTask = CaldavTask(0, "")
googleTask = CaldavTask(0, "", remoteId = null)
} else if (googleTask.task > 0) {
task = taskDao.fetch(googleTask.task)
}

@ -115,7 +115,7 @@ class DefaultFilterProvider @Inject constructor(
TYPE_FILTER -> getFilterPreference(filterType, getBuiltInFilterId(filter))
TYPE_CUSTOM_FILTER -> getFilterPreference(filterType, (filter as CustomFilter).id)
TYPE_TAG -> getFilterPreference(filterType, (filter as TagFilter).uuid)
TYPE_GOOGLE_TASKS -> getFilterPreference(filterType, (filter as GtasksFilter).listId)
TYPE_GOOGLE_TASKS -> getFilterPreference(filterType, (filter as GtasksFilter).remoteId)
TYPE_CALDAV -> getFilterPreference(filterType, (filter as CaldavFilter).uuid)
TYPE_LOCATION -> getFilterPreference(filterType, (filter as PlaceFilter).uid)
else -> null

@ -70,8 +70,6 @@ class TasksContentProvider : ContentProvider() {
companion object {
private const val TODO_AGENDA_TABLES =
"""${Task.TABLE_NAME}
LEFT JOIN google_tasks ON gt_task = _id
LEFT JOIN google_task_lists ON gtl_remote_id = gt_list_id
LEFT JOIN caldav_tasks ON cd_task = _id
LEFT JOIN caldav_lists ON cdl_uuid = cd_calendar"""
private const val AUTHORITY = BuildConfig.APPLICATION_ID

@ -55,8 +55,8 @@ class SubtaskControlSet : TaskEditControlFragment() {
setContent {
MdcTheme {
SubtaskRow(
originalFilter = viewModel.originalList,
filter = viewModel.selectedList.collectAsStateLifecycleAware().value,
googleTask = googleTaskDao.watchGoogleTask(viewModel.task.id).collectAsStateLifecycleAware(initial = null).value,
hasParent = viewModel.hasParent,
desaturate = preferences.desaturateDarkMode,
existingSubtasks = listViewModel.tasks.observeAsState(initial = emptyList()).value,

@ -130,7 +130,7 @@ class TaskEditViewModel @Inject constructor(
}
var selectedCalendar = MutableStateFlow(originalCalendar)
private val originalList: Filter = savedStateHandle[TaskEditFragment.EXTRA_LIST]!!
val originalList: Filter = savedStateHandle[TaskEditFragment.EXTRA_LIST]!!
var selectedList = MutableStateFlow(originalList)
private var originalLocation: Location? = savedStateHandle[TaskEditFragment.EXTRA_LOCATION]
@ -294,7 +294,7 @@ class TaskEditViewModel @Inject constructor(
firebase?.addTask("subtasks")
when (selectedList.value) {
is GtasksFilter -> {
val googleTask = CaldavTask(subtask.id, (selectedList.value as GtasksFilter).remoteId)
val googleTask = CaldavTask(subtask.id, (selectedList.value as GtasksFilter).remoteId, remoteId = null)
subtask.parent = task.id
googleTask.isMoved = true
googleTaskDao.insertAndShift(subtask, googleTask, false)

Loading…
Cancel
Save