diff --git a/lib/widget/home_photos.dart b/lib/widget/home_photos.dart index 276ab03b..abf67c69 100644 --- a/lib/widget/home_photos.dart +++ b/lib/widget/home_photos.dart @@ -70,12 +70,14 @@ class _HomePhotosState extends State _thumbZoomLevel = Pref.inst().getHomePhotosZoomLevelOr(0); _initBloc(); _metadataTaskStateChangedListener.begin(); + _prefUpdatedListener.begin(); } @override dispose() { _metadataTaskIconController.stop(); _metadataTaskStateChangedListener.end(); + _prefUpdatedListener.end(); super.dispose(); } @@ -325,10 +327,7 @@ class _HomePhotosState extends State } else if (state is ScanDirBlocSuccess || state is ScanDirBlocLoading) { _transformItems(state.files); if (state is ScanDirBlocSuccess) { - if (Pref.inst().isEnableExifOr() && !_hasFiredMetadataTask.value) { - MetadataTaskManager().addTask(MetadataTask(widget.account)); - _hasFiredMetadataTask.value = true; - } + _tryStartMetadataTask(); } } else if (state is ScanDirBlocFailure) { _transformItems(state.files); @@ -487,6 +486,23 @@ class _HomePhotosState extends State } } + void _onPrefUpdated(PrefUpdatedEvent ev) { + if (ev.key == PrefKey.enableExif && ev.value == true) { + _tryStartMetadataTask(ignoreFired: true); + } + } + + void _tryStartMetadataTask({ + bool ignoreFired = false, + }) { + if (_bloc.state is ScanDirBlocSuccess && + Pref.inst().isEnableExifOr(false) && + (!_hasFiredMetadataTask.value || ignoreFired)) { + MetadataTaskManager().addTask(MetadataTask(widget.account)); + _hasFiredMetadataTask.value = true; + } + } + /// Transform a File list to grid items void _transformItems(List files) { _backingFiles = files @@ -633,6 +649,8 @@ class _HomePhotosState extends State AppEventListener( _onMetadataTaskStateChanged); var _metadataTaskState = MetadataTaskManager().state; + late final _prefUpdatedListener = + AppEventListener(_onPrefUpdated); late final _metadataTaskIconController = AnimationController( upperBound: 2 * math.pi, duration: const Duration(seconds: 10), diff --git a/lib/widget/settings.dart b/lib/widget/settings.dart index fc11137d..436aec74 100644 --- a/lib/widget/settings.dart +++ b/lib/widget/settings.dart @@ -8,7 +8,6 @@ import 'package:nc_photos/debug_util.dart'; import 'package:nc_photos/event/event.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/language_util.dart' as language_util; -import 'package:nc_photos/metadata_task_manager.dart'; import 'package:nc_photos/mobile/android/android_info.dart'; import 'package:nc_photos/mobile/notification.dart'; import 'package:nc_photos/platform/k.dart' as platform_k; @@ -322,11 +321,7 @@ class _SettingsState extends State { setState(() { _isEnableExif = value; }); - if (await Pref.inst().setEnableExif(value)) { - if (value) { - MetadataTaskManager().addTask(MetadataTask(widget.account)); - } - } else { + if (!await Pref.inst().setEnableExif(value)) { _log.severe("[_setExifSupport] Failed writing pref"); SnackBarManager().showSnackBar(SnackBar( content: Text(L10n.global().writePreferenceFailureNotification),