Skip to content

Commit d4b110f

Browse files
fix: migrate backup delay from old timeline (#22327)
1 parent f7acf18 commit d4b110f

File tree

4 files changed

+54
-39
lines changed

4 files changed

+54
-39
lines changed

mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerApiImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
4747
addContentUriTrigger(MediaStore.Video.Media.INTERNAL_CONTENT_URI, true)
4848
addContentUriTrigger(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true)
4949
setTriggerContentUpdateDelay(settings.minimumDelaySeconds, TimeUnit.SECONDS)
50-
setTriggerContentMaxDelay(settings.minimumDelaySeconds * 10, TimeUnit.MINUTES)
50+
setTriggerContentMaxDelay(settings.minimumDelaySeconds * 10, TimeUnit.SECONDS)
5151
setRequiresCharging(settings.requiresCharging)
5252
}.build()
5353

mobile/android/app/src/main/kotlin/app/alextran/immich/background/BackgroundWorkerPreferences.kt

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,47 @@ import android.content.SharedPreferences
55
import androidx.core.content.edit
66

77
class BackgroundWorkerPreferences(private val ctx: Context) {
8-
companion object {
9-
const val SHARED_PREF_NAME = "Immich::BackgroundWorker"
10-
private const val SHARED_PREF_MIN_DELAY_KEY = "BackgroundWorker::minDelaySeconds"
11-
private const val SHARED_PREF_REQUIRE_CHARGING_KEY = "BackgroundWorker::requireCharging"
12-
private const val SHARED_PREF_LOCK_KEY = "BackgroundWorker::isLocked"
13-
14-
private const val DEFAULT_MIN_DELAY_SECONDS = 30L
15-
private const val DEFAULT_REQUIRE_CHARGING = false
8+
companion object {
9+
const val SHARED_PREF_NAME = "Immich::BackgroundWorker"
10+
private const val SHARED_PREF_MIN_DELAY_KEY = "BackgroundWorker::minDelaySeconds"
11+
private const val SHARED_PREF_REQUIRE_CHARGING_KEY = "BackgroundWorker::requireCharging"
12+
private const val SHARED_PREF_LOCK_KEY = "BackgroundWorker::isLocked"
13+
14+
private const val DEFAULT_MIN_DELAY_SECONDS = 30L
15+
private const val DEFAULT_REQUIRE_CHARGING = false
16+
}
17+
18+
private val sp: SharedPreferences by lazy {
19+
ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)
20+
}
21+
22+
fun updateSettings(settings: BackgroundWorkerSettings) {
23+
sp.edit {
24+
putLong(SHARED_PREF_MIN_DELAY_KEY, settings.minimumDelaySeconds)
25+
putBoolean(SHARED_PREF_REQUIRE_CHARGING_KEY, settings.requiresCharging)
1626
}
17-
18-
private val sp: SharedPreferences by lazy {
19-
ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)
20-
}
21-
22-
fun updateSettings(settings: BackgroundWorkerSettings) {
23-
sp.edit {
24-
putLong(SHARED_PREF_MIN_DELAY_KEY, settings.minimumDelaySeconds)
25-
putBoolean(SHARED_PREF_REQUIRE_CHARGING_KEY, settings.requiresCharging)
26-
}
27-
}
28-
29-
fun getSettings(): BackgroundWorkerSettings {
30-
return BackgroundWorkerSettings(
31-
minimumDelaySeconds = sp.getLong(SHARED_PREF_MIN_DELAY_KEY, DEFAULT_MIN_DELAY_SECONDS),
32-
requiresCharging = sp.getBoolean(
33-
SHARED_PREF_REQUIRE_CHARGING_KEY,
34-
DEFAULT_REQUIRE_CHARGING
35-
),
36-
)
37-
}
38-
39-
fun setLocked(paused: Boolean) {
40-
sp.edit {
41-
putBoolean(SHARED_PREF_LOCK_KEY, paused)
42-
}
27+
}
28+
29+
fun getSettings(): BackgroundWorkerSettings {
30+
val delaySeconds = sp.getLong(SHARED_PREF_MIN_DELAY_KEY, DEFAULT_MIN_DELAY_SECONDS)
31+
32+
return BackgroundWorkerSettings(
33+
minimumDelaySeconds = if (delaySeconds >= 1000) delaySeconds / 1000 else delaySeconds,
34+
requiresCharging = sp.getBoolean(
35+
SHARED_PREF_REQUIRE_CHARGING_KEY,
36+
DEFAULT_REQUIRE_CHARGING
37+
),
38+
)
39+
}
40+
41+
fun setLocked(paused: Boolean) {
42+
sp.edit {
43+
putBoolean(SHARED_PREF_LOCK_KEY, paused)
4344
}
45+
}
4446

45-
fun isLocked(): Boolean {
46-
return sp.getBoolean(SHARED_PREF_LOCK_KEY, true)
47-
}
47+
fun isLocked(): Boolean {
48+
return sp.getBoolean(SHARED_PREF_LOCK_KEY, true)
49+
}
4850
}
4951

