我正在更新我的OS X程序以接受iTunes掉落,修改文件中的元数据,然后刷新(获取信息)掉落的文件,以便iTunes可以更新其'元数据库。
我已经让drop工作了,它提供了一个关于文件的一些杂项信息的字典,包括轨道ID、持久ID和位置。我现在需要通过文件位置或掉落信息提供的持久ID获得特定的曲目,因此我可以调用refresh方法来强制iTunes重新检查文件并更新对元数据的更改。
我已经导入了iTunes头文件并创建了SBApplication对象,我在这一点上非常困在一个有效的方法来获得正确的轨道。
如前所述,我已经可以访问iTunes drop提供的文件的一些信息。我需要匹配关于该文件的信息,基于文件名或persistentID提供到iTunes库中的文件,我的解决方案是在iTunes库中使用谓词过滤器,以对抗iTunes脚本桥返回的库集合。
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
SBElementArray *sources = [iTunes sources];
SBElementArray *entireLibrary = [[[[sources objectAtIndex:0] libraryPlaylists] objectAtIndex:0] fileTracks];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"persistentID == %@", persistentID];
[entireLibrary filterUsingPredicate:predicate];
这就是我如何使用ScriptingBridge
:从iTunes获得当前曲目信息
iTunesApplication * iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
NSString * artist = [[iTunes currentTrack] artist];
NSString * trackname = [[iTunes currentTrack] name];
/* etc. */