12ADDONNAME = ADDON.getAddonInfo(
'name')
13ADDONICON = ADDON.getAddonInfo(
'icon')
14ADDONVERSION = ADDON.getAddonInfo(
'version')
15ADDONID = ADDON.getAddonInfo(
'id')
18LANGUAGE = ADDON.getLocalizedString
20CANCEL_DIALOG = (9, 10, 92, 216, 247, 257, 275, 61467, 61448,)
21ACTION_OSD = (107, 163,)
22ACTION_CODEC = (0, 27,)
23ACTION_UPDOWN = (3, 4, 105, 106, 111, 112, 603, 604)
24LYRIC_SCRAPER_DIR = os.path.join(CWD,
'lib',
'culrcscrapers')
27def log(*args, **kwargs):
29 message =
'%s: %s' % (ADDONID, args[0])
30 xbmc.log(msg=message, level=xbmc.LOGDEBUG)
33 return unicodedata.normalize(
'NFKD', str).replace(
'"',
'')
41 enc = chardet.detect(data)
43 return data.decode(enc[
'encoding'])
50 filename = kwargs[
'filename']
51 SETTING_READ_FILENAME_FORMAT = kwargs[
'opt'][
'read_filename_format']
52 DEBUG = kwargs[
'opt'][
'debug']
56 basename = os.path.basename(filename)
58 if SETTING_READ_FILENAME_FORMAT == 0:
59 artist = basename.split(
'-', 1)[0].strip()
60 title = os.path.splitext(basename.split(
'-', 1)[1].strip())[0]
62 elif SETTING_READ_FILENAME_FORMAT
in (1,2):
63 artist = os.path.basename(os.path.split(os.path.split(filename)[0])[0])
65 if SETTING_READ_FILENAME_FORMAT == 1:
66 title = os.path.splitext(basename)[0]
68 elif SETTING_READ_FILENAME_FORMAT == 2:
69 title = os.path.splitext(basename)[0].split(
' ', 1)[1].lstrip(
'-').strip()
71 elif SETTING_READ_FILENAME_FORMAT
in (3,5):
72 at = basename.split(
' ', 1)[1].strip()
73 artist = at.split(
'-', 1)[0].strip()
74 title = os.path.splitext(at.split(
'-', 1)[1].strip())[0]
76 elif SETTING_READ_FILENAME_FORMAT == 4:
77 artist = basename.split(
'-', 2)[1].strip()
78 title = os.path.splitext(basename.split(
'-', 2)[2].strip())[0]
79 elif SETTING_READ_FILENAME_FORMAT == 6:
80 artist = basename.split(
'-', 1)[0].strip()
81 title = os.path.splitext(basename.split(
'-', 3)[3].strip())[0]
84 log(
'failed to get artist and title from filename', debug=DEBUG)
89 settings = kwargs[
'settings']
110 return 'Artist: %s, Title: %s' % (self.
artist, self.
title)
121 artist =
"".join(i
for i
in self.
artist if i
not in "\/:*?<>|")
122 title =
"".join(i
for i
in self.
title if i
not in "\/:*?<>|")
133 dirname = os.path.dirname(self.
filepath)
134 basename = os.path.basename(self.
filepath)
135 filename = basename.rsplit(
'.', 1)[0]
139 return os.path.join(dirname, filename + ext)
143 kwargs = kwargs[
'opt']
144 song = Song.by_offset(offset=0, opt=kwargs)
149 kwargs = kwargs[
'opt']
150 song = Song.by_offset(offset=1, opt=kwargs)
151 if song.artist !=
'' and song.title !=
'':
156 offset = kwargs[
'offset']
157 SETTING_READ_FILENAME = kwargs[
'opt'][
'read_filename']
158 SETTING_CLEAN_TITLE = kwargs[
'opt'][
'clean_title']
159 song =
Song(opt=kwargs[
'opt'])
161 offset_str =
'.offset(%i)' % offset
164 song.filepath = xbmc.getInfoLabel(
'Player%s.Filenameandpath' % offset_str)
165 song.title = xbmc.getInfoLabel(
'MusicPlayer%s.Title' % offset_str).replace(
'\\',
' & ').replace(
'/',
' & ').replace(
' ',
' ').replace(
':',
'-').strip(
'.')
166 song.artist = xbmc.getInfoLabel(
'MusicPlayer%s.Artist' % offset_str).replace(
'\\',
' & ').replace(
'/',
' & ').replace(
' ',
' ').replace(
':',
'-').strip(
'.')
167 song.embed = xbmc.getInfoLabel(
'MusicPlayer%s.Lyrics' % offset_str)
168 song.source = xbmc.getInfoLabel(
'MusicPlayer%s.Property(culrc.source)' % offset_str)
170 regex = re.compile(
'\d\d\.\s')
171 match = regex.match(song.title)
173 song.title = song.title[4:]
174 if xbmc.getCondVisibility(
'Player.IsInternetStream')
or xbmc.getCondVisibility(
'Pvr.IsPlayingRadio'):
176 song.analyze_safe =
False
179 sep = song.title.find(
'-')
181 song.artist = song.title[:sep - 1].strip()
182 song.title = song.title[sep + 1:].strip()
184 song.title = re.sub(
r'\([^\)]*\)$',
'', song.title)
185 if (song.filepath
and ((
not song.title)
or (
not song.artist)
or (SETTING_READ_FILENAME))):
187 if SETTING_CLEAN_TITLE:
188 song.title = re.sub(
r'\([^\)]*\)$',
'', song.title)
def __init__(self, *args, **kwargs)
def current(*args, **kwargs)
SETTING_SAVE_FILENAME_FORMAT
def next(*args, **kwargs)
SETTING_SAVE_SUBFOLDER_PATH
def by_offset(*args, **kwargs)
def __init__(self, *args, **kwargs)
def get_artist_from_filename(*args, **kwargs)
def get_textfile(filepath)
None log(str msg, int level=LOGDEBUG)
str translatePath(str path)