Fix for default cache directory
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 15 Aug 2025 23:23:58 +0000 (01:23 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 15 Aug 2025 23:48:05 +0000 (01:48 +0200)
Dockerfile
music_assistant/__main__.py
music_assistant/mass.py

index 507127b4a5c4e699d369ae22071e90a4093d7e9d..f202432813738b1ebb4b10905162b3febeb33e25 100644 (file)
@@ -68,9 +68,9 @@ LABEL \
     io.hass.platform="${TARGETPLATFORM}" \
     io.hass.type="addon"
 
-VOLUME [ "/data" ]
+VOLUME [ "/data", "/cache" ]
 EXPOSE 8095
 
 WORKDIR $VIRTUAL_ENV
 
-ENTRYPOINT ["mass", "--config", "/data"]
+ENTRYPOINT ["mass", "--data-dir", "/data", "--cache-dir", "/cache"]
index 50feb951477ecab5cefa867d78cfa4f8c6ff5e07..f48b5a2a4857ac49776cdf886dc3e36650930a5c 100644 (file)
@@ -6,6 +6,7 @@ import argparse
 import asyncio
 import logging
 import os
+import shutil
 import subprocess
 import sys
 import threading
@@ -35,31 +36,33 @@ def get_arguments() -> argparse.Namespace:
     """Arguments handling."""
     parser = argparse.ArgumentParser(description="MusicAssistant")
 
+    # determine default data directory
     if os.path.isdir(old_data_dir := os.path.join(os.path.expanduser("~"), ".musicassistant")):
-        data_dir = old_data_dir
-        cache_dir = os.path.join(data_dir, ".cache")
+        # prefer (existing) legacy directory
+        default_data_dir = old_data_dir
     else:
-        data_dir = os.path.join(
+        default_data_dir = os.path.join(
             os.getenv("XDG_DATA_HOME", os.path.join(os.path.expanduser("~"), ".local", "share")),
             "music-assistant",
         )
-        cache_dir = os.path.join(
-            os.getenv("XDG_CACHE_HOME", os.path.join(os.path.expanduser("~"), ".cache")),
-            "music-assistant",
-        )
+
+    default_cache_dir = os.path.join(
+        os.getenv("XDG_CACHE_HOME", os.path.join(os.path.expanduser("~"), ".cache")),
+        "music-assistant",
+    )
 
     parser.add_argument(
         "--data-dir",
         "-c",
         "--config",
         metavar="path_to_data_dir",
-        default=data_dir,
+        default=default_data_dir,
         help="Directory that contains MusicAssistant persistent data",
     )
     parser.add_argument(
         "--cache-dir",
         metavar="path_to_cache_dir",
-        default=cache_dir,
+        default=default_cache_dir,
         help="Directory that contains MusicAssistant cache data",
     )
     parser.add_argument(
@@ -194,7 +197,14 @@ def main() -> None:
     data_dir = args.data_dir
     cache_dir = args.cache_dir
 
+    # move legacy cache directory
+    old_cache_dir = os.path.join(data_dir, ".cache")
+    if os.path.isdir(old_cache_dir) and old_cache_dir != cache_dir:
+        with suppress(OSError):
+            shutil.move(old_cache_dir, cache_dir)
+
     os.makedirs(data_dir, exist_ok=True)
+    os.makedirs(cache_dir, exist_ok=True)
 
     # TEMP: override options though hass config file
     hass_options_file = os.path.join(data_dir, "options.json")
index 049d222ae0a78ddcd2c67293468f27bd6ddd0ba3..c93caa40c6f3028557a2e6c6ea4c68e27c209706 100644 (file)
@@ -880,16 +880,3 @@ class MusicAssistant:
             await mkdirs(self.storage_path)
         if not await isdir(self.cache_path):
             await mkdirs(self.cache_path)
-        # cleanup old cache files from their old locations
-        # TODO: Remove this code after MA version 2.5+
-        old_cache_db = os.path.join(self.storage_path, "cache.db")
-        if await isfile(old_cache_db):
-            await rmfile(old_cache_db)
-        for filename in await listdir(self.storage_path):
-            if filename.startswith(("spotify", "collage")):
-                old_loc = os.path.join(self.storage_path, filename)
-                new_loc = os.path.join(self.cache_path, filename)
-                if await isfile(new_loc):
-                    await rmfile(old_loc)
-                else:
-                    await rename(old_loc, new_loc)