From 7726698be35c742d1da9466d076a87d8c91cee49 Mon Sep 17 00:00:00 2001 From: vn-ki Date: Thu, 8 Mar 2018 20:00:21 +0530 Subject: [PATCH 1/2] Remove circular dependeny in due to lastfm import in player.py --- mps_youtube/commands/lastfm.py | 24 +----------------------- mps_youtube/player.py | 14 +++++--------- mps_youtube/util.py | 26 ++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/mps_youtube/commands/lastfm.py b/mps_youtube/commands/lastfm.py index 358078f7..b74123d6 100644 --- a/mps_youtube/commands/lastfm.py +++ b/mps_youtube/commands/lastfm.py @@ -1,6 +1,3 @@ -import time -import datetime - try: import pylast has_pylast = True @@ -10,6 +7,7 @@ from .. import g, util, config from . import command + @command(r'lastfm_connect') def init_network(verbose=True): """ Initialize the global pylast network variable """ @@ -39,23 +37,3 @@ def init_network(verbose=True): except (pylast.WSError, pylast.MalformedResponseError, pylast.NetworkError): if verbose: g.message = "Last.fm connection error: %s" % (str(e)) - -def scrobble_track(artist, album, track): - """ Scrobble a track to the user's Last.fm account """ - if not g.lastfm_network: - return - unix_timestamp = int(time.mktime(datetime.datetime.now().timetuple())) - try: - g.lastfm_network.scrobble(artist=artist, title=track, album=album, - timestamp=unix_timestamp) - except (pylast.WSError, pylast.MalformedResponseError, pylast.NetworkError): - return - -def set_now_playing(artist, track): - """ Set the current track as "now playing" on the user's Last.fm account """ - if not g.lastfm_network: - return - try: - g.lastfm_network.update_now_playing(artist=artist, title=track) - except (pylast.WSError, pylast.MalformedResponseError, pylast.NetworkError): - return diff --git a/mps_youtube/player.py b/mps_youtube/player.py index 771a2d1b..7e055954 100644 --- a/mps_youtube/player.py +++ b/mps_youtube/player.py @@ -8,11 +8,9 @@ import subprocess import socket from urllib.error import HTTPError, URLError -from abc import ABCMeta, abstractmethod from . import g, screen, c, streams, history, content, config, util -from .commands import lastfm mswin = os.name == "nt" @@ -66,7 +64,7 @@ def play(self, songlist, shuffle=False, repeat=False, override=False): self.softrepeat = repeat and len(self.songlist) == 1 if g.scrobble: - lastfm.set_now_playing(g.artist, g.scrobble_queue[self.song_no]) + util.lastfm_set_now_playing(g.artist, g.scrobble_queue[self.song_no]) try: self.video, self.stream = stream_details(self.song, @@ -97,8 +95,6 @@ def play(self, songlist, shuffle=False, repeat=False, override=False): # To be defined by subclass based on being cmd player or library # When overriding next and previous don't forget to add the following - # if g.scrobble: - # lastfm.scrobble_track(g.artist, g.album, g.scrobble_queue[self.song_no]) def next(self): pass @@ -241,15 +237,15 @@ class CmdPlayer(BasePlayer): def next(self): if g.scrobble: - lastfm.scrobble_track(g.artist, g.album, - g.scrobble_queue[self.song_no]) + util.lastfm_scrobble_track(g.artist, g.album, + g.scrobble_queue[self.song_no]) self.terminate_process() self.song_no += 1 def previous(self): if g.scrobble: - lastfm.scrobble_track(g.artist, g.album, - g.scrobble_queue[self.song_no]) + util.lastfm_scrobble_track(g.artist, g.album, + g.scrobble_queue[self.song_no]) self.terminate_process() self.song_no -= 1 diff --git a/mps_youtube/util.py b/mps_youtube/util.py index aad37e2a..16207cc0 100644 --- a/mps_youtube/util.py +++ b/mps_youtube/util.py @@ -18,6 +18,10 @@ from importlib import import_module +try: + import pylast +except ImportError: + pass mswin = os.name == "nt" not_utf8_environment = mswin or "UTF-8" not in sys.stdout.encoding @@ -573,3 +577,25 @@ def complete_command(self, text, state): else: results = [x for x in self.COMMANDS if x.startswith(text)] + [None] return results[state] + + +def lastfm_scrobble_track(artist, album, track): + """ Scrobble a track to the user's Last.fm account """ + if not g.lastfm_network: + return + unix_timestamp = int(time.mktime(datetime.datetime.now().timetuple())) + try: + g.lastfm_network.scrobble(artist=artist, title=track, album=album, + timestamp=unix_timestamp) + except (pylast.WSError, pylast.MalformedResponseError, pylast.NetworkError): + return + + +def lastfm_set_now_playing(artist, track): + """ Set the current track as "now playing" on the user's Last.fm account """ + if not g.lastfm_network: + return + try: + g.lastfm_network.update_now_playing(artist=artist, title=track) + except (pylast.WSError, pylast.MalformedResponseError, pylast.NetworkError): + return From dbb04a9c73310885315a8d476d911b6c29342563 Mon Sep 17 00:00:00 2001 From: vn-ki Date: Thu, 8 Mar 2018 20:23:40 +0530 Subject: [PATCH 2/2] Fix not stopping when q is pressed in repeat mode, #806 --- mps_youtube/player.py | 3 ++- mps_youtube/players/mplayer.py | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mps_youtube/player.py b/mps_youtube/player.py index 7e055954..7749984e 100644 --- a/mps_youtube/player.py +++ b/mps_youtube/player.py @@ -251,7 +251,8 @@ def previous(self): def stop(self): self.terminate_process() - self.song_no = len(self.songlist) + raise KeyboardInterrupt + # self.song_no = len(self.songlist) def terminate_process(self): self.p.terminate() diff --git a/mps_youtube/players/mplayer.py b/mps_youtube/players/mplayer.py index 29c7fd48..df304516 100644 --- a/mps_youtube/players/mplayer.py +++ b/mps_youtube/players/mplayer.py @@ -107,7 +107,6 @@ def launch_player(self, cmd): stderr=subprocess.STDOUT, bufsize=1) self._player_status(self.songdata + "; ", self.song.length) returncode = self.p.wait() - print(returncode) if returncode == 42: self.previous()