From c88621c8be9b45fbc4b3320e9e98c91330f98973 Mon Sep 17 00:00:00 2001 From: Daenara Date: Sat, 27 Mar 2021 04:37:56 +0100 Subject: [PATCH] Rewrote server function Rewrote server function so the first entry is selected if the path ends on a playlist or folder. If the path ends on a song, it will still play that. Also added a menu reset at the start so it will work if the receiver was left on something other than the root menu for SERVER Lastly I added a retry functionality so a few numbers of retries can be specified in case of [No Content] response form the server --- rxv/rxv.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/rxv/rxv.py b/rxv/rxv.py index cc95100..d71f75e 100644 --- a/rxv/rxv.py +++ b/rxv/rxv.py @@ -880,7 +880,7 @@ def _direct_sel_server(self, lineno): request_text = SelectServerLine.format(lineno=lineno) return self._request('PUT', request_text, zone_cmd=False) - def server(self, path): + def server(self, path, retries=0): """Play from specified server This lets you play a SERVER address in a single command @@ -888,26 +888,31 @@ def server(self, path): Server>Playlists>GoodVibes - This code is copied from the net_radio function. - TODO: better error handling if we some how time out """ layers = path.split(">") self.input = "SERVER" + self.menu_reset() - for attempt in range(20): + for item in layers: + while not self.menu_status().ready: + time.sleep(1) menu = self.menu_status() - if menu.ready: - for line, value in menu.current_list.items(): - if value == layers[menu.layer - 1]: - lineno = line[5:] - self._direct_sel_server(lineno) - if menu.layer == len(layers): - return - break + values = list(menu.current_list.values()) + if item in values: + lineno = values.index(item) + 1 + self._direct_sel_server(lineno) else: - # print("Sleeping because we are not ready yet") - time.sleep(1) + if retries > 0: + self.server(path, retries-1) + else: + return + + while not self.menu_status().ready: + time.sleep(1) + menu = self.menu_status() + if menu.name == layers[-1]: + self._direct_sel_server(1) @property def sleep(self):