Пример #1
0
def get_category_title(element):
    """Return a category title, if available"""
    found_element = element.find('h3')
    if found_element:
        return strip_newlines(found_element.contents[0])
    # FIXME: We should probably fall back to something sensible here, or raise an exception instead
    return ''
Пример #2
0
 def album_info(self, album_id):
     """get album metadata by musicbrainz id"""
     details = {"art": {}}
     params = {'method': 'album.getInfo', 'mbid': album_id}
     data = self.get_data(params)
     if data and data.get("album"):
         if isinstance(data["album"], list):
             lfmdetails = data["album"][0]
         else:
             lfmdetails = data["album"]
         #if lfmdetails.get("image"):
         #    for image in lfmdetails["image"]:
         #        if image["size"] in ["mega", "extralarge"] and xbmcvfs.exists(image["#text"]):
         #            details["art"]["thumbs"] = [image["#text"]]
         #            details["art"]["thumb"] = image["#text"]
         if lfmdetails.get("listeners"):
             details["lastfm.listeners"] = lfmdetails["listeners"]
         if lfmdetails.get("playcount"):
             details["lastfm.playcount"] = lfmdetails["playcount"]
         if lfmdetails.get("tags") and lfmdetails["tags"].get("tag"):
             details["lastfm.tags"] = [
                 tag["name"] for tag in lfmdetails["tags"]["tag"]
             ]
         if lfmdetails.get("wiki"):
             details["plot"] = strip_newlines(lfmdetails["wiki"].get(
                 "content", "").split(' <a')[0])
Пример #3
0
 def album_info(self, album_id):
     '''get album metadata by musicbrainz id'''
     details = {"art": {}}
     data = self.get_data("/album-mb.php", {'i': album_id})
     if data and data.get("album"):
         adbdetails = data["album"][0]
         if adbdetails.get("strAlbumThumb") and xbmcvfs.exists(adbdetails.get("strAlbumThumb")):
             details["art"]["thumb"] = adbdetails.get("strAlbumThumb")
             details["art"]["thumbs"] = [adbdetails.get("strAlbumThumb")]
         if adbdetails.get("strAlbumCDart") and xbmcvfs.exists(adbdetails.get("strAlbumCDart")):
             details["art"]["discart"] = adbdetails.get("strAlbumCDart")
             details["art"]["discarts"] = [adbdetails.get("strAlbumCDart")]
         if adbdetails.get("strAlbumSpine") and xbmcvfs.exists(adbdetails.get("strAlbumSpine")):
             details["art"]["spine"] = adbdetails.get("strAlbumSpine")
         if adbdetails.get("strAlbumThumbBack") and xbmcvfs.exists(adbdetails.get("strAlbumThumbBack")):
             details["art"]["thumbback"] = adbdetails.get("strAlbumThumbBack")
         if adbdetails.get("strDescription%s" % KODI_LANGUAGE.upper()):
             details["plot"] = adbdetails.get("strDescription%s" % KODI_LANGUAGE.upper())
         if not details.get("plot") and adbdetails.get("strDescriptionEN"):
             details["plot"] = adbdetails.get("strDescriptionEN")
         if details.get("plot"):
             details["plot"] = strip_newlines(details["plot"])
         if adbdetails.get("strGenre"):
             details["genre"] = adbdetails["strGenre"].split("/")
         if adbdetails.get("strStyle"):
             details["style"] = adbdetails["strStyle"].split("/")
         if adbdetails.get("strMood"):
             details["mood"] = adbdetails["strMood"].split("/")
         if adbdetails.get("intYearReleased"):
             details["year"] = adbdetails["intYearReleased"]
         if adbdetails.get("intScore"):
             details["rating"] = adbdetails["intScore"]
         if adbdetails.get("strAlbum"):
             details["title"] = adbdetails["strAlbum"]
     return details
