Как я могу получить трек iTunes через ScriptingBridge? - PullRequest
0 голосов
/ 14 июня 2011

У меня две ситуации. Учитывая идентификатор трека песни, установите рейтинг на некоторое целое число. Второй тоже самое, за исключением того, что мне дали массив идентификаторов треков. Я знаю, что могу использовать ScriptingBridge для поиска объекта iTunesTrack по названию песни, но есть ли способ получить его на основе идентификатора дорожки? Что-то вроде:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
NSInteger *rating;
NSInteger *id;

if ( [iTunes isRunning] ) {
    iTunesTrack *track = [ iTunes trackForDatabaseID:id ];
    [ track setValue:rating forkey:@"rating" ];
}

Для второй ситуации, есть ли способ получить объект SBElementArray из iTunesTrack по массиву идентификаторов треков? Что-то вроде:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
NSArray *ids; //array of NSIntegers

if ( [iTunes isRunning] ) {
    SBElementArray *tracks = [ iTunes tracksForDatabaseIDs:ids ];
    [ tracks setValue:rating forkey:@"rating" ];
}

Я считаю, что это будет более эффективно, чем итеративный поиск в библиотеке по названию песни.

1 Ответ

0 голосов
/ 25 ноября 2011

Я только что сделал это недавно. Нечто подобное должно работать на вас. Вам нужно спросить плейлист библиотеки (в данном примере с именем libraryPlaylist), а не приложение.

NSArray *trackIDs = blah; // the ids you're searching for
NSString *searchFilter = @"databaseID == %@";
NSMutableArray *filters = [NSMutableArray arrayWithCapacity:[trackIDs count]];
for (int i = 0; i < [trackIDs count]; i++) {
    [filters addObject:searchFilter];
}
searchFilter = [filters componentsJoinedByString:@" OR "];
NSArray *trackResult = [[libraryPlaylist tracks] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:searchFilter argumentArray:trackIDs]];

И это прекрасно работает, если массив trackIDs содержит только один элемент, поэтому нет необходимости писать специальный код для этого случая.

...