sanchay160887 / vacuum-im

Automatically exported from code.google.com/p/vacuum-im
GNU General Public License v3.0
0 stars 0 forks source link

Make Notifications more customizable #536

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
In current implementation of Notifications plugin, developers can register 
their own notification types, but notification kinds are hardcoded in 
inotifications.h as a bit mask. Developer can use spare bits as his own 
notification kinds, but they will never appear in the notification options 
dialog as available notification kinds, so developers need to create their own 
option widgets for their notifications. Also, this way may lead to conflicts, 
when different independent plugins will use the same bit as their notification 
kinds.
There should be a way to register custom notification kinds like this:

virtual void registerNotificationKind(qint8 ABit, const QString &AName);

After this an appropriate branch appears in the list on the "Notifications" 
settings page.
This way is compatible with current way of notification kind handling, but has 
serious limitations. The better way is using a string ID instead of a bit flag 
for each notification kind, like this:

virtual void registerNotificationKind(const QString &AKindId, const QString 
&AName);

In this case a string list instead of NotifyKinds enumeration should be used:

struct INotificationType
{
    INotificationType() {
        order = 0;
    }
    int order;
    QIcon icon;
    QString title;
    QStringList kindMask;
    QStringList kindDefs;
};

В текущей реализаци плагина Notifications, 
разработчики могут регистрировать свои 
собственные типы уведомлений, но виды 
уведомлений жёстко зашиты в файле inotifications.h 
в виде битовой маски. Разработчик может 
использовать свободные биты для своих 
собственных видов уведомлений, но они не 
появятся как достыпные в диалоге настроек 
уведомлений. Таким образом, разработчки 
вынуждены создавать свои собственные 
виджеты настроек для своих уведомлений. 
Кроме того, данный подход чреват 
конфликтами, когда несколько независимых 
плагинов используют один и тот же бит для 
своих видов уведомлений.
Должен существовать способ регистрировать 
свои виды уведомлений как то:

virtual void registerNotificationKind(const QString &AKindId, const QString 
&AName);

После этого в списке на странице настроке 
"Уведомления" появится соответствующий 
раздел.
Данный способ совместим с тем, как работают 
виды уведомлений сейчас, но имеет 
серьёзные ограничения. Лучше для каждого 
вида уведомлений вместо битового флага 
использовать строковой идентификатор, как 
то:

virtual void registerNotificationKind(const QString &AKindId, const QString 
&AName);

В этом случае, вместо перечисления NotifyKinds 
следует использовать список строк:

struct INotificationType
{
    INotificationType() {
        order = 0;
    }
    int order;
    QIcon icon;
    QString title;
    QStringList kindMask;
    QStringList kindDefs;
};

Original issue reported on code.google.com by yagimo...@gmail.com on 6 Dec 2011 at 7:53

GoogleCodeExporter commented 9 years ago

Original comment by yagimo...@gmail.com on 6 Dec 2011 at 9:07

GoogleCodeExporter commented 9 years ago
Also, some plugins may need source avatar data for the contact, which cause 
notification. But now only contactAvatar() method implemented in Notifications 
plugin. This method returns QImage, scaled to 32x32. It's a good idea to add 
contactAvatarFile() method which will return full path to contact avatar's 
image file.

Кроме того, некоторым плагинам могут 
потребоваться исходные данные аватара 
контакта, ставшего причиной уведомления. 
Однако, сейчас в плагине Notifications реализован 
лишь метод avatarImage(). Данный метод возвращает 
QImage, смасштабированный до 32x32. Неплохо было 
бы добавить метод contactAvatarFile(), который будет 
вовращать полный путь к файлу, содержащему 
изображение аватара.

Original comment by yagimo...@gmail.com on 6 Dec 2011 at 9:43

GoogleCodeExporter commented 9 years ago

Original comment by potapov.s.a on 9 Dec 2011 at 10:26

GoogleCodeExporter commented 9 years ago

Original comment by potapov.s.a on 2 Dec 2014 at 8:20