Пример #4
0
    def artist_info(self, artist_id):
        '''get artist metadata by musicbrainz id'''
        details = {"art": {}}
        params = {'method': 'artist.getInfo', 'mbid': artist_id}
        data = self.get_data(params)
        if data and data.get("artist"):
            lfmdetails = data["artist"]
            if lfmdetails.get("image"):
                for image in lfmdetails["image"]:
                    if image["size"] in ["mega", "extralarge"
                                         ] and xbmcvfs.exists(image["#text"]):
                        details["art"]["thumbs"] = [image["#text"]]
                        details["art"]["thumb"] = image["#text"]
            if lfmdetails.get("bio") and lfmdetails["bio"].get("content"):
                details["plot"] = strip_newlines(
                    lfmdetails["bio"]["content"].split(' <a href')[0])
            if lfmdetails.get("stats") and lfmdetails["stats"].get(
                    "listeners"):
                details["lastfm.listeners"] = lfmdetails["stats"]["listeners"]
            if lfmdetails.get("stats") and lfmdetails["stats"].get(
                    "playcount"):
                details["lastfm.playcount"] = lfmdetails["stats"]["playcount"]
            if lfmdetails.get("tags") and lfmdetails["tags"].get("tag"):
                details["lastfm.tags"] = [
                    tag["name"] for tag in lfmdetails["tags"]["tag"]
                ]
            if lfmdetails.get("similar") and lfmdetails["similar"].get(
                    "artist"):
                details["lastfm.similarartists"] = [
                    item["name"] for item in lfmdetails["similar"]["artist"]
                ]

        return details
Пример #5
0
 def album_info(self, album_id):
     '''get album metadata by musicbrainz id'''
     details = {"art": {}}
     data = self.get_data("/album-mb.php", {'i': album_id})
     if data and data.get("album"):
         adbdetails = data["album"][0]
         if adbdetails.get("strAlbumThumb") and xbmcvfs.exists(
                 adbdetails.get("strAlbumThumb")):
             details["art"]["thumb"] = adbdetails.get("strAlbumThumb")
             details["art"]["thumbs"] = [adbdetails.get("strAlbumThumb")]
         if adbdetails.get("strAlbumCDart") and xbmcvfs.exists(
                 adbdetails.get("strAlbumCDart")):
             details["art"]["discart"] = adbdetails.get("strAlbumCDart")
             details["art"]["discarts"] = [adbdetails.get("strAlbumCDart")]
         if adbdetails.get("strDescription%s" % KODI_LANGUAGE.upper()):
             details["plot"] = adbdetails.get("strDescription%s" %
                                              KODI_LANGUAGE.upper())
         if not details.get("plot") and adbdetails.get("strDescriptionEN"):
             details["plot"] = adbdetails.get("strDescriptionEN")
         if details.get("plot"):
             details["plot"] = strip_newlines(details["plot"])
         if adbdetails.get("strGenre"):
             details["genre"] = adbdetails["strGenre"].split("/")
         if adbdetails.get("strStyle"):
             details["style"] = adbdetails["strStyle"].split("/")
         if adbdetails.get("strMood"):
             details["mood"] = adbdetails["strMood"].split("/")
         if adbdetails.get("intYearReleased"):
             details["year"] = adbdetails["intYearReleased"]
         if adbdetails.get("intScore"):
             details["rating"] = adbdetails["intScore"]
         if adbdetails.get("strAlbum"):
             details["title"] = adbdetails["strAlbum"]
     return details
Пример #6
0
    def artist_info(self, artist_id):
        '''get artist metadata by musicbrainz id'''
        details = {"art": {}}
        params = {'method': 'artist.getInfo', 'mbid': artist_id}
        data = self.get_data(params)
        if data and data.get("artist"):
            lfmdetails = data["artist"]
            if lfmdetails.get("image"):
                for image in lfmdetails["image"]:
                    if image["size"] in ["mega", "extralarge"] and xbmcvfs.exists(image["#text"]):
                        details["art"]["thumbs"] = [image["#text"]]
                        details["art"]["thumb"] = image["#text"]
            if lfmdetails.get("bio") and lfmdetails["bio"].get("content"):
                details["plot"] = strip_newlines(lfmdetails["bio"]["content"].split(' <a href')[0])
            if lfmdetails.get("stats") and lfmdetails["stats"].get("listeners"):
                details["lastfm.listeners"] = lfmdetails["stats"]["listeners"]
            if lfmdetails.get("stats") and lfmdetails["stats"].get("playcount"):
                details["lastfm.playcount"] = lfmdetails["stats"]["playcount"]
            if lfmdetails.get("tags") and lfmdetails["tags"].get("tag"):
                details["lastfm.tags"] = [tag["name"] for tag in lfmdetails["tags"]["tag"]]
            if lfmdetails.get("similar") and lfmdetails["similar"].get("artist"):
                similar_artists = []
                for count, item in enumerate(lfmdetails["similar"]["artist"]):
                    similar_artists.append(item["name"])
                    details["lastfm.similarartists.%s.name" % count] = item["name"]
                    if item.get("image"):
                        for image in item["image"]:
                            if image["size"] in ["mega", "extralarge", "large"] and xbmcvfs.exists(image["#text"]):
                                details["lastfm.similarartists.%s.thumb" % count] = image["#text"]
                                break
                details["lastfm.similarartists"] = similar_artists

        return details
Пример #7
0
 def artist_info(self, artist_id):
     '''get artist metadata by musicbrainz id'''
     details = {"art": {}}
     data = self.get_data("/artist-mb.php", {'i': artist_id})
     if data and data.get("artists"):
         adbdetails = data["artists"][0]
         if adbdetails.get("strArtistBanner") and xbmcvfs.exists(adbdetails.get("strArtistBanner")):
             details["art"]["banner"] = adbdetails.get("strArtistBanner")
             details["art"]["banners"] = [adbdetails.get("strArtistBanner")]
         details["art"]["fanarts"] = []
         if adbdetails.get("strArtistFanart") and xbmcvfs.exists(adbdetails.get("strArtistFanart")):
             details["art"]["fanart"] = adbdetails.get("strArtistFanart")
             details["art"]["fanarts"].append(adbdetails.get("strArtistFanart"))
         if adbdetails.get("strArtistFanart2") and xbmcvfs.exists(adbdetails.get("strArtistFanart2")):
             details["art"]["fanarts"].append(adbdetails.get("strArtistFanart2"))
         if adbdetails.get("strArtistFanart3") and xbmcvfs.exists(adbdetails.get("strArtistFanart3")):
             details["art"]["fanarts"].append(adbdetails.get("strArtistFanart3"))
         if adbdetails.get("strArtistLogo") and xbmcvfs.exists(adbdetails.get("strArtistLogo")):
             details["art"]["clearlogo"] = adbdetails.get("strArtistLogo")
             details["art"]["clearlogos"] = [adbdetails.get("strArtistLogo")]
         if adbdetails.get("strArtistThumb") and xbmcvfs.exists(adbdetails.get("strArtistThumb")):
             details["art"]["thumb"] = adbdetails["strArtistThumb"]
             details["art"]["thumbs"] = [adbdetails["strArtistThumb"]]
         if adbdetails.get("strBiography" + KODI_LANGUAGE.upper()):
             details["plot"] = adbdetails["strBiography" + KODI_LANGUAGE.upper()]
         if adbdetails.get("strBiographyEN") and not details.get("plot"):
             details["plot"] = adbdetails.get("strBiographyEN")
         if details.get("plot"):
             details["plot"] = strip_newlines(details["plot"])
         if adbdetails.get("strArtistAlternate"):
             details["alternamename"] = adbdetails["strArtistAlternate"]
         if adbdetails.get("intFormedYear"):
             details["formed"] = adbdetails["intFormedYear"]
         if adbdetails.get("intBornYear"):
             details["born"] = adbdetails["intBornYear"]
         if adbdetails.get("intDiedYear"):
             details["died"] = adbdetails["intDiedYear"]
         if adbdetails.get("strDisbanded"):
             details["disbanded"] = adbdetails["strDisbanded"]
         if adbdetails.get("strStyle"):
             details["style"] = adbdetails["strStyle"].split("/")
         if adbdetails.get("strGenre"):
             details["genre"] = adbdetails["strGenre"].split("/")
         if adbdetails.get("strMood"):
             details["mood"] = adbdetails["strMood"].split("/")
         if adbdetails.get("strWebsite"):
             details["homepage"] = adbdetails["strWebsite"]
         if adbdetails.get("strFacebook"):
             details["facebook"] = adbdetails["strFacebook"]
         if adbdetails.get("strTwitter"):
             details["twitter"] = adbdetails["strTwitter"]
         if adbdetails.get("strGender"):
             details["gender"] = adbdetails["strGender"]
         if adbdetails.get("intMembers"):
             details["members"] = adbdetails["intMembers"]
         if adbdetails.get("strCountry"):
             details["country"] = adbdetails["strCountry"].split(", ")
     return details
