Это не так просто, как версия AppleScript, но, безусловно, возможно.
Метод первый
Получите указатель на библиотеку iTunes:
iTunesApplication *iTunesApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
SBElementArray *iTunesSources = [iTunesApp sources];
iTunesSource *library;
for (iTunesSource *thisSource in iTunesSources) {
if ([thisSource kind] == iTunesESrcLibrary) {
library = thisSource;
break;
}
}
Получим массив, содержащий все дорожки аудиофайлов в библиотеке:
SBElementArray *libraryPlaylists = [library libraryPlaylists];
iTunesLibraryPlaylist *libraryPlaylist = [libraryPlaylists objectAtIndex:0];
SBElementArray *musicTracks = [self.libraryPlaylist fileTracks];
Затем отфильтруйте массив, чтобы найти треки с искомым названием.
NSArray *tracksWithOurTitle = [musicTracks filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == %@", @"name", @"Yesterday"]];
// Remember, there might be several tracks with that title; you need to figure out how to find the one you want.
iTunesTrack *rightTrack = [tracksWithOurTitle objectAtIndex:0];
[rightTrack playOnce:YES];
Метод второй
Получите указатель на библиотеку iTunes, как указано выше. Затем используйте метод Scripting Bridge searchFor: only:
:
SBElementArray *tracksWithOurTitle = [library searchFor:@"Yesterday" only:kSrS];
// This returns every song whose title *contains* "Yesterday" ...
// You'll need a better way to than this to pick the one you want.
iTunesTrack *rightTrack = [tracksWithOurTitle objectAtIndex:0];
[rightTrack playOnce:YES];
Предостережение по поводу второго метода: файл iTunes.h неверно утверждает, что метод searchFor: only:
возвращает iTunesTrack *, тогда как на самом деле (по очевидным причинам) он возвращает SBElementArray *. Вы можете отредактировать файл заголовка, чтобы избавиться от появившегося предупреждения компилятора.
person
Gabriel Roth
schedule
22.02.2012