From df45b237055c1ac2c23051c1c60201fed7967c22 Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Mon, 13 Sep 2021 01:30:09 +0800 Subject: [PATCH] Show metadata task progress --- lib/widget/home_photos.dart | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/widget/home_photos.dart b/lib/widget/home_photos.dart index abf67c69..09404153 100644 --- a/lib/widget/home_photos.dart +++ b/lib/widget/home_photos.dart @@ -71,6 +71,7 @@ class _HomePhotosState extends State _initBloc(); _metadataTaskStateChangedListener.begin(); _prefUpdatedListener.begin(); + _filePropertyUpdatedListener.begin(); } @override @@ -78,6 +79,7 @@ class _HomePhotosState extends State _metadataTaskIconController.stop(); _metadataTaskStateChangedListener.end(); _prefUpdatedListener.end(); + _filePropertyUpdatedListener.end(); super.dispose(); } @@ -270,7 +272,8 @@ class _HomePhotosState extends State ), const SizedBox(width: 4), Text( - L10n.global().metadataTaskProcessingNotification, + L10n.global().metadataTaskProcessingNotification + + _getMetadataTaskProgressString(), style: TextStyle(fontSize: 12), ), ], @@ -479,6 +482,9 @@ class _HomePhotosState extends State } void _onMetadataTaskStateChanged(MetadataTaskStateChangedEvent ev) { + if (ev.state == MetadataTaskState.idle) { + _metadataTaskProcessCount = 0; + } if (ev.state != _metadataTaskState) { setState(() { _metadataTaskState = ev.state; @@ -492,6 +498,15 @@ class _HomePhotosState extends State } } + void _onFilePropertyUpdated(FilePropertyUpdatedEvent ev) { + if (!ev.hasAnyProperties([FilePropertyUpdatedEvent.propMetadata])) { + return; + } + setState(() { + ++_metadataTaskProcessCount; + }); + } + void _tryStartMetadataTask({ bool ignoreFired = false, }) { @@ -499,6 +514,9 @@ class _HomePhotosState extends State Pref.inst().isEnableExifOr(false) && (!_hasFiredMetadataTask.value || ignoreFired)) { MetadataTaskManager().addTask(MetadataTask(widget.account)); + _metadataTaskProcessTotalCount = _backingFiles + .where((f) => file_util.isSupportedFormat(f) && f.metadata == null) + .length; _hasFiredMetadataTask.value = true; } } @@ -600,6 +618,15 @@ class _HomePhotosState extends State } } + String _getMetadataTaskProgressString() { + if (_metadataTaskProcessTotalCount == 0) { + return ""; + } + final clippedCount = + math.min(_metadataTaskProcessCount, _metadataTaskProcessTotalCount - 1); + return " ($clippedCount/$_metadataTaskProcessTotalCount)"; + } + int get _thumbSize { switch (_thumbZoomLevel) { case -1: @@ -651,6 +678,10 @@ class _HomePhotosState extends State var _metadataTaskState = MetadataTaskManager().state; late final _prefUpdatedListener = AppEventListener(_onPrefUpdated); + late final _filePropertyUpdatedListener = + AppEventListener(_onFilePropertyUpdated); + var _metadataTaskProcessCount = 0; + var _metadataTaskProcessTotalCount = 0; late final _metadataTaskIconController = AnimationController( upperBound: 2 * math.pi, duration: const Duration(seconds: 10),