revorked hints system, added hints to snorecore

This commit is contained in:
Patrick von Reth 2013-07-23 12:00:51 +02:00
parent bfe963cb64
commit 6fb3f561ff
11 changed files with 154 additions and 55 deletions

View File

@ -13,12 +13,14 @@ add_subdirectory(plugins)
set ( SnoreNotify_SRCS ${SnoreNotify_SRCS}
snore.cpp
application.cpp
hint.cpp
${CMAKE_CURRENT_BINARY_DIR}/version.cpp
)
set ( SnoreNotify_HDR ${SnoreNotify_HDR}
snore.h
application.h
hint.h
snore_exports.h
version.h
)

48
src/core/hint.cpp Normal file
View File

@ -0,0 +1,48 @@
/*
SnoreNotify is a Notification Framework based on Qt
Copyright (C) 2013 Patrick von Reth <vonreth@kde.org>
SnoreNotify is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SnoreNotify is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with SnoreNotify. If not, see <http://www.gnu.org/licenses/>.
*/
#include "hint.h"
using namespace Snore;
Hint::Hint(QObject *parent) :
QObject(parent)
{
}
void Hint::setValue(const QString &key, const QVariant &value)
{
m_data[key] = value;
}
QVariant Hint::value(const QString &key, const QVariant &defaultValue) const
{
if(m_data.contains(key))
{
return m_data[key];
}
else
{
return defaultValue;
}
}
bool Hint::contains(const QString &key) const
{
return m_data.contains(key);
}

46
src/core/hint.h Normal file
View File

