From: stephendenham Date: Thu, 2 Dec 2010 18:10:51 +0000 (+0000) Subject: First attempt at dharma version. X-Git-Url: https://git.hcoop.net/clinton/xbmc-groove.git/commitdiff_plain/973b4c6ce5e47891769f1219a7f7f5d2c75287db?ds=sidebyside First attempt at dharma version. git-svn-id: svn://svn.code.sf.net/p/xbmc-groove/code@7 2dec19e3-eb1d-4749-8193-008c8bba0994 --- diff --git a/addon.xml b/addon.xml new file mode 100644 index 0000000..6c49f4a --- /dev/null +++ b/addon.xml @@ -0,0 +1,18 @@ + + + + + + + audio + + + all + Grooveshark addon for XBMC. + + Grooveshark addon for XBMC. + + + + diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000..f1adaf9 --- /dev/null +++ b/changelog.txt @@ -0,0 +1,3 @@ +0.0.1: + +Dharma version. diff --git a/default.py b/default.py index cb5aa16..42fad28 100644 --- a/default.py +++ b/default.py @@ -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 @@ -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')) -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 * @@ -68,6 +60,8 @@ class GrovesharkPlayer(xbmc.Player): 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')) @@ -78,9 +72,9 @@ class Groveshark: 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 ): @@ -107,7 +101,7 @@ class Groveshark: 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: @@ -118,7 +112,7 @@ class Groveshark: 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: @@ -129,7 +123,7 @@ class Groveshark: 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: @@ -149,7 +143,7 @@ class Groveshark: 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: @@ -223,17 +217,17 @@ class Groveshark: 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): - 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): - 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() @@ -242,13 +236,14 @@ class Groveshark: 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) + self.onPlayBackChanged(2) 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): - 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.') @@ -409,16 +404,18 @@ class Groveshark: 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 - self.musicplaylist.clear() if change == 1 and groovesharkApi.radioTurnedOn() == True: - print "playnext" + xbmc.log("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(): diff --git a/description.xml b/description.xml new file mode 100644 index 0000000..13a7bc5 --- /dev/null +++ b/description.xml @@ -0,0 +1,75 @@ + + + + d2d9c790-fe2f-11df-8cff-0800200c9a66 + + + 9 + + + Groovshark for XBMC + + + 0.0.1 + + + + + + + + Grooveshark addon for XBMC. + + + + Grooveshark addon for XBMC. + + + + + + + + r21819 + + + + windows,linux + + + + + + + + + + + + GPL + diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..a0ec0a4 Binary files /dev/null and b/icon.png differ diff --git a/methods.txt b/methods.txt new file mode 100644 index 0000000..a3abbb2 --- /dev/null +++ b/methods.txt @@ -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}]}} + diff --git a/resources/lib/GrooveAPI.py b/resources/lib/GrooveAPI.py index 63ab3db..e97d04d 100644 --- a/resources/lib/GrooveAPI.py +++ b/resources/lib/GrooveAPI.py @@ -34,7 +34,7 @@ class GrooveAPI: 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)