From e0ff7688a381113a26ba98c7f5e3d8e26b796a98 Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Tue, 28 Jul 2015 15:14:10 +0100 Subject: [PATCH 1/7] Use Mopidy's proxy and user-agent helper (Fixes #18) --- mopidy_tunein/actor.py | 25 +++++++++++++++++++++++-- mopidy_tunein/tunein.py | 4 ++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/mopidy_tunein/actor.py b/mopidy_tunein/actor.py index 8cf1107..e40e961 100644 --- a/mopidy_tunein/actor.py +++ b/mopidy_tunein/actor.py @@ -2,23 +2,44 @@ import logging -from mopidy import backend, exceptions +from mopidy import backend, exceptions, httpclient from mopidy.audio import scan from mopidy.models import Ref, SearchResult import pykka +import requests + +import mopidy_tunein from mopidy_tunein import translator, tunein logger = logging.getLogger(__name__) +def get_requests_session(proxy_config, user_agent): + proxy = httpclient.format_proxy(proxy_config) + full_user_agent = httpclient.format_user_agent(user_agent) + + session = requests.Session() + session.proxies.update({'http': proxy, 'https': proxy}) + session.headers.update({'user-agent': full_user_agent}) + + return session + + class TuneInBackend(pykka.ThreadingActor, backend.Backend): uri_schemes = ['tunein'] def __init__(self, config, audio): super(TuneInBackend, self).__init__() - self.tunein = tunein.TuneIn(config['tunein']['timeout']) + + session = get_requests_session( + proxy_config=config['proxy'], + user_agent='%s/%s' % ( + mopidy_tunein.Extension.dist_name, + mopidy_tunein.__version__)) + + self.tunein = tunein.TuneIn(config['tunein']['timeout'], session) self.library = TuneInLibrary(self) self.playback = TuneInPlayback(audio=audio, backend=self, diff --git a/mopidy_tunein/tunein.py b/mopidy_tunein/tunein.py index 0384902..bc2793d 100644 --- a/mopidy_tunein/tunein.py +++ b/mopidy_tunein/tunein.py @@ -173,9 +173,9 @@ def find_playlist_parser(extension, content_type): class TuneIn(object): """Wrapper for the TuneIn API.""" - def __init__(self, timeout): + def __init__(self, timeout, session=None): self._base_uri = 'http://opml.radiotime.com/%s' - self._session = requests.Session() + self._session = session or requests.Session() self._timeout = timeout / 1000.0 self._stations = {} From f5062081c867d57343ffd4503b8171dd3d7b9f35 Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Tue, 28 Jul 2015 16:54:56 +0100 Subject: [PATCH 2/7] Requires Mopidy v1.1 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f8045de..285ad96 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ def get_version(filename): include_package_data=True, install_requires=[ 'setuptools', - 'Mopidy >= 1.0', + 'Mopidy >= 1.1', 'Pykka >= 1.1', 'requests >= 2.0.0', ], From 21ab24ed8dd6f0b2a50ad077c02d21dcb9d1be8b Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Tue, 28 Jul 2015 17:09:47 +0100 Subject: [PATCH 3/7] Update changelog --- README.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rst b/README.rst index c260269..f348be9 100644 --- a/README.rst +++ b/README.rst @@ -74,6 +74,12 @@ Project resources Changelog ========= +v0.2.3 (UNRELEASED) +------------------- + +- Requires Mopidy v1.1 +- Respect user's Mopidy proxy configuration and set user-agent. + v0.2.2 (2015-04-24) ------------------- From b2a0d173d262699ae0f7855736e27fe4a94298f4 Mon Sep 17 00:00:00 2001 From: Martin Fiala Date: Thu, 8 Oct 2015 22:20:05 +0200 Subject: [PATCH 4/7] TuneInPlayback now based on StreamPlaybackProvider --- mopidy_tunein/actor.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/mopidy_tunein/actor.py b/mopidy_tunein/actor.py index e40e961..c831e41 100644 --- a/mopidy_tunein/actor.py +++ b/mopidy_tunein/actor.py @@ -4,7 +4,9 @@ from mopidy import backend, exceptions, httpclient from mopidy.audio import scan +from mopidy.internal import http, playlists from mopidy.models import Ref, SearchResult +from mopidy.stream.actor import StreamPlaybackProvider import pykka @@ -39,11 +41,14 @@ def __init__(self, config, audio): mopidy_tunein.Extension.dist_name, mopidy_tunein.__version__)) + self._scanner = scan.Scanner( + timeout=config['tunein']['timeout'], + proxy_config=config['proxy']) self.tunein = tunein.TuneIn(config['tunein']['timeout'], session) self.library = TuneInLibrary(self) self.playback = TuneInPlayback(audio=audio, backend=self, - timeout=config['tunein']['timeout']) + config=config) class TuneInLibrary(backend.LibraryProvider): @@ -119,10 +124,9 @@ def search(self, query=None, uris=None, exact=False): return SearchResult(uri='tunein:search', tracks=tracks) -class TuneInPlayback(backend.PlaybackProvider): - def __init__(self, audio, backend, timeout): - super(TuneInPlayback, self).__init__(audio, backend) - self._scanner = scan.Scanner(timeout=timeout) +class TuneInPlayback(StreamPlaybackProvider): + def __init__(self, audio, backend, config): + super(TuneInPlayback, self).__init__(audio, backend, config) def translate_uri(self, uri): variant, identifier = translator.parse_uri(uri) @@ -133,10 +137,10 @@ def translate_uri(self, uri): while stream_uris: uri = stream_uris.pop(0) logger.debug('Looking up URI: %s.' % uri) - try: - # TODO: Somehow update metadata using station. - return self._scanner.scan(uri).uri - except exceptions.ScannerError as se: + new_uri = super(TuneInPlayback, self).translate_uri(uri) + if new_uri: + return new_uri + else: logger.debug('Mopidy scan failed: %s.' % se) new_uris = self.backend.tunein.parse_stream_url(uri) if new_uris == [uri]: From 088ab0fa41d2dbd8e31c665980d3d202e7c68d61 Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Mon, 19 Oct 2015 23:43:56 +0100 Subject: [PATCH 5/7] Remap station data to track fields --- mopidy_tunein/translator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mopidy_tunein/translator.py b/mopidy_tunein/translator.py index a82dd77..b79fb85 100644 --- a/mopidy_tunein/translator.py +++ b/mopidy_tunein/translator.py @@ -48,11 +48,11 @@ def station_to_ref(station): def station_to_track(station): ref = station_to_ref(station) return Track(uri=ref.uri, - name=ref.name, + name=station.get('subtext', ref.name), album=Album(name=ref.name, uri=ref.uri, images=[station.get('image')]), - artists=[Artist(name=station.get('subtext', ''))]) + artists=[Artist(name=ref.name, uri=ref.uri)]) def show_to_ref(show): From 58598d2f69904ce0da085d22bf74a0328724e804 Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Tue, 24 Nov 2015 18:15:16 +0000 Subject: [PATCH 6/7] Remove leftover code following PR. --- mopidy_tunein/actor.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mopidy_tunein/actor.py b/mopidy_tunein/actor.py index c831e41..a162654 100644 --- a/mopidy_tunein/actor.py +++ b/mopidy_tunein/actor.py @@ -2,9 +2,8 @@ import logging -from mopidy import backend, exceptions, httpclient +from mopidy import backend, httpclient from mopidy.audio import scan -from mopidy.internal import http, playlists from mopidy.models import Ref, SearchResult from mopidy.stream.actor import StreamPlaybackProvider @@ -141,7 +140,7 @@ def translate_uri(self, uri): if new_uri: return new_uri else: - logger.debug('Mopidy scan failed: %s.' % se) + logger.debug('Mopidy translate_uri failed.') new_uris = self.backend.tunein.parse_stream_url(uri) if new_uris == [uri]: logger.debug( From e1ec69069af7f28efef68502bfcb8b21f1cc758b Mon Sep 17 00:00:00 2001 From: Nick Steel Date: Sat, 6 Feb 2016 18:20:19 +0000 Subject: [PATCH 7/7] Update changelog and bump version --- README.rst | 3 ++- mopidy_tunein/__init__.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index f348be9..fec1780 100644 --- a/README.rst +++ b/README.rst @@ -74,11 +74,12 @@ Project resources Changelog ========= -v0.2.3 (UNRELEASED) +v0.3.0 (2016-02-06) ------------------- - Requires Mopidy v1.1 - Respect user's Mopidy proxy configuration and set user-agent. +- Utilise Mopidy's nested playlist handling (Fixes: #23 PR: #22) v0.2.2 (2015-04-24) ------------------- diff --git a/mopidy_tunein/__init__.py b/mopidy_tunein/__init__.py index aba936f..82d3a51 100644 --- a/mopidy_tunein/__init__.py +++ b/mopidy_tunein/__init__.py @@ -4,7 +4,7 @@ from mopidy import config, ext -__version__ = '0.2.2' +__version__ = '0.3.0' class Extension(ext.Extension):