temp fix to reduce api calls by increasing sync interval drastically
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 7 Jan 2025 23:37:17 +0000 (00:37 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 7 Jan 2025 23:37:17 +0000 (00:37 +0100)
Another bandaid in order to reduce the amount of calls to music providers.
- increase default sync interval to 12 hours
- don't always run sync at startup

music_assistant/controllers/config.py
music_assistant/controllers/music.py
music_assistant/models/music_provider.py

index f505cb63951610c7df44dc8d55ac19baf90d524b..6cefe509efdd64024f5ae82a147318290b83d02a 100644 (file)
@@ -916,4 +916,7 @@ class ConfigController:
             # loading failed, remove config
             self.remove(conf_key)
             raise
+        if prov.type == ProviderType.MUSIC:
+            # kick off initial library scan
+            self.mass.music.start_sync(None, [config.instance_id])
         return config
index 1a5f6ec72ab5900f1eef59b1f6f6160e9b5fc4c5..d33ac4c7fd71b12bbc7606ba75f9bb2d73480091 100644 (file)
@@ -34,7 +34,7 @@ from music_assistant_models.media_items import (
     MediaItemType,
     SearchResults,
 )
-from music_assistant_models.provider import ProviderInstance, SyncTask
+from music_assistant_models.provider import SyncTask
 
 from music_assistant.constants import (
     DB_TABLE_ALBUM_ARTISTS,
@@ -75,7 +75,7 @@ if TYPE_CHECKING:
     from music_assistant.models.music_provider import MusicProvider
 
 CONF_RESET_DB = "reset_db"
-DEFAULT_SYNC_INTERVAL = 3 * 60  # default sync interval in minutes
+DEFAULT_SYNC_INTERVAL = 12 * 60  # default sync interval in minutes
 CONF_SYNC_INTERVAL = "sync_interval"
 CONF_DELETED_PROVIDERS = "deleted_providers"
 CONF_ADD_LIBRARY_ON_PLAY = "add_library_on_play"
@@ -894,7 +894,7 @@ class MusicController(CoreController):
         return instances
 
     def _start_provider_sync(
-        self, provider: ProviderInstance, media_types: tuple[MediaType, ...]
+        self, provider: MusicProvider, media_types: tuple[MediaType, ...]
     ) -> None:
         """Start sync task on provider and track progress."""
         # check if we're not already running a sync task for this provider/mediatype
@@ -1045,11 +1045,16 @@ class MusicController(CoreController):
 
     def _schedule_sync(self) -> None:
         """Schedule the periodic sync."""
-        self.start_sync()
-        sync_interval = self.config.get_value(CONF_SYNC_INTERVAL)
-        # we reschedule ourselves right after execution
-        # NOTE: sync_interval is stored in minutes, we need seconds
-        self.mass.loop.call_later(sync_interval * 60, self._schedule_sync)
+        sync_interval = self.config.get_value(CONF_SYNC_INTERVAL) * 60
+
+        def run_scheduled_sync() -> None:
+            # kickoff the sync job
+            self.start_sync()
+            # reschedule ourselves
+            self.mass.loop.call_later(sync_interval, self._schedule_sync)
+
+        # schedule the first sync run
+        self.mass.loop.call_later(sync_interval, run_scheduled_sync)
 
     async def _cleanup_database(self) -> None:
         """Perform database cleanup/maintenance."""
index 8bb08853b049bd1db210ed7133936ccd9acecd60..445a754aada3ed29db44495a5d9540a671d68993 100644 (file)
@@ -63,7 +63,6 @@ class MusicProvider(Provider):
 
     async def loaded_in_mass(self) -> None:
         """Call after the provider has been loaded."""
-        self.mass.music.start_sync(providers=[self.instance_id])
 
     async def search(
         self,