Как узнать, когда синхронизация iPod завершена через AppleScript - PullRequest
1 голос
/ 11 февраля 2012

Я пытаюсь создать AppleScript, который будет синхронизировать и извлекать мой iPod без необходимости ввода данных после запуска сценария.Базовый сценарий:

set ipodList to {}
tell application "iTunes"
    try
        set ipodList to (name of every source whose kind is iPod)
    end try
    repeat with ipodName in ipodList
        update ipodName
        eject ipodName
    end repeat
end tell

Проблема этого сценария в том, что он заставляет iTunes немедленно попытаться извлечь iPod после начала синхронизации, поэтому синхронизация еще не закончена.Это вызывает иногда одно, а иногда два диалоговых окна.В одном окне говорится, что «iTunes синхронизирует iPod. Вы уверены, что хотите извлечь его?»и имеет две кнопки «Отмена» и «Извлечь».В другом окне говорится: «iPod nanoBot не может быть извлечен, поскольку он содержит файлы, которые используются другим приложением».и имеет только кнопку «ОК».Просто нажав «Извлечь» и «ОК», iTunes завершит синхронизацию iPod, а затем извлечет его.

Я хотел бы использовать сценарии пользовательского интерфейса, чтобы нажать эти две кнопки, чтобы iTunes делала то, что я хочу,На самом деле, следующий скрипт, кажется, делает то, что я хочу:

tell application "System Events"
    tell process "iTunes"
        try
            click button "Eject" of window 1
        end try
        try
            click button "OK" of window 1
        end try
    end tell
end tell

Однако я протестировал второй бит кода, запустив его из второго AppleScript.Первое выполнение AppleScript зависает в команде eject до тех пор, пока я не нажму на два диалоговых окна (если бы оно зависало в команде update, все это раздражение было бы решено ...).

Есть ли способ щелкнуть по диалоговым окнам в том же сценарии, что и команда eject?Или какой-то способ запустить второй Applescript из первого и заставить его постоянно проверять, чтобы эти диалоговые окна появлялись, а затем щелкали по ним?Или есть просто более простое решение этой проблемы?

[Редактировать: я должен добавить, что сейчас я просто синхронизирую iPod с командой обновления, делаю паузу на несколько секунд, а затем извлекаю iPod сFinder (у меня он настроен как дисковод).Проблема этого метода заключается в том, что невозможно определить, когда синхронизация завершена, а если нет, сценарий не извлекает iPod и выдает ошибку.]

1 Ответ

1 голос
/ 12 февраля 2012

Попробуйте это ...

set ipodList to {}
tell application "iTunes"
  try
    set ipodList to (name of every source whose kind is iPod)
end try
repeat with ipodName in ipodList
    update ipodName
    tell me to wait_for_sync()
eject ipodName  
end repeat
end tell

on wait_for_sync()
tell application "System Events" to tell application process "iTunes"
    set theStatusText to ""
    repeat until theStatusText is "iPod sync is complete."
        set theStatusText to value of static text 1 of scroll area 1 of window "iTunes"
        delay 1
    end repeat
end tell
end wait_for_sync
...