add settings

This commit is contained in:
Patrick von Reth 2014-09-19 12:42:48 +02:00
parent 026dd21055
commit dddc425b78
11 changed files with 159 additions and 5 deletions

View File

@ -61,7 +61,7 @@ public:
std::cout << "Started logging to " << name.toUtf8().constData() << std::endl;
s_file = new QFile(name);
if(!s_file->open(QFile::WriteOnly)) {
if (!s_file->open(QFile::WriteOnly)) {
qFatal("Failed to open log file %s", qPrintable(name));
}
s_out = new QTextStream(s_file);

View File

@ -17,6 +17,7 @@
*/
#include "../snore.h"
#include "../snore_p.h"
#include "snorebackend.h"
#include "snorefrontend.h"
#include "../notification/notification_p.h"
@ -66,6 +67,29 @@ SnoreCore *SnorePlugin::snore()
return m_snore.data();
}
QVariant SnorePlugin::value(const QString &key)
{
return snore()->d()->settings()->value(normaliseKey(key));
}
void SnorePlugin::setValue(const QString &key, const QVariant &value)
{
snore()->d()->settings()->setValue(normaliseKey(key), value);
}
void SnorePlugin::setDefaultValue(const QString &key, const QVariant &value)
{
QString pk(normaliseKey(key));
if (!snore()->d()->settings()->contains(pk)) {
snore()->d()->settings()->setValue(normaliseKey(key), value);
}
}
QString SnorePlugin::normaliseKey(const QString &key)
{
return QString("%1/%2").arg(name(), key);
}
const QString &SnorePlugin::name() const
{
return m_name;

View File

@ -25,6 +25,7 @@
#include <QHash>
#include <QTimer>
#include <QtPlugin>
#include <QSettings>
namespace Snore
{
@ -53,8 +54,14 @@ public:
SnoreCore *snore();
const QString &name() const;
QVariant value(const QString &key);
void setValue(const QString &key, const QVariant &value);
void setDefaultValue(const QString &key, const QVariant &value);
private:
SnorePlugin() {}
QString normaliseKey(const QString &key);
QString m_name;
bool m_initialized;
QPointer<SnoreCore> m_snore;

View File

@ -34,7 +34,8 @@ using namespace Snore;
SnoreCorePrivate::SnoreCorePrivate(QSystemTrayIcon *trayIcon):
m_trayIcon(trayIcon),
m_defaultApp("SnoreNotify", Icon(":/root/snore.png"))
m_defaultApp("SnoreNotify", Icon(":/root/snore.png")),
m_settings(new QSettings("Snorenotify", "libsnore", this))
{
snoreDebug(SNORE_INFO) << "Version:" << Version::version();
if (!Version::revision().isEmpty()) {
@ -42,6 +43,7 @@ SnoreCorePrivate::SnoreCorePrivate(QSystemTrayIcon *trayIcon):
}
snoreDebug(SNORE_DEBUG) << "Temp dir is" << tempPath();
snoreDebug(SNORE_DEBUG) << "Snore settings are located in" << m_settings->fileName();
m_defaultApp.addAlert(Alert("Default", Icon(":/root/snore.png")));
connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(slotAboutToQuit()));
@ -88,7 +90,7 @@ QString SnoreCorePrivate::tempPath()
return dir.path();
#else
static QString dir;
if(dir.isEmpty()) {
if (dir.isEmpty()) {
dir = QString("%1/%2").arg(QDir::tempPath(), "libsnore");
QDir::temp().mkpath("libsnore");
}
@ -101,6 +103,11 @@ bool SnoreCorePrivate::primaryBackendCanUpdateNotification() const
return m_notificationBackend->canUpdateNotification();
}
QSettings *SnoreCorePrivate::settings() const
{
return m_settings;
}
void SnoreCorePrivate::slotNotificationClosed(Notification n)
{
Q_Q(SnoreCore);

View File

@ -62,6 +62,8 @@ public:
*/
bool primaryBackendCanUpdateNotification() const;
QSettings *settings() const;
signals:
void applicationRegistered(const Snore::Application &);
void applicationDeregistered(const Snore::Application &);
@ -83,6 +85,8 @@ private:
QSystemTrayIcon *m_trayIcon;
Application m_defaultApp;
QSettings *m_settings;
};
}

View File

@ -22,7 +22,7 @@ if(NOT WITH_FREEDESKTOP_FRONTEND AND UNIX AND NOT APPLE)
add_library(libsnore_backend_freedesktop MODULE ${FREEDESKTOP_NOTIFICATION_SRC} )
target_link_libraries(libsnore_backend_freedesktop libsnore ${QT_QTGUI_LIBRARY} ${QT_QTDBUS_LIBRARY} )
target_link_libraries(libsnore_backend_freedesktop Snore::Libsnore ${QT_QTGUI_LIBRARY} ${QT_QTDBUS_LIBRARY} )
install(TARGETS libsnore_backend_freedesktop ${SNORE_PLUGIN_INSTALL_PATH})
endif()

View File

@ -49,7 +49,7 @@ NotifyWidget::NotifyWidget(int pos, QWidget *parent) :
);
setFocusPolicy(Qt::NoFocus);
setAttribute(Qt::WA_ShowWithoutActivating,true);
setAttribute(Qt::WA_ShowWithoutActivating, true);
if (m_mem.create(sizeof(SHARED_MEM_TYPE))) {
m_mem.lock();

View File

@ -0,0 +1 @@
add_subdirectory(toasty)

View File

@ -0,0 +1,8 @@
set( TOASTY_SRC
toasty.cpp
)
add_library(libsnore_secondary_backend_toasty MODULE ${TOASTY_SRC} )
target_link_libraries(libsnore_secondary_backend_toasty Snore::Libsnore ${QT_QTCORE_LIBRARY} )
install(TARGETS libsnore_secondary_backend_toasty ${SNORE_PLUGIN_INSTALL_PATH})

View File

@ -0,0 +1,74 @@
#include "toasty.h"
#include <QtNetwork>
Q_EXPORT_PLUGIN2(libsnore_secondary_backend_toasty, Toasty)
using namespace Snore;
Toasty::Toasty():
SnoreSecondaryBackend("Toasty", false)
{
}
void Toasty::slotNotify(Notification notification)
{
QString id = value("DEVICEID").toString();
if (!id.isEmpty()) {
QNetworkRequest request(QString("http://api.supertoasty.com/notify/%1").arg(id));
QHttpMultiPart *mp = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart title;
title.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"title\""));
title.setBody(Snore::toPlainText(notification.title()).toLatin1().constData());
mp->append(title);
QHttpPart text;
text.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
text.setBody(Snore::toPlainText(notification.text()).toLatin1().constData());
mp->append(text);
QHttpPart app;
app.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"sender\""));
app.setBody(notification.application().name().toLatin1().constData());
mp->append(app);
QHttpPart icon;
Icon sIcon(notification.icon().scaled(QSize(127, 127)));
icon.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"image\"; filename=\"%1\"").arg(sIcon.localUrl())));
icon.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png"));
QFile *file = new QFile(sIcon.localUrl());
file->open(QIODevice::ReadOnly);
icon.setBodyDevice(file);
mp->append(icon);
QNetworkReply *reply = m_manager.post(request, mp);
mp->setParent(reply);
file->setParent(reply);
connect(reply, SIGNAL(finished()), this, SLOT(slotRequestFinished()));
}
}
void Toasty::slotRequestFinished()
{
QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
snoreDebug(SNORE_DEBUG) << reply->readAll();
reply->close();
reply->deleteLater();
}
bool Toasty::initialize(SnoreCore *snore)
{
if (SnoreSecondaryBackend::initialize(snore)) {
setDefaultValue("DEVICEID", "");
snoreDebug(SNORE_DEBUG) << value("DEVICEID");
return true;
}
return false;
}
bool Toasty::deinitialize()
{
return SnoreSecondaryBackend::deinitialize();
}

View File

@ -0,0 +1,29 @@
#ifndef TOASTY_H
#define TOASTY_H
#include "core/plugins/snorebackend.h"
#include <QNetworkAccessManager>
class Toasty : public Snore::SnoreSecondaryBackend
{
Q_OBJECT
Q_INTERFACES(Snore::SnoreSecondaryBackend)
Q_PLUGIN_METADATA(IID "org.Snore.SecondaryNotificationBackend/1.0")
public:
Toasty();
virtual bool initialize(Snore::SnoreCore *snore);
virtual bool deinitialize();
public slots:
virtual void slotNotify(Snore::Notification notification);
private slots:
void slotRequestFinished();
private:
QNetworkAccessManager m_manager;
};
#endif // TOASTY_H