Программирование плагина iTunes: перехват событий - PullRequest
3 голосов
/ 16 ноября 2009

Есть ли хорошие решения для захвата событий из iTunes?

Я хотел бы создать плагин, который будет находиться внутри iTunes и реагировать на изменения рейтинга отдельных песен. Для Windows у них есть SDK, в который я еще не вникал, но я бы тоже хотел кое-что найти для Mac.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 16 ноября 2009

Насколько я знаю, Apple предоставляет бесплатные (как и при нулевой стоимости) SDK для iTunes Визуальные плагины как для OS X, так и для Windows. Если вы не можете получить то, что вам нужно, вы можете всегда использовать интерфейс сценариев iTunes Apple Events для мониторинга посредством опроса из другого приложения OS X с использованием OSA-совместимого интерфейса, такого как AppleScript или appscript с Python, Ruby или Objective-C. Возможно, это не то, что вам нужно, но это задокументировано и поддерживается.

Например, с помощью py-appscript, как получить доступ к текущей дорожке и к тем, которые есть в недавно воспроизведенном умном списке:

>>> from appscript import *
>>> it = app('iTunes')
>>> it.current_track.rating()  # 40 == 2 stars
40
>>> len(it.playlists['Recently Played'].tracks())
80
>>> it.playlists['Recently Played'].tracks[1].rating()
40
>>> it.playlists['Recently Played'].tracks[1].rating.set(to=100)
>>> it.playlists['Recently Played'].tracks[1].rating()  # 100 = 5 stars
100

Также возможно фильтровать по различным полям метаданных (откройте определение сценариев iTunes.app в редакторе скриптов AppleScript для просмотра):

>>> import datetime
>>> an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
>>> it.playlists['Library'].tracks[its.modification_date >= an_hour_ago]()
[app(u'/Applications/iTunes.app').sources.ID(45).library_playlists.ID(49347).file_tracks.ID(72017)]

Но учтите, что изменения в рейтингах не влияют на дату изменения.

0 голосов
/ 18 ноября 2009

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

  1. периодически опрашивать внешний процесс, хотя это будет стоить вам и iTunes, если плейлист пользователя большой

  2. возможно, стоит рассмотреть использование PreFab UI Actions для перехода к виджетам UI iTunes и запуска AppleScripts

  3. проверьте, можете ли вы прикрепить уведомление FSEvent к файлу iTunes Music Library.xml, который iTunes хранит в папке музыкальной библиотеки пользователя. Предполагая, что iTunes обновляет этот файл сразу после изменения настроек, вы, вероятно, сможете выяснить, что изменилось с прошлого раза.

Ничто из этого не является идеальным, но расширяемость на основе плагинов, о которой вы говорите, действительно довольно редко встречается в приложениях для Mac, поэтому вам, вероятно, придется столкнуться с ней тем или иным способом, или иначе переосмыслить необходимо.

...