I’m trying to differentiate between iTunes playlists that are folders and ones that aren’t.
In AppleScript there seem to be two ways to do this:
I can get all folder playlists and process them individually from user playlists:
set userPlaylists to user playlists
set folderPlaylists to folder playlists
-- …do processing
I can check the class of a playlist using class of pl is folder playlist
(where pl
is my playlist).
Both methods don’t seem to work with JXA.
The first method does not work because accessing .folderPlaylists()
results in Error: Message not understood
(where app = Application('iTunes')
). Every other type of playlist can be accessed this way (app.playlists()
, app.libraryPlaylists()
, app.radioTunerPlaylists()
, app.subscriptionPlaylists()
, app.userPlaylists()
, app.audioCDPlaylists()
all work). Is this a bug?
So I tried replicating the second method. As far as I understood, ObjectSpecifier.classOf
should give me the object type as a string. However, it only returns the type that was requested by the object specifier that gave me the object.
So while in AppleScript class of (first item of (playlists whose name is "«Name of a folder playlist»"))
gives me folder playlist
, ObjectSpecifier.classOf(app.playlists.whose({name: '«Name of a folder playlist»'})()[0])
just returns "playlist"
(presumably because I used app.playlists
to get to the object).
Isn’t there a function that would return the actual type of the playlist (e.g. "folder playlist"
, or "user playlist"
)?
To get folders from the playlists:
folderList = itunesApp.playlists.whose({_match: [ObjectSpecifier().class, 'folderPlaylist']})()
To differentiate between userPlaylist and folderPlaylist from a playlist object:
myobj.class() == 'folderPlaylist'
myList = itunesApp.playlists() for (var i in myList) { if (myList[i].class() == 'folderPlaylist') { } else if (myList[i].class() == 'userPlaylist') { } }