2016-08-28 2 views
0

J'essaie de faire la différence entre les listes de lecture iTunes qui sont des dossiers et celles qui ne le sont pas.Comment obtenir la classe réelle de l'objet JXA

En AppleScript il semble y avoir deux façons de le faire:

  1. je peux obtenir toutes les playlists de dossiers et de les traiter individuellement des listes de lecture de l'utilisateur:

    set userPlaylists to user playlists 
    set folderPlaylists to folder playlists 
    -- …do processing 
    
  2. Je peux vérifier la classe d'une playlist utilisant class of pl is folder playlist (où pl est ma playlist).

Les deux méthodes ne semblent pas fonctionner avec JXA. La première méthode ne fonctionne pas car l'accès .folderPlaylists() entraîne Error: Message not understood (app = Application('iTunes')) Tous les autres types de listes de lecture sont accessibles de cette façon (app.playlists(), app.libraryPlaylists(), app.radioTunerPlaylists(), app.subscriptionPlaylists(), app.userPlaylists(), app.audioCDPlaylists()). Est-ce un bug? J'ai donc essayé de répliquer la deuxième méthode. Pour autant que j'ai compris, ObjectSpecifier.classOf devrait me donner le type d'objet comme une chaîne. Toutefois, il renvoie uniquement le type demandé par le spécificateur d'objet qui m'a donné l'objet.

Ainsi, alors que dans AppleScript class of (first item of (playlists whose name is "«Name of a folder playlist»")) me donne folder playlist, ObjectSpecifier.classOf(app.playlists.whose({name: '«Name of a folder playlist»'})()[0]) retourne juste "playlist" (probablement parce que je app.playlists pour se rendre à l'objet).

N'existe-t-il pas une fonction qui renvoie le type réel de la liste de lecture (par exemple "folder playlist" ou "user playlist")?

Répondre

2

Pour obtenir des dossiers des listes de lecture:

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

Différencier userPlaylist et folderPlaylist d'un objet playlist:

  • utilisation: myobj.class() == 'folderPlaylist'
myList = itunesApp.playlists() 
for (var i in myList) { 
    if (myList[i].class() == 'folderPlaylist') { 

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

    } 
} 
+0

Si simple, pourtant si insaisissable ... Merci beaucoup! –