mirror of
https://github.com/immich-app/immich.git
synced 2025-12-19 17:23:21 +03:00
Compare commits
1 Commits
feature/bo
...
feat/andro
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
02456a148e |
@@ -43,8 +43,8 @@ class BackgroundEngineLock(context: Context) : BackgroundWorkerLockApi, ImmichPl
|
|||||||
|
|
||||||
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
|
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
|
||||||
super.onAttachedToEngine(binding)
|
super.onAttachedToEngine(binding)
|
||||||
checkAndEnforceBackgroundLock(binding.applicationContext)
|
|
||||||
engineCount.incrementAndGet()
|
engineCount.incrementAndGet()
|
||||||
|
checkAndEnforceBackgroundLock(binding.applicationContext)
|
||||||
Log.i(TAG, "Flutter engine attached. Attached Engines count: $engineCount")
|
Log.i(TAG, "Flutter engine attached. Attached Engines count: $engineCount")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ import android.provider.MediaStore
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.work.BackoffPolicy
|
import androidx.work.BackoffPolicy
|
||||||
import androidx.work.Constraints
|
import androidx.work.Constraints
|
||||||
|
import androidx.work.ExistingPeriodicWorkPolicy
|
||||||
import androidx.work.ExistingWorkPolicy
|
import androidx.work.ExistingWorkPolicy
|
||||||
import androidx.work.OneTimeWorkRequest
|
import androidx.work.OneTimeWorkRequestBuilder
|
||||||
|
import androidx.work.PeriodicWorkRequestBuilder
|
||||||
import androidx.work.WorkManager
|
import androidx.work.WorkManager
|
||||||
import io.flutter.embedding.engine.FlutterEngineCache
|
import io.flutter.embedding.engine.FlutterEngineCache
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
@@ -18,6 +20,7 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
|
|||||||
|
|
||||||
override fun enable() {
|
override fun enable() {
|
||||||
enqueueMediaObserver(ctx)
|
enqueueMediaObserver(ctx)
|
||||||
|
enqueuePeriodicWorker(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun saveNotificationMessage(title: String, body: String) {
|
override fun saveNotificationMessage(title: String, body: String) {
|
||||||
@@ -27,12 +30,14 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
|
|||||||
override fun configure(settings: BackgroundWorkerSettings) {
|
override fun configure(settings: BackgroundWorkerSettings) {
|
||||||
BackgroundWorkerPreferences(ctx).updateSettings(settings)
|
BackgroundWorkerPreferences(ctx).updateSettings(settings)
|
||||||
enqueueMediaObserver(ctx)
|
enqueueMediaObserver(ctx)
|
||||||
|
enqueuePeriodicWorker(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun disable() {
|
override fun disable() {
|
||||||
WorkManager.getInstance(ctx).apply {
|
WorkManager.getInstance(ctx).apply {
|
||||||
cancelUniqueWork(OBSERVER_WORKER_NAME)
|
cancelUniqueWork(OBSERVER_WORKER_NAME)
|
||||||
cancelUniqueWork(BACKGROUND_WORKER_NAME)
|
cancelUniqueWork(BACKGROUND_WORKER_NAME)
|
||||||
|
cancelUniqueWork(PERIODIC_WORKER_NAME)
|
||||||
}
|
}
|
||||||
Log.i(TAG, "Cancelled background upload tasks")
|
Log.i(TAG, "Cancelled background upload tasks")
|
||||||
}
|
}
|
||||||
@@ -40,6 +45,7 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
|
|||||||
companion object {
|
companion object {
|
||||||
private const val BACKGROUND_WORKER_NAME = "immich/BackgroundWorkerV1"
|
private const val BACKGROUND_WORKER_NAME = "immich/BackgroundWorkerV1"
|
||||||
private const val OBSERVER_WORKER_NAME = "immich/MediaObserverV1"
|
private const val OBSERVER_WORKER_NAME = "immich/MediaObserverV1"
|
||||||
|
private const val PERIODIC_WORKER_NAME = "immich/PeriodicBackgroundWorkerV1"
|
||||||
const val ENGINE_CACHE_KEY = "immich::background_worker::engine"
|
const val ENGINE_CACHE_KEY = "immich::background_worker::engine"
|
||||||
|
|
||||||
|
|
||||||
@@ -55,7 +61,7 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
|
|||||||
setRequiresCharging(settings.requiresCharging)
|
setRequiresCharging(settings.requiresCharging)
|
||||||
}.build()
|
}.build()
|
||||||
|
|
||||||
val work = OneTimeWorkRequest.Builder(MediaObserver::class.java)
|
val work = OneTimeWorkRequestBuilder<MediaObserver>()
|
||||||
.setConstraints(constraints)
|
.setConstraints(constraints)
|
||||||
.build()
|
.build()
|
||||||
WorkManager.getInstance(ctx)
|
WorkManager.getInstance(ctx)
|
||||||
@@ -67,10 +73,30 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun enqueuePeriodicWorker(ctx: Context) {
|
||||||
|
val settings = BackgroundWorkerPreferences(ctx).getSettings()
|
||||||
|
val constraints = Constraints.Builder().apply {
|
||||||
|
setRequiresCharging(settings.requiresCharging)
|
||||||
|
}.build()
|
||||||
|
|
||||||
|
val work =
|
||||||
|
PeriodicWorkRequestBuilder<PeriodicWorker>(
|
||||||
|
1,
|
||||||
|
TimeUnit.HOURS,
|
||||||
|
15,
|
||||||
|
TimeUnit.MINUTES
|
||||||
|
).setConstraints(constraints)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
WorkManager.getInstance(ctx)
|
||||||
|
.enqueueUniquePeriodicWork(PERIODIC_WORKER_NAME, ExistingPeriodicWorkPolicy.UPDATE, work)
|
||||||
|
|
||||||
|
Log.i(TAG, "Enqueued periodic background worker with name: $PERIODIC_WORKER_NAME")
|
||||||
|
}
|
||||||
|
|
||||||
fun enqueueBackgroundWorker(ctx: Context) {
|
fun enqueueBackgroundWorker(ctx: Context) {
|
||||||
val constraints = Constraints.Builder().setRequiresBatteryNotLow(true).build()
|
val constraints = Constraints.Builder().setRequiresBatteryNotLow(true).build()
|
||||||
|
val work = OneTimeWorkRequestBuilder<BackgroundWorker>()
|
||||||
val work = OneTimeWorkRequest.Builder(BackgroundWorker::class.java)
|
|
||||||
.setConstraints(constraints)
|
.setConstraints(constraints)
|
||||||
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES)
|
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES)
|
||||||
.build()
|
.build()
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package app.alextran.immich.background
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.work.Worker
|
||||||
|
import androidx.work.WorkerParameters
|
||||||
|
|
||||||
|
class PeriodicWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
|
||||||
|
private val ctx: Context = context.applicationContext
|
||||||
|
|
||||||
|
override fun doWork(): Result {
|
||||||
|
Log.i("PeriodicWorker", "Periodic worker triggered, starting background worker")
|
||||||
|
BackgroundWorkerApiImpl.enqueueBackgroundWorker(ctx)
|
||||||
|
return Result.success()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user