<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.2.0-->
<commandGroup open="True" name="Kodi GMusic" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="434" name="Play Google Playlist {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&playlist_id={1}&shuffle=true"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google playlist</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicplaylist.xml</payloadFromXML>
</command>
<command id="417" name="Play Google Artist {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&filter_type=artist&filter_criteria={1}&shuffle=true"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google artist</phrase>
<payloadFromXML phraseOnly="True" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicartist.xml</payloadFromXML>
</command>
<command id="407" name="Play Google Album {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&filter_type=album&filter_criteria={1}"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google album</phrase>
<payloadFromXML phraseOnly="True" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicalbum.xml</payloadFromXML>
</command>
<command id="423" name="Play Google Song {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_song&{1}"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google</phrase>
<phrase>song, track</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicsong.xml</payloadFromXML>
</command>
</commandGroup>
I'd be curious if you find that out. I think you can sync it to the local library. I didn't play much with it but if you find something let me know. I just know when I looked it was always pointing to its own database.
Custom | select playlist_id, name from playlists | gmusicplaylist | False |
Custom | select distinct album from songs | gmusicalbum | True |
Custom | select ('song_id='||song_id||'&artistart='||artistart), title from songs | gmusicsong | False |
Custom | select distinct artist from songs | gmusicartist | True |
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.2.0-->
<commandGroup open="True" name="Kodi GMusic" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="434" name="Play Google Playlist {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&playlist_id={1}&shuffle=true"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google playlist</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicplaylist.xml</payloadFromXML>
</command>
<command id="417" name="Play Google Artist {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&filter_type=artist&filter_criteria={1}&shuffle=true"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google artist</phrase>
<payloadFromXML phraseOnly="True" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicartist.xml</payloadFromXML>
</command>
<command id="407" name="Play Google Album {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&filter_type=album&filter_criteria={1}"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google album</phrase>
<payloadFromXML phraseOnly="True" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicalbum.xml</payloadFromXML>
</command>
<command id="423" name="Play Google Song {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_song&{1}"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google</phrase>
<phrase>song, track</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicsong.xml</payloadFromXML>
</command>
</commandGroup>
15:57:33 T:12032 ERROR: Previous line repeats 9 times.
15:57:33 T:12032 NOTICE: [GoogleMusicEXP-1.10.6] ARGV: ['plugin://plugin.audio.googlemusic.exp/', '49', '?action=play_all&filter_type=artist&filter_criteria=Five Finger Death Punch&shuffle=true']
15:57:34 T:12032 ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.AttributeError'>
Error Contents: 'NoneType' object has no attribute 'replace'
Traceback (most recent call last):
File "C:\Users\mrvog\AppData\Roaming\Kodi\addons\plugin.audio.googlemusic.exp\default.py", line 35, in <module>
GoogleMusicActions.GoogleMusicActions().executeAction(action, params)
File "C:\Users\mrvog\AppData\Roaming\Kodi\addons\plugin.audio.googlemusic.exp\GoogleMusicActions.py", line 12, in executeAction
utils.playAll(self._getSongs(params), 'shuffle' in params)
File "C:\Users\mrvog\AppData\Roaming\Kodi\addons\plugin.audio.googlemusic.exp\GoogleMusicActions.py", line 254, in _getSongs
songs = self.api.getFilterSongs(get('filter_type'), urllib.unquote_plus(get('filter_criteria')), urllib.unquote_plus(get('artist')))
File "C:\Program Files (x86)\Kodi\system\python\Lib\urllib.py", line 1240, in unquote_plus
s = s.replace('+', ' ')
AttributeError: 'NoneType' object has no attribute 'replace'
-->End of Python script error report<--
Also I was wondering If I just want to launch the plugin what would the action look like? I tried XJson.Raw Player.Open "item":{"file":"plugin://plugin.audio.googlemusic.exp/"} and different varieties of that but couldn't figure it out. I tried with another kodi plugin and gave up. Instead I made keypress x launch the shortcut, not ideal and I know there has to be a better way. Thanks
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.2.6-->
<command id="438" name="open google music screen in kodi" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>GUI.ActivateWindow</param>
<param>"window": "music", "parameters": ["plugin://plugin.audio.googlemusic.exp/" ]</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>open google music screen in kodi</phrase>
</command>
Welcome to the forum.
You can try a solution similar to the one used for the youtube plugin in Kodi, which is included in the default config. However, since it's a Music addon, not a Videos addon, you'd change the "video" window to "music".Code: [Select]<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.2.6-->
<command id="438" name="open google music screen in kodi" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>GUI.ActivateWindow</param>
<param>"window": "music", "parameters": ["plugin://plugin.audio.googlemusic.exp/" ]</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>open google music screen in kodi</phrase>
</command>
I don't use Google Music so I can't help with the rest at the moment. I may test this out tonight though. What the heck.
I don't know if anyone still uses this command tree, but I just installed Vox yesterday and added it. Has worked great, except it seems "Play google artist or Play google album" doesn't work. Vox recognizes the command and passes it to Kodi, but the plugin returns an error.
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.2.6-->
<command id="428" name="Play Google Artist {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/', '-1', '?action=play_all&filter_type=artist&filter_criteria={1}&shuffle=true&artist="}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>google artist</phrase>
<payloadFromXML phraseOnly="True" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicartist.xml</payloadFromXML>
</command>
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.2.6-->
<command id="467" name="Play Google Album {1}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&filter_type=album&filter_criteria={PF.1}&artist={1}"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase optional="true">play</phrase>
<phrase>Google album</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">XbmcPayloads\gmusicalbum.xml</payloadFromXML>
</command>
select distinct album_artist, album from songs where album NOT LIKE '%???%'
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.2.6-->
<command id="477" name="Play Google Thumbs Up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&playlist_id=thumbsup&shuffle=true"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Play Google Thumbs Up</phrase>
</command>
Here's a bonus command, "Play Google Thumbs Up". This plays the list of songs that you've previously thumbed up in Google Music. Basically a favourites playlist.Thanks for helping with this! Sure enough that fixed it when I add it to my voicecommands.xml. For some reason when I try to build these in the logical command builder the syntax gets changed all around. I'll use the google thumbs up playlist as an example. I enter my action into the first box as XJson.Raw then the next box is Player.Open, the 3rd box for the parameters I copy and paste:
"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&playlist_id=thumbsup&shuffle=true"}
<phrase>Launch Google Music</phrase>
</command>
<command id="545" name="Play Google Thumbs Up" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description=""item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&amp;playlist_id=thumbsup&amp;shuffle=true"}

"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&amp;playlist_id=thumbsup&amp;shuffle=true"}">
<action>
<cmdType>XJson.Raw</cmdType>
<params>
<param>Player.Open</param>
<param>"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&amp;playlist_id=thumbsup&amp;shuffle=true"}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Play Google Thumbs Up</phrase>
</command>
The trick to figuring out the syntax for all this stuff is to manually play (or queue or navigate to) Google Music media in Kodi, and then check Kodi's log to find the query that is used.
18:39:16 T:8596 NOTICE: [GoogleMusicEXP-1.10.6] Getting playlists of type: auto
18:39:24 T:4488 NOTICE: [GoogleMusicEXP-1.10.6] ARGV: ['plugin://plugin.audio.googlemusic.exp/', '-1', '?action=play_all&playlist_id=thumbsup&shuffle=true']
18:39:24 T:4488 NOTICE: [GoogleMusicEXP-1.10.6] Loading playlist: thumbsup
['plugin://plugin.audio.googlemusic.exp/', '-1', '?action=play_all&playlist_id=thumbsup&shuffle=true']
"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&playlist_id=thumbsup&shuffle=true"}
I don't recommend you try to edit anything directly in XML. Always use the command builder. XML encodes certain characters such as '&'. That's just how it works.
To see the correct format just look at nime5ter's command in the builder after pasting it into your tree.
So for example the correct parameter to use for playing favourites using "player.open" is the following:Code: [Select]"item":{"file":"plugin://plugin.audio.googlemusic.exp/?action=play_all&playlist_id=thumbsup&shuffle=true"}