LINUX.ORG.RU

Первый релиз qtnotifydaemon - демона уведомлений на Qt

 , ,


0

1

Тихо и незаметно вышел первый релиз демона уведомлений, написанного на Qt.
Как и любой демон уведомлений, qtnotifydaemon работает через dbus. Основной упор делался на максимальную гибкость настройки внешнего вида через конфигурационный файл, а также поддержку самых используемых функций notify-osd, так как qtnotifydaemon позиционируется как его полноценная замена.
В зависимости от типа уведомления оно становится в одну из двух очередей - синхронные и обычные. Уведомления из этих двух очередей отображаются отдельно. Одновременно на экране отображается по одному уведомлению из каждой очереди. Основные функции, доступные на данный момент:

  • Поддержка Rich Text: теперь в уведомлениях можно выводить таблицы, списки, картинки, форматировать текст.
  • Поддержка изменения внешнего вида уведомлений с помощью CSS
  • Изменение местоположения уведомлений - можно поместить их в разные углы экрана
  • Поддержка синхронных уведомлений, например при изменении громкости/яркости
  • Закрытие не только по таймауту, но и по клику (в будущем будет опционально)
  • Возможность объединения нескольких уведомлений, если это разрешено пославшей программой(например, IM-клиенты часто это разрешают)
  • Возможность изменения прозрачности
  • Возможность задания разных стилей заголовка для уведомлений с различной важностью(low,normal,critical)
  • Плавное исчезновение при закрытии (в будущем будет опционально)
  • Изменяемое ограничение размера значков
  • Поддержка значков svg
  • Поддержка передачи кода значки через dbus
  • Поддержка значков из темы оформления
  • Добавлены стандартные значки из пакета notify-osd-icons

Скриншоты в хорошем качестве:

В зависимостях: Qt >=4.7.0, dbus.
Лицензия: GPLv3
Счастливые пользователи Ubuntu Natty могут скачать программу из ppa:drull/qtnotifydaemon:

sudo apt-add-repository ppa:drull/qtnotifydaemon
sudo apt-get update
apt-get install qtnotifydaemon
Скачать deb-пакеты и исходные коды
Последняя версия доступна через SVN:
svn co https://qtnotifydaemon.svn.sourceforge.net/svnroot/qtnotifydaemon qtnotifydaemon

>>> Страница на sourceforge

★☆☆☆

Проверено: JB ()
Последнее исправление: Zhbert (всего исправлений: 7)

Ответ на: комментарий от elverion

> Кого еб волнует что он на Qt?

Потенциальных контрибьюторов, которые хотят получить опыт с этим фреймворком.

fang
()
Ответ на: комментарий от rtk

> кто Вас ТАК писать учил?! и хрен бы со стилем, но КОД? проект и восьми файлов - и это восемь файлов хардкоды!

Что конкретно кроме освобождения памяти не нравится?

drull ★☆☆☆
() автор топика

поставил в арчике, делаю notify-sen в консоли, но ничего не отображается. Как заставить работать-то? Других демонов не установлено.

Crow
()
Ответ на: комментарий от Gorthauer

>*Взглянул на кутимовские нотифы для винды* Таки они не такие вырвиглазные и поддержка тем там круче.
давно хочу ваши уведомления в качестве системных

seed_stil ★★
()
Ответ на: комментарий от Crow

поставил в арчике, делаю notify-sen в консоли, но ничего не отображается. Как заставить работать-то? Других демонов не установлено.

Демон в момент отправления запущен? После запуска из консоли он сказал «Connection establshed»? Чтобы он запускался в момент отправки сообщения автоматически можешь попробовать поместить в файл /usr/share/dbus-1/services/org.freedesktop.Notifications.service (в арче путь может отличаться) такой текст:

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/qtnotifydaemon

drull ★☆☆☆
() автор топика
Ответ на: комментарий от drull

файл уже существует. содержимое одинаково.

┌─[crow@arch] † (~)
└─: qtnotifydaemon 
┌─[crow@arch] † (~)
└─: Connection established

┌─[crow@arch] † (~)
└─: notify-send 'test'
┌─[crow@arch] † (~)
└─: 
и ничего нет.

Crow
()
Ответ на: комментарий от Crow

Хрм. Давай выхлоп

killall qtnotifydaemon ; qtnotifydaemon --debug ; sleep 5 ; notify-send 'test'
И еще выхлоп
dbus-monitor --session
во время отправки сообщения.

Откуда собирал? Из svn или из сырцов?

drull ★☆☆☆
() автор топика
Ответ на: комментарий от drull

s/сырцов/сырцов\ из\ тарболла/

drull ★☆☆☆
() автор топика
Ответ на: комментарий от drull
┌─[crow@arch] † (~)
└─: killall qtnotifydaemon ; qtnotifydaemon --debug ; sleep 5 ; notify-send 'test' > tst
Reading config string ConvertSpecialSymbols ...
Returning config string: 'ConvertSpecialSymbols' = ' 1'.
Reading config string MaxIconSize ...
Returning config string: 'MaxIconSize' = ' 80'.
Reading config string Opacity ...
Returning config string: 'Opacity' = ' 0.8'.
Reading config string GeneralStyle ...
Returning config string: 'GeneralStyle' = ' margin: 0px; background: black; border: 3px solid white; color: lime; border-radius: 5px; font-size: 10px;'.
Reading config string UrgencyTag1 ...
Returning config string: 'UrgencyTag1' = ' <b>'.
Reading config string UrgencyTag2 ...
Returning config string: 'UrgencyTag2' = ' <b><u>'.
Reading config string UrgencyTag3 ...
Returning config string: 'UrgencyTag3' = ' <b><u><font color=red>'.
MessageWidget created.
NotificationWidget created.
Connection established
 *** Receiving new notification...
 *** Attempt to set icon...
 *** Icon set successfully.
 *** Attempt to search basic notifications by id...
 *** ... done!
 *** Attempt to search private-synchronous notifications by id...
 *** Search by id finished.
 *** Take care of private-synchronous notifications.
 *** ... done.
 *** Pushing notification to stack... *** ... done!
Checking if need to show new notification
Attempt to show new notification
Calculating widget position...
Got desktop geometry.
Reading config string MessageWidgetPosition ...
Returning config string: 'MessageWidgetPosition' = ' 0'.
Got widget position from config.
Returning widget coordinates.
Checking if need to show new notification
Attempt to show new notification
 *** Notification received.
Attempt to hide widget
Erasing first notification is stack
Starting fade.
 *** Receiving new notification...
 *** Attempt to set icon...
 *** Icon set successfully.
 *** Attempt to search basic notifications by id...
 *** ... done!
 *** Attempt to search private-synchronous notifications by id...
 *** Search by id finished.
 *** Take care of private-synchronous notifications.
 *** ... done.
 *** Pushing notification to stack... *** ... done!
Checking if need to show new notification
Attempt to show new notification
Calculating widget position...
Got desktop geometry.
Reading config string MessageWidgetPosition ...
Returning config string: 'MessageWidgetPosition' = ' 0'.
Got widget position from config.
Returning widget coordinates.
Checking if need to show new notification
Attempt to show new notification
 *** Notification received.
Attempt to hide widget
Erasing first notification is stack
Starting fade.

ставил так:

yaourt -S qtnotifydaemon

Crow
()
Ответ на: комментарий от Crow

Для определения координат углов экрана, по которым осуществлется отрисовка используется QDesktopWidget, который умеет работать только с DE, но не с WM. Вечером я это поправлю.

drull ★☆☆☆
() автор топика
Ответ на: комментарий от drull

кто Вас ТАК писать учил?! и хрен бы со стилем, но КОД? проект и восьми файлов - и это восемь файлов хардкоды!


Что конкретно кроме освобождения памяти не нравится?


