From 0743f966f9bdfd641e73d30def4f87e25009b866 Mon Sep 17 00:00:00 2001 From: 9and3r <9and3r@gmail.com> Date: Thu, 31 Jul 2014 13:26:07 +0200 Subject: [PATCH] Use all artists instead of first one --- mopidy_touchscreen/.idea/workspace.xml | 150 +++++++++++++------------ mopidy_touchscreen/main_screen.py | 126 +++++++++++---------- 2 files changed, 146 insertions(+), 130 deletions(-) diff --git a/mopidy_touchscreen/.idea/workspace.xml b/mopidy_touchscreen/.idea/workspace.xml index b1e8ab1..a48c587 100644 --- a/mopidy_touchscreen/.idea/workspace.xml +++ b/mopidy_touchscreen/.idea/workspace.xml @@ -23,55 +23,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + + - + @@ -91,9 +49,9 @@ @@ -129,7 +87,6 @@ - @@ -150,10 +107,17 @@ + + + + + @@ -298,20 +262,20 @@ + - + - - + @@ -334,6 +298,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -354,9 +362,7 @@ - - - + @@ -380,9 +386,7 @@ - - - + @@ -390,7 +394,9 @@ - + + + @@ -458,9 +464,7 @@ - - - + @@ -472,14 +476,6 @@ - - - - - - - - @@ -490,10 +486,20 @@ - - + + - + + + + + + + + + + + diff --git a/mopidy_touchscreen/main_screen.py b/mopidy_touchscreen/main_screen.py index 8872dbf..8df8436 100644 --- a/mopidy_touchscreen/main_screen.py +++ b/mopidy_touchscreen/main_screen.py @@ -1,5 +1,3 @@ -import pygame -import logging import hashlib import time import os @@ -7,7 +5,6 @@ from threading import Thread import urllib import urllib2 import json -from mopidy.audio import PlaybackState from .touch_manager import TouchManager from .screen_objects import * @@ -16,44 +13,48 @@ logger = logging.getLogger(__name__) class MainScreen(): - def __init__(self, size, manager, cache, core, fonts): self.core = core self.size = size - self.base_size = self.size[1]/8 + self.base_size = self.size[1] / 8 self.fonts = fonts self.manager = manager self.track = None self.cache = cache self.image = None + self.artists = None self.touch_text_manager = ScreenObjectsManager() - def update(self, screen): if self.track is not None: if self.image is not None: - screen.blit(self.image, (self.base_size/2, self.base_size + self.base_size/2)) - self.touch_text_manager.get_touch_object("time_progress").set_value(self.core.playback.time_position.get()/1000) - self.touch_text_manager.get_touch_object("time_progress").set_text(time.strftime('%M:%S', time.gmtime(self.core.playback.time_position.get()/1000))+"/"+time.strftime('%M:%S', time.gmtime(self.track.length/1000))) + screen.blit(self.image, (self.base_size / 2, self.base_size + self.base_size / 2)) + self.touch_text_manager.get_touch_object("time_progress").set_value(self.core.playback.time_position.get() / 1000) + self.touch_text_manager.get_touch_object("time_progress").set_text(time.strftime('%M:%S', time.gmtime(self.core.playback.time_position.get() / 1000)) + "/" + time.strftime('%M:%S', time.gmtime(self.track.length / 1000))) self.touch_text_manager.render(screen) return screen def track_started(self, track): self.image = None x = self.base_size * 5 - width = self.size[0]-self.base_size / 2-x + width = self.size[0] - self.base_size / 2 - x + + # Load all artists + self.artists = [] + for artist in track.artists: + self.artists.append(artist) #Track name - label = TextItem(self.fonts['base'],track.name,(x,self.base_size*2), (width,self.size[1])) + label = TextItem(self.fonts['base'], track.name, (x, self.base_size * 2), (width, self.size[1])) self.touch_text_manager.set_object("track_name", label) #Album name - label = TextItem(self.fonts['base'],track.album.name,(x,self.base_size*3), (width,self.size[1])) - self.touch_text_manager.set_object("album_name",label) + label = TextItem(self.fonts['base'], track.album.name, (x, self.base_size * 3), (width, self.size[1])) + self.touch_text_manager.set_object("album_name", label) #Artist - label = TextItem(self.fonts['base'],self.getFirstArtist(track),(x,self.base_size*4), (width,self.size[1])) - self.touch_text_manager.set_object("artist_name",label) + label = TextItem(self.fonts['base'], self.get_artist_string(), (x, self.base_size * 4), (width, self.size[1])) + self.touch_text_manager.set_object("artist_name", label) #Previous track button button = TouchAndTextItem(self.fonts['icon'], u"\ue61c", (0, self.base_size * 6), None) @@ -65,67 +66,78 @@ class MainScreen(): self.touch_text_manager.set_touch_object("next", button) #Progress - progress = Progressbar(self.fonts['base'],time.strftime('%M:%S', time.gmtime(0))+"/"+time.strftime('%M:%S', time.gmtime(0)),(size_1, self.base_size*6), (self.size[0] - size_1- size_2,self.base_size),track.length/1000, False) + progress = Progressbar(self.fonts['base'], + time.strftime('%M:%S', time.gmtime(0)) + "/" + time.strftime('%M:%S', time.gmtime(0)), + (size_1, self.base_size * 6), (self.size[0] - size_1 - size_2, self.base_size), + track.length / 1000, False) self.touch_text_manager.set_touch_object("time_progress", progress) self.track = track if not self.is_image_in_cache(): - thread = Thread(target=self.downloadImage()) + thread = Thread(target=self.download_image(0)) thread.start() else: - self.loadImage() + self.load_image() + def get_artist_string(self): + artists_strign = '' + for artist in self.artists: + artists_strign += artist.name + ', ' + if len(artists_strign) > 2: + artists_strign = artists_strign[:-2] + return artists_strign - def getFirstArtist(self,track): - if track is None: - artist = next(iter(self.track.artists)).name - else: - artist = next(iter(track.artists)).name - return artist - - - def getImageFileName(self): - name = self.track.album.name + '-' + self.getFirstArtist(None) + def get_image_file_name(self): + name = self.track.album.name + '-' + self.get_artist_string() md5name = hashlib.md5(name).hexdigest() return md5name - def getCoverFolder(self): - if(not os.path.isdir(self.cache+"/covers")): - os.makedirs(self.cache+"/covers") - return self.cache+"/covers/" + def get_cover_folder(self): + if not os.path.isdir(self.cache + "/covers"): + os.makedirs(self.cache + "/covers") + return self.cache + "/covers/" def is_image_in_cache(self): - self.getCoverFolder() - return os.path.isfile(self.getCoverFolder()+self.getImageFileName()) + self.get_cover_folder() + return os.path.isfile(self.get_cover_folder() + self.get_image_file_name()) - def downloadImage(self): - try: - safe_artist=urllib.quote_plus(self.getFirstArtist(self.track)) - safe_album=urllib.quote_plus(self.track.album.name) - url="http://ws.audioscrobbler.com/2.0/?" - params="method=album.getinfo&api_key=59a04c6a73fb99d6e8996e01db306829&artist="+safe_artist+"&album="+safe_album+"&format=json" - response = urllib2.urlopen(url+params) - data = json.load(response) - image = data['album']['image'][-1]['#text'] - urllib.urlretrieve(image, self.getCoverFolder()+self.getImageFileName()) - self.loadImage() - except: - logger.warning("Cover could not be downloaded") - logger.error(self.track.name) - width = self.size[0] -self.base_size + def download_image(self, artist_index): + if artist_index < len(self.artists): + try: + safe_artist = urllib.quote_plus(self.artists[artist_index].name) + safe_album = urllib.quote_plus(self.track.album.name) + url = "http://ws.audioscrobbler.com/2.0/?" + params = "method=album.getinfo&api_key=59a04c6a73fb99d6e8996e01db306829&artist=" + safe_artist + "&album=" + safe_album + "&format=json" + response = urllib2.urlopen(url + params) + data = json.load(response) + image = data['album']['image'][-1]['#text'] + urllib.urlretrieve(image, self.get_cover_folder() + self.get_image_file_name()) + self.load_image() + except: + self.download_image(artist_index + 1) + else: - current = TextItem(self.fonts['base'],self.track.name,(self.base_size/2,self.base_size*2),(width, self.base_size)) + logger.info("Cover could not be downloaded") + + # There is no cover so it will use all the screen size for the text + width = self.size[0] - self.base_size + + current = TextItem(self.fonts['base'], self.track.name, (self.base_size / 2, self.base_size * 2), + (width, self.base_size)) self.touch_text_manager.set_object("track_name", current) - current = TextItem(self.fonts['base'],self.track.album.name,(self.base_size/2,self.base_size*3),(width, self.base_size)) + current = TextItem(self.fonts['base'], self.track.album.name, (self.base_size / 2, self.base_size * 3), + (width, self.base_size)) self.touch_text_manager.set_object("album_name", current) - current = TextItem(self.fonts['base'],self.getFirstArtist(self.track),(self.base_size/2,self.base_size*4),(width, self.base_size)) + current = TextItem(self.fonts['base'], self.get_artist_string(), (self.base_size / 2, self.base_size * 4), + (width, self.base_size)) self.touch_text_manager.set_object("artist_name", current) - def loadImage(self): + def load_image(self): size = self.base_size * 4 - self.image = pygame.transform.scale(pygame.image.load(self.getCoverFolder()+self.getImageFileName()).convert(),(size,size)) + self.image = pygame.transform.scale( + pygame.image.load(self.get_cover_folder() + self.get_image_file_name()).convert(), (size, size)) def touch_event(self, event): if event.type == TouchManager.click: @@ -148,13 +160,11 @@ class MainScreen(): volume = self.core.playback.volume.get() + 10 if volume > 100: volume = 100 - self.manager.backend.tell({'action':'volume','value':volume}) + self.manager.backend.tell({'action': 'volume', 'value': volume}) self.manager.volume_changed(volume) elif event.direction == TouchManager.down: volume = self.core.playback.volume.get() - 10 if volume < 0: volume = 0 - self.manager.backend.tell({'action':'volume','value':volume}) + self.manager.backend.tell({'action': 'volume', 'value': volume}) self.manager.volume_changed(volume) - -