Skip to content

Commit c946d92

Browse files
committed
Added PeriodicLocalSyncWorker
Signed-off-by: Arnau Mora <arnyminerz@proton.me>
1 parent b080d90 commit c946d92

File tree

6 files changed

+51
-13
lines changed

6 files changed

+51
-13
lines changed

app/src/main/java/at/bitfire/icsdroid/AppAccount.kt

+4-7
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import android.content.Context
1111
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
1212
import android.provider.CalendarContract
1313
import android.util.Log
14-
import at.bitfire.icsdroid.worker.PeriodicSyncWorker
14+
import at.bitfire.icsdroid.worker.BaseSyncWorker
1515
import kotlinx.coroutines.channels.Channel
1616
import kotlinx.coroutines.channels.awaitClose
1717
import kotlinx.coroutines.flow.buffer
@@ -81,13 +81,10 @@ object AppAccount {
8181
.putLong(KEY_SYNC_INTERVAL, syncInterval)
8282
.apply()
8383

84-
// set up periodic worker
85-
PeriodicSyncWorker.setInterval(
84+
// set up periodic workers
85+
BaseSyncWorker.setInterval(
8686
context,
87-
if (syncInterval == SYNC_INTERVAL_MANUALLY)
88-
null
89-
else
90-
syncInterval
87+
syncInterval.takeUnless { syncInterval == SYNC_INTERVAL_MANUALLY }
9188
)
9289
}
9390

app/src/main/java/at/bitfire/icsdroid/worker/BaseSyncWorker.kt

+8
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ open class BaseSyncWorker(
8888
wm.cancelUniqueWork(NetworkSyncWorker.NAME)
8989
wm.cancelUniqueWork(LocalSyncWorker.NAME)
9090
}
91+
92+
/**
93+
* Sets the interval of both [PeriodicNetworkSyncWorker] and [PeriodicLocalSyncWorker].
94+
*/
95+
fun setInterval(context: Context, seconds: Long?) {
96+
PeriodicNetworkSyncWorker.setInterval(context, seconds)
97+
PeriodicLocalSyncWorker.setInterval(context, seconds)
98+
}
9199
}
92100

93101
private val database = AppDatabase.getInstance(applicationContext)

app/src/main/java/at/bitfire/icsdroid/worker/LocalSyncWorker.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import at.bitfire.icsdroid.db.entity.Subscription
1212
* Synchronizes all subscriptions from local fs.
1313
* Always runs, regardless of current network condition, and filters local URLs (not http(s)).
1414
*/
15-
class LocalSyncWorker(
15+
open class LocalSyncWorker(
1616
context: Context,
1717
workerParams: WorkerParameters
1818
) : BaseSyncWorker(context, workerParams) {

app/src/main/java/at/bitfire/icsdroid/worker/NetworkSyncWorker.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import at.bitfire.icsdroid.db.entity.Subscription
2020
* Synchronizes all subscriptions with their respective servers.
2121
* Only runs if the network is available, and filters remote URLs (http(s)).
2222
*/
23-
class NetworkSyncWorker(
23+
open class NetworkSyncWorker(
2424
context: Context,
2525
workerParams: WorkerParameters
2626
) : BaseSyncWorker(context, workerParams) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/***************************************************************************************************
2+
* Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
3+
**************************************************************************************************/
4+
5+
package at.bitfire.icsdroid.worker
6+
7+
import android.content.Context
8+
import androidx.work.ExistingPeriodicWorkPolicy
9+
import androidx.work.PeriodicWorkRequestBuilder
10+
import androidx.work.WorkManager
11+
import androidx.work.WorkerParameters
12+
import java.time.Duration
13+
14+
class PeriodicLocalSyncWorker(
15+
context: Context,
16+
workerParams: WorkerParameters
17+
): LocalSyncWorker(context, workerParams) {
18+
19+
companion object {
20+
private const val NAME = "PeriodicLocalSync"
21+
22+
fun setInterval(context: Context, seconds: Long?) {
23+
val wm = WorkManager.getInstance(context)
24+
25+
if (seconds != null) {
26+
val request = PeriodicWorkRequestBuilder<PeriodicLocalSyncWorker>(Duration.ofSeconds(seconds))
27+
.build()
28+
wm.enqueueUniquePeriodicWork(NAME, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, request)
29+
} else
30+
wm.cancelUniqueWork(NAME)
31+
}
32+
}
33+
}

app/src/main/java/at/bitfire/icsdroid/worker/PeriodicSyncWorker.kt app/src/main/java/at/bitfire/icsdroid/worker/PeriodicNetworkSyncWorker.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,19 @@ import androidx.work.WorkManager
1313
import androidx.work.WorkerParameters
1414
import java.time.Duration
1515

16-
class PeriodicSyncWorker(
16+
class PeriodicNetworkSyncWorker(
1717
context: Context,
1818
workerParams: WorkerParameters
19-
): BaseSyncWorker(context, workerParams) {
19+
): NetworkSyncWorker(context, workerParams) {
2020

2121
companion object {
22-
private const val NAME = "PeriodicSync"
22+
private const val NAME = "PeriodicNetworkSync"
2323

2424
fun setInterval(context: Context, seconds: Long?) {
2525
val wm = WorkManager.getInstance(context)
2626

2727
if (seconds != null) {
28-
val request = PeriodicWorkRequestBuilder<PeriodicSyncWorker>(Duration.ofSeconds(seconds))
28+
val request = PeriodicWorkRequestBuilder<PeriodicNetworkSyncWorker>(Duration.ofSeconds(seconds))
2929
.setConstraints(Constraints.Builder()
3030
.setRequiredNetworkType(NetworkType.CONNECTED) // network connection is usually required for synchronization
3131
.build())

0 commit comments

Comments
 (0)