module Musicapp::Script
Constants
- DEFAULT_PROPERTIES
- FILE_TRACK_PROPERTIES
- FULL_PROPERTIES
- ITEM_PROPERTIES
- READONLY_PROPERTIES
- TRACK_PROPERTIES
- WRITABLE_PROPERTIES
Public Instance Methods
get_metadata(properties)
click to toggle source
# File lib/musicapp/script.rb, line 122 def get_metadata(properties) properties = case properties when :all FULL_PROPERTIES when :default DEFAULT_PROPERTIES else invalid = properties - FULL_PROPERTIES unless invalid.empty? raise ::Musicapp::Error, "Unknown properties: #{invalid.inspect}" end properties end script = <<~JS function run(argv) { var itunes = Application("Music"); var selection = itunes.browserWindows[0].selection(); var trackProperties = JSON.parse(argv[0]); var tracks = []; for (var i in selection) { var props = {}; var track = selection[i]; for (var j in trackProperties) { var prop = trackProperties[j]; switch(prop) { case "location": if (track.class() != "fileTrack") continue; props.location = track.location().toString(); break; default: props[prop] = track[prop](); } } tracks.push(props); } return JSON.stringify(tracks); } JS out, _err, _status = osascript(script, properties.to_json) JSON.parse(out) end
next_track()
click to toggle source
# File lib/musicapp/script.rb, line 227 def next_track script = <<~JS function run(argv) { var itunes = Application("Music"); itunes.nextTrack(); } JS out, _err, _status = osascript(script) out end
osascript(script, *args)
click to toggle source
# File lib/musicapp/script.rb, line 113 def osascript(script, *args) out, err, status = Open3.capture3("osascript", "-l", "JavaScript", "-e", script, *args) unless status.success? raise ScriptError, err end [out, err, status] end
pause()
click to toggle source
# File lib/musicapp/script.rb, line 215 def pause script = <<~JS function run(argv) { var itunes = Application("Music"); itunes.pause(); } JS out, _err, _status = osascript(script) out end
play()
click to toggle source
# File lib/musicapp/script.rb, line 203 def play script = <<~JS function run(argv) { var itunes = Application("Music"); itunes.play(); } JS out, _err, _status = osascript(script) out end
set_metadata(metadata)
click to toggle source
# File lib/musicapp/script.rb, line 171 def set_metadata(metadata) script = <<~JS function run(argv) { var itunes = Application("Music"); var selection = itunes.browserWindows[0].selection(); var metadata = JSON.parse(argv[0]); var track = null; for (var i in selection) { track = metadata[i] if (!track) continue; for (var j in track) { var prop = track[j]; selection[i][j] = prop; } } } JS invalid = metadata.flat_map do |track| track.keys - WRITABLE_PROPERTIES end unless invalid.empty? raise ::Musicapp::Error, "Unknown or readonly properties: #{invalid.inspect}" end out, _err, _status = osascript(script, metadata.to_json) out end