From 973b4c6ce5e47891769f1219a7f7f5d2c75287db Mon Sep 17 00:00:00 2001 From: stephendenham Date: Thu, 2 Dec 2010 18:10:51 +0000 Subject: [PATCH] First attempt at dharma version. git-svn-id: svn://svn.code.sf.net/p/xbmc-groove/code@7 2dec19e3-eb1d-4749-8193-008c8bba0994 --- addon.xml | 18 +++ changelog.txt | 3 + default.py | 55 ++++--- description.xml | 75 +++++++++ icon.png | Bin 0 -> 5805 bytes methods.txt | 302 +++++++++++++++++++++++++++++++++++++ resources/lib/GrooveAPI.py | 2 +- 7 files changed, 425 insertions(+), 30 deletions(-) create mode 100644 addon.xml create mode 100644 changelog.txt create mode 100644 description.xml create mode 100644 icon.png create mode 100644 methods.txt 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 0000000000000000000000000000000000000000..a0ec0a4fb2ff5c846bf58d1761b947b87f0abd9f GIT binary patch literal 5805 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 LEDVbcNYwuUiD^{$ literal 0 HcmV?d00001 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) -- 2.20.1