Пример #8
0
 def get_album_kodi_metadata(self, artist, album, track, disc):
     """get album details from the kodi database"""
     details = {}
     filters = [{"operator": "contains", "field": "artist", "value": artist}]
     if artist and track and not album:
         # get album by track
         filters.append({"operator": "contains", "field": "title", "value": track})
         result = self._mutils.kodidb.songs(filters=filters)
         for item in result:
             album = item["album"]
             break
     if artist and album:
         filters.append({"operator": "contains", "field": "album", "value": album})
         result = self._mutils.kodidb.albums(filters=filters)
         if result:
             details = result[0]
             details["plot"] = strip_newlines(details["description"])
             filters = [{"albumid": details["albumid"]}]
             album_tracks = self._mutils.kodidb.songs(filters=filters)
             details["artistid"] = details["artistid"][0]
             details["tracks"] = []
             if sys.version_info.major == 3:
                 bullet = "•"
             else:
                 bullet = "•".decode("utf-8")
             details["tracks.formatted"] = u""
             details["tracks.formatted2"] = ""
             details["runtime"] = 0
             for item in album_tracks:
                 details["tracks"].append(item["title"])
                 details["tracks.formatted"] += u"%s %s [CR]" % (bullet, item["title"])
                 duration = item["duration"]
                 total_seconds = int(duration)
                 minutes = total_seconds // 60 % 60
                 seconds = total_seconds - (minutes * 60)
                 duration = "%s:%s" % (minutes, str(seconds).zfill(2))
                 details["runtime"] += item["duration"]
                 details["tracks.formatted2"] += u"%s %s (%s)[CR]" % (bullet, item["title"], duration)
                 if not details.get("diskpath"):
                     if not disc or item["disc"] == int(disc):
                         details["diskpath"] = self.get_albumpath_by_songpath(item["file"])
             details["art"] = {}
             details["songcount"] = len(album_tracks)
             # get album total duration pretty printed as mm:ss
             total_seconds = int(details["runtime"])
             minutes = total_seconds // 60 % 60
             seconds = total_seconds - (minutes * 60)
             details["duration"] = "%s:%s" % (minutes, str(seconds).zfill(2))
             # do not retrieve artwork from item as there's no way to write it back
             # and it will already be retrieved if user enables to get the artwork from the song path
     return details
Пример #9
0
 def get_album_kodi_metadata(self, artist, album, track, disc):
     '''get album details from the kodi database'''
     details = {}
     filters = [{"operator": "contains", "field": "artist", "value": artist}]
     if artist and track and not album:
         # get album by track
         filters.append({"operator": "contains", "field": "title", "value": track})
         result = self.metadatautils.kodidb.songs(filters=filters)
         for item in result:
             album = item["album"]
             break
     if artist and album:
         filters.append({"operator": "contains", "field": "album", "value": album})
         result = self.metadatautils.kodidb.albums(filters=filters)
         if result:
             details = result[0]
             details["plot"] = strip_newlines(details["description"])
             filters = [{"albumid": details["albumid"]}]
             album_tracks = self.metadatautils.kodidb.songs(filters=filters)
             details["tracks"] = []
             bullet = "•".decode("utf-8")
             details["tracks.formatted"] = u""
             details["tracks.formatted2"] = ""
             details["runtime"] = 0
             for item in album_tracks:
                 details["tracks"].append(item["title"])
                 details["tracks.formatted"] += u"%s %s [CR]" % (bullet, item["title"])
                 duration = item["duration"]
                 total_seconds = int(duration)
                 minutes = total_seconds / 60
                 seconds = total_seconds - (minutes * 60)
                 duration = "%s:%s" % (minutes, str(seconds).zfill(2))
                 details["runtime"] += item["duration"]
                 details["tracks.formatted2"] += u"%s %s (%s)[CR]" % (bullet, item["title"], duration)
                 if not details.get("diskpath"):
                     if not disc or item["disc"] == int(disc):
                         details["diskpath"] = self.get_albumpath_by_songpath(item["file"])
             details["art"] = {}
             details["songcount"] = len(album_tracks)
             # get album total duration pretty printed as mm:ss
             total_seconds = int(details["runtime"])
             minutes = total_seconds / 60
             seconds = total_seconds - (minutes * 60)
             details["duration"] = "%s:%s" % (minutes, str(seconds).zfill(2))
             # do not retrieve artwork from item as there's no way to write it back
             # and it will already be retrieved if user enables to get the artwork from the song path
     return details
