The branch, dharma has been updated
       via  59f330f8eaf9eccad4177a9d2f59af5446fde141 (commit)
      from  f2f26afe8896d1e474f028a599a4d5c2cbe20315 (commit)

- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=59f330f8eaf9eccad4177a9d2f59af5446fde141

commit 59f330f8eaf9eccad4177a9d2f59af5446fde141
Author: spiff <[email protected]>
Date:   Wed Sep 21 23:18:41 2011 +0200

    [plugin.video.musicvideojukebox] updated to version 2.0.1

diff --git a/plugin.video.musicvideojukebox/Default.py 
b/plugin.video.musicvideojukebox/Default.py
index 872a41c..0b5dc55 100644
--- a/plugin.video.musicvideojukebox/Default.py
+++ b/plugin.video.musicvideojukebox/Default.py
@@ -9,13 +9,26 @@ import urllib,urllib2,re
 import xbmc,xbmcplugin,xbmcgui,xbmcaddon #@UnresolvedImport

 from xml.dom import minidom

 from traceback import print_exc

+from urllib import unquote_plus

 ''' sys.setdefaultencoding('utf-8') '''

 

 # plugin modes

 MODE_SHOW_SEARCH = 10

-MODE_SHOWVIDEOS = 20

 MODE_PLAYVIDEO = 30

-MODE_PLAYALL = 40

+MODE_SHOW_RECENT = 60

+MODE_SHOW_GENRELIST = 70

+

+MODE_SHOW_ARTISTLIST = 100

+MODE_SHOW_ARTISTMENU = 110

+MODE_SHOW_ALBUMS = 120

+MODE_SHOW_TRACKS = 130

+MODE_SHOW_GENREMENU = 140

+

+MODE_PLAY_TRACK = 200

+

+MODE_BUILD_ALBUMS_PLAYLIST = 300

+MODE_BUILD_TRACKS_PLAYLIST = 310

+MODE_BUILD_ARTISTS_PLAYLIST = 320

 

 # parameter keys

 PARAMETER_KEY_MODE = "mode"

@@ -29,19 +42,20 @@ handle = int(sys.argv[1])
 __addonname__ = "plugin.video.musicvideojukebox"

 __settings__ = xbmcaddon.Addon(id='plugin.video.musicvideojukebox')

 __language__ = __settings__.getLocalizedString

+__lastfmapikey__ = "c8a19b7361e56044be8432c023c30888"

+__handle__ = int(sys.argv[1])

+

+import iZECore 

+izecore = iZECore.iZECore()

 

+import LastFMCore

+lastfmcore = LastFMCore.LastFMCore()

 

-# utility functions

-def parameters_string_to_dict(parameters):

-    ''' Convert parameters encoded in a URL to a dict. '''

-    paramDict = {}

-    if parameters:

-        paramPairs = parameters[1:].split("&")

-        for paramsPair in paramPairs:

-            paramSplits = paramsPair.split('=')

-            if (len(paramSplits)) == 2:

-                paramDict[paramSplits[0]] = paramSplits[1]

-    return paramDict

+import YoutubeCore

+youtubecore = YoutubeCore.YoutubeCore()

+

+import GoogleSuggestCore

+googlesuggestcore = GoogleSuggestCore.GoogleSuggestCore()

 

 def addDirectoryItem(name, isFolder=True, parameters={},image="", 
isVideo=True):

     ''' Add a list item to the XBMC UI.'''

@@ -55,168 +69,441 @@ def addDirectoryItem(name, isFolder=True, 
parameters={},image="", isVideo=True):
     

     url = sys.argv[0] + '?' + urllib.urlencode(parameters)

     

-    xbmcplugin.setContent( handle=int( sys.argv[ 1 ] ), content="movies" )    

-    return xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, 
listitem=li, isFolder=isFolder)

+    xbmcplugin.setContent( handle=__handle__, content="movies" )    

+    return xbmcplugin.addDirectoryItem(handle=__handle__, url=url, 
listitem=li, isFolder=isFolder)

 

 # UI builder functions

 def show_root_menu():

+    

     ''' Show the plugin root menu. '''

     addDirectoryItem(name=__language__(30201), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_SEARCH}, isVideo=False)

+    addDirectoryItem(name=__language__(30203), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_RECENT}, isVideo=False)

+    addDirectoryItem(name=__language__(30204), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_GENRELIST}, isVideo=False)

+    addDirectoryItem(name=__language__(30202), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_ARTISTLIST, 'type' : 
'chart_topartists'}, isVideo=False)

+    addDirectoryItem(name=__language__(30205), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_TRACKS, "type" : "chart_toptracks"}, 
isVideo=False)

+    addDirectoryItem(name=__language__(30206), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_ARTISTLIST, "type" : 
"chart_hypedartists"}, isVideo=False)

+    addDirectoryItem(name=__language__(30207), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_TRACKS, "type" : 
"chart_hypedtracks"}, isVideo=False)

+    addDirectoryItem(name=__language__(30208), isFolder=True, 
parameters={PARAMETER_KEY_MODE: MODE_SHOW_TRACKS, "type" : 
"chart_lovedtracks"}, isVideo=False)

     

-    ''' show stored searchqueries '''

-    searchqueries = getSearchQueries()

-    

-    for index, query in enumerate(searchqueries):

-        addDirectoryItem(name=query, isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_PLAYALL, "artist":query}, isVideo=False)

             

     xbmcplugin.endOfDirectory(handle=handle, succeeded=True)

     

