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. Но, все же лучше будет перейти в репозиторий и там скачать, чтоб быть увереным, что это последняя версия пакета.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 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 пакет к остальным файлам.

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