в другом случае таких глупых утечек было бы достаточно для ненависти. раздражение начинается ещё с фразы «написанного на Qt» - что откровенная ложь. Вы использовали пару классов из Qt, не удосужившись даже толком почитать документацию, за что Вам жирный минус; вместо того же QSettings, например, Вы изобретаете велосипед, который, прямо скажем, получился весьма дерьмовым. Вы хордкодите максимальную длину пути к настройкам. Вы передаёте строки в виде char* без указания кодировки. Вы создаёте миллион QDesktopWidget'ов (и ни один не удаляете), хотя в QApplication есть соответствующий метод. Вы делаете deep-copy объектам, которые можно было бы передать по ссылке (тот же вариант с картинкой, например). Вы даже файл не закрываете в createConfigIfNotExists(), не ставите ему CLOEXEC...список длинный.
учите C++ и читайте документацию.

rtk
()
Ответ на: комментарий от seed_stil

Ну так там код GPL и лежит на гитхабе, а классы, которые сами нотифы рисуют, таки не привязаны к кутиму никак, берите и вставляйте в этого демона

Gorthauer ★★★★★
()
Ответ на: комментарий от rtk

Черт, файл забыл закрыть, да, бывает. Удаление QDesktopWidget'ов тоже пофиксил. Насчет настроек - это уже мое дело что использовать: QSettings или свои велосипеды.

Вы делаете deep-copy объектам, которые можно было бы передать по ссылке (тот же вариант с картинкой, например).


И что?

раздражение начинается ещё с фразы «написанного на Qt» - что откровенная ложь


Ну не gtk же он написан. Если вас что-то раздражает - выпейте успокоительного.

Вы использовали пару классов из Qt, не удосужившись даже толком почитать документацию


4.2

drull ★☆☆☆
() автор топика
Ответ на: комментарий от drull

Вы спросили «что не так» - я ответил. к чему все эти оправдания?

з.ы. файл так и не закрываете, все ещё вижу утечки.

rtk
()
Ответ на: комментарий от drull

>> а потом - тишина, и c --debug в stderr тоже

Другие демоны уведомлений запущены?

нет, не запущены. Завтра попробую под другим дистром и с 4.7.х.

anonymous
()

под кде не понятно что-то. Его пускать от рута?

Cant register service. Is another instance of this application running?


Было бы ок если бы это была бы замена knotify4, а то его виджеты до сих пор глюкавят и серьезненько так...
ipeacocks ★★★★★
()
Ответ на: комментарий от ipeacocks

> Cant register service. Is another instance of this application running?

Да-да, это потому что запущен knotify4. Вопрос кедоводам: его можно снести не затрагивая половину кед?

drull ★☆☆☆
() автор топика
Ответ на: комментарий от ipeacocks

> По зависимостях у меня тянет 97 пакетов )

Мдаа.. кеды такие кеды. Хотя есть идея. Минутку.

drull ★☆☆☆
() автор топика
Ответ на: комментарий от ipeacocks

Сейчас поставлю кеды, проверю как можно его выкинуть.

drull ★☆☆☆
() автор топика
Ответ на: комментарий от ipeacocks

Все гораздо хуже чем я думал. Непосредственное отображение нотификаций выполняется бинарником /usr/bin/plasma-desktop. А его никак не снести.

drull ★☆☆☆
() автор топика

Присоединяясь к вышесказанному

действительно, сделано очень непрофессионально.

d_a ★★★★★
()
Ответ на: комментарий от drull

Еще не вникал, надо будет пощупать. Но думаю будет гут =)

Crow
()
Ответ на: комментарий от drull

Извини, патча, который бы поднял твой уровень как разработчика, практикующего C++, у меня нет (кроме разве что python). Что до программы, то она слищком тривиальна, для того чтобы можно было говорить о совместной работе над ней.

d_a ★★★★★
()
Ответ на: комментарий от drull

valgrind'ом регулярно проходить надо точно, комплект демок и тестов сделать тоже не помешает, а к домоощенных гуру и прочим «теоретикам» можно прислушаться уже потом.

anonymous
()
Ответ на: комментарий от drull

и да, таки spec (rpm) и-или как их там ... control/rules/changelog/... (deb) неплохо бы положить в архив, чтоб исходные пакеты каждый сам не мастерил.

P.S. а патчи точно будут, только руки вот дойдут...

anonymous
()
Ответ на: комментарий от rtk

В последние пару недель я был занят.

drull ★☆☆☆
() автор топика

Скриншоты демона. Дожили.

thesis ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.