delay sync of filesystem provider workaround
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 12 May 2022 07:49:17 +0000 (09:49 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 12 May 2022 07:49:17 +0000 (09:49 +0200)
music_assistant/controllers/music/providers/filesystem.py

index a9a1707a3c7b1b52fed21fc4f0f59eb1cc9c4751..e9e3cdb4d30caf77ce2bff44a08eac93db577660 100644 (file)
@@ -1,6 +1,7 @@
 """Filesystem musicprovider support for MusicAssistant."""
 from __future__ import annotations
 
+import asyncio
 import base64
 import os
 from typing import Dict, List, Optional, Tuple
@@ -163,6 +164,23 @@ class FileSystemProvider(MusicProvider):
         if cache_result is None:
             cache_result = {}
 
+        # TEMP: account for mounted network location not yet available
+        prev_count = await self.mass.cache.get(f"{self.id}.count", self._music_dir)
+        cur_count = 0
+        retries = 0
+        while retries < 10:
+            cur_count = sum(len(files) for _, _, files in os.walk(self._music_dir))
+            if prev_count is not None and abs(prev_count - cur_count) > 10:
+                self.logger.warning("Delaying sync....")
+                await asyncio.sleep(60)
+            else:
+                break
+        if prev_count is not None and abs(prev_count - cur_count) > 100:
+            self.logger.warning(
+                "Many file changes detected, a database resync may be needed to solve this."
+            )
+        await self.mass.cache.set(f"{self.id}.count", cur_count, self._music_dir)
+
         # find all music files in the music directory and all subfolders
         result = []
         for _root, _dirs, _files in os.walk(self._music_dir):