Пример #10
0
    def artist_info(self, artist_id):
        """get artist metadata by musicbrainz id"""
        details = {"art": {}}
        params = {'method': 'artist.getInfo', 'mbid': artist_id}
        data = self.get_data(params)
        if data and data.get("artist"):
            lfmdetails = data["artist"]
            #if lfmdetails.get("image"):
            #    for image in lfmdetails["image"]:
            #        if image["size"] in ["mega", "extralarge"] and xbmcvfs.exists(image["#text"]):
            #            details["art"]["thumbs"] = [image["#text"]]
            #            details["art"]["thumb"] = image["#text"]
            if lfmdetails.get("bio") and lfmdetails["bio"].get("content"):
                details["plot"] = strip_newlines(
                    lfmdetails["bio"]["content"].split(' <a href')[0])
            if lfmdetails.get("stats") and lfmdetails["stats"].get(
                    "listeners"):
                details["lastfm.listeners"] = lfmdetails["stats"]["listeners"]
            if lfmdetails.get("stats") and lfmdetails["stats"].get(
                    "playcount"):
                details["lastfm.playcount"] = lfmdetails["stats"]["playcount"]
            if lfmdetails.get("tags") and lfmdetails["tags"].get("tag"):
                details["lastfm.tags"] = [
                    tag["name"] for tag in lfmdetails["tags"]["tag"]
                ]
            if lfmdetails.get("similar") and lfmdetails["similar"].get(
                    "artist"):
                similar_artists = []
                for count, item in enumerate(lfmdetails["similar"]["artist"]):
                    similar_artists.append(item["name"])
                    details["lastfm.similarartists.%s.name" %
                            count] = item["name"]
                    #if item.get("image"):
                    #    for image in item["image"]:
                    #        if image["size"] in ["mega", "extralarge", "large"] and xbmcvfs.exists(image["#text"]):
                    #            details["lastfm.similarartists.%s.thumb" % count] = image["#text"]
                    #            break
                details["lastfm.similarartists"] = similar_artists

        return details
Пример #11
0
 def album_info(self, album_id):
     '''get album metadata by musicbrainz id'''
     details = {"art": {}}
     params = {'method': 'album.getInfo', 'mbid': album_id}
     data = self.get_data(params)
     if data and data.get("album"):
         if isinstance(data["album"], list):
             lfmdetails = data["album"][0]
         else:
             lfmdetails = data["album"]
         if lfmdetails.get("image"):
             for image in lfmdetails["image"]:
                 if image["size"] in ["mega", "extralarge"] and xbmcvfs.exists(image["#text"]):
                     details["art"]["thumbs"] = [image["#text"]]
                     details["art"]["thumb"] = image["#text"]
         if lfmdetails.get("listeners"):
             details["lastfm.listeners"] = lfmdetails["listeners"]
         if lfmdetails.get("playcount"):
             details["lastfm.playcount"] = lfmdetails["playcount"]
         if lfmdetails.get("tags") and lfmdetails["tags"].get("tag"):
             details["lastfm.tags"] = [tag["name"] for tag in lfmdetails["tags"]["tag"]]
         if lfmdetails.get("wiki"):
             details["plot"] = strip_newlines(lfmdetails["wiki"].get("content", "").split(' <a')[0])
 def get_artist_kodi_metadata(self, artist):
     """get artist details from the kodi database"""
     details = {}
     filters = [{"operator": "is", "field": "artist", "value": artist}]
     result = self._mutils.kodidb.artists(filters=filters, limits=(0, 1))
     if result:
         details = result[0]
         details["title"] = details["artist"]
         details["plot"] = strip_newlines(details["description"])
         if details["musicbrainzartistid"] and isinstance(
                 details["musicbrainzartistid"], list):
             details["musicbrainzartistid"] = details[
                 "musicbrainzartistid"][0]
         filters = [{"artistid": details["artistid"]}]
         artist_albums = self._mutils.kodidb.albums(filters=filters)
         details["albums"] = []
         details["albumsartist"] = []
         details["albumscompilations"] = []
         details["tracks"] = []
         if sys.version_info.major == 3:
             bullet = "•"
         else:
             bullet = "•".decode("utf-8")
         details["albums.formatted"] = u""
         details["tracks.formatted"] = u""
         details["tracks.formatted2"] = u""
         details["albumsartist.formatted"] = u""
         details["albumscompilations.formatted"] = u""
         # enumerate albums for this artist
         for artist_album in artist_albums:
             details["albums"].append(artist_album["label"])
             details["albums.formatted"] += u"%s %s [CR]" % (
                 bullet, artist_album["label"])
             if artist in artist_album["displayartist"]:
                 details["albumsartist"].append(artist_album["label"])
                 details["albumsartist.formatted"] += u"%s %s [CR]" % (
                     bullet, artist_album["label"])
             else:
                 details["albumscompilations"].append(artist_album["label"])
                 details[
                     "albumscompilations.formatted"] += u"%s %s [CR]" % (
                         bullet, artist_album["label"])
             # enumerate songs for this album
             filters = [{"albumid": artist_album["albumid"]}]
             album_tracks = self._mutils.kodidb.songs(filters=filters)
             if album_tracks:
                 # retrieve path on disk by selecting one song for this artist
                 if not details.get("ref_track") and not len(
                         artist_album["artistid"]) > 1:
                     song_path = album_tracks[0]["file"]
                     details["diskpath"] = self.get_artistpath_by_songpath(
                         song_path, artist)
                     details["ref_album"] = artist_album["title"]
                     details["ref_track"] = album_tracks[0]["title"]
                 for album_track in album_tracks:
                     details["tracks"].append(album_track["title"])
                     tr_title = album_track["title"]
                     if album_track["track"]:
                         tr_title = "%s. %s" % (album_track["track"],
                                                album_track["title"])
                     details["tracks.formatted"] += u"%s %s [CR]" % (
                         bullet, tr_title)
                     duration = album_track["duration"]
                     total_seconds = int(duration)
                     minutes = total_seconds / 60
                     seconds = total_seconds - (minutes * 60)
                     duration = "%s:%s" % (minutes, str(seconds).zfill(2))
                     details["tracks.formatted2"] += u"%s %s (%s)[CR]" % (
                         bullet, tr_title, duration)
         details["albumcount"] = len(details["albums"])
         details["albumsartistcount"] = len(details["albumsartist"])
         details["albumscompilationscount"] = len(
             details["albumscompilations"])
         # do not retrieve artwork from item as there's no way to write it back
         # and it will already be retrieved if user enables to get the artwork from the song path
     return details
