iTunes Local Control and Catalina

Posted on
Fri May 01, 2020 7:34 pm
rgspb offline
Posts: 195
Joined: Apr 24, 2009
Location: Florida

iTunes Local Control and Catalina

After updating to Catalina I can no longer get the iTunes Local Control plug-in to work. I keep getting this in the event log:

May 1, 2020 at 9:28:09 PM
Reloading plugin "iTunes Local Control 0.0.7"
Starting plugin "iTunes Local Control 0.0.7" (pid 3669)
iTunes Local Control Error Error in plugin execution InitializeMain:

Traceback (most recent call last):
File "plugin.py", line 12, in <module>
File "/Library/Application Support/Perceptive Automation/Indigo 7.4/Plugins/iTunes Local Control.indigoPlugin/Contents/Server Plugin/iTunesAppleScript.py", line 89, in <module>
File "/Library/Application Support/Perceptive Automation/Indigo 7.4/Plugins/iTunes Local Control.indigoPlugin/Contents/Server Plugin/iTunesAppleScript.py", line 16, in _make
File "/Library/Application Support/Perceptive Automation/Indigo 7.4/IndigoPluginHost.app/Contents/Resources/PlugIns/applescript/__init__.py", line 49, in __init__
ScriptError: Expected end of line, etc. but found identifier. (-2741) range=78-83

Posted on
Fri May 01, 2020 7:52 pm
Korey offline
User avatar
Posts: 618
Joined: Jun 04, 2008
Location: Henderson, NV

Re: iTunes Local Control and Catalina

Was iTunes not replaced by "Music" in 10.15?

I don't think this plugin will be able to control anything?

This one of the main reasons I have not upgraded past 10.14.

--
Korey

Posted on
Sun May 03, 2020 9:14 am
jay (support) offline
Site Admin
User avatar
Posts: 16306
Joined: Mar 19, 2008
Location: Austin, Texas

Re: iTunes Local Control and Catalina

Yeah, I suspect this plugin will need to be modified from doing "tell iTunes" to "tell Music".

[MODERATOR'S NOTE]: moved to the plugin developer's forum.

Jay (Indigo Support)
Twitter | Facebook | LinkedIn

Posted on
Fri May 08, 2020 3:33 pm
kmarkley offline
Posts: 150
Joined: Nov 15, 2016

Re: iTunes Local Control and Catalina

None of my machines are on Catalina and I don't really have a reason to upgrade at the moment. So the best I can promise is maybe someday.

But the repo is on github if someone wants to make a pull request.

Sorry.

Posted on
Wed Jun 03, 2020 2:45 pm
jltnol offline
Posts: 492
Joined: Oct 15, 2013

Re: iTunes Local Control and Catalina

Hope this one gets updated. There is a lot of flexibility here that is very useful.. :)

Posted on
Thu Jul 09, 2020 5:10 pm
ppespepe offline
Posts: 21
Joined: May 27, 2020

Re: iTunes Local Control and Catalina

I'd love to give it a try but my Indigo Mac is in Mojave and all the rest has no indigo...

If somebody wants to give it a shot... I think you could modify the actions.xml and change the iTunes by Music. Something like this:

<Action id='launch'>
<Name>Music Launch</Name>
<CallbackMethod>launch</CallbackMethod>
</Action>

as opposed to:

<Action id='launch'>
<Name>iTunes Launch</Name>
<CallbackMethod>launch</CallbackMethod>
</Action>

But this is a guessing... I have never ever done apple scripting in any kind or form but I tasted the below script that was originally for iTunes and changed iTunes by Music and it worked...

tell application "Music"
set sound volume to 40
set EQ enabled to true
play
end tell

Changing the xml after the plugin has been installed is fairly easy I think... If anyone more versed on this than me (very easy) could confirm is this makes sense... :D

Anyway.. perhaps if anyone wanna give it a try as far fetched as it sounds... just copy and paste the following, then save it to a file called Actions.xml perhaps restart something and give it a try? I just copied the Actions.xml from the GitHub site and changed every iTunes for Music...

