Как стать автором
Обновить

Пересаживаемся с Growl на Notification Center

Время на прочтение 3 мин
Количество просмотров 23K
Введение

С выходом MacOSX 10.8 общественности был представлен Notification Center, он же «Центр Уведомлений». Как только вам приходит новая почта или, к примеру, заканчивается закачка в Safari, то вы видите в правом верхнем углу всплывающее окошко с уведомлением, об этом сообщающим. Так же по свайпу двумя пальцами влево (или по хоткею) можно обнажить панель нотификаций, почти идентичную онной в iOS.

Проблема

Все было бы хорошо, да только есть одно но: еще с 2004го года все приложения используют для целей уведомления пользователя опенсурсный Growl и не спешат переходить на новую систему. В частности Skype, Adium, Transmission и многие многие другие приложения повседневного пользования.

Решение?

Hiss — одно из самых первых решений, появившихся в сети. И последнее. Hiss ловит нотификации вместо гроула и отправляет их от его имени в Notification Center, в результате чего получается не самая приятная картина:image
Как видно на скриншоте, результат не похож на ожидаемый. Так же, нет индивидуальных настроек для приложений. Вариант рабочий, но не удобный.

Решение получше

Этим летом я решил исправить положение и, не найдя каких-бы то ни было решений проблемы в интернете, кроме обещаний выпустить growl2, приступил к написанию CentralNotifier.

Что это?

Central Notifier — это маленькое приложение, которое инжектируется с помощью SIMBL во все, что движется в системе (подобно maximizer, добавляющему lion's fullscreen во все приложения, в которые возможно). Если приложение поддерживает growl, то после инжектирования все нотификации, предназначенные для growl, будут отправляться в Notification Center. В итоге имеем вот такую картину:image
А так же настройки для приложений:image

И в чем подвох?

Работать оно работает, но находится на ранней стадии разработки. У меня больше нет времени заниматься этим проектом, да и с текущими багами я прижился. Уже месяц работает без нареканий, решил поделиться с общественностью и буду очень рад, если кто-то возьмет проект под свое крыло.

Установка

1) Устанавливаем SIMBL
2) Скачиваем и распаковываем cl.ly/2l0O2w1m3v3H
3) CentralNotifier.bundle -> ~/Library/Application Support/SIMBL/Plugins/
4) SIMBL.osax -> /Library/ScriptingAdditions *
5) DoubleClick CentralNotifier-PrefPane.prefPane
6) Перезагрузка без галочки о сохранении состояния приложений
* — это измененный инжектор (что нарушает просьбу автора о переименовывании его детища при любых изменениях). Если вы хотите инжектироваться в приложения, не имеющие иконки в доке — вам он нужен. Нет — все работает и с обычным SIMBL. По любым проблемам с измененным инжектором просьба не обращаться к автору SIMBL

Исходники

Исходники лежат на GitHub. Делайте с ними что хотите, с сохранением оригинального авторства за мной.

Известные баги

1) После перезагрузки иногда приходится перезапускать все приложения, чтобы произошло инжектирование. Происходит это потому, что инжектор стартует позже самих приложений. Прекрасный пример на скриншоте ниже. Каждая перезагрузка начинается с killall HardwareGrowler.
2) Чтобы применить настройки к нотификациям приложений, нужно их изменить в prefpane, выйти из нее и затем перезапустить само приложение.
3) Кнопка Forget Application получается для красоты. Для удаления приложения нужно ручками править плист в ~/Library/Preferences
4) Если приложение было выключено после отправки нотификаций, то эти нотификации более не тыкабельны (тот, кто за них отвечает, более не существует)
5) Больше за месяц косяков не замечено.

А может подождать growl2?

Мое личное мнение: Или они сделают, как Hiss, или их не пустят в AppStore. Чтобы постить нотификации от лица другого приложения — надо либо инжектироваться в него (об appstore сразу можно забыть), либо делать магическое кунфу (шанс с которым пройти в тот-же appstore очень мал). Я думаю, что было бы хорошо продолжить разработку CentralGrowler, тк больше вариантов перенаправления нотификаций я не вижу.

Надеюсь, что мои наработки комунибудь да пригодятся!

PS

Забыл упомянуть в статье, и решил добавить сюда, в самый низ. CentralNotifier полностью переносит обратную связь: если ткнуть в нотификацию, то приложение отреагирует так-же, если бы все работало через Growl.
Еще немного скриншотов


Теги:
Хабы:
+35
Комментарии 75
Комментарии Комментарии 75

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн