First attempt at dharma version.
authorstephendenham <stephendenham@2dec19e3-eb1d-4749-8193-008c8bba0994>
Thu, 2 Dec 2010 18:10:51 +0000 (18:10 +0000)
committerstephendenham <stephendenham@2dec19e3-eb1d-4749-8193-008c8bba0994>
Thu, 2 Dec 2010 18:10:51 +0000 (18:10 +0000)
git-svn-id: svn://svn.code.sf.net/p/xbmc-groove/code@7 2dec19e3-eb1d-4749-8193-008c8bba0994

addon.xml [new file with mode: 0644]
changelog.txt [new file with mode: 0644]
default.py
description.xml [new file with mode: 0644]
icon.png [new file with mode: 0644]
methods.txt [new file with mode: 0644]
resources/lib/GrooveAPI.py

diff --git a/addon.xml b/addon.xml
new file mode 100644 (file)
index 0000000..6c49f4a
--- /dev/null
+++ b/addon.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<addon id="plugin.audio.groove" name="Grooveshark for XBMC"
+       version="0.0.1" provider-name="Stephen Denham">
+       <requires>
+               <import addon="xbmc.python" version="1.0" />
+       </requires>
+       <extension point="xbmc.python.pluginsource" library="default.py">
+       <provides>audio</provides>
+       </extension>
+       <extension point="xbmc.addon.metadata">
+               <platform>all</platform>
+               <summary lang="en">Grooveshark addon for XBMC.</summary>
+               <description lang="en">
+                       Grooveshark addon for XBMC.
+               </description>
+       </extension>
+</addon>
+
diff --git a/changelog.txt b/changelog.txt
new file mode 100644 (file)
index 0000000..f1adaf9
--- /dev/null
@@ -0,0 +1,3 @@
+0.0.1:
+
+Dharma version.
index cb5aa16..42fad28 100644 (file)
@@ -1,13 +1,5 @@
-import urllib, urllib2, re, xbmcplugin, xbmcgui, xbmc, sys, os, time, pprint, shutil
+import urllib, urllib2, re, xbmcplugin, xbmcgui, xbmc, sys, os, time, pprint, shutil, xbmcaddon
 
 
-# plugin constants
-__plugin__ = "Grooveshark"
-__author__ = "Stephen Denham"
-__url__ = ""
-__svn_url__ = ""
-__version__ = "0.0.1"
-__svn_revision__ = ""
-__XBMC_Revision__ = ""
 
 MODE_SEARCH_SONGS = 1
 MODE_SEARCH_ALBUMS = 2
 
 MODE_SEARCH_SONGS = 1
 MODE_SEARCH_ALBUMS = 2
@@ -35,7 +27,7 @@ baseDir = os.getcwd()
 resDir = xbmc.translatePath(os.path.join(baseDir, 'resources'))
 libDir = xbmc.translatePath(os.path.join(resDir,  'lib'))
 imgDir = xbmc.translatePath(os.path.join(resDir,  'img'))
 resDir = xbmc.translatePath(os.path.join(baseDir, 'resources'))
 libDir = xbmc.translatePath(os.path.join(resDir,  'lib'))
 imgDir = xbmc.translatePath(os.path.join(resDir,  'img'))
-thumbDir = os.path.join('special://masterprofile/plugin_data/music', os.path.join(os.path.basename(os.getcwd()), 'thumb'))
+thumbDir = os.path.join('special://masterprofile/addon_data/', os.path.join(os.path.basename(os.getcwd()), 'thumb'))
 
 sys.path.append (libDir)
 from GrooveAPI import *
 
 sys.path.append (libDir)
 from GrooveAPI import *
@@ -68,6 +60,8 @@ class GrovesharkPlayer(xbmc.Player):
         self.function(2)
 
 class Groveshark:
         self.function(2)
 
 class Groveshark:
+    
+    settings = xbmcaddon.Addon(id='plugin.audio.groove')
 
     albumImg = xbmc.translatePath(os.path.join(imgDir,  'album.png'))
     artistImg = xbmc.translatePath(os.path.join(imgDir,  'artist.png'))
 
     albumImg = xbmc.translatePath(os.path.join(imgDir,  'album.png'))
     artistImg = xbmc.translatePath(os.path.join(imgDir,  'artist.png'))
