# Author: Guillaume Pellerin <yomguy@parisson.com>
from relay import *
+import time
class Player:
class URLReader:
def __init__(self, relay):
- self.relay = urllib.urlopen(relay)
+ self.__relayparam = relay
+ self.relay = urllib.urlopen(self.__relayparam)
self.rec_mode = 0
def set_recorder(self, recorder, mode=1):
except:
while True:
try:
- self.relay = urllib.urlopen(relay)
+ self.relay = urllib.urlopen(self.__relayparam)
chunk = self.relay.read(size)
break
except:
self.prefix = '#nowplaying'
self.get_currentsongmeta()
- self.metadata_file = self.metadata_dir + os.sep + self.current_media_obj[0].file_name + '.xml'
+ self.metadata_file = self.metadata_dir + os.sep + self.current_media_obj.file_name + '.xml'
self.update_feeds([self.current_media_obj], self.feeds_current_file, '(currently playing)')
self._info('DeeFuzzing: id = %s, name = %s'
- % (self.id, self.current_media_obj[0].file_name))
+ % (self.id, self.current_media_obj.file_name))
self.player.set_media(self.media)
self.q.get(1)
self.info = None
self.bitrate = 0
self.length = 0
- self.metadata = {
- 'title': '',
- 'artist': '',
- 'album': '',
- 'date': '',
- 'comment': '',
- 'country': '',
- 'genre': '',
- 'copyright': ''
- }
# sourceobj contains the metadata information for the referenced object
self.sourceobj = {}
self.file_title = ''
self.file_ext = ''
self.size = 0
+ self.metadata = {}
# A more cross-platform way to do this
self.cache_dir = tempfile.gettempdir()
"""Sets an alternate location for temporary cache files used in this media object"""
self.cache_dir = path
- def get_file_metadata(self):
- """Returns the metadata for the media, filtered by the tagdata dictionary for this media type"""
- metadata = {}
+ def get_file_metadata(self, clear_cache=False):
+ """Returns the metadata for the media, filtered by the tagdata dictionary for this media type. Return value is
+ read from cache if possible (or unless clear_cache is set to True)"""
+ if not self.metadata or clear_cache:
+ self.__read_file_metadata()
+ return self.metadata
+
+ def __read_file_metadata(self):
+ """Reads the metadata for the media, filtered by the tagdata dictionary for this media type"""
+ self.metadata = {}
for key in self.tagdata.keys():
- metadata[key] = ''
+ self.metadata[key] = ''
try:
- metadata[key] = self.sourceobj[key][0]
+ self.metadata[key] = self.sourceobj[key][0]
except:
try:
if self.tagdata[key] != '':
- metadata[key] = self.sourceobj[self.tagdata[key]][0]
+ self.metadata[key] = self.sourceobj[self.tagdata[key]][0]
except:
pass
- return metadata
- def __get_metadata_value(self, key, clean=False):
+ def get_metadata_value(self, key, clean=False):
"""Returns a metadata value for a give key. If clean is True, then the resulting string will
be cleaned before it is returned. If the key does not exist, an empty string is returned."""
if key not in self.metadata:
def get_title(self):
"""Returns the cleaned title for this media"""
- return self.__get_metadata_value('title', True)
+ return self.get_metadata_value('title', True)
def get_artist(self):
"""Returns the cleaned artist for this media"""
- return self.__get_metadata_value('artist', True)
+ return self.get_metadata_value('artist', True)
def get_song(self, usefn=True):
"""Returns a string in the form "artist - title" for this media. If either artist or title are blank,
only the non-blank field is returned. If both fields are blank, and the usefn parameter is True, then
the filename is returned instead. Otherwise, an empty string is returned."""
- a = self.__get_metadata_value('artist', True)
- t = self.__get_metadata_value('title', True)
+ a = self.get_metadata_value('artist', True)
+ t = self.get_metadata_value('title', True)
if len(a) == 0 and len(t) == 0 and usefn:
a = self.file_name.encode('utf-8')
r = a
except:
pass
self.length = datetime.timedelta(0, self.info.length)
- try:
- self.metadata = self.get_file_metadata()
- except:
- self.metadata = {
- 'title': '',
- 'artist': '',
- 'album': '',
- 'date': '',
- 'comment': '',
- 'country': '',
- 'genre': '',
- 'copyright': ''
- }
+ self.__read_file_metadata()
self.media_info = get_file_info(self.media)
self.file_name = self.media_info[0]
self.file_title = self.media_info[1]
self.file_ext = self.media_info[2]
- self.size = os.path.getsize(mediabase)
+ self.size = os.path.getsize(self.media)
def write_tags(self):
"""Write all ID3v2.4 tags by mapping dub2id3_dict dictionnary with the
self.info = self.sourceobj.info
self.bitrate = int(str(self.info.bitrate)[:-3])
self.length = datetime.timedelta(0, self.info.length)
- self.metadata = self.get_file_metadata()
+ self.__read_file_metadata()
self.media_info = get_file_info(self.media)
self.file_name = self.media_info[0]
self.file_title = self.media_info[1]
self.file_ext = self.media_info[2]
- self.size = os.path.getsize(media)
+ self.size = os.path.getsize(self.media)
def get_file_info(self):
try: