0

I keep live update turned off on most of my smart playlists because changing anything, such as ratings, for a currently playing song could cause the song to disappear from the playlist if it no longer meets the smart playlist's criteria. The song stops playing and the playlist grinds to a halt. So far, the easiest solution has been to have an Applescript run automatically in the middle of the night to quit iTunes and then launch it again, thus forcing all of my smart playlists to update. This works. It's also easy enough to right click on a smart playlist and select "Update Smart Playlist." But what I'd rather do is use an Applescript to refresh all of my smart playlists and assign it a hotkey (using BetterTouchTool).

Is it possible to use Applescript to make iTunes smart playlists update?

2

Update Smart Playlist entry only resides in contextual menu; applescript cannot access that. There are two work-arounds I can think of: 1. BTT: hover over the playlist and invoke a combo right-click -> u -> return. Or:

tell application "System Events" to tell application process "iTunes"
    set frontmost to true
    repeat 2 times
        tell menu item "Edit Smart Playlist" of menu "File" of menu bar 1 to perform action "AXPress"
        tell checkbox "Live updating" of window 1 to perform action "AXPress"
        tell button "OK" of window 1 to perform action "AXPress"
    end repeat
end tell
  • That second option has potential for what I'm trying to do. I don't think I'd even need to turn live updating on and the off again. It looks like all I'd have to do is select "Edit Smart Playlist" and then tell "OK" to press. If I'm not mistaken, that will cause the playlist to update. So, unless there's a better way, it looks like you've led me to the solution. Thanks!!! – 2oh1 Jun 6 '15 at 18:49
0

Credit here goes to the answer above, by fartheraway. I just thought it could be helpful to post the full answer in case anyone does a search for something like this and finds my question. Here's the solution I ended up going with. Save this as an applescript and then assign it a hotkey using BetterTouchTool. This script will update the currently playing smart playlist. And if iTunes isn't the frontmost app, this script will switch to iTunes, update the playlist, and then take you back to app you were using (command+tab). This works for me! Thanks again to fartheraway for his help, above.

tell application "System Events"
    set frontmostApp to name of application processes whose frontmost is true
end tell

tell application "System Events" to tell application process "iTunes"
    set frontmost to true
    tell application "iTunes"
        try
            reveal current track
        end try
    end tell
    tell menu item "Edit Smart Playlist" of menu "File" of menu bar 1 to perform action "AXPress"
    tell button "OK" of window 1 to perform action "AXPress"
    end tell

if frontmostApp is not {"iTunes"} then
    tell application "System Events"
        key down command
        keystroke tab
        key code 123
        repeat while (exists list 2 of process "Dock")
            delay 0.1
        end repeat
        key up command
    end tell
end if
0

Thanks guys for starting this thread!

I have hundreds of smart playlists in my iTunes so toggling Live Updating manually is a real pain.

I had to play with your above answers for a little while to get it working on my El Capitan and Sierra systems, but here is what finally worked for me:

tell application "iTunes"
activate
set frontmost to true
repeat with aPlaylist in (get user playlists)
  set n to name of aPlaylist
  set s to smart of aPlaylist as string
  if s is "true" then
    try
      set view of front browser window to playlist n
      set frontmost to true
      delay 1
      tell application "System Events" to tell application process "iTunes"
        click menu item "Edit Smart Playlist" of menu "File" of menu bar 1
        delay 1

        # To toggle the selection use the following line
        click checkbox "Live updating" of window 1

        # To enable use the below code. To disable, use the below code but change 'false' to 'true'
        #set theCheckbox to checkbox "Live updating" of window 1
        #tell theCheckbox
        #set checkboxStatus to value of theCheckbox as boolean
        #set c to checkboxStatus as string
        #if checkboxStatus is false then click theCheckbox
        #end tell

        delay 1
        click button "OK" of window 1
      end tell
    end try
  end if
end repeat
end tell

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .