Last active
March 12, 2017 20:54
-
-
Save pje/1782f618bf531c1e1fc60f3267b1eca8 to your computer and use it in GitHub Desktop.
itunes script to rename selected tracks' artist, title, and number using an arbitrary shell command given the track name through stdin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var app = Application.currentApplication(); | |
var itunes = new Application('iTunes'); | |
var selection; | |
app.includeStandardAdditions = true; | |
itunes.includeStandardAdditions = true; | |
var artistNameDialog = { | |
text: "function for artist name? echo \"$track_name\" | $this_command", | |
default: "/usr/local/bin/ack '^(\\d+) (.*) *- *(.*)$' --output '$2'" | |
}; | |
var trackNameDialog = { | |
text: "function for track name? echo \"$track_name\" | $this_command", | |
default: "/usr/local/bin/ack '^(\\d+) (.*) *- *(.*)$' --output '$3'" | |
}; | |
var trackNumberDialog = { | |
text: "function for track number? echo \"$track_name\" | $this_command", | |
default: "/usr/local/bin/ack '^(\\d+) (.*) *- *(.*)$' --output '$1'" | |
}; | |
var functionForArtistName = app.displayDialog(artistNameDialog.text, { defaultAnswer: artistNameDialog.default }).textReturned; | |
var functionForTrackName = app.displayDialog(trackNameDialog.text, { defaultAnswer: trackNameDialog.default }).textReturned; | |
var functionForTrackNumber = app.displayDialog(trackNumberDialog.text, { defaultAnswer: trackNumberDialog.default }).textReturned; | |
selection = itunes.selection(); | |
var wrappedDoShellScript = function(app, fnString, input, onFailureReturn) { | |
try { | |
return app.doShellScript("echo \"" + input + "\" | " + fnString); | |
} catch(e) { | |
return onFailureReturn; | |
} | |
} | |
if (selection.length > 0) { | |
for (var i in selection) { | |
var track = selection[i]; | |
var trackName = track.name(); | |
track.name = wrappedDoShellScript(app, functionForTrackName, trackName, trackName); | |
track.artist = wrappedDoShellScript(app, functionForArtistName, trackName, track.artist()); | |
track.trackNumber = wrappedDoShellScript(app, functionForTrackNumber, trackName, track.trackNumber()); | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment