From 3b2449d000bd07e62eb73854a6fa6c57a33890a3 Mon Sep 17 00:00:00 2001
From: Adrian Ulrich <adrian@blinkenlights.ch>
Date: Fri, 2 Apr 2021 10:14:08 +0200
Subject: [PATCH] fix scan status

Just inspecting if there is a pending scan plan is wrong, as we will assume the scan is finished while we are in the last phase.
So instead, we now track the scan state explicitly.
---
 .../android/medialibrary/MediaScanner.java        | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java
index a15b0018..722c06f7 100644
--- a/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java
+++ b/app/src/main/java/ch/blinkenlights/android/medialibrary/MediaScanner.java
@@ -65,6 +65,10 @@ public class MediaScanner implements Handler.Callback {
 	 * Set by KICKSTART rpc
 	 */
 	private boolean mIsInitialScan;
+	/**
+	 * True if we are currently in a scan phase
+	 */
+	private boolean mScanIsRunning;
 	/**
 	 * True if we must do a full cleanup of orphaned entries after the scan finished.
 	 */
@@ -178,7 +182,7 @@ public class MediaScanner implements Handler.Callback {
 		MediaLibrary.Preferences prefs = MediaLibrary.getPreferences(mContext);
 		MediaScanPlan.Statistics stats = mScanPlan.getStatistics();
 
-		progress.isRunning = mScanPlan.hasNextStep();
+		progress.isRunning = mScanIsRunning;
 		progress.lastFile = stats.lastFile;
 		progress.seen = stats.seen;
 		progress.changed = stats.changed;
@@ -207,6 +211,7 @@ public class MediaScanner implements Handler.Callback {
 				break;
 			}
 			case MSG_SCAN_FINISHED: {
+				mScanIsRunning = false;
 				if (mIsInitialScan) {
 					mIsInitialScan = false;
 					MediaLibrary.notifyObserver(LibraryObserver.Type.PLAYLIST, LibraryObserver.Value.OUTDATED, false);
@@ -270,6 +275,7 @@ public class MediaScanner implements Handler.Callback {
 		}
 
 		if (message.what == MSG_SCAN_RPC && !mHandler.hasMessages(MSG_SCAN_RPC)) {
+			mScanIsRunning = true;
 			MediaScanPlan.Step step = mScanPlan.getNextStep();
 			if (step == null) {
 				mHandler.sendEmptyMessage(MSG_SCAN_FINISHED);
@@ -816,13 +822,6 @@ public class MediaScanner implements Handler.Callback {
 			mStats.reset();
 			return next;
 		}
-
-		/**
-		 * Returns true if the scan plan has a step to execute
-		 */
-		boolean hasNextStep() {
-			return mSteps.size() > 0;
-		}
 	}
 }