From a9e4760dbd4892eecb3b6679ab2497edd45c4ca9 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sun, 14 Feb 2021 12:37:40 +0100 Subject: [PATCH] some small fixes --- music_assistant/constants.py | 2 +- music_assistant/managers/config.py | 35 ++++++++++++++++++-------- music_assistant/models/player_queue.py | 1 + music_assistant/web/server.py | 2 +- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/music_assistant/constants.py b/music_assistant/constants.py index 0ff18b3c..876fde6b 100755 --- a/music_assistant/constants.py +++ b/music_assistant/constants.py @@ -1,6 +1,6 @@ """All constants for Music Assistant.""" -__version__ = "0.0.86" +__version__ = "0.0.87" REQUIRED_PYTHON_VER = "3.7" # configuration keys/attributes diff --git a/music_assistant/managers/config.py b/music_assistant/managers/config.py index a93befb9..4da39d0a 100755 --- a/music_assistant/managers/config.py +++ b/music_assistant/managers/config.py @@ -191,11 +191,15 @@ class ConfigManager: ) -> dict: """Set value of the given config item.""" if new_value is None: - self[conf_base][conf_key].pop(conf_val) - else: - self[conf_base][conf_key][conf_val] = new_value + return self[conf_base][conf_key].pop(conf_val) + self[conf_base][conf_key][conf_val] = new_value return self[conf_base][conf_key].all_items() + @api_route("config/delete/:conf_base/:conf_key") + def delete_config(self, conf_base: str, conf_key: str) -> dict: + """Delete value from stored configuration.""" + return self[conf_base].pop(conf_key) + @property def data_path(self): """Return the path where all (configuration) data is stored.""" @@ -343,10 +347,9 @@ class ConfigBaseItem: self.mass = conf_mgr.mass self.conf_key = conf_key - @classmethod - def all_keys(cls): + def all_keys(self): """Return all possible keys of this Config object.""" - return [] + return {key for key in self.conf_mgr.stored_config.get(self.conf_key, {}).keys()} def __getitem__(self, item_key: str): """Return ConfigSubItem for given key.""" @@ -481,7 +484,11 @@ class PlayerSettings(ConfigBaseItem): def all_keys(self): """Return all possible keys of this Config object.""" - return (item.player_id for item in self.mass.players.players) + all_keys = super().all_keys() + for player_id in self.mass.players.players: + if player_id not in all_keys: + all_keys.add(player_id) + return all_keys def get_config_entries(self, child_key: str) -> List[ConfigEntry]: """Return all config entries for the given child entry.""" @@ -629,6 +636,8 @@ class ConfigSubItem: # do some simple type checking if entry.multi_value: # multi value item + if value is None: + value = [] if not isinstance(value, list): raise ValueError else: @@ -636,18 +645,24 @@ class ConfigSubItem: if entry.entry_type == ConfigEntryType.STRING and not isinstance( value, str ): - if not value: + if value is None: value = "" else: raise ValueError if entry.entry_type == ConfigEntryType.BOOL and not isinstance( value, bool ): - raise ValueError + if value is None: + value = False + else: + raise ValueError if entry.entry_type == ConfigEntryType.FLOAT and not isinstance( value, (float, int) ): - raise ValueError + if value is None: + value = 0 + else: + raise ValueError if value != self[key]: if entry.store_hashed: value = pbkdf2_sha256.hash(value) diff --git a/music_assistant/models/player_queue.py b/music_assistant/models/player_queue.py index 7a57006d..7e8db0a1 100755 --- a/music_assistant/models/player_queue.py +++ b/music_assistant/models/player_queue.py @@ -529,6 +529,7 @@ class PlayerQueue: self._cur_item_time = 0 self._cur_index = self._queue_stream_next_index self._queue_stream_next_index += 1 + self._queue_stream_start_index = self._cur_index return self._cur_index async def async_queue_stream_next(self, cur_index: int) -> None: diff --git a/music_assistant/web/server.py b/music_assistant/web/server.py index c67bf24e..9ba04663 100755 --- a/music_assistant/web/server.py +++ b/music_assistant/web/server.py @@ -171,7 +171,7 @@ class WebServer: } async def async_index(self, request: web.Request): - """Get the index page, redirect if we do not have a web directory.""" + """Get the index page.""" # pylint: disable=unused-argument html_app = os.path.join( os.path.dirname(os.path.abspath(__file__)), "static/index.html" -- 2.34.1