Always fetch and apply remote order and parents

Subtasks are sorted manually by default, so the app should try to remain
consistent with remote order
pull/3782/head^2
Alex Baker 4 months ago
parent 9808ca1745
commit d5cda9e84b

@ -19,7 +19,7 @@ import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase
import org.tasks.data.*
import org.tasks.data.createDueDate
import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
@ -38,7 +38,7 @@ import java.net.HttpRetryException
import java.net.SocketException
import java.net.SocketTimeoutException
import java.net.UnknownHostException
import java.util.*
import java.util.Collections
import javax.inject.Inject
import javax.net.ssl.SSLException
import kotlin.math.max
@ -132,30 +132,29 @@ class GoogleTaskSynchronizer @Inject constructor(
continue
}
fetchAndApplyRemoteChanges(gtasksInvoker, list)
if (!preferences.isPositionHackEnabled) {
googleTaskDao.reposition(caldavDao, list.uuid!!)
gtasksInvoker.updatePositions(list.uuid!!)
}
// account.etag = eTag
account.error = ""
}
if (preferences.isPositionHackEnabled) {
for (list in gtaskLists) {
val tasks = fetchPositions(gtasksInvoker, list.id)
for (task in tasks) {
@Throws(IOException::class)
private suspend fun GtasksInvoker.updatePositions(list: String) {
// Unfortunately this is necessary because Google broke the API
// https://issuetracker.google.com/issues/132432317
Timber.d("updatePositions(list=${list})")
fetchPositions(list).forEach { task ->
googleTaskDao.updatePosition(task.id, task.parent, task.position)
}
googleTaskDao.reposition(caldavDao, list.id)
}
}
// account.etag = eTag
account.error = ""
googleTaskDao.reposition(caldavDao, list)
}
@Throws(IOException::class)
private suspend fun fetchPositions(
gtasksInvoker: GtasksInvoker, listId: String): List<Task> {
private suspend fun GtasksInvoker.fetchPositions(listId: String): List<Task> {
val tasks: MutableList<Task> = ArrayList()
var nextPageToken: String? = null
do {
val taskList = gtasksInvoker.getAllPositions(listId, nextPageToken)
val taskList = getAllPositions(listId, nextPageToken)
taskList?.items?.let {
tasks.addAll(it)
}

@ -96,9 +96,6 @@ class SyncWork @AssistedInject constructor(
private val syncStatus = R.string.p_sync_ongoing
private suspend fun doSync() {
if (preferences.isManualSort) {
preferences.isPositionHackEnabled = true
}
val hasNetworkConnectivity = context.hasNetworkConnectivity()
if (hasNetworkConnectivity) {
googleTaskJobs().plus(caldavJobs()).awaitAll()

@ -467,10 +467,6 @@ class Preferences @JvmOverloads constructor(
fun <T> getPrefs(c: Class<T>): Map<String, T> =
prefs.all.filter { (_, value) -> c.isInstance(value) } as Map<String, T>
var isPositionHackEnabled: Boolean
get() = getLong(R.string.p_google_tasks_position_hack, 0) > currentTimeMillis() - ONE_WEEK
set(value) { setLong(R.string.p_google_tasks_position_hack, if (value) currentTimeMillis() else 0) }
override var isManualSort: Boolean
get() = getBoolean(R.string.p_manual_sort, false)
set(value) { setBoolean(R.string.p_manual_sort, value) }

@ -373,7 +373,6 @@
<string name="p_linkify_task_edit">linkify_task_edit</string>
<string name="preference_screen">preference_screen</string>
<string name="p_add_to_top">google_tasks_add_to_top</string>
<string name="p_google_tasks_position_hack">google_tasks_position_hack</string>
<string name="p_wearable_notifications">wearable_notifications</string>
<string name="p_notified_oauth_error">notified_oauth_error_%1$s_%2$s</string>
<string name="p_chip_appearance">chip_appearance</string>

Loading…
Cancel
Save