Пример #13
0
 def get_artist_kodi_metadata(self, artist):
     '''get artist details from the kodi database'''
     details = {}
     filters = [{"operator": "is", "field": "artist", "value": artist}]
     result = self.metadatautils.kodidb.artists(filters=filters, limits=(0, 1))
     if result:
         details = result[0]
         details["title"] = details["artist"]
         details["plot"] = strip_newlines(details["description"])
         if details["musicbrainzartistid"] and isinstance(details["musicbrainzartistid"], list):
             details["musicbrainzartistid"] = details["musicbrainzartistid"][0]
         filters = [{"artistid": details["artistid"]}]
         artist_albums = self.metadatautils.kodidb.albums(filters=filters)
         details["albums"] = []
         details["albumsartist"] = []
         details["albumscompilations"] = []
         details["tracks"] = []
         bullet = "•".decode("utf-8")
         details["albums.formatted"] = u""
         details["tracks.formatted"] = u""
         details["tracks.formatted2"] = u""
         details["albumsartist.formatted"] = u""
         details["albumscompilations.formatted"] = u""
         # enumerate albums for this artist
         for artist_album in artist_albums:
             details["albums"].append(artist_album["label"])
             details["albums.formatted"] += u"%s %s [CR]" % (bullet, artist_album["label"])
             if artist in artist_album["displayartist"]:
                 details["albumsartist"].append(artist_album["label"])
                 details["albumsartist.formatted"] += u"%s %s [CR]" % (bullet, artist_album["label"])
             else:
                 details["albumscompilations"].append(artist_album["label"])
                 details["albumscompilations.formatted"] += u"%s %s [CR]" % (bullet, artist_album["label"])
             # enumerate songs for this album
             filters = [{"albumid": artist_album["albumid"]}]
             album_tracks = self.metadatautils.kodidb.songs(filters=filters)
             if album_tracks:
                 # retrieve path on disk by selecting one song for this artist
                 if not details.get("ref_track") and not len(artist_album["artistid"]) > 1:
                     song_path = album_tracks[0]["file"]
                     details["diskpath"] = self.get_artistpath_by_songpath(song_path, artist)
                     details["ref_album"] = artist_album["title"]
                     details["ref_track"] = album_tracks[0]["title"]
                 for album_track in album_tracks:
                     details["tracks"].append(album_track["title"])
                     tr_title = album_track["title"]
                     if album_track["track"]:
                         tr_title = "%s. %s" % (album_track["track"], album_track["title"])
                     details["tracks.formatted"] += u"%s %s [CR]" % (bullet, tr_title)
                     duration = album_track["duration"]
                     total_seconds = int(duration)
                     minutes = total_seconds / 60
                     seconds = total_seconds - (minutes * 60)
                     duration = "%s:%s" % (minutes, str(seconds).zfill(2))
                     details["tracks.formatted2"] += u"%s %s (%s)[CR]" % (bullet, tr_title, duration)
         details["albumcount"] = len(details["albums"])
         details["albumsartistcount"] = len(details["albumsartist"])
         details["albumscompilationscount"] = len(details["albumscompilations"])
         # do not retrieve artwork from item as there's no way to write it back
         # and it will already be retrieved if user enables to get the artwork from the song path
     return details
 def artist_info(self, artist):
     """get artist metadata by artist"""
     details = {"art": {}}
     data = self.get_data("/search.php", {'s': artist})
     if data and data.get("artists"):
         adbdetails = data["artists"][0]
         if adbdetails.get("strArtistBanner") and xbmcvfs.exists(
                 adbdetails.get("strArtistBanner")):
             details["art"]["banner"] = adbdetails.get("strArtistBanner")
             details["art"]["banners"] = [adbdetails.get("strArtistBanner")]
         details["art"]["fanarts"] = []
         if adbdetails.get("strArtistFanart") and xbmcvfs.exists(
                 adbdetails.get("strArtistFanart")):
             details["art"]["fanart"] = adbdetails.get("strArtistFanart")
             details["art"]["fanarts"].append(
                 adbdetails.get("strArtistFanart"))
         if adbdetails.get("strArtistFanart2") and xbmcvfs.exists(
                 adbdetails.get("strArtistFanart2")):
             details["art"]["fanarts"].append(
                 adbdetails.get("strArtistFanart2"))
         if adbdetails.get("strArtistFanart3") and xbmcvfs.exists(
                 adbdetails.get("strArtistFanart3")):
             details["art"]["fanarts"].append(
                 adbdetails.get("strArtistFanart3"))
         if adbdetails.get("strArtistWideThumb") and xbmcvfs.exists(
                 adbdetails.get("strArtistWideThumb")):
             details["art"]["landscape"] = adbdetails.get(
                 "strArtistWideThumb")
         if adbdetails.get("strArtistLogo") and xbmcvfs.exists(
                 adbdetails.get("strArtistLogo")):
             details["art"]["clearlogo"] = adbdetails.get("strArtistLogo")
             details["art"]["clearlogos"] = [
                 adbdetails.get("strArtistLogo")
             ]
         if adbdetails.get("strArtistClearart") and xbmcvfs.exists(
                 adbdetails.get("strArtistClearart")):
             details["art"]["clearart"] = adbdetails.get(
                 "strArtistClearart")
             details["art"]["cleararts"] = [
                 adbdetails.get("strArtistClearart")
             ]
         if adbdetails.get("strArtistThumb") and xbmcvfs.exists(
                 adbdetails.get("strArtistThumb")):
             details["art"]["thumb"] = adbdetails["strArtistThumb"]
             details["art"]["thumbs"] = [adbdetails["strArtistThumb"]]
         if adbdetails.get("strBiography" + KODI_LANGUAGE.upper()):
             details["plot"] = adbdetails["strBiography" +
                                          KODI_LANGUAGE.upper()]
         if adbdetails.get("strBiographyEN") and not details.get("plot"):
             details["plot"] = adbdetails.get("strBiographyEN")
         if details.get("plot"):
             details["plot"] = strip_newlines(details["plot"])
         if adbdetails.get("strArtistAlternate"):
             details["alternamename"] = adbdetails["strArtistAlternate"]
         if adbdetails.get("intFormedYear"):
             details["formed"] = adbdetails["intFormedYear"]
         if adbdetails.get("intBornYear"):
             details["born"] = adbdetails["intBornYear"]
         if adbdetails.get("intDiedYear"):
             details["died"] = adbdetails["intDiedYear"]
         if adbdetails.get("strDisbanded"):
             details["disbanded"] = adbdetails["strDisbanded"]
         if adbdetails.get("strStyle"):
             details["style"] = adbdetails["strStyle"].split("/")
         if adbdetails.get("strGenre"):
             details["genre"] = adbdetails["strGenre"].split("/")
         if adbdetails.get("strMood"):
             details["mood"] = adbdetails["strMood"].split("/")
         if adbdetails.get("strWebsite"):
             details["homepage"] = adbdetails["strWebsite"]
         if adbdetails.get("strFacebook"):
             details["facebook"] = adbdetails["strFacebook"]
         if adbdetails.get("strTwitter"):
             details["twitter"] = adbdetails["strTwitter"]
         if adbdetails.get("strGender"):
             details["gender"] = adbdetails["strGender"]
         if adbdetails.get("intMembers"):
             details["members"] = adbdetails["intMembers"]
         if adbdetails.get("strCountry"):
             details["country"] = adbdetails["strCountry"].split(", ")
     return details
 def album_info(self, artist, album):
     """get album metadata by name"""
     details = {"art": {}}
     data = self.get_data("/searchalbum.php", {'s': artist, 'a': album})
     if data and data.get("album"):
         adbdetails = data["album"][0]
         if adbdetails.get("strAlbumThumb") and xbmcvfs.exists(
                 adbdetails.get("strAlbumThumb")):
             details["art"]["thumb"] = adbdetails.get("strAlbumThumb")
             details["art"]["thumbs"] = [adbdetails.get("strAlbumThumb")]
         if adbdetails.get("strAlbumCDart") and xbmcvfs.exists(
                 adbdetails.get("strAlbumCDart")):
             details["art"]["discart"] = adbdetails.get("strAlbumCDart")
             details["art"]["discarts"] = [adbdetails.get("strAlbumCDart")]
         if adbdetails.get("strAlbumSpine") and xbmcvfs.exists(
                 adbdetails.get("strAlbumSpine")):
             details["art"]["spine"] = adbdetails.get("strAlbumSpine")
         if adbdetails.get("strAlbumThumbBack") and xbmcvfs.exists(
                 adbdetails.get("strAlbumThumbBack")):
             details["art"]["thumbback"] = adbdetails.get(
                 "strAlbumThumbBack")
         if adbdetails.get("strAlbum3DCase") and xbmcvfs.exists(
                 adbdetails.get("strAlbum3DCase")):
             details["art"]["album3Dcase"] = adbdetails.get(
                 "strAlbum3DCase")
         if adbdetails.get("strAlbum3DFlat") and xbmcvfs.exists(
                 adbdetails.get("strAlbum3DFlat")):
             details["art"]["album3Dflat"] = adbdetails.get(
                 "strAlbum3DFlat")
         if adbdetails.get("strAlbum3DFace") and xbmcvfs.exists(
                 adbdetails.get("strAlbum3DFace")):
             details["art"]["album3Dface"] = adbdetails.get(
                 "strAlbum3DFace")
         if adbdetails.get("strAlbum3DThumb") and xbmcvfs.exists(
                 adbdetails.get("strAlbum3DThumb")):
             details["art"]["album3Dthumb"] = adbdetails.get(
                 "strAlbum3DThumb")
         if adbdetails.get("strDescription%s" % KODI_LANGUAGE.upper()):
             details["plot"] = adbdetails.get("strDescription%s" %
                                              KODI_LANGUAGE.upper())
         if not details.get("plot") and adbdetails.get("strDescriptionEN"):
             details["plot"] = adbdetails.get("strDescriptionEN")
         if details.get("plot"):
             details["plot"] = strip_newlines(details["plot"])
         if adbdetails.get("strGenre"):
             details["genre"] = adbdetails["strGenre"].split("/")
         if adbdetails.get("strStyle"):
             details["style"] = adbdetails["strStyle"].split("/")
         if adbdetails.get("strMood"):
             details["mood"] = adbdetails["strMood"].split("/")
         if adbdetails.get("intYearReleased"):
             details["year"] = adbdetails["intYearReleased"]
         if adbdetails.get("intScore"):
             details["rating"] = adbdetails["intScore"]
         if adbdetails.get("strAlbum"):
             details["title"] = adbdetails["strAlbum"]
         if adbdetails.get("strLabel"):
             details["albumlabel"] = adbdetails["strLabel"]
         if adbdetails.get("idAlbum"):
             details["idalbum"] = adbdetails["idAlbum"]
             if adbdetails.get("idAlbum"):
                 idalbum = adbdetails.get("idAlbum", "")
                 data = self.get_data("/track.php", {'m': idalbum})
                 adbtrackdetails = data["track"]
                 if data.get("track"):
                     tracks = []
                     for count, item in enumerate(adbtrackdetails):
                         tracks.append(item["strTrack"])
                         details["tracks.formatted.%s" % count] = item[
                             "intTrackNumber"] + "." + item["strTrack"]
                         details["tracks.clean.formatted.%s" %
                                 count] = item["strTrack"]
                     details["tracks.formatted"] = "[CR]".join(tracks)
     return details