+    return True

+

+

+def show_artist_list_menu(params):

+    viewmode = izecore.getCurrentViewmode()

+    

+    if (params.get('type')=="chart_topartists"):

+        artists = lastfmcore.Chart_getTopArtists()

+    elif (params.get('type')=="tag_topartists"):

+        artists = lastfmcore.Tag_getTopArtists(params.get('genre'))

+    elif (params.get('type')=="artist_similarartists"):

+        artists = lastfmcore.Artist_getSimilar(params.get('artist'))

+    elif (params.get('type')=="chart_hypedartists"):

+        artists = lastfmcore.Chart_getHypedArtists()

+    

+    if (artists.length>0):

+        params[PARAMETER_KEY_MODE] = MODE_BUILD_ARTISTS_PLAYLIST

+        addDirectoryItem(name=__language__(30501), isFolder=False, 
parameters=params, isVideo=False)    

+        

+        i = 0

+        for artist in artists:

+            i=i+1

+            name = 
artist.getElementsByTagName("name")[0].childNodes.item(0).data

+            image = ""

+            if (artist.getElementsByTagName("image").length>0):

+                image = 
artist.getElementsByTagName("image")[artist.getElementsByTagName("image").length-1].childNodes.item(0).data
            

+                

+            addDirectoryItem(name="%d. %s" % (i, name.encode("utf-8")), 
isFolder=True, parameters={PARAMETER_KEY_MODE:MODE_SHOW_ARTISTMENU, 
"artist":name.encode("utf-8")}, image=image, isVideo=False)

+    else:

+        addDirectoryItem(name=__language__(30402), isFolder=False, 
parameters={}, isVideo=False)

+        

+    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+    xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)  

     

-def show_search():

-    viewmode = getCurrentViewmode()

-    q = getKeyboardInput(title=__language__(30201), default="")

+    return True

+

+def build_artists_playlist(params):

+    if (params.get('type')=="chart_topartists"):

+        artists = lastfmcore.Chart_getTopArtists()

+    elif (params.get('type')=="tag_topartists"):

+        artists = lastfmcore.Tag_getTopArtists(params.get('genre'))

+    elif (params.get('type')=="artist_similarartists"):

+        artists = lastfmcore.Artist_getSimilar(params.get('artist'))

+    elif (params.get('type')=="chart_hypedartists"):

+        artists = lastfmcore.Chart_getHypedArtists()

+        

+    playlistStarted = False 

     

-    artistname = getArtistName(q)

+    player = xbmc.Player()

+    if player.isPlaying():

+        player.stop()

     

-    artistxml = getArtistMatches(artistname)

+    playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)

+    playlist.clear()

     

-    if artistxml.length>0:

-        ''' build menu '''

-        for artist in artistxml:

+    if (artists.length>0):

+        for artist in artists:

             name = 
artist.getElementsByTagName("name")[0].childNodes.item(0).data

-            addDirectoryItem(name=name.encode("utf-8"), isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_PLAYALL, "artist":name.encode("utf-8")}, 
isVideo=False)

         

-        xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

-        xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)   

+            tracks = lastfmcore.Artist_getTopTracks(name.encode("utf-8"), 3)

+            for track in tracks:

+                trackartist = 
track.getElementsByTagName("artist")[0].getElementsByTagName("name")[0].childNodes.item(0).data

+                trackname = 
track.getElementsByTagName("name")[0].childNodes.item(0).data

+                

+                image = ""

+                if (track.getElementsByTagName("image").length>0):

+                    image = 
track.getElementsByTagName("image")[track.getElementsByTagName("image").length-1].childNodes.item(0).data

+                    

+                parameters={PARAMETER_KEY_MODE:MODE_PLAY_TRACK, "artist" : 
trackartist.encode("utf-8"), "track" : trackname.encode("utf-8"), "thumbnail" : 
image.encode("utf-8"), "title" : "%s - %s" % (trackartist.encode("utf-8"), 
trackname.encode("utf-8")), "plot": ""}

+                listitem=xbmcgui.ListItem(label="%s - %s" % (trackartist, 
trackname), iconImage=image, thumbnailImage=image)

+                listitem.setProperty('IsPlayable', 'true')

+                listitem.setProperty( "Video", "true" )  

+                listitem.setInfo(type='Video', infoLabels=parameters)

+                

+                url = sys.argv[0] + '?' + urllib.urlencode(parameters)        

+                playlist.add(url=url, listitem=listitem)

+                

+                if not playlistStarted:

+                    xbmc.executebuiltin('XBMC.Action(Playlist)')               
  

+                    ''' play playlist'''                

+                    playlistStarted = True

+                    xbmc.executebuiltin('playlist.playoffset(video,0)' )

+        

     else:

-        ''' do exact search '''

-        xbmc.executebuiltin('XBMC.RunPlugin(%s?%s)' % (sys.argv[0], 
urllib.urlencode( { "mode" : MODE_PLAYALL, "artist" : artistname} ) ) )        

+        izecore.showMessage(__language__(30401), __language__(30402))

     

     

-

-def show_videos(params):

-    ''' search on youtube for music videos of the current artist '''

     

-    url = 
"http://gdata.youtube.com/feeds/api/videos?max-results=50&v=2&category=Music&format=5&";
 + urllib.urlencode({ "q" : params.get('artist') })

+def show_artist_menu(params):

+    viewmode = izecore.getCurrentViewmode()

+    

+    artist = params.get('artist')

