3 votes

iTunes 10.6.3 modifie l'interface AppleScript ?

J'ai un simple script Ruby qui utilise la gemme rb-appscript pour contrôler iTunes, et maintenant que j'ai mis à jour iTunes 10.6.3, il semble être cassé.

Avant la version 10.6.3, ce morceau de code fonctionnait comme prévu pour obtenir la ou les pistes actuellement sélectionnées :

Appscript.app('iTunes').selection.get()

Maintenant, il produit l'erreur suivante :

RuntimeError: Unknown property, element or command: 'selection'

Edit : Je viens de confirmer que ce problème est également présent dans py-appscript, donc il n'est pas isolé de rb-appscript.

Ce qui est bizarre, parce que le morceau suivant d'AppleScript fonctionne toujours :

tell application "iTunes" to get selection

Des exemples similaires tels que Appscript.app('Finder').desktop.files.get() fonctionnent toujours.

Je n'ai pas trouvé d'informations expliquant si ou pourquoi cela a été modifié ou ce que je pouvais faire pour mettre à jour mon script. Je suppose que cela a quelque chose à voir avec les changements de Mountain Lion.

4voto

Nate Thelen Points 58

Il semblerait qu'iTunes 10.6.3 ait été publié avec le sandboxing qui arrive avec Mountain Lion. Voici un article qui en parle (lisez aussi les commentaires) http://www.leancrew.com/all-this/2012/06/the-first-nail-in-the-coffin-of-python-appscript/

Cela commencera probablement à se produire beaucoup plus souvent (si ce n'est avec tout) à partir de Mountain Lion.

2voto

matt Points 60113

J'ai fourni une solution pour ce problème ici :

https://github.com/mattneub/appscript/tree/master/rb-appscript

1voto

lottscarson Points 485

Oui, ils l'ont définitivement cassé. Vous pourriez utiliser rb-appscript avec l'application System Events pour vérifier conditionnellement les enfants de divers éléments de l'interface utilisateur pour voir si l'attribut 'selected' est true.... par exemple :

i = 0
row_exists = true
selected_row = nil
while row_exists && !selected_row
    i += 1
    row_exists = app("System Events").application_processes["iTunes"].windows["iTunes"].scroll_areas[3].outlines[1].rows[i].exists
    if row_exists 
        if (app("System Events").application_processes["iTunes"].windows["iTunes"].scroll_areas[3].outlines[1].rows[i].attributes["AXSelected"].value.get == true)
            selected_row = app("System Events").application_processes["iTunes"].windows["iTunes"].scroll_areas[3].outlines[1].rows[i]
        end
    end 
end

Vous pouvez ensuite extraire les informations requises des enfants de la ligne sélectionnée. Cette façon de procéder serait toutefois assez ennuyeuse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X