Как я могу получить фактический класс объекта JXA
Я пытаюсь провести различие между плейлистами iTunes, которые являются папками, и теми, которые нет.
В AppleScript, кажется, есть два способа сделать это:
Я могу получить все плейлисты папок и обработать их индивидуально из пользовательских плейлистов:
set userPlaylists to user playlists set folderPlaylists to folder playlists -- …do processing
Я могу проверить класс плейлиста, используя
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') { } }