+    addDirectoryItem(name="%s - %s" % (__language__(30502), artist), 
isFolder=False, parameters={PARAMETER_KEY_MODE: MODE_BUILD_ALBUMS_PLAYLIST, 
"type" : "artist_topalbums", "artist":artist}, isVideo=False)

+    addDirectoryItem(name="%s - %s" % (__language__(30503), artist), 
isFolder=True, parameters={PARAMETER_KEY_MODE: MODE_SHOW_ALBUMS, 
"artist":artist, "type" : "artist_topalbums"}, isVideo=False)

+    addDirectoryItem(name="%s - %s" % (__language__(30504), artist), 
isFolder=True, parameters={PARAMETER_KEY_MODE: MODE_SHOW_TRACKS, 
"artist":artist, "type" : "artist_toptracks"}, isVideo=False)

+    addDirectoryItem(name="%s - %s" % (__language__(30505), artist), 
isFolder=True, parameters={PARAMETER_KEY_MODE: MODE_SHOW_ARTISTLIST, 
"artist":artist, "type" : "artist_similarartists"}, isVideo=False)

+    

+    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+    xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)  

+    

+    return True

     

-    xmldoc = getXmlResponse(url)

+def show_album_menu(params):

+    viewmode = izecore.getCurrentViewmode()

     

-    entries = xmldoc.getElementsByTagName("entry")

+    if (params.get('type')=="artist_topalbums"):

+        albums = lastfmcore.Artist_getTopAlbums(params.get('artist'))

+    if (params.get('type')=="tag_topalbums"):

+        albums = lastfmcore.Tag_getTopAlbums(params.get('genre'))

     

-    for entry in entries:

-        title = entry.getElementsByTagName("title")[0].childNodes.item(0).data

-        thumbnail = 
entry.getElementsByTagNameNS("http://search.yahoo.com/mrss/";, 
"thumbnail")[0].getAttribute('url')

-        videoId = 
entry.getElementsByTagNameNS("http://gdata.youtube.com/schemas/2007";, 
"videoid")[0].childNodes.item(0).data

+    if (albums.length>0):

+        params[PARAMETER_KEY_MODE] = MODE_BUILD_ALBUMS_PLAYLIST

+        addDirectoryItem(name=__language__(30506), isFolder=False, 
parameters=params, isVideo=False)

         

-        addDirectoryItem(name=title.encode("utf-8"), isFolder=False, 
parameters={PARAMETER_KEY_MODE:MODE_PLAYVIDEO, "title":title.encode("utf-8"), 
"videoId":videoId.encode("utf-8"), "thumbnail":thumbnail.encode("utf-8")}, 
image=thumbnail.encode("utf-8"), isVideo=True)

+        i = 0

+        for album in albums:

+            i = i + 1

+            name = 
album.getElementsByTagName("name")[0].childNodes.item(0).data

+            artist = 
album.getElementsByTagName("artist")[0].getElementsByTagName("name")[0].childNodes.item(0).data

+            image = ""

+            if (album.getElementsByTagName("image").length>0):

+                image = 
album.getElementsByTagName("image")[album.getElementsByTagName("image").length-1].childNodes.item(0).data

+            addDirectoryItem(name="%d. %s - %s" % (i, artist.encode("utf-8"), 
name.encode("utf-8")), isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_TRACKS, "type" : "album_getinfo", 
"artist":artist.encode("utf-8"), "album": name.encode("utf-8")}, image=image, 
isVideo=False)

+    else:

+        addDirectoryItem(name=__language__(30403), isFolder=False, 
parameters={}, isVideo=False)

     

-    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)

+    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+    xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)  

     

+    return True

 

-def playVideo(params):

-    ''' get video url based on guid '''    

+def build_albums_playlist(params):

+    if (params.get('type')=="artist_topalbums"):

+        albums = lastfmcore.Artist_getTopAlbums(params.get('artist'))

+    if (params.get('type')=="tag_topalbums"):

+        albums = lastfmcore.Tag_getTopAlbums(params.get('genre'))

     

-    videoId = params.get("videoId")

-    

-    ''' call the youtube player '''

-    url = 
"plugin://plugin.video.youtube?path=/root&action=play_video&videoid=%s" % 
params.get( "videoId")

-        

-    listitem=xbmcgui.ListItem(label=params.get('title'), 
iconImage=params.get('thumbnail'), thumbnailImage=params.get('thumbnail'), 
path=url)

-    xbmcplugin.setResolvedUrl(handle=int(sys.argv[1]), succeeded=True, 
listitem=listitem)

     

-        

-def playAll(params):

-    showMessage(__language__(30302), __language__(30301))

+    playlistStarted = False 

     

-    ''' store current search query '''

-    artistname = urllib.unquote_plus(params.get("artist"))

-    storeSearchQuery( artistname )    

-                   

     player = xbmc.Player()

     if player.isPlaying():

         player.stop()

     

     playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)

-    playlist.clear()

+    playlist.clear()   

+    

+    ''' get 3 tracks from every album '''

+    if (albums.length>0):

+        

+        for album in albums:

+            if (album.getElementsByTagName("mbid")[0].childNodes.length>0):

+                mbid = 
album.getElementsByTagName("mbid")[0].childNodes.item(0).data                   
         

+                tracks = lastfmcore.Album_getInfoByMBID(mbid)

+            else:

+                name = 
album.getElementsByTagName("name")[0].childNodes.item(0).data

+                artist = 
album.getElementsByTagName("artist")[0].getElementsByTagName("name")[0].childNodes.item(0).data