<?xml version='1.0'?>
<Actions>
<Action id='launch'>
<Name>Music Launch</Name>
<CallbackMethod>launch</CallbackMethod>
</Action>
<Action id='quit'>
<Name>Music Quit</Name>
<CallbackMethod>quit</CallbackMethod>
</Action>
<Action id='toggle'>
<Name>Music Toggle</Name>
<CallbackMethod>toggle</CallbackMethod>
</Action>
<Action id='controlsSeperator' />
<Action id='play'>
<Name>Music Play</Name>
<CallbackMethod>play</CallbackMethod>
</Action>
<Action id='pause'>
<Name>Music Pause</Name>
<CallbackMethod>pause</CallbackMethod>
</Action>
<Action id='playpause'>
<Name>Music Play/Pause</Name>
<CallbackMethod>playpause</CallbackMethod>
</Action>
<Action id='stop'>
<Name>Music Stop</Name>
<CallbackMethod>stop</CallbackMethod>
</Action>
<Action id='next'>
<Name>Music Next</Name>
<CallbackMethod>next</CallbackMethod>
</Action>
<Action id='prev'>
<Name>Music Previous</Name>
<CallbackMethod>prev</CallbackMethod>
</Action>
<Action id='back'>
<Name>Music Back</Name>
<CallbackMethod>back</CallbackMethod>
</Action>
<Action id='volumeSeperator' />
<Action id='setVolume'>
<Name>Music Set Volume</Name>
<CallbackMethod>setVolume</CallbackMethod>
<ConfigUI>
<Field id='volume' type='textfield'>
<Label>Volume:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='increaseVolume'>
<Name>Music Increase Volume</Name>
<CallbackMethod>increaseVolume</CallbackMethod>
<ConfigUI>
<Field id='volume' type='textfield' defaultValue='5'>
<Label>Increment:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='decreaseVolume'>
<Name>Music Decrease Volume</Name>
<CallbackMethod>decreaseVolume</CallbackMethod>
<ConfigUI>
<Field id='volume' type='textfield' defaultValue='5'>
<Label>Decrement:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='volumeToVariable'>
<Name>Music Volume to Variable</Name>
<CallbackMethod>volumeToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='volumeFromVariable'>
<Name>Music Volume from Variable</Name>
<CallbackMethod>volumeFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='fadeVolumeTo'>
<Name>Music Fade Volume To</Name>
<CallbackMethod>fadeVolumeTo</CallbackMethod>
<ConfigUI>
<Field id='volume' type='textfield'>
<Label>Target Volume:</Label>
</Field>
<Field id='duration' type='textfield' defaultValue='30'>
<Label>Fade Seconds:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='fadeVolumeUp'>
<Name>Music Fade Volume Up</Name>
<CallbackMethod>fadeVolumeUp</CallbackMethod>
<ConfigUI>
<Field id='volume' type='textfield'>
<Label>Increment:</Label>
</Field>
<Field id='duration' type='textfield' defaultValue='30'>
<Label>Fade Seconds:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='fadeVolumeDown'>
<Name>Music Fade Volume Down</Name>
<CallbackMethod>fadeVolumeDown</CallbackMethod>
<ConfigUI>
<Field id='volume' type='textfield'>
<Label>Decrement:</Label>
</Field>
<Field id='duration' type='textfield' defaultValue='30'>
<Label>Fade Seconds:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='fadeFromVariable'>
<Name>Music Fade Volume to Variable Value</Name>
<CallbackMethod>fadeFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
<Field id='duration' type='textfield' defaultValue='30'>
<Label>Fade Seconds:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='fadeStop'>
<Name>Music Stop Fade</Name>
<CallbackMethod>fadeStop</CallbackMethod>
</Action>
<Action id='playlistSeperator' />
<Action id='playPlaylist'>
<Name>Music Play Playlist</Name>
<CallbackMethod>playPlaylist</CallbackMethod>
<ConfigUI>
<Field id='playlist' type='menu'>
<Label>Playlist:</Label>
<List class='self' method='menu_playlists'/>
</Field>
<Field id='shuffleNote' type='label' fontColor='blue'>
<Label>Note: shuffle state will remain OFF after this action completes.</Label>
</Field>
</ConfigUI>
</Action>
<Action id='playPlaylistShuffled'>
<Name>Music Play Playlist Shuffled</Name>
<CallbackMethod>playPlaylistShuffled</CallbackMethod>
<ConfigUI>
<Field id='playlist' type='menu'>
<Label>Playlist:</Label>
<List class='self' method='menu_playlists'/>
</Field>
<Field id='shuffleNote' type='label' fontColor='red'>
<Label>Note: shuffle state will remain ON after this action completes.</Label>
</Field>
</ConfigUI>
</Action>
<Action id='playlistToVariable'>
<Name>Music Current Playlist to Variable</Name>
<CallbackMethod>playlistToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='playlistFromVariable'>
<Name>Music Play Playlist from Variable</Name>
<CallbackMethod>playlistFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='singleSeperator' />
<Action id='playSingleTrackPlaylistNumber'>
<Name>Music Play Single Track by Playlist+Number</Name>
<CallbackMethod>playSingleTrackPlaylistNumber</CallbackMethod>
<ConfigUI>
<Field id='playlist' type='menu'>
<Label>Playlist:</Label>
<List class='self' method='menu_playlists'/>
</Field>
<Field id='trackNumber' type='textfield' defaultValue='1'>
<Label>Track Number:</Label>
</Field>
<Field id='playlistNote' type='label' fontColor='blue'>
<Label>Note: this action will create/update a playlist named "Indigo Single Track"</Label>
</Field>
</ConfigUI>
</Action>
<Action id='playSingleTrackPlaylistName'>
<Name>Music Play Single Track by Playlist+Name</Name>
<CallbackMethod>playSingleTrackPlaylistName</CallbackMethod>
<ConfigUI>
<Field id='playlist' type='menu'>
<Label>Playlist:</Label>
<List class='self' method='menu_playlists'/>
</Field>
<Field id='trackName' type='textfield'>
<Label>Track Name:</Label>
</Field>
<Field id='playlistNote' type='label' fontColor='blue'>
<Label>Note: this action will create/update a playlist named "Indigo Single Track"</Label>
</Field>
</ConfigUI>
</Action>
<Action id='playSingleTrackPlaylistRandom'>
<Name>Music Play Single Random Track from Playlist</Name>
<CallbackMethod>playSingleTrackPlaylistRandom</CallbackMethod>
<ConfigUI>
<Field id='playlist' type='menu'>
<Label>Playlist:</Label>
<List class='self' method='menu_playlists'/>
</Field>
<Field id='playlistNote' type='label' fontColor='blue'>
<Label>Note: this action will create/update a playlist named "Indigo Single Track"</Label>
</Field>
</ConfigUI>
</Action>
<Action id='shuffleSeperator' />
<Action id='shuffleStateOn'>
<Name>Music Shuffle On</Name>
<CallbackMethod>shuffleStateOn</CallbackMethod>
</Action>
<Action id='shuffleStateOff'>
<Name>Music Shuffle Off</Name>
<CallbackMethod>shuffleStateOff</CallbackMethod>
</Action>
<Action id='shuffleStateToggle'>
<Name>Music Shuffle Toggle</Name>
<CallbackMethod>shuffleStateToggle</CallbackMethod>
</Action>
<Action id='shuffleStateToVariable'>
<Name>Music Shuffle State to Variable</Name>
<CallbackMethod>shuffleStateToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='shuffleStateFromVariable'>
<Name>Music Shuffle State from Variable</Name>
<CallbackMethod>shuffleStateFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='shuffleModeSongs'>
<Name>Music Shuffle Songs</Name>
<CallbackMethod>shuffleModeSongs</CallbackMethod>
</Action>
<Action id='shuffleModeAlbums'>
<Name>Music Shuffle Albums</Name>
<CallbackMethod>shuffleModeAlbums</CallbackMethod>
</Action>
<Action id='shuffleModeGroupings'>
<Name>Music Shuffle Groupings</Name>
<CallbackMethod>shuffleModeGroupings</CallbackMethod>
</Action>
<Action id='shuffleModeToVariable'>
<Name>Music Shuffle Mode to Variable</Name>
<CallbackMethod>shuffleModeToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='shuffleModeFromVariable'>
<Name>Music Shuffle Mode from Variable</Name>
<CallbackMethod>shuffleModeFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='repeatSeperator' />
<Action id='repeatOff'>
<Name>Music Repeat Off</Name>
<CallbackMethod>repeatOff</CallbackMethod>
</Action>
<Action id='repeatOne'>
<Name>Music Repeat One</Name>
<CallbackMethod>repeatOne</CallbackMethod>
</Action>
<Action id='repeatAll'>
<Name>Music Repeat All</Name>
<CallbackMethod>repeatAll</CallbackMethod>
</Action>
<Action id='repeatToVariable'>
<Name>Music Repeat State to Variable</Name>
<CallbackMethod>repeatToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='repeatFromVariable'>
<Name>Music Repeat State from Variable</Name>
<CallbackMethod>repeatFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='eqSeperator' />
<Action id='eqStateOn'>
<Name>Music EQ On</Name>
<CallbackMethod>eqStateOn</CallbackMethod>
</Action>
<Action id='eqStateOff'>
<Name>Music EQ Off</Name>
<CallbackMethod>eqStateOff</CallbackMethod>
</Action>
<Action id='eqStateToggle'>
<Name>Music EQ Toggle</Name>
<CallbackMethod>eqStateToggle</CallbackMethod>
</Action>
<Action id='eqStateToVariable'>
<Name>Music EQ State to Variable</Name>
<CallbackMethod>eqStateToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='eqStateFromVariable'>
<Name>Music EQ State from Variable</Name>
<CallbackMethod>eqStateFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='eqPresetSet'>
<Name>Music Set EQ Preset</Name>
<CallbackMethod>eqPresetSet</CallbackMethod>
<ConfigUI>
<Field id='preset' type='menu'>
<Label>Preset:</Label>
<List class='self' method='menu_eq_presets'/>
</Field>
</ConfigUI>
</Action>
<Action id='eqPresetToVariable'>
<Name>Music Current EQ Preset to Variable</Name>
<CallbackMethod>eqPresetToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='eqPresetFromVariable'>
<Name>Music Current EQ Preset from Variable</Name>
<CallbackMethod>eqPresetFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='airplaySeperator' />
<Action id='airplayDeviceStatus'>
<Name>Music Airplay Device Status</Name>
<CallbackMethod>airplayDeviceStatus</CallbackMethod>
<ConfigUI>
<Field id='device' type='menu'>
<Label>Airplay Device:</Label>
<List class='self' method='menu_airplay_devices'/>
</Field>
<Field id='status' type='checkbox' defaultValue='true'>
<Label>Active:</Label>
</Field>
<Field id='volume' type='textfield' defaultValue='100'>
<Label>Percent Volume:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='airplayDeviceAdd'>
<Name>Music Airplay Activate Device</Name>
<CallbackMethod>airplayDeviceAdd</CallbackMethod>
<ConfigUI>
<Field id='device' type='menu'>
<Label>Airplay Device:</Label>
<List class='self' method='menu_airplay_devices'/>
</Field>
</ConfigUI>
</Action>
<Action id='airplayDeviceRemove'>
<Name>Music Airplay Deactivate Device</Name>
<CallbackMethod>airplayDeviceRemove</CallbackMethod>
<ConfigUI>
<Field id='device' type='menu'>
<Label>Airplay Device:</Label>
<List class='self' method='menu_airplay_devices'/>
</Field>
</ConfigUI>
</Action>
<Action id='airplayDeviceToggle'>
<Name>Music Airplay Toggle Device</Name>
<CallbackMethod>airplayDeviceToggle</CallbackMethod>
<ConfigUI>
<Field id='device' type='menu'>
<Label>Airplay Device:</Label>
<List class='self' method='menu_airplay_devices'/>
</Field>
</ConfigUI>
</Action>
<Action id='airplayDeviceVolume'>
<Name>Music Airplay Device Volume</Name>
<CallbackMethod>airplayDeviceVolume</CallbackMethod>
<ConfigUI>
<Field id='device' type='menu'>
<Label>Airplay Device:</Label>
<List class='self' method='menu_airplay_devices'/>
</Field>
<Field id='volume' type='textfield' defaultValue='100'>
<Label>Percent Volume:</Label>
</Field>
</ConfigUI>
</Action>
<Action id='airplayDevicesGroup'>
<Name>Music Airplay Devices Group</Name>
<CallbackMethod>airplayDevicesGroup</CallbackMethod>
<ConfigUI>
<Field id='devices' type='list'>
<Label>Airplay Devices:</Label>
<List class='self' method='menu_airplay_devices'/>
</Field>
</ConfigUI>
</Action>
<Action id='airplayDevicesToVariable'>
<Name>Music Airplay Devices to Variable</Name>
<CallbackMethod>airplayDevicesToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
<Field id='convert' type='checkbox' defaultValue='false'>
<Label>Convert?:</Label>
<Description>Convert to string to display in control pages.</Description>
</Field>
<Field id='convertHelp2' type='label' alignWithControl='true' defaultValue='none'>
<Label>Leave unchecked to use for restoring devices.</Label>
</Field>
</ConfigUI>
</Action>
<Action id='airplayDevicesFromVariable'>
<Name>Music Airplay Devices from Variable</Name>
<CallbackMethod>airplayDevicesFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='settingsSeperator' />
<Action id='currentSettingsDevicesToVariable'>
<Name>Music Current Settings to Variable</Name>
<CallbackMethod>currentSettingsToVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='currentSettingsDevicesFromVariable'>
<Name>Music Current Settings from Variable</Name>
<CallbackMethod>currentSettingsFromVariable</CallbackMethod>
<ConfigUI>
<Field id='variable' type='menu'>
<Label>Variable:</Label>
<List class='indigo.variables'/>
</Field>
</ConfigUI>
</Action>
<Action id='applescriptSeperator' />
<Action id='playApplescriptSpecifier'>
<Name>Music Play Applescript Specifier</Name>
<CallbackMethod>playApplescriptSpecifier</CallbackMethod>
<ConfigUI>
<Field id='applescriptLine1' type='label' fontColor='blue'>
<Label>tell application 'Music'</Label>
</Field>
<Field id='specifier' type='textfield' fontColor='blue'>
<Label fontColor='blue'> play</Label>
</Field>
<Field id='applescriptLine2' type='label' fontColor='blue'>
<Label>end tell</Label>
</Field>
<Field id='helpSeparator' type='separator' />
<Field id='applescriptHelp' type='label' defaultValue='none'>
<Label>Example:</Label>
</Field>
<Field id='applescriptExample' type='label' defaultValue='none' fontColor='blue'>
<Label> last track of playlist "My Playlist" whose loved is true</Label>
</Field>
</ConfigUI>
</Action>
<Action id='executeApplescriptText'>
<Name>Music Execute Applescript Text</Name>
<CallbackMethod>executeApplescriptText</CallbackMethod>
<ConfigUI>
<Field id='applescriptLine1' type='label' fontColor='blue'>
<Label>tell application 'Music'</Label>
</Field>
<Field id='applescriptText' type='textfield'>
<Label> .</Label>
</Field>
<Field id='applescriptLine2' type='label' fontColor='blue'>
<Label>end tell</Label>
</Field>
<Field id='helpSeparator' type='separator' />
<Field id='applescriptHelp' type='label' defaultValue='none'>
<Label>Example:</Label>
</Field>
<Field id='applescriptExample' type='label' defaultValue='none' fontColor='blue'>
<Label> duplicate current track to playlist named "My Favorites"</Label>
</Field>
</ConfigUI>
</Action>
</Actions>

Posted on
Thu Jul 09, 2020 5:11 pm
ppespepe offline
Posts: 21
Joined: May 27, 2020

Re: iTunes Local Control and Catalina

ohh... all the indentation disappeared... :(

Posted on
Thu Jul 09, 2020 7:52 pm
jay (support) offline
Site Admin
User avatar
Posts: 16306
Joined: Mar 19, 2008
Location: Austin, Texas

Re: iTunes Local Control and Catalina

Once we push the next release (hopefully a week or so) then I'll submit a patch to the plugin. I think I know how to tweak it but it'll require the workaround we're adding to head fake Catalina.

Jay (Indigo Support)
Twitter | Facebook | LinkedIn

Posted on
Fri Jul 10, 2020 4:13 am
FlyingDiver offline
User avatar
Posts: 4306
Joined: Jun 07, 2014
Location: Southwest Florida, USA

Re: iTunes Local Control and Catalina

ppespepe wrote:
ohh... all the indentation disappeared... :(


That's why you need to use the CODE tags.

joe (aka FlyingDiver)
my plugins: http://forums.indigodomo.com/viewforum.php?f=177

Page 1 of 1

Who is online

Users browsing this forum: No registered users and 1 guest