@@ -78,9 +72,9 @@ class Groveshark:
     defImg = xbmc.translatePath(os.path.join(imgDir,  'default.tbn'))
     fanImg = xbmc.translatePath(os.path.join(baseDir, 'fanart.jpg'))
 
     defImg = xbmc.translatePath(os.path.join(imgDir,  'default.tbn'))
     fanImg = xbmc.translatePath(os.path.join(baseDir, 'fanart.jpg'))
 
-    songsearchlimit = xbmcplugin.getSetting('songsearchlimit')
-    albumsearchlimit = xbmcplugin.getSetting('albumsearchlimit')
-    artistsearchlimit = xbmcplugin.getSetting('artistsearchlimit')
+    songsearchlimit = settings.getSetting('songsearchlimit')
+    albumsearchlimit = settings.getSetting('albumsearchlimit')
+    artistsearchlimit = settings.getSetting('artistsearchlimit')
 
 
     def __init__( self ):
 
 
     def __init__( self ):
@@ -107,7 +101,7 @@ class Groveshark:
     def searchSongs(self):
         query = self._get_keyboard(default="", heading="Search songs")
         if (query): 
     def searchSongs(self):
         query = self._get_keyboard(default="", heading="Search songs")
         if (query): 
-            songs = groovesharkApi.searchSongs(query, limit = xbmcplugin.getSetting('songsearchlimit'))
+            songs = groovesharkApi.searchSongs(query, limit = self.settings.getSetting('songsearchlimit'))
             if (len(songs) > 0):
                 self._add_songs_directory(songs)
             else:
             if (len(songs) > 0):
                 self._add_songs_directory(songs)
             else:
@@ -118,7 +112,7 @@ class Groveshark:
     def searchAlbums(self):
         query = self._get_keyboard(default="", heading="Search albums")
         if (query): 
     def searchAlbums(self):
         query = self._get_keyboard(default="", heading="Search albums")
         if (query): 
-            albums = groovesharkApi.searchAlbums(query, limit = xbmcplugin.getSetting('albumsearchlimit'))
+            albums = groovesharkApi.searchAlbums(query, limit = self.settings.getSetting('albumsearchlimit'))
             if (len(albums) > 0):
                 self._add_albums_directory(albums)
             else:
             if (len(albums) > 0):
                 self._add_albums_directory(albums)
             else:
@@ -129,7 +123,7 @@ class Groveshark:
     def searchArtists(self):
         query = self._get_keyboard(default="", heading="Search artists")
         if (query): 
     def searchArtists(self):
         query = self._get_keyboard(default="", heading="Search artists")
         if (query): 
-            artists = groovesharkApi.searchArtists(query, limit = xbmcplugin.getSetting('artistsearchlimit'))
+            artists = groovesharkApi.searchArtists(query, limit = self.settings.getSetting('artistsearchlimit'))
             if (len(artists) > 0):
                 self._add_artists_directory(artists)
             else:
             if (len(artists) > 0):
                 self._add_artists_directory(artists)
             else:
@@ -149,7 +143,7 @@ class Groveshark:
                 self.categories()
     
     def popular(self):
                 self.categories()
     
     def popular(self):
-        popular = groovesharkApi.popularGetSongs(limit = xbmcplugin.getSetting('songsearchlimit'))
+        popular = groovesharkApi.popularGetSongs(limit = self.settings.getSetting('songsearchlimit'))
         if (len(popular) > 0):
             self._add_songs_directory(popular)
         else:
         if (len(popular) > 0):
             self._add_songs_directory(popular)
         else:
@@ -223,17 +217,17 @@ class Groveshark:
             dialog.ok('Grooveshark', 'You must be logged in', 'to update radio artists.')
     
     def album(self,albumid):
             dialog.ok('Grooveshark', 'You must be logged in', 'to update radio artists.')
     
     def album(self,albumid):
-        album = groovesharkApi.albumGetSongs(albumId = albumid, limit = xbmcplugin.getSetting('songsearchlimit'))
+        album = groovesharkApi.albumGetSongs(albumId = albumid, limit = self.settings.getSetting('songsearchlimit'))
         self._add_songs_directory(album)
     
     def artist(self, artistid):
         self._add_songs_directory(album)
     
     def artist(self, artistid):
-        albums = groovesharkApi.artistGetAlbums(artistId = artistid, limit = xbmcplugin.getSetting('albumsearchlimit'))
+        albums = groovesharkApi.artistGetAlbums(artistId = artistid, limit = self.settings.getSetting('albumsearchlimit'))
         self._add_albums_directory(albums)
     
     def playlist(self, playlistid):
         userid = self._get_login()
         if (userid != 0):
         self._add_albums_directory(albums)
     
     def playlist(self, playlistid):
         userid = self._get_login()
         if (userid != 0):
-            songs = groovesharkApi.playlistGetSongs(playlistId = playlistid, limit = xbmcplugin.getSetting('songsearchlimit'))
+            songs = groovesharkApi.playlistGetSongs(playlistId = playlistid, limit = self.settings.getSetting('songsearchlimit'))
             self._add_songs_directory(songs)
         else:
             dialog = xbmcgui.Dialog()
             self._add_songs_directory(songs)
         else:
             dialog = xbmcgui.Dialog()
@@ -242,13 +236,14 @@ class Groveshark:
     def playSong(self, item):
         url = item.getProperty('url')
         xbmc.log("Playing: " + url)
     def playSong(self, item):
         url = item.getProperty('url')
         xbmc.log("Playing: " + url)
-        xbmc.Player( xbmc.PLAYER_CORE_MPLAYER ).play(url, item)
+        xbmc.Player( xbmc.PLAYER_CORE_PAPLAYER ).play(url, item)
     
     def playNext(self):
         item = self._get_song_item(groovesharkApi.radioNextSong()[0])
         url = item.getProperty('url')
         self.player = GrovesharkPlayer(xbmc.PLAYER_CORE_PAPLAYER, function=self.onPlayBackChanged)
         self.player.play(url, item)
     
     def playNext(self):
         item = self._get_song_item(groovesharkApi.radioNextSong()[0])
         url = item.getProperty('url')
         self.player = GrovesharkPlayer(xbmc.PLAYER_CORE_PAPLAYER, function=self.onPlayBackChanged)
         self.player.play(url, item)
+        self.onPlayBackChanged(2)
 
     def songItem(self, id, name, album, artist, duration, thumb, image):
         url = groovesharkApi.getStreamURL(id)
 
     def songItem(self, id, name, album, artist, duration, thumb, image):
         url = groovesharkApi.getStreamURL(id)
@@ -275,8 +270,8 @@ class Groveshark:
             return ''
     
     def _get_login(self):
             return ''
     
     def _get_login(self):
-        username = xbmcplugin.getSetting('username')
-        password = xbmcplugin.getSetting('password')
+        username = self.settings.getSetting('username')
+        password = self.settings.getSetting('password')
         if (username == "" or password == ""):
             dialog = xbmcgui.Dialog()
             dialog.ok('Grooveshark', 'Unable to login.', 'Check username and password in settings.')
         if (username == "" or password == ""):
             dialog = xbmcgui.Dialog()
             dialog.ok('Grooveshark', 'Unable to login.', 'Check username and password in settings.')
@@ -409,16 +404,18 @@ class Groveshark:
         return xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=dir,isFolder=True)
 
     def onPlayBackChanged(self, change):
         return xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=dir,isFolder=True)
 
     def onPlayBackChanged(self, change):
-        print "onPlayBackChanged " + str(change)
+        xbmc.log("onPlayBackChanged " + str(change))
         if change == 0:
             groovesharkApi.radioEnabled = False
         if change == 0:
             groovesharkApi.radioEnabled = False
-            self.musicplaylist.clear()
         if change == 1 and groovesharkApi.radioTurnedOn() == True:
         if change == 1 and groovesharkApi.radioTurnedOn() == True:
-            print "playnext"
+            xbmc.log("playnext")
             self.player.playNext()
             self.player.playNext()
-        if change == 1 and groovesharkApi.radioTurnedOn() == False:
-            print "clear playlist"
-            self.musicplaylist.clear()
+        if change == 2:
+            xbmc.log("playback started")
+            xbmc.sleep(7500)
+            while self.player.isPlaying() or xbmc.Player(xbmc.PLAYER_CORE_PAPLAYER).isPlaying():
+                xbmc.sleep(1000)
+            xbmc.log("stopped playing")
 
    
 def get_params():
 
    
 def get_params():