+                tracks = 
lastfmcore.Album_getInfo(artist.encode("utf-8"),name.encode("utf-8"))

+            

+            i = 0

+            for track in tracks:

+                i = i + 1

+                trackartist = 
track.getElementsByTagName("artist")[0].getElementsByTagName("name")[0].childNodes.item(0).data

+                trackname = 
track.getElementsByTagName("name")[0].childNodes.item(0).data

+                

+                image = ""

+                if (track.getElementsByTagName("image").length>0):

+                    image = 
track.getElementsByTagName("image")[track.getElementsByTagName("image").length-1].childNodes.item(0).data

+                    

+                parameters={PARAMETER_KEY_MODE:MODE_PLAY_TRACK, "artist" : 
trackartist.encode("utf-8"), "track" : trackname.encode("utf-8"), "thumbnail" : 
image.encode("utf-8"), "title" : "%s - %s" % (trackartist.encode("utf-8"), 
trackname.encode("utf-8")), "plot": ""}

+                listitem=xbmcgui.ListItem(label="%s - %s" % (trackartist, 
trackname), iconImage=image, thumbnailImage=image)

+                listitem.setProperty('IsPlayable', 'true')

+                listitem.setProperty( "Video", "true" )  

+                listitem.setInfo(type='Video', infoLabels=parameters)

+                

+                url = sys.argv[0] + '?' + urllib.urlencode(parameters)        

+                playlist.add(url=url, listitem=listitem)

+                

+                if not playlistStarted:

+                    xbmc.executebuiltin('XBMC.Action(Playlist)')               
  

+                    ''' play playlist'''                

+                    playlistStarted = True

+                    xbmc.executebuiltin('playlist.playoffset(video,0)' )

+

+                 

+        

+        

+        

+    else:

+        izecore.showMessage(__language__(30401), __language__(30403))

     

-    totalresults = addEntriesToPlaylist( playlist=playlist, q=artistname, 
startindex=1)

-    if totalresults>50:

-        totalresults = addEntriesToPlaylist( playlist=playlist, q=artistname, 
startindex=51)

-    if totalresults>100:

-        totalresults = addEntriesToPlaylist( playlist=playlist, q=artistname, 
startindex=101)

-    elif totalresults<=0:

-        showMessage(__language__(30305), __language__(30306) % artistname)

     

-    shuffle = parseBoolString(__settings__.getSetting("shuffle"))

-    if shuffle:

-        playlist.shuffle()

     

-    ''' play playlist'''

-    xbmc.executebuiltin('playlist.playoffset(video,0)' )

-        

 

-def addEntriesToPlaylist( playlist, q, startindex=1):    

-    url = 
"http://gdata.youtube.com/feeds/api/videos?max-results=50&v=2&category=Music&format=5&start-index=%i&%s";
 % ( startindex, urllib.urlencode({ "q" : q }) )

-    

-    xmldoc = getXmlResponse(url)

-    

-    entries = xmldoc.getElementsByTagName("entry")

-    

-    for entry in entries:

-         title = entry.getElementsByTagName("title")[0].childNodes.item(0).data

-         thumbnail = 
entry.getElementsByTagNameNS("http://search.yahoo.com/mrss/";, 
"thumbnail")[0].getAttribute('url')

-         videoId = 
entry.getElementsByTagNameNS("http://gdata.youtube.com/schemas/2007";, 
"videoid")[0].childNodes.item(0).data

-         

-         description = ""

-         if entry.getElementsByTagNameNS("http://search.yahoo.com/mrss/";, 
"description")[0].childNodes.length>0:

-             description = 
entry.getElementsByTagNameNS("http://search.yahoo.com/mrss/";, 
"description")[0].childNodes.item(0).data

-         

-         author = ""

-         if 
entry.getElementsByTagName("author")[0].getElementsByTagName("name")[0].childNodes.length>0:

-             author = 
entry.getElementsByTagName("author")[0].getElementsByTagName("name")[0].childNodes.item(0).data

-         

-         parameters = {PARAMETER_KEY_MODE:MODE_PLAYVIDEO, 
"videoId":videoId.encode("utf-8"), "title": title.encode("utf-8"), "author": 
author.encode("utf-8"), "plot":description.encode("utf-8"),"thumbnail": 
thumbnail.encode("utf-8") }

+def show_tracks_menu(params):

+    viewmode = izecore.getCurrentViewmode()

+            

+    if (params.get("type")=="album_getinfo"):

+        tracks = lastfmcore.Album_getInfo(params.get('artist'), 
params.get('album'))

+    elif (params.get("type")=="artist_toptracks"):

+        tracks = lastfmcore.Artist_getTopTracks(params.get('artist'))

+    elif (params.get("type")=="chart_toptracks"):

+        tracks = lastfmcore.Chart_getTopTracks()            

+    elif (params.get("type")=="tag_toptracks"):

+        tracks = lastfmcore.Tag_getTopTracks(params.get('genre'))

+    elif (params.get("type")=="chart_hypedtracks"):

+        tracks = lastfmcore.Chart_getHypedTracks()

+    elif (params.get("type")=="chart_lovedtracks"):

+        tracks = lastfmcore.Chart_getLovedTracks()

         

-         listitem=xbmcgui.ListItem(label=title, iconImage=thumbnail, 
thumbnailImage=thumbnail)

-         listitem.setProperty('IsPlayable', 'true')

-         listitem.setProperty( "Video", "true" )  

