Как я могу получить фактический класс объекта JXA

Я пытаюсь провести различие между плейлистами iTunes, которые являются папками, и теми, которые нет.

В AppleScript, кажется, есть два способа сделать это:

  1. Я могу получить все плейлисты папок и обработать их индивидуально из пользовательских плейлистов:

    set userPlaylists to user playlists
    set folderPlaylists to folder playlists
    -- …do processing
    
  2. Я могу проверить класс плейлиста, используя class of pl is folder playlist (где pl мой плейлист).

Оба метода не работают с JXA.

Первый метод не работает, потому что доступ .folderPlaylists() результаты в Error: Message not understood (где app = Application('iTunes')). Любой другой тип списка воспроизведения может быть доступен таким образом (app.playlists(), app.libraryPlaylists(), app.radioTunerPlaylists(), app.subscriptionPlaylists(), app.userPlaylists(), app.audioCDPlaylists() все работает). Это ошибка?

Поэтому я попытался воспроизвести второй метод. Насколько я понял, ObjectSpecifier.classOf должен дать мне тип объекта в виде строки. Однако он возвращает только тот тип, который был запрошен спецификатором объекта, который дал мне объект.

Так что пока в AppleScript class of (first item of (playlists whose name is "«Name of a folder playlist»")) дает мне folder playlist, ObjectSpecifier.classOf(app.playlists.whose({name: '«Name of a folder playlist»'})()[0]) просто возвращается "playlist" (предположительно потому что я использовал app.playlists добраться до объекта).

Нет ли функции, которая бы возвращала фактический тип списка воспроизведения (например, "folder playlist", или же "user playlist")?

1 ответ

Решение

Чтобы получить папки из плейлистов:

folderList = itunesApp.playlists.whose({_match: [ObjectSpecifier().class, 'folderPlaylist']})()

Чтобы различать userPlaylist и folderPlaylist от объекта списка воспроизведения:

  • использовать: myobj.class() == 'folderPlaylist'
myList = itunesApp.playlists()
for (var i in myList) {
    if (myList[i].class() == 'folderPlaylist') { 

    } else if (myList[i].class() == 'userPlaylist') {

    }
}
Другие вопросы по тегам