mobile/lib/pages/common/change_experience.page.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
1818
import 'package:immich_mobile/providers/infrastructure/platform.provider.dart';
1919
import 'package:immich_mobile/providers/infrastructure/readonly_mode.provider.dart';
2020
import 'package:immich_mobile/providers/websocket.provider.dart';
21+
import 'package:immich_mobile/services/app_settings.service.dart';
2122
import 'package:immich_mobile/services/background.service.dart';
2223
import 'package:immich_mobile/utils/migration.dart';
2324
import 'package:logging/logging.dart';
@@ -93,6 +94,10 @@ class _ChangeExperiencePageState extends ConsumerState<ChangeExperiencePage> {
9394

9495
await ref.read(driftProvider).reset();
9596
await Store.put(StoreKey.shouldResetSync, true);
97+
final delay = Store.get(StoreKey.backupTriggerDelay, AppSettingsEnum.backupTriggerDelay.defaultValue);
98+
if (delay >= 1000) {
99+
await Store.put(StoreKey.backupTriggerDelay, (delay / 1000).toInt());
100+
}
96101
final permission = await ref.read(galleryPermissionNotifier.notifier).requestGalleryPermission();
97102

98103
if (permission.isGranted) {

mobile/lib/utils/migration.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ import 'package:immich_mobile/infrastructure/entities/store.entity.drift.dart';
2222
import 'package:immich_mobile/infrastructure/entities/user.entity.dart';
2323
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
2424
import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart';
25+
import 'package:immich_mobile/services/app_settings.service.dart';
2526
import 'package:immich_mobile/utils/debug_print.dart';
2627
import 'package:immich_mobile/utils/diff.dart';
2728
import 'package:isar/isar.dart';
2829
// ignore: import_rule_photo_manager
2930
import 'package:photo_manager/photo_manager.dart';
3031

31-
const int targetVersion = 16;
32+
const int targetVersion = 17;
3233

3334
Future<void> migrateDatabaseIfNeeded(Isar db, Drift drift) async {
3435
final hasVersion = Store.tryGet(StoreKey.version) != null;
@@ -64,6 +65,13 @@ Future<void> migrateDatabaseIfNeeded(Isar db, Drift drift) async {
6465

6566
await handleBetaMigration(version, await _isNewInstallation(db, drift), SyncStreamRepository(drift));
6667

68+
if (version < 17 && Store.isBetaTimelineEnabled) {
69+
final delay = Store.get(StoreKey.backupTriggerDelay, AppSettingsEnum.backupTriggerDelay.defaultValue);
70+
if (delay >= 1000) {
71+
await Store.put(StoreKey.backupTriggerDelay, (delay / 1000).toInt());
72+
}
73+
}
74+
6775
if (targetVersion >= 12) {
6876
await Store.put(StoreKey.version, targetVersion);
6977
return;

0 commit comments

Comments
 (0)