diff --git a/app/src/main/java/org/tasks/injection/BaseWorker.kt b/app/src/main/java/org/tasks/injection/BaseWorker.kt index 1a06b7ab9..c4661a568 100644 --- a/app/src/main/java/org/tasks/injection/BaseWorker.kt +++ b/app/src/main/java/org/tasks/injection/BaseWorker.kt @@ -14,7 +14,7 @@ abstract class BaseWorker( ) : Worker(context, workerParams) { override fun doWork(): Result { - Timber.d("%s.doWork()", javaClass.simpleName) + Timber.d("${javaClass.simpleName} $id $inputData") return try { runBlocking { run() diff --git a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt index 0bc03768e..7ee4fc97d 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt +++ b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt @@ -101,7 +101,7 @@ class WorkManagerImpl( builder.setInitialDelay(1, TimeUnit.MINUTES) } val append = getSyncJob().any { it.state == WorkInfo.State.RUNNING } - Timber.d("sync: immediate=$immediate, append=$append)") + Timber.d("sync immediate=$immediate append=$append") enqueue(workManager.beginUniqueWork( TAG_SYNC, if (append) APPEND_OR_REPLACE else REPLACE, diff --git a/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt b/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt index d133040ea..9d4ae468d 100644 --- a/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt +++ b/app/src/main/java/org/tasks/opentasks/OpenTaskContentObserver.kt @@ -8,15 +8,19 @@ import android.net.Uri import android.os.Handler import android.os.HandlerThread import dagger.hilt.android.qualifiers.ApplicationContext -import org.dmfs.tasks.contract.TaskContract.* +import org.dmfs.tasks.contract.TaskContract.Properties +import org.dmfs.tasks.contract.TaskContract.TaskLists +import org.dmfs.tasks.contract.TaskContract.Tasks import org.tasks.R +import org.tasks.preferences.Preferences import org.tasks.sync.SyncAdapters import timber.log.Timber import javax.inject.Inject class OpenTaskContentObserver @Inject constructor( - @ApplicationContext context: Context, - private val syncAdapters: SyncAdapters, + @ApplicationContext context: Context, + private val syncAdapters: SyncAdapters, + private val preferences: Preferences, ) : ContentObserver(getHandler()), SyncStatusObserver { val authority = context.getString(R.string.opentasks_authority) @@ -24,14 +28,23 @@ class OpenTaskContentObserver @Inject constructor( override fun onChange(selfChange: Boolean) = onChange(selfChange, null) override fun onChange(selfChange: Boolean, uri: Uri?) { - if (selfChange || uri == null) { - Timber.d("Ignoring onChange(selfChange = $selfChange, uri = $uri)") - return - } else { - Timber.v("onChange($selfChange, $uri)") - } + when { + selfChange || uri == null -> + Timber.v("Ignoring onChange selfChange=$selfChange uri=$uri") + + uri.getQueryParameter("caller_is_syncadapter")?.toBoolean() == true-> { + Timber.d("onChange uri=$uri") + syncAdapters.sync(immediate = true) + } - syncAdapters.syncOpenTasks() + preferences.isSyncOngoing -> + Timber.v("Ignoring onChange uri=$uri sync in progress") + + else -> { + Timber.d("onChange uri=$uri") + syncAdapters.sync(immediate = true) + } + } } override fun onStatusChanged(which: Int) { diff --git a/app/src/main/java/org/tasks/sync/Debouncer.kt b/app/src/main/java/org/tasks/sync/Debouncer.kt index 5ac88bec7..530b5ea61 100644 --- a/app/src/main/java/org/tasks/sync/Debouncer.kt +++ b/app/src/main/java/org/tasks/sync/Debouncer.kt @@ -7,14 +7,16 @@ class Debouncer(private val tag: String, private val block: suspend (Boolean) -> private var count = 0 suspend fun sync(immediate: Boolean) { - val thisCount = ++count - - delay(1000) - - if (immediate || thisCount == count) { - block(immediate) + if (immediate) { + block(true) } else { - Timber.v("debouncing $tag") + val thisCount = ++count + delay(1000) + if (thisCount == count) { + block(false) + } else { + Timber.v("debouncing $tag") + } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/tasks/sync/SyncAdapters.kt b/app/src/main/java/org/tasks/sync/SyncAdapters.kt index 1bcec6483..92ad4af0c 100644 --- a/app/src/main/java/org/tasks/sync/SyncAdapters.kt +++ b/app/src/main/java/org/tasks/sync/SyncAdapters.kt @@ -7,15 +7,15 @@ import kotlinx.coroutines.async import kotlinx.coroutines.launch import org.tasks.LocalBroadcastManager import org.tasks.R +import org.tasks.data.OpenTaskDao +import org.tasks.data.dao.CaldavDao +import org.tasks.data.dao.GoogleTaskDao import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV import org.tasks.data.entity.CaldavAccount.Companion.TYPE_ETEBASE import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.entity.CaldavAccount.Companion.TYPE_TASKS -import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.FORCE_CALDAV_SYNC -import org.tasks.data.dao.GoogleTaskDao -import org.tasks.data.OpenTaskDao import org.tasks.data.entity.SUPPRESS_SYNC import org.tasks.data.entity.Task import org.tasks.jobs.WorkManager @@ -61,15 +61,7 @@ class SyncAdapters @Inject constructor( syncStatus.sync(active) } - fun syncOpenTasks() = scope.launch { - sync.sync(true) - } - - fun sync() { - sync(false) - } - - fun sync(immediate: Boolean) = scope.launch { + fun sync(immediate: Boolean = false) = scope.launch { val caldavEnabled = async { isSyncEnabled() } val opentasksEnabled = async { isOpenTaskSyncEnabled() }