main_screen.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import pygame
  2. import logging
  3. import hashlib
  4. import os
  5. from threading import Thread
  6. import urllib
  7. import urllib2
  8. import json
  9. from mopidy.audio import PlaybackState
  10. from .touch_text_manager import TouchTextManager
  11. from .dynamic_background import DynamicBackground
  12. logger = logging.getLogger(__name__)
  13. margin = 10
  14. class MainScreen():
  15. def __init__(self,size,manager,cache):
  16. self.size = size
  17. self.manager = manager
  18. self.background = DynamicBackground()
  19. self.track = None
  20. self.cache = cache
  21. self.image = None
  22. self.touch_text_manager = TouchTextManager(size)
  23. def update(self,core):
  24. screen = pygame.Surface(self.size)
  25. self.background.drawBackground(screen)
  26. if self.track!=None:
  27. if self.image is not None:
  28. screen.blit(self.image, ((self.size[0]-self.image.get_rect().width)/2, 0))
  29. self.touch_text_manager.render(screen)
  30. return screen
  31. def track_started(self, track):
  32. self.track = track
  33. self.image = None
  34. self.touch_text_manager.add_text_object("track_name",self.track.name,(0,0), self.size, (255, 255, 255))
  35. self.touch_text_manager.add_text_object("album_name",self.track.album.name,(0,20), self.size, (255, 255, 255))
  36. self.touch_text_manager.add_text_object("artist_name",self.getFirstArtist(),(0,40), self.size, (255, 255, 255))
  37. if not self.is_image_in_cache():
  38. thread = Thread(target=self.downloadImage())
  39. thread.start()
  40. else:
  41. self.loadImage()
  42. def getFirstArtist(self):
  43. artist = next(iter(self.track.artists)).name
  44. if "," in artist:
  45. artist = artist.split(',')[0]
  46. return artist
  47. def getImageFileName(self):
  48. name = self.track.album.name + '-' + self.getFirstArtist()
  49. md5name = hashlib.md5(name).hexdigest()+".png"
  50. return md5name
  51. def getCoverFolder(self):
  52. if(not os.path.isdir(self.cache+"/covers")):
  53. os.makedirs(self.cache+"/covers")
  54. return self.cache+"/covers/"
  55. def is_image_in_cache(self):
  56. self.getCoverFolder()
  57. return os.path.isfile(self.cache+self.getCoverFolder()+self.getImageFileName())
  58. def downloadImage(self):
  59. safe_artist=urllib.quote_plus(self.getFirstArtist())
  60. safe_album=urllib.quote_plus(self.track.album.name)
  61. url="http://ws.audioscrobbler.com/2.0/?"
  62. params="method=album.getinfo&api_key=59a04c6a73fb99d6e8996e01db306829&artist="+safe_artist+"&album="+safe_album+"&format=json"
  63. response = urllib2.urlopen(url+params)
  64. data = json.load(response)
  65. image = data['album']['image'][-1]['#text']
  66. urllib.urlretrieve(image, self.getCoverFolder()+self.getImageFileName())
  67. self.loadImage()
  68. def loadImage(self):
  69. size = self.size[1]
  70. self.image = pygame.transform.scale(pygame.image.load(self.getCoverFolder()+self.getImageFileName()),(size,size))