diff --git a/description.xml b/description.xml
new file mode 100644 (file)
index 0000000..13a7bc5
--- /dev/null
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<addoninfo>
+       <!--
+               (required) guuid: unique identifier of this addon guuids can be
+               generated online at sites such as
+               http://www.famkruithof.net/uuid/uuidgen
+       -->
+       <guid>d2d9c790-fe2f-11df-8cff-0800200c9a66</guid>
+
+       <!--
+               (required) type: 1: visualization 2: skin 3: pvrdll 4: script 5:
+               scraper 6: screensaver 7: plugin-pvr 8: plugin-video 9: plugin-music
+               10: plugin-program 11: plugin-pictures 12: plugin-weather
+       -->
+       <type>9</type>
+
+       <!-- (required) Title -->
+       <title>Groovshark for XBMC</title>
+
+       <!-- (required) Major.minor.build -->
+       <version>0.0.1</version>
+
+       <!--
+               (required) author name & email. at least one author name is required
+       -->
+       <authors>
+               <author name="Stephen Denham" email="stephen.denham@gmail.com" />
+       </authors>
+
+       <!-- (required) Short description of addon. -->
+       <summary>Grooveshark addon for XBMC.</summary>
+
+       <!--
+               Longer descrption of addon. Usage instructions should go here if
+               required.
+       -->
+       <description lang="en">
+               Grooveshark addon for XBMC.
+       </description>
+       <!-- user defined tags e.g. <tags><tag>Example</tag></tags> -->
+       <tags>
+               <tag></tag>
+       </tags>
+
+       <!--
+               minimum revision of xbmc your addon will run on. Leave blank all
+               revisions
+       -->
+       <minrevision>r21819</minrevision>
+
+       <!--
+               platforms compatible with your addon. xbox, osx, windows, linux, or
+               all
+       -->
+       <platforms>
+               <platform>windows,linux</platform>
+       </platforms>
+
+       <!--
+               list any dependancies (such as another addon, your addon may have.
+               minversion and maxversion are optional
+       -->
+       <dependencies>
+               <dependency minversion="" maxversion=""></dependency>
+       </dependencies>
+
+       <!--
+               (optional) Whatever is put in disclaimer will be shown before download
+               in an ok/cancel dialog. Keep it short and to the point.
+       -->
+       <disclaimer></disclaimer>
+
+       <!-- (optional) The License the addon is released under.-->
+       <license>GPL</license>
+</addoninfo>
diff --git a/icon.png b/icon.png
new file mode 100644 (file)
index 0000000..a0ec0a4
Binary files /dev/null and b/icon.png differ
diff --git a/methods.txt b/methods.txt
new file mode 100644 (file)
index 0000000..a3abbb2
--- /dev/null
@@ -0,0 +1,302 @@
+   { METHOD: u'autoplayStartWithArtistIDs',
+    u'parameters': [u'artistIDs'],
+    u'sessionRequired': True},
+   { METHOD: u'autoplayGetNextSongEx',
+    u'parameters': [u'seedArtists',
+                    u'frowns',
+                    u'songIDsAlreadySeen',
+                    u'recentArtists',
+                    u'secondaryArtistWeightModifier',
+                    u'seedArtistWeightRange',
+                    u'weightModifierRange',
+                    u'minDuration',
+                    u'maxDuration'],
+    u'sessionRequired': True},
+   { METHOD: u'autoplayGetArtistsForTag',
+    u'parameters': [u'tagID'],
+    u'sessionRequired': True},
+   { METHOD: u'albumAbout',
+    u'parameters': [u'albumID'],
+    u'sessionRequired': True},
+   { METHOD: u'albumGetSongs',
+    u'parameters': [u'albumID', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'artistAbout',
+    u'parameters': [u'artistID'],
+    u'sessionRequired': True},
+   { METHOD: u'artistGetAlbums',
+    u'parameters': [u'artistID', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'artistGetUnverifiedAlbums',
+    u'parameters': [u'artistID', u'limit'],
+    u'sessionRequired': True},
+   { METHOD: u'artistGetVerifiedAlbums',
+    u'parameters': [u'artistID', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'artistGetSimilar',
+    u'parameters': [u'artistID', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'artistGetSongs',
+    u'parameters': [u'artistID', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistAbout',
+    u'parameters': [u'playlistID'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistAddSong',
+    u'parameters': [u'playlistID',
+                    u'songID',
+                    u'position'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistRemoveSong',
+    u'parameters': [u'playlistID', u'position'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistGetSongs',
+    u'parameters': [u'playlistID',
+                    u'limit',
+                    u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistGetSongsEx',
+    u'parameters': [u'playlistID'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistSubscribeUser',
+    u'parameters': [u'playlistID'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistMoveSong',
+    u'parameters': [u'playlistID',
+                    u'position',
+                    u'newPosition'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistReplace',
+    u'parameters': [u'playlistID', u'songIDs'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistRename',
+    u'parameters': [u'playlistID', u'name'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistDelete',
+    u'parameters': [u'playlistID'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistCreate',
+    u'parameters': [u'name', u'about'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistCreateUnique',
+    u'parameters': [u'name', u'songIDs'],
+    u'sessionRequired': True},
+   { METHOD: u'playlistClearSongs',
+    u'parameters': [u'playlistID'],
+    u'sessionRequired': True},
+   { METHOD: u'popularGetSongs',
+    u'parameters': [u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'popularGetSongsEx',
+    u'parameters': [],
+    u'sessionRequired': True},
+   { METHOD: u'searchAlbums',
+    u'parameters': [u'query', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'searchArtists',
+    u'parameters': [u'query', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'searchPlaylists',
+    u'parameters': [u'query', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'searchSongs',
+    u'parameters': [u'query', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'searchSongsUnfiltered',
+    u'parameters': [u'query', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionStart',
+    u'parameters': [u'apiKey', u'mobileID'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionGet',
+    u'parameters': [],
+    u'sessionRequired': True},
+   { METHOD: u'sessionLogin',
+    u'parameters': [u'username', u'password'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionLoginEx',
+    u'parameters': [u'username', u'token'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionLoginExt',
+    u'parameters': [u'username', u'token'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionLoginExte',
+    u'parameters': [u'username',
+                    u'token',
+                    u'mobileID'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionGetUserInfo',
+    u'parameters': [u'sessionID'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionLogout',
+    u'parameters': [],
+    u'sessionRequired': True},
+   { METHOD: u'sessionGetUserID',
+    u'parameters': [],
+    u'sessionRequired': True},
+   { METHOD: u'sessionDestroy',
+    u'parameters': [],
+    u'sessionRequired': True},
+   { METHOD: u'songGetStreamUrl',
+    u'parameters': [u'songID'],
+    u'sessionRequired': True},
+   { METHOD: u'songGetStreamUrlEx',
+    u'parameters': [u'songID', u'lowBitrate'],
+    u'sessionRequired': True},
+   { METHOD: u'songGetStreamUrlExt',
+    u'parameters': [u'songID',
+                    u'mobileID',
+                    u'country',
+                    u'lowBitrate',
+                    u'prefetch'],
+    u'sessionRequired': True},
+   { METHOD: u'songSetPlaybackReached30Seconds',
+    u'parameters': [u'streamKey', u'streamServerID'],
+    u'sessionRequired': True},
+   { METHOD: u'songMarkStreamKeyOver30Seconds',
+    u'parameters': [u'songID',
+                    u'mobileID',
+                    u'streamKey',
+                    u'streamServerID'],
+    u'sessionRequired': True},
+   { METHOD: u'songMarkComplete',
+    u'parameters': [u'songID',
+                    u'streamKey',
+                    u'streamServerID'],
+    u'sessionRequired': True},
+   { METHOD: u'songAbout',
+    u'parameters': [u'songID'],
+    u'sessionRequired': True},
+   { METHOD: u'songGetInfo',
+    u'parameters': [u'songID'],
+    u'sessionRequired': True},
+   { METHOD: u'songGetSimilar',
+    u'parameters': [u'songID', u'limit', u'page'],
+    u'sessionRequired': True},
+   { METHOD: u'songFavorite',
+    u'parameters': [u'songID'],
+    u'sessionRequired': True},
+   { METHOD: u'songUnfavorite',
+    u'parameters': [u'songID'],
+    u'sessionRequired': True},
+   { METHOD: u'userGetPlaylists',
+    u'parameters': [u'userID',
+                    u'limit',
+                    u'page',
+                    u'offset'],
+    u'sessionRequired': True},
+   { METHOD: u'userGetPlaylistsEx',
+    u'parameters': [u'userID'],
+    u'sessionRequired': True},
+   { METHOD: u'userGetPlaylistsModifiedTime',
+    u'parameters': [u'userID'],
+    u'sessionRequired': True},
+   { METHOD: u'userGetSubscribedPlaylists',
+    u'parameters': [u'userID'],
+    u'sessionRequired': True},
+   { METHOD: u'userGetFavoriteSongs',
+    u'parameters': [u'userID',
+                    u'limit',
+                    u'page',
+                    u'offset'],
+    u'sessionRequired': True},
+   { METHOD: u'tinysongCreate',
+    u'parameters': [u'songID',
+                    u'query',
+                    u'useFirstResult'],
+    u'sessionRequired': True},
+   { METHOD: u'tinysongGetExpandedUrl',
+    u'parameters': [u'tinySongUrl'],
+    u'sessionRequired': True},
+   { METHOD: u'servicePing',
+    u'parameters': [],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkMarkSongDownloadedFromServer',
+    u'parameters': [u'songID',
+                    u'streamKey',
+                    u'streamServerID'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkRegisterMobile',
+    u'parameters': [u'hash',
+                    u'phoneType',
+                    u'phoneNumber',
+                    u'mnc',
+                    u'mcc',
+                    u'simSerial'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkRegisterMobileEx',
+    u'parameters': [u'uuid',
+                    u'mcc',
+                    u'mnc',
+                    u'manufacturer',
+                    u'model',
+                    u'osVersion'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkRegisterMobileExt',
+    u'parameters': [u'uuid',
+                    u'mcc',
+                    u'mnc',
+                    u'manufacturer',
+                    u'model',
+                    u'osVersion',
+                    u'phoneType'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetMobileStatusEx',
+    u'parameters': [u'mobileID'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetMobileIDByHash',
+    u'parameters': [u'hash'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetSongFromToken',
+    u'parameters': [u'token', u'country'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetTokenForSongID',
+    u'parameters': [u'songID', u'country'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkRegisterUser',
+    u'parameters': [u'username',
+                    u'password',
+                    u'firstName',
+                    u'lastName',
+                    u'emailAddress'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkMarkSongsPlayedOffline',
+    u'parameters': [u'songIDs'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkRecordOfflineSongPlays',
+    u'parameters': [u'offlinePlays'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkRecordOfflineSongPlaysEx',
+    u'parameters': [u'mobileID', u'offlinePlays'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetUserPlaylistsModifiedSince',
+    u'parameters': [u'userID', u'time'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetCountry',
+    u'parameters': [],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetCountryFromISO',
+    u'parameters': [u'iso'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetCountryFromIP',
+    u'parameters': [u'ip'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkStartMobileTrial',
+    u'parameters': [u'mobileID'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkStartMobileTrialEx',
+    u'parameters': [u'mobileID'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkSearchProductByUPC',
+    u'parameters': [u'upc'],
+    u'sessionRequired': True},
+   { METHOD: u'tinysongGetSongFromToken',
+    u'parameters': [u'token'],
+    u'sessionRequired': True},
+   { METHOD: u'sessionCheck',
+    u'parameters': [u'sessionID'],
+    u'sessionRequired': True},
+   { METHOD: u'groovesharkGetArtistIDsFromArtistNames',
+    u'parameters': [u'artistNames'],
+    u'sessionRequired': True}]}}
+
index 63ab3db..e97d04d 100644 (file)
@@ -34,7 +34,7 @@ class GrooveAPI:
                self.radioRecentArtists = []
                self.radioEnabled = False
 
                self.radioRecentArtists = []
                self.radioEnabled = False
 
-               self.dataDir = 'plugin_data/music/'
+               self.dataDir = 'addon_data'
                self.confDir = xbmc.translatePath(os.path.join('special://masterprofile/' + self.dataDir, os.path.basename(os.getcwd())))
                self.sessionID = self.getSavedSession()
                self.debug('Saved sessionID: ' + self.sessionID)
                self.confDir = xbmc.translatePath(os.path.join('special://masterprofile/' + self.dataDir, os.path.basename(os.getcwd())))
                self.sessionID = self.getSavedSession()
                self.debug('Saved sessionID: ' + self.sessionID)