@ -0,0 +1,46 @@
/*
SnoreNotify is a Notification Framework based on Qt
Copyright (C) 2013 Patrick von Reth <vonreth@kde.org>
SnoreNotify is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SnoreNotify is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with SnoreNotify. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef HINT_H
#define HINT_H
#include <QObject>
#include <QVariantHash>
namespace Snore
{
class Hint : public QObject
{
Q_OBJECT
public:
explicit Hint(QObject *parent = 0);
void setValue(const QString &key, const QVariant &value);
QVariant value(const QString & key, const QVariant & defaultValue = QVariant() ) const;
bool contains ( const QString & key ) const;
private:
QVariantHash m_data;
};
}
#endif // HINT_H

View File

@ -164,28 +164,14 @@ void Notification::setCloseReason(const NotificationEnums::CloseReasons::closeRe
d->m_closeReason = r;
}
const QVariant Notification::hint(const QString &key , const QVariant &defaultValue ) const
Hint &Notification::hints()
{
if(d->m_hints.contains(key))
{
return d->m_hints.value ( key );
}
return defaultValue;
}
bool Notification::hintExists ( const QString &key )
{
return d->m_hints.contains ( key );
}
void Notification::insertHint ( const QString &key, const QVariant &val )
{
d->m_hints.insert ( key,val );
return d->m_hints;
}
void Notification::setSilent(bool silent)
{
d->m_hints["silent"] = silent;
d->m_hints.setValue("silent", silent);
}
bool Notification::isValid() const

View File

@ -23,11 +23,10 @@
#include "icon.h"
#include "notificationenums.h"
#include "../hint.h"
#include <QVariant>
#include <QDebug>
#include <QTextDocumentFragment>
#include <QTextDocument>
@ -79,9 +78,7 @@ public:
void addAction(Action *a);
const NotificationEnums::CloseReasons::closeReasons &closeReason();
void setCloseReason(const NotificationEnums::CloseReasons::closeReasons &r);
const QVariant hint(const QString &key , const QVariant &defaultValue ) const;
bool hintExists ( const QString &key );
void insertHint ( const QString &key,const QVariant &val );
Hint &hints();
void setSilent(bool silent);

View File

@ -4,6 +4,7 @@
#include "notification/icon.h"
#include "notification/NotificationEnums.h"
#include "../hint.h"
#include <QSharedData>
@ -51,7 +52,7 @@ public:
NotificationEnums::Prioritys::prioritys m_priority;
NotificationEnums::CloseReasons::closeReasons m_closeReason;
QHash<int,Notification::Action*> m_actions;
QVariantHash m_hints;
Hint m_hints;
static uint notificationCount;
static uint m_idCount;

View File

@ -359,3 +359,8 @@ bool SnoreCore::primaryBackendSupportsRichtext()
{
return m_notificationBackend->supportsRichtext();
}
Hint &SnoreCore::hints()
{
return m_hints;
}

View File

@ -24,12 +24,15 @@
#include "application.h"
#include "plugins/plugincontainer.h"
#include "notification/notification.h"
#include "hint.h"
#include <QStringList>
#include <QSettings>
#include <QTextDocument>
#include <QTextDocumentFragment>
class QSystemTrayIcon;
class QDir;
class QSettings;
namespace Snore{
@ -69,7 +72,17 @@ public:
bool primaryBackendSupportsRichtext();
Hint &hints();
signals:
void applicationInitialized( Snore::Application* );
void applicationRemoved( Snore::Application* );
void notify( Snore::Notification noti );
void actionInvoked( Snore::Notification );
void notificationClosed(Snore::Notification );
private slots:
void slotNotificationClosed(Snore::Notification);
private:
@ -78,6 +91,8 @@ private:
static QHash<QString,PluginContainer*> s_pluginCache;
Hint m_hints;
ApplicationsList m_applications;
@ -89,18 +104,6 @@ private:
QPointer<SnoreBackend> m_notificationBackend;
QSystemTrayIcon *m_trayIcon;
signals:
void applicationInitialized( Snore::Application* );
void applicationRemoved( Snore::Application* );
void notify( Snore::Notification noti );
void actionInvoked( Snore::Notification );
void notificationClosed(Snore::Notification );
private slots:
void slotNotificationClosed(Snore::Notification);
};

View File

@ -32,6 +32,12 @@ bool SnoreToast::init(SnoreCore *snore)
qDebug() << "SnoreToast does not work on windows" << QSysInfo::windowsVersion();
return false;
}
if(snore->hints().contains("WINDOWS_APP_ID"))
{
m_appID = snore->hints().value("WINDOWS_APP_ID");
}
else
{
m_appID = QString("%1.%2.SnoreToast").arg(qApp->organizationName(), qApp->applicationName()).replace(" ","");
QProcess *p = new QProcess(this);
@ -48,6 +54,7 @@ bool SnoreToast::init(SnoreCore *snore)
qDebug() << p->readAll();
if(p->exitCode() != 0)
return false;
}
return SnoreBackend::init(snore);
}
@ -82,7 +89,7 @@ void SnoreToast::slotNotify(Notification notification)
<< "-appID"
<< m_appID;
;
if(notification.hint("silent",true).toBool())
if(notification.hints().value("silent",true).toBool())
{
arguements << "-silent";
}

View File

@ -118,7 +118,7 @@ SnarlNotification Parser::parse(QString &msg,QTcpSocket* client){
sNotification.notification = Notification(app,alert,title,text,icon,timeout);
sNotification.notification.setSource(snarl);
sNotification.notification.insertHint("SnarlIcon",sntpIcon);
sNotification.notification.hints().setValue("SnarlIcon", sntpIcon);
switch(action){
@ -159,15 +159,19 @@ SnarlNotification Parser::parse(QString &msg,QTcpSocket* client){
sNotification.vailid=false;
break;
}
sNotification.notification.insertHint("SnarlAction",sNotification.action);
sNotification.notification.hints().setValue("SnarlAction", sNotification.action);
return sNotification;
}
QString Parser::downloadIcon(const QString &address){
if(address=="")
{
return "";
}
if(address.startsWith("file://"))
{
return QString(address.mid(7));
}
QByteArray arr=address.toUtf8();
QUrl url = QUrl::fromEncoded(arr);