[OS X 10.8.2] AppleScript Mail script help

Discussion in 'Mac Programming' started by moonman239, Nov 9, 2012.

  1. moonman239, Nov 9, 2012
    Last edited by a moderator: Nov 11, 2012

    macrumors 65816

    Joined:
    Mar 27, 2009
    #1
    I'm trying to design a script that will cause iTunes to play a song when I tell Siri on my iPhone to send an e-mail to my e-mail address. Mail is supposed to receive the e-mail, see that it was addressed to "iTunes", and run the script. I did send an e-mail addressed to "iTunes," and everything that doesn't have to do with AppleScript seems to be configured correctly. Here's my code:

    Code:
    using terms from application "Mail"
    	on perform mail action with messages messageList for rule aRule
    		tell application "Mail"
    			repeat with thisMessage in messageList
    				set theCommand to content of messageList
    			end repeat
    		end tell
    	end perform mail action with messages
    end using terms from
    
    tell application "iTunes"
    	if theCommand contains "play" then
    		if theCommand is equal to "play" then
    			play
    		else
    			set prevTIDs to text item delimiters of AppleScript
    			set text item delimiters of AppleScript to "play "
    			set subject to text items of theCommand
    			
    			set text item delimiters of AppleScript to ""
    			set subject to "" & subject
    			set AppleScript's text item delimiters to " by artist "
    			set delimitedList to every text item of subject
    			set theTrack to the first item of delimitedList
    			try
    				set theArtist to the second item of delimitedList
    				set artistIsDefined to true
    			on error
    				set artistIsDefined to false
    			end try
    			set AppleScript's text item delimiters to prevTIDs
    			if artistIsDefined is true then
    				play (every track in playlist 1 whose artist is theArtist and name is theTrack)
    			else
    				play (every track in playlist 1 whose name is theTrack)
    			end if
    		end if
    	else if theCommand is equal to "pause" then
    		pause {}
    	else if theCommand is equal to "stop" then
    		stop {}
    	end if
    end tell
    
    Now, when I remove everything before the "tell iTunes" part and set theCommand to a valid command, the script works.
     
  2. macrumors 6502a

    Joined:
    Mar 17, 2012
    Location:
    Belgium
    #2
    Try this :

    Code:
    using terms from application "Mail"
    on perform mail action with messages messageList for rule aRule
    tell application "Mail"
    repeat with thisMessage in messageList
    set theCommand to content of [COLOR="Red"]thisMessage[/COLOR]
    end repeat
    end tell
    end perform mail action with messages
    end using terms from
     
  3. thread starter macrumors 65816

    Joined:
    Mar 27, 2009
    #3
    Still doesn't work.
     
  4. thread starter macrumors 65816

    Joined:
    Mar 27, 2009
    #4
    I added a try block to catch any errors, and I got this error message:

     
  5. thread starter macrumors 65816

    Joined:
    Mar 27, 2009
    #5
    Code:
    using terms from application "Mail"
    	on perform mail action with messages messageList for rule aRule
    		tell application "Mail"
    			repeat with thisMessage in messageList
    				try
    					set theCommand to content of thisMessage as string
    				on error errMsg
    					display alert errMsg
    				end try
    			end repeat
    		end tell
    		tell application "iTunes"
    			if theCommand contains "play" then
    				if theCommand is equal to "play" then
    					play
    				else
    					set prevTIDs to text item delimiters of AppleScript
    					set text item delimiters of AppleScript to "play "
    					set subject to text items of theCommand
    					set text item delimiters of AppleScript to ""
    					set subject to "" & subject
    					set AppleScript's text item delimiters to " by artist "
    					set delimitedList to every text item of subject
    					set theTrack to the first item of delimitedList
    					try
    						set theArtist to the second item of delimitedList
    						set artistIsDefined to true
    					on error
    						set artistIsDefined to false
    					end try
    					set AppleScript's text item delimiters to prevTIDs
    					if artistIsDefined is true then
    						try
    							play (every track in playlist 1 whose artist is theArtist and name is theTrack)
    							say "Playing " & theTrack
    						on error errMsg
    							say errMsg
    						end try
    					else
    						play (every track in playlist 1 whose name is theTrack)
    					end if
    				end if
    			else if theCommand is equal to "pause" then
    				pause {}
    			else if theCommand is equal to "stop" then
    				stop {}
    			end if
    		end tell
    	end perform mail action with messages
    end using terms from
    
    My new code - the original problem is fixed, but an unknown problem has arisen. It will say "playing (track)," but iTunes won't play it.
     

Share This Page