【发布时间】:2012-10-27 02:31:58
【问题描述】:
今天我发现,当我将专辑插图添加到 iTunes 时,它实际上只是将其添加到了每张专辑中的一些曲目中。所以我做了任何人都会做的事情,并尝试编写一个脚本来纠正它。
这是第一次尝试,经过大约 3 小时的修补。它假定您已选择专辑中的所有歌曲。
#! /usr/local/bin/macruby
framework 'Foundation'
framework 'ScriptingBridge'
itunes = SBApplication.applicationWithBundleIdentifier("com.apple.itunes")
tracks = itunes.selection.get
# Find some track with artwork
artwork = tracks.map { |track| track.artworks[0] }.find { |a| a }
raise "No selected song has artwork" if artwork.nil?
# I checked artwork.rawData and it is PNG wrapped in an NSConcreteData.
pngData = artwork.rawData
tracks.each do |track|
if track.artworks[0]
puts "[O] #{track.name}"
else
puts "[X] #{track.name}"
# Adding the same artwork object is apparently NG so we get the data from it
# and make a copy.
# There is probably a more straight-forward way to clone an object but
# artwork.copy raises an exception.
# I have tried using the keys 'data' and 'raw data' instead - same results.
dict = {rawData: pngData}
artwork_copy = itunes.classForScriptingClass('artwork').alloc.initWithProperties(dict)
track.artworks.addObject(artwork_copy)
raise "Didn't actually add the artwork" if track.artworks.empty?
end
end
对 addObject 的调用不会引发异常,但我注意到它实际上并没有将艺术品添加到轨道(因此检查下一行以加快脚本测试。)
我主要从 ScriptingBridge 的 Objective-C 示例开始工作,也找不到其他人做过的任何事情。 获得艺术品的例子很多,但令人惊讶的是,设置它的例子很少......
我确实发现了四年前的一个有趣的邮件列表线程,其他人也遇到了类似的问题,但他们也从未找到解决方案(或者找到它但没有将其发布到线程,这更糟糕,如果他们这样做了,他们是一个坏人,应该感到难过。)
【问题讨论】:
标签: ruby itunes osx-mountain-lion scripting-bridge