From 7635aafd754a8c1933992fb1c9413a93ca98022e Mon Sep 17 00:00:00 2001 From: Tomasz Olszewski <4072076+olszewst@users.noreply.github.com> Date: Fri, 26 Nov 2021 23:25:35 +0100 Subject: [PATCH] Add option to specify stream formats when searching, search all formats by default --- .gitignore | 1 + README.rst | 2 ++ mopidy_tunein/__init__.py | 1 + mopidy_tunein/actor.py | 2 ++ mopidy_tunein/ext.conf | 1 + mopidy_tunein/tunein.py | 5 +++-- tests/test_extension.py | 1 + 7 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 03640c9..8160377 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ /build/ /dist/ /MANIFEST +.vscode diff --git a/README.rst b/README.rst index 04dd437..8fee858 100644 --- a/README.rst +++ b/README.rst @@ -63,6 +63,8 @@ The following configuration values are available: - ``tunein/enabled``: If the TuneIn extension should be enabled or not. Defaults to true. - ``tunein/filter``: Limit the search results. ``station``, ``program`` or leave blank to disable filtering. Defaults to blank. - ``tunein/timeout``: Milliseconds before giving up waiting for results. Defaults to ``5000``. +- ``tunein/formats``: List of formats supported by local Mopidy installation. Streams that are aren't available in any compatible + format are not returned by search. Defaults to ``*`` (all formats). Project resources diff --git a/mopidy_tunein/__init__.py b/mopidy_tunein/__init__.py index ae624d8..e82eee5 100644 --- a/mopidy_tunein/__init__.py +++ b/mopidy_tunein/__init__.py @@ -21,6 +21,7 @@ def get_config_schema(self): schema["filter"] = config.String( optional=True, choices=("station", "program") ) + schema["formats"] = config.List(optional=True) return schema def setup(self, registry): diff --git a/mopidy_tunein/actor.py b/mopidy_tunein/actor.py index 66134e9..02f19e5 100644 --- a/mopidy_tunein/actor.py +++ b/mopidy_tunein/actor.py @@ -34,6 +34,7 @@ def __init__(self, config, audio): self._session = get_requests_session(config["proxy"]) self._timeout = config["tunein"]["timeout"] self._filter = config["tunein"]["filter"] + self._formats = config["tunein"]["formats"] self._scanner = scan.Scanner( timeout=config["tunein"]["timeout"], proxy_config=config["proxy"] @@ -41,6 +42,7 @@ def __init__(self, config, audio): self.tunein = tunein.TuneIn( config["tunein"]["timeout"], config["tunein"]["filter"], + config["tunein"]["formats"], self._session, ) self.library = TuneInLibrary(self) diff --git a/mopidy_tunein/ext.conf b/mopidy_tunein/ext.conf index 3f8ce80..7b486ea 100644 --- a/mopidy_tunein/ext.conf +++ b/mopidy_tunein/ext.conf @@ -2,3 +2,4 @@ enabled = true filter = timeout = 5000 +formats = * diff --git a/mopidy_tunein/tunein.py b/mopidy_tunein/tunein.py index 6887656..d93c40f 100644 --- a/mopidy_tunein/tunein.py +++ b/mopidy_tunein/tunein.py @@ -188,7 +188,7 @@ class TuneIn: ID_STREAM = "stream" ID_UNKNOWN = "unknown" - def __init__(self, timeout, filter_=None, session=None): + def __init__(self, timeout, filter_=None, formats="*", session=None): self._base_uri = "https://opml.radiotime.com/%s" self._session = session or requests.Session() self._timeout = timeout / 1000.0 @@ -197,6 +197,7 @@ def __init__(self, timeout, filter_=None, session=None): else: self._filter = "" self._stations = {} + self._formats = f"&formats={','.join(formats)}" if formats else "" def reload(self): self._stations.clear() @@ -368,7 +369,7 @@ def search(self, query): logger.debug("Empty search query") return [] logger.debug(f"Searching TuneIn for '{query}'") - args = f"&query={query}{self._filter}" + args = f"&query={query}{self._filter}{self._formats}" search_results = self._tunein("Search.ashx", args) results = [] for item in self._flatten(search_results): diff --git a/tests/test_extension.py b/tests/test_extension.py index 0849570..00cec61 100644 --- a/tests/test_extension.py +++ b/tests/test_extension.py @@ -19,3 +19,4 @@ def test_get_config_schema(self): self.assertIn("timeout", schema) self.assertIn("filter", schema) + self.assertIn("formats", schema)