-         listitem.setInfo(type='Video', infoLabels=parameters)

-         

-         url = sys.argv[0] + '?' + urllib.urlencode(parameters)        

-         playlist.add(url=url, listitem=listitem)

+    if (tracks.length>0):        

+        params[PARAMETER_KEY_MODE] = MODE_BUILD_TRACKS_PLAYLIST

+        addDirectoryItem(name=__language__(30507), isFolder=False, 
parameters=params, isVideo=False)

+        

+        i = 0

+        for track in tracks:

+            i = i + 1

+            name = 
track.getElementsByTagName("name")[0].childNodes.item(0).data

+            artist = 
track.getElementsByTagName("artist")[0].getElementsByTagName("name")[0].childNodes.item(0).data

+            image = ""

+            if (track.getElementsByTagName("image").length>0):

+                image = 
track.getElementsByTagName("image")[track.getElementsByTagName("image").length-1].childNodes.item(0).data

+            

 

-    return 
int(xmldoc.getElementsByTagNameNS("http://a9.com/-/spec/opensearch/1.1/";, 
"totalResults")[0].childNodes.item(0).data)

+            addDirectoryItem(name="%d. %s - %s" % (i, artist.encode("utf-8"), 
name.encode("utf-8")), isFolder=False, 
parameters={PARAMETER_KEY_MODE:MODE_PLAY_TRACK, "artist" : 
artist.encode("utf-8"), "track" : name.encode("utf-8"), "thumbnail" : 
image.encode("utf-8")},image=image, isVideo=True)

+

+            

+    else:

+        addDirectoryItem(name=__language__(30404), isFolder=False, 
parameters={}, isVideo=False)

     

+    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+    xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)  

+    

+    return True

 

-def getArtistName(q):

-    ''' search on Google Suggest to get most likely artist name '''

-    showMessage(__language__(30303), __language__(30301))

+def build_tracks_playlist(params):

+    if (params.get("type")=="album_getinfo"):

+        tracks = lastfmcore.Album_getInfo(params.get('artist'), 
params.get('album'))

+    elif (params.get("type")=="artist_toptracks"):

+        tracks = lastfmcore.Artist_getTopTracks(params.get('artist'))

+    elif (params.get("type")=="chart_toptracks"):

+        tracks = lastfmcore.Chart_getTopTracks()            

+    elif (params.get("type")=="tag_toptracks"):

+        tracks = lastfmcore.Tag_getTopTracks(params.get('genre'))

+    elif (params.get("type")=="chart_hypedtracks"):

+        tracks = lastfmcore.Chart_getHypedTracks()

+    elif (params.get("type")=="chart_lovedtracks"):

+        tracks = lastfmcore.Chart_getLovedTracks()

+    

+    

+    playlistStarted = False 

     

-    url = 
"http://suggestqueries.google.com/complete/search?hl=en&ds=yt&output=toolbar&"; 
+ urllib.urlencode({ "q" : q })

+    player = xbmc.Player()

+    if player.isPlaying():

+        player.stop()

     

-    xmldoc = getXmlResponse(url)

+    playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)

+    playlist.clear()

     

-    ''' get the first item '''

-    suggestions = xmldoc.getElementsByTagName("CompleteSuggestion")

-    if suggestions.length>0:

-        firstitem = suggestions[0]

-        artist = 
firstitem.getElementsByTagName("suggestion")[0].getAttribute('data')

+    if (tracks.length>0):

+        i = 0

+        for track in tracks:

+            i = i + 1

+            name = 
track.getElementsByTagName("name")[0].childNodes.item(0).data

+            artist = 
track.getElementsByTagName("artist")[0].getElementsByTagName("name")[0].childNodes.item(0).data

+            image = ""

+            if (track.getElementsByTagName("image").length>0):

+                image = 
track.getElementsByTagName("image")[track.getElementsByTagName("image").length-1].childNodes.item(0).data

+                 

+            parameters={PARAMETER_KEY_MODE:MODE_PLAY_TRACK, "artist" : 
artist.encode("utf-8"), "track" : name.encode("utf-8"), "thumbnail" : 
image.encode("utf-8"), "title" : "%s - %s" % (artist.encode("utf-8"), 
name.encode("utf-8")), "plot": "" }

+            listitem=xbmcgui.ListItem(label="%s - %s" % (artist, name), 
iconImage=image, thumbnailImage=image)

+            listitem.setProperty('IsPlayable', 'true')

+            listitem.setProperty( "Video", "true" )  

+            listitem.setInfo(type='Video', infoLabels=parameters)

+            

+            url = sys.argv[0] + '?' + urllib.urlencode(parameters)        

+            playlist.add(url=url, listitem=listitem)

+            

+            if not playlistStarted:

+                xbmc.executebuiltin('XBMC.Action(Playlist)')                 

+                ''' play playlist'''                

+                playlistStarted = True

+                xbmc.executebuiltin('playlist.playoffset(video,0)' )

+                

     else:

-        artist = q

+        izecore.showMessage(__language__(30401), __language__(30404))

+        

+

+def show_genre_menu(params):

+    viewmode = izecore.getCurrentViewmode()

+    

+    genre = params.get('genre')

     

-    return artist

+    addDirectoryItem(name=__language__(30508), isFolder=False, 
parameters={PARAMETER_KEY_MODE: MODE_BUILD_ARTISTS_PLAYLIST, "type" : 
"tag_topartists", "genre" : genre}, isVideo=False)

+    addDirectoryItem(name="%s - %s" % (__language__(30202), genre), 
isFolder=True, parameters={PARAMETER_KEY_MODE: MODE_SHOW_ARTISTLIST, "type": 
"tag_topartists", "genre" : genre}, isVideo=False)

+    addDirectoryItem(name="%s - %s" % (__language__(30503), genre), 
isFolder=True, parameters={PARAMETER_KEY_MODE: MODE_SHOW_ALBUMS, "type": 
"tag_topalbums", "genre" : genre}, isVideo=False)

+    addDirectoryItem(name="%s - %s" % (__language__(30504), genre), 
isFolder=True, parameters={PARAMETER_KEY_MODE: MODE_SHOW_TRACKS, "type": 
"tag_toptracks", "genre" : genre}, isVideo=False)

+    

+    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+    xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)  

 

-def getArtistMatches(artist):

-    ''' search on last.fm for matching artist names '''

-    showMessage(__language__(30304), __language__(30301))

+def show_recentlyplayed(params):

+    ''' show stored searchqueries '''

+    searchqueries = getSearchQueries()

+    

+    for index, query in enumerate(searchqueries):

+        addDirectoryItem(name=query, isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_SEARCH, "artist":query}, isVideo=False)

+        

+    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)

+    

     

-    url = 
"http://ws.audioscrobbler.com/2.0/?method=artist.search&api_key=c8a19b7361e56044be8432c023c30888&";
 + urllib.urlencode({ "artist" : artist })

+def show_search(params):

+    viewmode = izecore.getCurrentViewmode()

+    q = params.get("artist")

+    if (q==None):

+        q = izecore.getKeyboardInput(title=__language__(30201), default="")

     

-    xmldoc = getXmlResponse(url)

+    artistname = googlesuggestcore.search(q)

+    

+    storeSearchQuery(artistname.encode("utf-8"))

+    

+    artistxml = lastfmcore.Artist_search(artistname)

+    

+    if artistxml.length>0:

+        ''' build menu '''

+        for artist in artistxml:

+            name = 
artist.getElementsByTagName("name")[0].childNodes.item(0).data

+            addDirectoryItem(name=name.encode("utf-8"), isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_ARTISTMENU, 
"artist":name.encode("utf-8")}, isVideo=False)

+        

+        xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+        xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)   

+    else:

+        ''' do exact search '''

+        '''xbmc.executebuiltin('XBMC.RunPlugin(%s?%s)' % (sys.argv[0], 
urllib.urlencode( { "mode" : MODE_SHOW_ARTISTMENU, "artist" : q} ) ) )'''

         

-    return xmldoc.getElementsByTagName('artist')

+        ''' try again '''

+        artistxml = lastfmcore.Artist_search(q)

+        

+        if artistxml.length>0:

+            ''' build menu '''

+            for artist in artistxml:

+                name = 
artist.getElementsByTagName("name")[0].childNodes.item(0).data

+                addDirectoryItem(name=name.encode("utf-8"), isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_ARTISTMENU, 
"artist":name.encode("utf-8")}, isVideo=False)

+        else:

+            addDirectoryItem(name=__language__(30402), isFolder=False, 
parameters={}, isVideo=False)

+            

+        xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+        xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)

+        

+            

+    

+def show_genre(params):

+    viewmode = izecore.getCurrentViewmode()

+    

+    ''' build a list of genres '''

+    addDirectoryItem(name="60s", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"60s"}, 
isVideo=False)

+    addDirectoryItem(name="70s", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"70s"}, 
isVideo=False)

+    addDirectoryItem(name="80s", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"80s"}, 
isVideo=False)

+    addDirectoryItem(name="90s", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"90s"}, 
isVideo=False)

+    addDirectoryItem(name="Acoustic", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"acoustic"}, 
isVideo=False)

+    addDirectoryItem(name="Ambient", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"ambient"}, 
isVideo=False)

+    addDirectoryItem(name="Blues", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"blues"}, 
isVideo=False)

+    addDirectoryItem(name="Classic Rock", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"classic rock"}, 
isVideo=False)

+    addDirectoryItem(name="Classical", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"classical"}, 
isVideo=False)

+    addDirectoryItem(name="Country", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"country"}, 
isVideo=False)

+    addDirectoryItem(name="Dance", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"dance"}, 
isVideo=False)

+    addDirectoryItem(name="Disco", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"disco"}, 
isVideo=False)

+    addDirectoryItem(name="Electronic", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"electronic"}, 
isVideo=False)

+    addDirectoryItem(name="Folk", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"folk"}, 
isVideo=False)

+    addDirectoryItem(name="Hardcore", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"hardcore"}, 
isVideo=False)

+    addDirectoryItem(name="Hardstyle", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"hardstyle"}, 
isVideo=False)

+    addDirectoryItem(name="Hip hop", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"hip hop"}, 
isVideo=False)

+    addDirectoryItem(name="Indie", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"indie"}, 
isVideo=False)

+    addDirectoryItem(name="Jazz", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"jazz"}, 
isVideo=False)

+    addDirectoryItem(name="Latin", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"latin"}, 
isVideo=False)

+    addDirectoryItem(name="Metal", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"metal"}, 
isVideo=False)

+    addDirectoryItem(name="Pop", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"pop"}, 
isVideo=False)

+    addDirectoryItem(name="Pop punk", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"pop punk"}, 
isVideo=False)

+    addDirectoryItem(name="Punk", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"punk"}, 
isVideo=False)

