Skip to content

Instantly share code, notes, and snippets.

@pje
Last active March 12, 2017 20:54
Show Gist options
  • Save pje/1782f618bf531c1e1fc60f3267b1eca8 to your computer and use it in GitHub Desktop.
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
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