Pull to refresh

Gnome Forismatic Notify Applet

Reading time3 min
Views1.3K
Добрый день!
Начав использовать python в своих адмниских целях, а-ля написание несложных скриптов, не мог нарадоваться простоте этого языка. Почти сразу же возникло желание попробовать написать полноценное приложение на python. Но никак не мог придумать, что б такого создать чтобы это было интересно и полезно не только для меня. Идея пришла после прочтения этого топика на хабре, к сожалению он сейчас не доступен, но, если кратко, речь идет о отображении цитат с сайта forismatic.com при открытии консоли.
Я решил, что было б неплохо написать апплет для gnome, который будет показывать эти же цитаты, но с помощью уведомлений. Тогда б не пришлось открывать новую консоль, чтоб прочесть очередную цитату. Результат мне понравился, и захотелось поделится им с сообществом.

Кратко о программе

Сам апплет представляет собой обычную иконку на gnome panel.
image

При нажатии на иконку левой кнопкой мыши появляется цитата в виде всплывающего уведомления. Но деже если по апплету не кликать, то уведомления с цитатами все равно будут появляться каждые 30 мин (по умолчанию).
image

Все настройки сведены в небольшое меню.
image image

С помощью меню можно:
  • Выбрать одну из двух тем — голубую(стандартная для сайта forismatic.com) и черную.
  • Изменить язык на котором будут показаны цитаты (английский или русский)
  • Изменить временной период между показами цитат (в диапазоне 5-300 мин).

Нажатием средней кнопки мыши на иконке апплета будет открыта страница с последней цитатой на forismatic.com. Действие дублируется с помощью пункта меню ShowQuote.

Технические детали

Апплет написан на pygtk. Все дополнительные модули которые пришлось использовать входят стандартную набор python, поэтому проблем с зависимостями быть не должно.
Цитаты забираются с помощью API в виде xml и после парсинга сохраняются в ключах Gconf по адресу /apps/panel/applets/applet_id/pref/. Это позволяет запускать сразу несколько копий апплета с различными настройками. Окно настроек (Preferences) создано в программе glade.
В создании апплета очень помогла эта статья, с которой и был успешно слизан шаблон для апплета.

Недостатки.

Пока я могу выделить только одну глобальную проблему — зависание всего апплета во время получения очередной цитаты с сайта. Как я понял, перечитав уйму тематических форумов, решить это можно только используя многопоточность (threading). Выделить один поток для прорисовки графики, а второй поток для работы с API.

Второй пункт в TODO листе — сделать систему сообщений об ошибках. На данный момент в отладочном режиме ошибки выводятся только в stdout. А в режиме апплета уведомления об ошибках и вовсе отсутствуют. Если кому-то еще программка понравится, то постараюсь найти время и доработать.

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

Установка

Была идея создать deb пакет, но, к сожалению, после вечера проведенного за чтением документации, так и не понял как это сделать в случае с python. Поэтому для установки апллета можно скачать исходники с github.com или launchpad.net и вручную скопировать файлы в нужные папки:
sudo cp -a ForismaticApplet /usr/share/
sudo cp forismatic_notify.server /usr/lib/bonobo/servers/

Для пущей уверенности я бы рекомендовал перезагрузить gnome
После этого в меню ПКМ->добавить на панель появится Forismatic Applet.

Послесловие

Это мой первый опыт в программировании GUI приложений, поэтому я надеюсь, что критика будет конструктивной и не сильно строгой.
Естественно, все найденные баги постараюсь учесть и исправить.

UPD: Добавил deb пакет(спасибо fenrirgray), скачать можно с тех же github.com и launchpad.net. Например, ссылка с последнего ForismaticNotify_Applet_0.7b-1_all.deb. Но, все же лучше будет перейти в репозиторий и там скачать, чтоб быть увереным, что это последняя версия пакета.
Tags:
Hubs:
Total votes 12: ↑12 and ↓0+12
Comments14

Articles