+    addDirectoryItem(name="Reggae", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"reggae"}, 
isVideo=False)

+    addDirectoryItem(name="R&B", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"rnb"}, 
isVideo=False)

+    addDirectoryItem(name="Rock", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"rock"}, 
isVideo=False)

+    addDirectoryItem(name="Soul", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"soul"}, 
isVideo=False)

+    addDirectoryItem(name="Trance", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"trance"}, 
isVideo=False)

+    addDirectoryItem(name="World", isFolder=True, 
parameters={PARAMETER_KEY_MODE:MODE_SHOW_GENREMENU, "genre":"world"}, 
isVideo=False)

+    xbmcplugin.endOfDirectory(handle=handle, succeeded=True)     

+    xbmc.executebuiltin("Container.SetViewMode(%i)" %  viewmode)   

 

+def play_track(params): 

+    ''' find the track on youtube'''

+    videos = youtubecore.getVideosByTrackName(params.get('artist'), 
params.get('track'))

+    

+    if (videos.length>0):

+        video = videos[0];

+        

+        ''' get the videoid '''

+        videoId = 
video.getElementsByTagNameNS("http://gdata.youtube.com/schemas/2007";, 
"videoid")[0].childNodes.item(0).data        

+        

+        '''play the video'''

+        params['videoId'] = videoId

+        

+        playVideo(params)

+    

+def playVideo(params):

+    ''' get video url based on guid '''    

+    

+    ''' call the youtube player '''

+    url = 
"plugin://plugin.video.youtube?path=/root&action=play_video&videoid=%s" % 
params.get( "videoId")

+    

+    listitem=xbmcgui.ListItem(label=params.get("videoId"), 
iconImage=params.get('thumbnail'), thumbnailImage=params.get('thumbnail'), 
path=url)

+    xbmcplugin.setResolvedUrl(handle=__handle__, succeeded=True, 
listitem=listitem)

+    

+    

+    

 

+    

 def getSearchQueries():

     try:

         searchqueries = eval(__settings__.getSetting("searchqueries"))

@@ -236,7 +523,7 @@ def storeSearchQuery(query):
     maxsearches = (10, 20, 40, 60, 80, 100)[ 
int(__settings__.getSetting("maxsearches")) ]

     

     searchqueries = [query] + searchqueries[:maxsearches-1]

-    searchqueries.sort(myComp)

+    '''searchqueries.sort(myComp)'''

     __settings__.setSetting("searchqueries", repr(searchqueries))

     return True

 

@@ -247,65 +534,11 @@ def myComp (a,b):
         return -1

     

 

-def parseBoolString(theString):

-    return theString[0].upper()=='T'

-

-# Log NOTICE

-def log_notice(msg):

-    xbmc.output("### [%s] - %s" % (__addonname__,msg,),level=xbmc.LOGNOTICE )

-

-def showMessage(heading, message, duration=10):

-    xbmc.executebuiltin('XBMC.Notification("%s", "%s", %s)' % ( heading, 
message, duration) )

-

-def getCurrentViewmode():

-    for id in range( CONTROL_MAIN_LIST_START, CONTROL_MAIN_LIST_END + 1 ):

-        try:

-            if xbmc.getCondVisibility( "Control.IsVisible(%i)" % id ):

-                break

-        except:

-            print_exc()

-    return id

-

-def getKeyboardInput(title = "Input", default="", hidden=False):

-    result = None

-        

-    kbd = xbmc.Keyboard(default, title)

-    kbd.setHiddenInput(hidden)

-    kbd.doModal()

-    

-    if kbd.isConfirmed():

-        result = kbd.getText()

-    

-    return result

-

-def getJsonResponse(url):

-    

-    response = urllib2.urlopen(url)

-    responsetext = response.read()

-    objs = xbmc.executeJSONRPC(responsetext)

-    response.close()

-    

-    return objs

 

-def getXmlResponse(url):

-    log_notice("getXmlResponse from " + url)

-    response = urllib2.urlopen(url)

-    encoding = re.findall("charset=([a-zA-Z0-9\-]+)", 
response.headers['content-type'])

-    responsetext = unicode( response.read(), encoding[0] );

-    xmldoc = minidom.parseString(responsetext.encode("utf-8"))

-    response.close()

-    return xmldoc

 

-def getHttpResponse(url):

-    log_notice("getHttpResponse from " + url)

-    response = urllib2.urlopen(url)

-    encoding = re.findall("charset=([a-zA-Z0-9\-]+)", 
response.headers['content-type'])

-    responsetext = unicode( response.read(), encoding[0] );

-    response.close()

-    return responsetext.encode("utf-8")

 

 # parameter values

-params = parameters_string_to_dict(sys.argv[2])

+params = izecore.getParameters(sys.argv[2])

 mode = int(params.get(PARAMETER_KEY_MODE, "0"))

 

 # Depending on the mode, call the appropriate function to build the UI.

@@ -313,10 +546,29 @@ if not sys.argv[2]:
     # new start

     ok = show_root_menu()

 elif mode == MODE_SHOW_SEARCH:

-    ok = show_search()

-elif mode == MODE_SHOWVIDEOS:

-    ok = show_videos(params)

+    ok = show_search(params)

 elif mode == MODE_PLAYVIDEO:

     ok = playVideo(params)

-elif mode == MODE_PLAYALL:

-    ok = playAll(params)
\ No newline at end of file
+elif mode == MODE_SHOW_RECENT:

+    ok = show_recentlyplayed(params)

+elif mode == MODE_SHOW_GENRELIST:

+    ok = show_genre(params)

+elif mode == MODE_SHOW_ARTISTLIST:

+    ok = show_artist_list_menu(params)

+elif mode == MODE_SHOW_ARTISTMENU:

+    ok = show_artist_menu(params)

+elif mode == MODE_SHOW_ALBUMS:

+    ok = show_album_menu(params)

+elif mode == MODE_SHOW_TRACKS:

+    ok = show_tracks_menu(params)

+elif mode == MODE_SHOW_GENREMENU:

+    ok = show_genre_menu(params)

+elif mode == MODE_PLAY_TRACK:

+    ok = play_track(params)

+elif mode == MODE_BUILD_ALBUMS_PLAYLIST:

+    ok = build_albums_playlist(params)

+elif mode == MODE_BUILD_TRACKS_PLAYLIST:

+    ok = build_tracks_playlist(params)

+elif mode == MODE_BUILD_ARTISTS_PLAYLIST:

+    ok = build_artists_playlist(params)

+    
\ No newline at end of file
diff --git a/plugin.video.musicvideojukebox/addon.xml 
b/plugin.video.musicvideojukebox/addon.xml
index fc8128a..f774298 100644
--- a/plugin.video.musicvideojukebox/addon.xml
+++ b/plugin.video.musicvideojukebox/addon.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="plugin.video.musicvideojukebox"
        name="Music Video Jukebox"
-       version="1.1.0"
+       version="2.0.1"
        provider-name="iZE">
   <requires>
     <import addon="xbmc.python" version="1.0"/>
diff --git a/plugin.video.musicvideojukebox/changelog.txt 
b/plugin.video.musicvideojukebox/changelog.txt
index d336e83..0a91bd4 100644
--- a/plugin.video.musicvideojukebox/changelog.txt
+++ b/plugin.video.musicvideojukebox/changelog.txt
@@ -1,3 +1,25 @@
+Version 2.0.1

+-------------

+- Major update: added more LastFM functionality

+- Updated: Genre browser

+- Updated: Top artists

+- Added: Top tracks

+- Added: Hyped artists

+- Added: Hyped tracks

+- Added: Loved tracks

+- Added: Genre menu;  show/play artists, albums and tracks

+- Added: Artist menu; show/play albums, tracks and similar artists

+- Added: Album menu; show/play tracks

+- Added: Tracks menu; show/play tracks

+- Localized strings

+- Cleaned up and sanitized code 

+

+Version 1.2.0

+-------------

+- Added: Top 50 artists

+- Added: Genre browser; will play music videos from a specific music genre

+- Added: Recent searches

+

 Version 1.1.0

 -------------

 - now uses the plugin.video.youtube plugin to play videos from youtube

diff --git 
a/plugin.video.musicvideojukebox/resources/language/English/strings.xml 
b/plugin.video.musicvideojukebox/resources/language/English/strings.xml
index 1f912df..becc450 100644
--- a/plugin.video.musicvideojukebox/resources/language/English/strings.xml
+++ b/plugin.video.musicvideojukebox/resources/language/English/strings.xml
@@ -9,6 +9,13 @@
     <string id="30103">Maximum nr of stored searches</string>
     
     <string id="30201">Search for artist</string>
+    <string id="30203">Recent searches</string>
+    <string id="30202">Top artists</string>    
+    <string id="30204">Genres</string>
+    <string id="30205">Top tracks</string>
+    <string id="30206">Hyped artists</string>
+    <string id="30207">Hyped tracks</string>
+    <string id="30208">Loved tracks</string>
     
     <string id="30301">One moment please...</string>
     <string id="30302">Building playlist</string>
@@ -17,5 +24,19 @@
        <string id="30305">No videos found</string>
        <string id="30306">No videos found for %s</string> 
     
+    <string id="30401">Information</string>
+    <string id="30402">No artists found.</string>
+    <string id="30403">No albums found.</string>
+    <string id="30404">No tracks found.</string>
+    
+    <string id="30501">>>> Play all artists</string>
+    <string id="30502">>>> Play all albums and tracks</string>
+    <string id="30503">Top albums</string>
+    <string id="30504">Top tracks</string>
+    <string id="30505">Similar artists</string>
+    <string id="30506">>>> Play all albums</string>
+    <string id="30507">>>> Play all tracks</string>
+    <string id="30508">>>> Play all artists, albums and tracks</string>
+    
     
 </strings>

-----------------------------------------------------------------------

Summary of changes:
 plugin.video.musicvideojukebox/Default.py          |  618 ++++++++++++++------
 .../GoogleSuggestCore.py                           |   31 +
 plugin.video.musicvideojukebox/LastFMCore.py       |  121 ++++
 plugin.video.musicvideojukebox/YoutubeCore.py      |   39 ++
 plugin.video.musicvideojukebox/addon.xml           |    2 +-
 plugin.video.musicvideojukebox/changelog.txt       |   22 +
 plugin.video.musicvideojukebox/iZECore.py          |   91 +++
 .../resources/language/English/strings.xml         |   21 +
 8 files changed, 761 insertions(+), 184 deletions(-)
 create mode 100644 plugin.video.musicvideojukebox/GoogleSuggestCore.py
 create mode 100644 plugin.video.musicvideojukebox/LastFMCore.py
 create mode 100644 plugin.video.musicvideojukebox/YoutubeCore.py
 create mode 100644 plugin.video.musicvideojukebox/iZECore.py


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to