Fix exif task starting prematurely after enabling in settings

This commit is contained in:
Ming Ming 2021-09-12 18:59:20 +08:00
parent 3183efafb3
commit 6372d65f1f
2 changed files with 23 additions and 10 deletions

View file

@ -70,12 +70,14 @@ class _HomePhotosState extends State<HomePhotos>
_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<HomePhotos>
} 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<HomePhotos>
}
}
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<File> files) {
_backingFiles = files
@ -633,6 +649,8 @@ class _HomePhotosState extends State<HomePhotos>
AppEventListener<MetadataTaskStateChangedEvent>(
_onMetadataTaskStateChanged);
var _metadataTaskState = MetadataTaskManager().state;
late final _prefUpdatedListener =
AppEventListener<PrefUpdatedEvent>(_onPrefUpdated);
late final _metadataTaskIconController = AnimationController(
upperBound: 2 * math.pi,
duration: const Duration(seconds: 10),

View file

@ -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<Settings> {
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),