20 августа 2010 в 17:02

Gnome Forismatic Notify Applet

Добрый день!
Начав использовать 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. Но, все же лучше будет перейти в репозиторий и там скачать, чтоб быть увереным, что это последняя версия пакета.
Goncharov Ivan @vanuch
карма
10,0
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

Комментарии (14)

  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      хм. действительно очень странно. Похоже, что по неизвестным причинам подтянулася картинка разрешением 100 пикселей, которая должна быть в окне About. Какая у вас высота панели?
      Попробуйте следующее:
      1) поменять тему
      2) откройте окно About и посмотрите какого размера эмблема сайта там.
      Спасибо.
    • 0
      сегодня получилось воспроизвести баг и пофиксить. Если все еще пользуешься апплетом, то можно обновиться: github.com/vanuch/Forismatic-Applet
      • НЛО прилетело и опубликовало эту надпись здесь
  • –1
    habrahabr.ru/blogs/ui_design_and_usability/102205/
    Статья как раз для вас :)
    • 0
      статью видел, догадывался что мне на нее укажут :) Специально пекред публикацией перечитал пост — нигде упоминаний трея не нашел.
      • 0
        а я на сайте нашел, не в статье :)
  • 0
    Вы большой-пребольшой молодец! Цены бы вам не было, если бы составили статью с описанием процесса создания апплета. Пошагово, с объяснением, граблями…

    Ваш апплет отцу поставлю на ноутбук, он будет безмерно счастлив :)
    • 0
      рад что не одному мне апплет понравился:)

      Я сначала думал о такой статье, но решил, что она и так обьемная получится, а если туда еще добавить описание внешнего вида и установки, то многие просто не дочитают до конца :)

      Но, в принципе, могу попробовать написать, так как толковых описаний о создании апплетов для gnome на python мало. В основном только базовые понятия.

      • 0
        Конечно напишите! С нетерпением буду ждать!
        • 0
          Пока статью писал. политика относительно кармы поменялась. Так что опубликую когда (если) будет карма.
          • 0
            Надеюсь, что вы всё-таки опубликуете продолжение. Очень интересная тема.
  • 0
    > Была идея создать deb пакет, но, к сожалению, после вечера проведенного за чтением документации, так и не понял как это сделать в случае с python

    mkdir -p ~/build/Forismatic_Notify_Applet/DEBIAN
    mkdir -p ~/build/Forismatic_Notify_Applet/usr/share/
    mkdir -p ~/build/Forismatic_Notify_Applet/usr/lib/bonobo/servers/

    cp -a ForismaticApplet ~/build/Forismatic_Notify_Applet/usr/share/
    cp forismatic_notify.server ~/build/Forismatic_Notify_Applet/usr/lib/bonobo/servers/

    создаете файл ~/build/Forismatic_Notify_Applet/DEBIAN/control
    с содержанием:

    Package: ForismaticApplet
    Version: 0.1
    Section: applet
    Architecture: all
    Depends: python, gnome-panel
    Maintainer: your_name_here
    Description: Show Forismatic quotes

    cd ~/build/Forismatic_Notify_Applet/
    fakeroot dpkg-deb --build Forismatic_Notify_Applet
    mv Forismatic_Notify_Applet.deb Forismatic_Notify_Applet_0.1-1_all.deb

    И там еще уйма настроек есть, типа DEBIAN/copyright и т.д.

    bit.ly/bQDLxr
    • 0
      спасибо огромное. действительно просто.
      Мне, почему-то, постоянно попадались способы с созданием правил в /debian/rules и использовании debuild или dpkg-buildpackage или вообще предлагали сначала создать setup.py.
      Завтра попаду за домашний компъютер, тогда залью deb пакет к остальным файлам.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.