improve plugin loading/error handling
This commit is contained in:
parent
eecd2b4217
commit
49a1f21e61
|
@ -56,7 +56,6 @@ SnorePlugin *PluginContainer::load()
|
|||
m_plugin = qobject_cast<SnorePlugin *> (m_loader.instance());
|
||||
m_plugin->m_container = this;
|
||||
m_plugin->setDefaultSettings();
|
||||
QMetaObject::invokeMethod(m_plugin, "load", Qt::QueuedConnection);
|
||||
}
|
||||
return m_plugin;
|
||||
}
|
||||
|
|
|
@ -35,14 +35,6 @@ SnorePlugin::SnorePlugin()
|
|||
if (thread() != qApp->thread()) {
|
||||
snoreDebug(SNORE_WARNING) << "Plugin initialized in wrong thread.";
|
||||
}
|
||||
connect(this, &SnorePlugin::loadedStateChanged, [this](bool b) {
|
||||
snoreDebug(SNORE_DEBUG) << "Plugin:" << name() << "initialized" << b;
|
||||
Q_ASSERT_X(!(b && m_initialized), Q_FUNC_INFO, "Plugin initialized multiple times.");
|
||||
if (!b) {
|
||||
disable();
|
||||
}
|
||||
m_initialized = b;
|
||||
});
|
||||
}
|
||||
|
||||
SnorePlugin::~SnorePlugin()
|
||||
|
@ -50,11 +42,6 @@ SnorePlugin::~SnorePlugin()
|
|||
snoreDebug(SNORE_DEBUG) << name() << this << "deleted";
|
||||
}
|
||||
|
||||
bool SnorePlugin::isLoaded() const
|
||||
{
|
||||
return m_initialized;
|
||||
}
|
||||
|
||||
bool SnorePlugin::isEnabled() const
|
||||
{
|
||||
return m_enabled;
|
||||
|
@ -106,6 +93,16 @@ const QString SnorePlugin::typeName() const
|
|||
return SnorePlugin::typeToString(type());
|
||||
}
|
||||
|
||||
bool SnorePlugin::isReady()
|
||||
{
|
||||
return m_error.isEmpty();
|
||||
}
|
||||
|
||||
QString SnorePlugin::errorString() const
|
||||
{
|
||||
return m_error;
|
||||
}
|
||||
|
||||
QString SnorePlugin::settingsVersion() const
|
||||
{
|
||||
return QLatin1String("v1");
|
||||
|
@ -116,10 +113,16 @@ void SnorePlugin::setDefaultSettings()
|
|||
setDefaultSettingsValue(QLatin1String("Enabled"), false, LOCAL_SETTING);
|
||||
}
|
||||
|
||||
void SnorePlugin::setErrorString(const QString &_error)
|
||||
{
|
||||
m_error = name() + tr(" encountered an error: ") + _error;
|
||||
snoreDebug(SNORE_WARNING) << m_error;
|
||||
disable();
|
||||
emit error(_error);
|
||||
}
|
||||
|
||||
void SnorePlugin::setEnabled(bool enabled)
|
||||
{
|
||||
Q_ASSERT_X(!enabled || isLoaded(), Q_FUNC_INFO, "Plugin not initialized");
|
||||
|
||||
if (enabled != m_enabled) {
|
||||
emit enabledChanged(enabled);
|
||||
}
|
||||
|
|
|
@ -53,13 +53,24 @@ public:
|
|||
SnorePlugin();
|
||||
virtual ~SnorePlugin();
|
||||
|
||||
/**
|
||||
* Sets the enabled state of the plugin to @param enabled.
|
||||
*/
|
||||
void setEnabled(bool enabled);
|
||||
|
||||
/**
|
||||
* Enables the plugin.
|
||||
*/
|
||||
void enable();
|
||||
|
||||
/**
|
||||
* Disables the plugin.
|
||||
*/
|
||||
void disable();
|
||||
|
||||
bool isLoaded() const;
|
||||
|
||||
/**
|
||||
* Returns whether the Plugin is enabled.
|
||||
*/
|
||||
bool isEnabled() const;
|
||||
|
||||
/**
|
||||
|
@ -77,6 +88,13 @@ public:
|
|||
*/
|
||||
const QString typeName() const;
|
||||
|
||||
virtual bool isReady();
|
||||
|
||||
/**
|
||||
* Returns the error string or an empty string.
|
||||
*/
|
||||
QString errorString() const;
|
||||
|
||||
QVariant settingsValue(const QString &key, SettingsType type = GLOBAL_SETTING) const;
|
||||
void setSettingsValue(const QString &key, const QVariant &settingsValue, SettingsType type = GLOBAL_SETTING);
|
||||
void setDefaultSettingsValue(const QString &key, const QVariant &settingsValue, SettingsType type = GLOBAL_SETTING);
|
||||
|
@ -84,11 +102,8 @@ public:
|
|||
virtual PluginSettingsWidget *settingsWidget();
|
||||
|
||||
Q_SIGNALS:
|
||||
void loadedStateChanged(bool loaded);
|
||||
void enabledChanged(bool enabled);
|
||||
|
||||
private Q_SLOTS:
|
||||
virtual void load() = 0;
|
||||
void error(const QString &error);
|
||||
|
||||
protected:
|
||||
/**
|
||||
|
@ -101,13 +116,15 @@ protected:
|
|||
*/
|
||||
virtual void setDefaultSettings();
|
||||
|
||||
void setErrorString(const QString &error);
|
||||
|
||||
private:
|
||||
QString normaliseKey(const QString &key) const;
|
||||
void setDefaultSettingsPlugin();
|
||||
|
||||
bool m_initialized = false;
|
||||
bool m_enabled = false;
|
||||
PluginContainer *m_container = nullptr;
|
||||
QString m_error;
|
||||
|
||||
friend class PluginContainer;
|
||||
|
||||
|
|
|
@ -69,9 +69,19 @@ void SettingsDialog::initTabs()
|
|||
addWidgets(ui->tabWidget_secondary_backends, ui->tab_secondaryBackends, SnorePlugin::SECONDARY_BACKEND);
|
||||
addWidgets(ui->tabWidget_frontends, ui->tab_frontends, SnorePlugin::FRONTEND);
|
||||
addWidgets(ui->tabWidget_plugins, ui->tab_plugins, SnorePlugin::PLUGIN);
|
||||
|
||||
ui->errorLabel->setVisible(false);
|
||||
ui->errorLineEdit->setVisible(false);
|
||||
|
||||
connect(&SnoreCore::instance(), &SnoreCore::prmaryNotificationBackendChanged, this, &SettingsDialog::loadPrimaryBackendBox);
|
||||
connect(&SnoreCore::instance(), &SnoreCore::prmaryNotificationBackendError, [this](const QString & error) {
|
||||
ui->errorLabel->setVisible(true);
|
||||
ui->errorLineEdit->setVisible(true);
|
||||
ui->errorLineEdit->setText(error);
|
||||
});
|
||||
}
|
||||
|
||||
void Snore::SettingsDialog::on_pushButton_clicked()
|
||||
void SettingsDialog::on_pushButton_clicked()
|
||||
{
|
||||
SnoreCore::instance().displayExapleNotification();
|
||||
}
|
||||
|
@ -79,22 +89,27 @@ void Snore::SettingsDialog::on_pushButton_clicked()
|
|||
void SettingsDialog::load()
|
||||
{
|
||||
snoreDebug(SNORE_DEBUG) << "loading";
|
||||
loadPrimaryBackendBox(SnoreCore::instance().settingsValue(QLatin1String("PrimaryBackend"), LOCAL_SETTING).toString());
|
||||
ui->timeoutSpinBox->setValue(SnoreCore::instance().settingsValue(QLatin1String("Timeout"), LOCAL_SETTING).toInt());
|
||||
ui->disableNotificationSoundCheckBox->setChecked(SnoreCore::instance().settingsValue(QLatin1String("Silent"), LOCAL_SETTING).toBool());
|
||||
for (auto widget : m_tabs) {
|
||||
widget->loadSettings();
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsDialog::loadPrimaryBackendBox(const QString &backend)
|
||||
{
|
||||
if (SnoreCore::instance().settingsValue(QLatin1String("PluginTypes"), LOCAL_SETTING).value<SnorePlugin::PluginTypes>() & SnorePlugin::BACKEND) {
|
||||
ui->primaryBackendComboBox->clear();
|
||||
QStringList list = SnoreCore::instance().pluginNames(SnorePlugin::BACKEND);
|
||||
ui->primaryBackendComboBox->addItems(list);
|
||||
ui->primaryBackendComboBox->setCurrentIndex(list.indexOf(SnoreCore::instance().settingsValue(QLatin1String("PrimaryBackend"), LOCAL_SETTING).toString()));
|
||||
ui->primaryBackendComboBox->setCurrentIndex(list.indexOf(backend));
|
||||
ui->primaryBackendComboBox->setVisible(true);
|
||||
ui->primaryBackendLabel->setVisible(true);
|
||||
} else {
|
||||
ui->primaryBackendComboBox->setVisible(false);
|
||||
ui->primaryBackendLabel->setVisible(false);
|
||||
}
|
||||
ui->timeoutSpinBox->setValue(SnoreCore::instance().settingsValue(QLatin1String("Timeout"), LOCAL_SETTING).toInt());
|
||||
ui->disableNotificationSoundCheckBox->setChecked(SnoreCore::instance().settingsValue(QLatin1String("Silent"), LOCAL_SETTING).toBool());
|
||||
for (auto widget : m_tabs) {
|
||||
widget->loadSettings();
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsDialog::save()
|
||||
|
@ -114,7 +129,7 @@ void SettingsDialog::save()
|
|||
SnoreCore::instance().setSettingsValue(QLatin1String("Silent"), ui->disableNotificationSoundCheckBox->isChecked(), LOCAL_SETTING);
|
||||
|
||||
if (dirty) {
|
||||
QMetaObject::invokeMethod(SnoreCorePrivate::instance(), "slotSyncSettings", Qt::QueuedConnection);
|
||||
SnoreCorePrivate::instance()->syncSettings();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ public Q_SLOTS:
|
|||
private Q_SLOTS:
|
||||
void on_pushButton_clicked();
|
||||
void load();
|
||||
void loadPrimaryBackendBox(const QString &backend);
|
||||
void save();
|
||||
|
||||
private:
|
||||
|
|
|
@ -73,6 +73,20 @@
|
|||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="disableNotificationSoundCheckBox"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="errorLabel">
|
||||
<property name="text">
|
||||
<string>Error:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="errorLineEdit">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
|
@ -84,25 +84,13 @@ void SnoreCore::loadPlugins(SnorePlugin::PluginTypes types)
|
|||
case SnorePlugin::SECONDARY_BACKEND:
|
||||
case SnorePlugin::FRONTEND:
|
||||
case SnorePlugin::PLUGIN:
|
||||
connect(plugin, &SnorePlugin::loadedStateChanged, [plugin](bool initialized) {
|
||||
if (initialized) {
|
||||
plugin->setEnabled(plugin->settingsValue(QLatin1String("Enabled"), LOCAL_SETTING).toBool());
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
snoreDebug(SNORE_WARNING) << "Plugin Cache corrupted\n" << info->file() << info->type();
|
||||
continue;
|
||||
}
|
||||
|
||||
connect(plugin, &SnorePlugin::loadedStateChanged, [d, plugin](bool initialized) {
|
||||
if (!initialized) {
|
||||
//TODO: improve
|
||||
d->m_pluginNames[plugin->type()].removeAll(plugin->name());
|
||||
d->m_plugins.remove(qMakePair(plugin->type(), plugin->name()));
|
||||
}
|
||||
});
|
||||
|
||||
snoreDebug(SNORE_DEBUG) << info->name() << "is a" << info->type();
|
||||
d->m_pluginNames[info->type()].append(info->name());
|
||||
auto key = qMakePair(type, info->name());
|
||||
|
|
|
@ -166,6 +166,16 @@ Q_SIGNALS:
|
|||
*/
|
||||
void notificationClosed(Snore::Notification);
|
||||
|
||||
/**
|
||||
* This signal is emited in case the Primary backend encountered an error.
|
||||
*/
|
||||
void prmaryNotificationBackendError(const QString &error);
|
||||
|
||||
/**
|
||||
* This signal is emited in case the Primary backend changed.
|
||||
*/
|
||||
void prmaryNotificationBackendChanged(const QString &erro);
|
||||
|
||||
private:
|
||||
SnoreCore(QObject *parent);
|
||||
SnoreCorePrivate *d_ptr;
|
||||
|
|
|
@ -86,8 +86,10 @@ bool SnoreCorePrivate::setBackendIfAvailible(const QString &backend)
|
|||
}
|
||||
snoreDebug(SNORE_DEBUG) << "Setting Notification Backend to:" << backend;
|
||||
SnoreBackend *b = qobject_cast<SnoreBackend *>(backends.value(backend)->load());
|
||||
if (!b->isLoaded()) {
|
||||
snoreDebug(SNORE_DEBUG) << "Failed to initialize" << b->name();
|
||||
if (!b->isReady()) {
|
||||
snoreDebug(SNORE_DEBUG) << "Backend not ready:" << b->errorString();
|
||||
|
||||
emit q->prmaryNotificationBackendError(b->errorString());
|
||||
return false;
|
||||
}
|
||||
if (m_notificationBackend) {
|
||||
|
@ -97,11 +99,10 @@ bool SnoreCorePrivate::setBackendIfAvailible(const QString &backend)
|
|||
m_notificationBackend->enable();
|
||||
q->setSettingsValue(QLatin1String("PrimaryBackend"), backend, LOCAL_SETTING);
|
||||
|
||||
connect(b, &SnoreBackend::loadedStateChanged, [this, b](bool initialized) {
|
||||
if (!initialized) {
|
||||
connect(b, &SnoreBackend::error, [this, b](const QString &) {
|
||||
slotInitPrimaryNotificationBackend();
|
||||
}
|
||||
});
|
||||
emit q->prmaryNotificationBackendChanged(b->name());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -159,7 +160,7 @@ void SnoreCorePrivate::setDefaultSettingsValueIntern(const QString &key, const Q
|
|||
}
|
||||
}
|
||||
|
||||
void SnoreCorePrivate::slotSyncSettings()
|
||||
void SnoreCorePrivate::syncSettings()
|
||||
{
|
||||
Q_Q(SnoreCore);
|
||||
QString newBackend = q->settingsValue(QLatin1String("PrimaryBackend"), LOCAL_SETTING).toString();
|
||||
|
|
|
@ -71,6 +71,7 @@ public:
|
|||
|
||||
void startNotificationTimeoutTimer(Notification notification);
|
||||
|
||||
void syncSettings();
|
||||
private Q_SLOTS:
|
||||
//TODO: find a better solutinon for the slots in this section
|
||||
friend class Snore::SnoreBackend;
|
||||
|
@ -79,8 +80,6 @@ private Q_SLOTS:
|
|||
void slotNotificationClosed(Snore::Notification);
|
||||
void slotAboutToQuit();
|
||||
|
||||
void slotSyncSettings();
|
||||
|
||||
bool slotInitPrimaryNotificationBackend();
|
||||
|
||||
Q_SIGNALS:
|
||||
|
|
|
@ -12,6 +12,13 @@ using namespace Snore;
|
|||
|
||||
FreedesktopBackend::FreedesktopBackend()
|
||||
{
|
||||
m_interface = new org::freedesktop::Notifications(QLatin1String("org.freedesktop.Notifications"),
|
||||
QLatin1String("/org/freedesktop/Notifications"),
|
||||
QDBusConnection::sessionBus(), this);
|
||||
QDBusPendingReply<QStringList> reply = m_interface->GetCapabilities();
|
||||
reply.waitForFinished();
|
||||
QStringList caps = reply.value();
|
||||
m_supportsRichtext = caps.contains(QLatin1String("body-markup"));
|
||||
connect(this, &SnoreSecondaryBackend::enabledChanged, [this](bool enabled) {
|
||||
if (enabled) {
|
||||
connect(m_interface, &org::freedesktop::Notifications::ActionInvoked, this, &FreedesktopBackend::slotActionInvoked);
|
||||
|
@ -24,18 +31,6 @@ FreedesktopBackend::FreedesktopBackend()
|
|||
});
|
||||
}
|
||||
|
||||
void FreedesktopBackend::load()
|
||||
{
|
||||
m_interface = new org::freedesktop::Notifications(QLatin1String("org.freedesktop.Notifications"),
|
||||
QLatin1String("/org/freedesktop/Notifications"),
|
||||
QDBusConnection::sessionBus(), this);
|
||||
QDBusPendingReply<QStringList> reply = m_interface->GetCapabilities();
|
||||
reply.waitForFinished();
|
||||
QStringList caps = reply.value();
|
||||
m_supportsRichtext = caps.contains(QLatin1String("body-markup"));
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
bool FreedesktopBackend::canCloseNotification() const
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -22,9 +22,6 @@ public Q_SLOTS:
|
|||
void slotActionInvoked(const uint &id, const QString &actionID);
|
||||
void slotNotificationClosed(const uint &id, const uint &reason);
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
org::freedesktop::Notifications *m_interface;
|
||||
QHash<uint, Snore::Notification> m_dbusIdMap;
|
||||
|
|
|
@ -63,9 +63,13 @@ GrowlBackend::~GrowlBackend()
|
|||
Growl::shutdown();
|
||||
}
|
||||
|
||||
void GrowlBackend::load()
|
||||
bool GrowlBackend::isReady()
|
||||
{
|
||||
emit loadedStateChanged(Growl::isRunning(GROWL_TCP, settingsValue(QLatin1String("Host")).toString().toUtf8().constData()));
|
||||
bool running = Growl::isRunning(GROWL_TCP, settingsValue(QLatin1String("Host")).toString().toUtf8().constData());
|
||||
if (!running) {
|
||||
setErrorString(tr("Growl is not running."));
|
||||
}
|
||||
return running;
|
||||
}
|
||||
|
||||
void GrowlBackend::slotRegisterApplication(const Application &application)
|
||||
|
|
|
@ -33,6 +33,7 @@ public:
|
|||
GrowlBackend();
|
||||
~GrowlBackend();
|
||||
Snore::PluginSettingsWidget *settingsWidget() override;
|
||||
bool isReady() override;
|
||||
|
||||
protected:
|
||||
void setDefaultSettings() override;
|
||||
|
@ -47,9 +48,6 @@ public Q_SLOTS:
|
|||
void slotDeregisterApplication(const Snore::Application &application) override;
|
||||
void slotNotify(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
};
|
||||
|
||||
#endif // GROWL_BACKEND_H
|
||||
|
|
|
@ -33,9 +33,6 @@ public:
|
|||
|
||||
public Q_SLOTS:
|
||||
void slotNotify(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
};
|
||||
|
||||
#endif // OSXNOTIFICATIONCENTER_H
|
||||
|
|
|
@ -107,9 +107,4 @@ void OSXNotificationCenter::slotNotify(Snore::Notification notification)
|
|||
slotNotificationDisplayed(notification);
|
||||
}
|
||||
|
||||
void OSXNotificationCenter::load()
|
||||
{
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -120,6 +120,7 @@ private:
|
|||
SnarlBackend::SnarlBackend():
|
||||
m_eventLoop(new SnarlBackend::SnarlWidget(this))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SnarlBackend::~SnarlBackend()
|
||||
|
@ -127,14 +128,6 @@ SnarlBackend::~SnarlBackend()
|
|||
delete m_eventLoop;
|
||||
}
|
||||
|
||||
void SnarlBackend::load()
|
||||
{
|
||||
|
||||
SnarlInterface *snarlInterface = new SnarlInterface();
|
||||
emit loadedStateChanged(snarlInterface->IsSnarlRunning());
|
||||
delete snarlInterface;
|
||||
}
|
||||
|
||||
PluginSettingsWidget *SnarlBackend::settingsWidget()
|
||||
{
|
||||
return new SnarlSettings(this);
|
||||
|
@ -150,6 +143,15 @@ bool SnarlBackend::canUpdateNotification() const
|
|||
return true;
|
||||
}
|
||||
|
||||
bool SnarlBackend::isReady()
|
||||
{
|
||||
bool running = SnarlInterface::IsSnarlRunning();
|
||||
if (!running) {
|
||||
setErrorString(tr("Snarl is not running."));
|
||||
}
|
||||
return running;
|
||||
}
|
||||
|
||||
void SnarlBackend::setDefaultSettings()
|
||||
{
|
||||
|
||||
|
|
|
@ -34,6 +34,8 @@ public:
|
|||
virtual bool canCloseNotification() const override;
|
||||
virtual bool canUpdateNotification() const override;
|
||||
|
||||
bool isReady() override;
|
||||
|
||||
protected:
|
||||
void setDefaultSettings() override;
|
||||
|
||||
|
@ -48,9 +50,6 @@ public Q_SLOTS:
|
|||
void slotNotify(Snore::Notification notification);
|
||||
void slotCloseNotification(Snore::Notification notification);
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
QHash<LONG32, Snore::Notification> m_idMap;
|
||||
|
||||
|
|
|
@ -30,6 +30,23 @@ SnoreNotifier::SnoreNotifier():
|
|||
m_widgets(3),
|
||||
m_timer(new QTimer(this))
|
||||
{
|
||||
for (int i = 0; i < m_widgets.size(); ++i) {
|
||||
NotifyWidget *w = new NotifyWidget(i, this);
|
||||
m_widgets[i] = w;
|
||||
connect(w, &NotifyWidget::dismissed, [this, w]() {
|
||||
Notification notification = w->notification();
|
||||
closeNotification(notification, Notification::DISMISSED);
|
||||
slotCloseNotification(notification);
|
||||
});
|
||||
|
||||
connect(w, &NotifyWidget::invoked, [this, w]() {
|
||||
Notification notification = w->notification();
|
||||
slotNotificationActionInvoked(notification);
|
||||
closeNotification(notification, Notification::ACTIVATED);
|
||||
slotCloseNotification(notification);
|
||||
});
|
||||
}
|
||||
|
||||
m_timer->setInterval(500);
|
||||
connect(m_timer, &QTimer::timeout, [this]() {
|
||||
if (m_queue.isEmpty()) {
|
||||
|
@ -105,27 +122,6 @@ void SnoreNotifier::slotCloseNotification(Snore::Notification notification)
|
|||
//the timer will show the next
|
||||
}
|
||||
|
||||
void SnoreNotifier::load()
|
||||
{
|
||||
for (int i = 0; i < m_widgets.size(); ++i) {
|
||||
NotifyWidget *w = new NotifyWidget(i, this);
|
||||
m_widgets[i] = w;
|
||||
connect(w, &NotifyWidget::dismissed, [this, w]() {
|
||||
Notification notification = w->notification();
|
||||
closeNotification(notification, Notification::DISMISSED);
|
||||
slotCloseNotification(notification);
|
||||
});
|
||||
|
||||
connect(w, &NotifyWidget::invoked, [this, w]() {
|
||||
Notification notification = w->notification();
|
||||
slotNotificationActionInvoked(notification);
|
||||
closeNotification(notification, Notification::ACTIVATED);
|
||||
slotCloseNotification(notification);
|
||||
});
|
||||
}
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
bool SnoreNotifier::canCloseNotification() const
|
||||
{
|
||||
return true;
|
||||
|
|
|
@ -44,11 +44,7 @@ public Q_SLOTS:
|
|||
virtual void slotNotify(Snore::Notification notification) override;
|
||||
virtual void slotCloseNotification(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
|
||||
QList<Snore::Notification> m_queue;
|
||||
QVector<NotifyWidget *> m_widgets;
|
||||
QTimer *m_timer;
|
||||
|
|
|
@ -14,13 +14,13 @@
|
|||
|
||||
using namespace Snore;
|
||||
|
||||
void SnoreToast::load()
|
||||
bool SnoreToast::isReady()
|
||||
{
|
||||
if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS8) {
|
||||
snoreDebug(SNORE_DEBUG) << "SnoreToast does not work on windows" << QSysInfo::windowsVersion();
|
||||
emit loadedStateChanged(false);
|
||||
setErrorString(name() + tr(" needs at least Windows 8 to run."));
|
||||
return false;
|
||||
}
|
||||
emit loadedStateChanged(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SnoreToast::canCloseNotification() const
|
||||
|
@ -129,12 +129,11 @@ QProcess *SnoreToast::createProcess(Notification noti)
|
|||
});
|
||||
|
||||
connect(p, static_cast<void (QProcess::*)(QProcess::ProcessError)>(&QProcess::error), [this, p, noti](QProcess::ProcessError) {
|
||||
snoreDebug(SNORE_WARNING) << "SnoreToasts seems to be broken:" << p->errorString();
|
||||
setErrorString(name() + tr("encoutered an error: ") + p->errorString());
|
||||
snoreDebug(SNORE_DEBUG) << p->readAll();
|
||||
if (noti.isValid()) {
|
||||
closeNotification(noti, Notification::NONE);
|
||||
}
|
||||
emit loadedStateChanged(false);
|
||||
p->deleteLater();
|
||||
});
|
||||
connect(qApp, &QApplication::aboutToQuit, p, &QProcess::kill);
|
||||
|
|
|
@ -15,14 +15,12 @@ public:
|
|||
|
||||
virtual bool canCloseNotification() const override;
|
||||
|
||||
bool isReady() override;
|
||||
public Q_SLOTS:
|
||||
void slotNotify(Snore::Notification notification) override;
|
||||
void slotRegisterApplication(const Snore::Application &application) override;
|
||||
void slotCloseNotification(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
QString appId(const Snore::Application &application);
|
||||
|
||||
|
|
|
@ -6,10 +6,11 @@
|
|||
#include <QSystemTrayIcon>
|
||||
using namespace Snore;
|
||||
|
||||
void TrayIconNotifer::load()
|
||||
TrayIconNotifer::TrayIconNotifer()
|
||||
{
|
||||
connect(this, &TrayIconNotifer::enabledChanged, [this](bool) {
|
||||
m_currentlyDisplaying = false;
|
||||
emit loadedStateChanged(true);
|
||||
});
|
||||
}
|
||||
|
||||
bool TrayIconNotifer::canCloseNotification() const
|
||||
|
|
|
@ -15,7 +15,7 @@ class TrayIconNotifer: public Snore::SnoreBackend
|
|||
Q_INTERFACES(Snore::SnoreBackend)
|
||||
Q_PLUGIN_METADATA(IID "org.Snore.NotificationBackend/1.0" FILE "plugin.json")
|
||||
public:
|
||||
TrayIconNotifer() = default;
|
||||
TrayIconNotifer();
|
||||
~TrayIconNotifer() = default;
|
||||
|
||||
virtual bool canCloseNotification() const override;
|
||||
|
@ -26,9 +26,6 @@ public Q_SLOTS:
|
|||
void slotRegisterApplication(const Snore::Application &application) override;
|
||||
void slotDeregisterApplication(const Snore::Application &application) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
QSystemTrayIcon *trayIcon(const Snore::Application &app);
|
||||
QList<Snore::Notification > m_notificationQue;
|
||||
|
|
|
@ -37,12 +37,10 @@ FreedesktopFrontend::FreedesktopFrontend()
|
|||
QDBusConnection dbus = QDBusConnection::sessionBus();
|
||||
if (dbus.registerService(QLatin1String("org.freedesktop.Notifications"))) {
|
||||
if (!dbus.registerObject(QLatin1String("/org/freedesktop/Notifications"), this)) {
|
||||
snoreDebug(SNORE_WARNING) << "Failed to initialize" << name() << "failed to register object";
|
||||
emit loadedStateChanged(false);
|
||||
setErrorString(tr("Failed to register dbus object."));
|
||||
}
|
||||
} else {
|
||||
snoreDebug(SNORE_WARNING) << "Failed to initialize" << name() << "failed to register service";
|
||||
emit loadedStateChanged(false);
|
||||
setErrorString(tr("Failed to register dbus service."));
|
||||
}
|
||||
} else {
|
||||
QDBusConnection dbus = QDBusConnection::sessionBus();
|
||||
|
@ -54,14 +52,8 @@ FreedesktopFrontend::FreedesktopFrontend()
|
|||
});
|
||||
}
|
||||
|
||||
void FreedesktopFrontend::load()
|
||||
{
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
void FreedesktopFrontend::slotActionInvoked(Notification notification)
|
||||
{
|
||||
|
||||
if (notification.isActiveIn(this)) {
|
||||
if (notification.actionInvoked().isValid()) {
|
||||
emit ActionInvoked(notification.id(), QString::number(notification.actionInvoked().id()));
|
||||
|
|
|
@ -46,9 +46,6 @@ public Q_SLOTS:
|
|||
void slotActionInvoked(Snore::Notification notification) override;
|
||||
void slotNotificationClosed(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
Snore::Alert m_alert;
|
||||
NotificationsAdaptor *m_adaptor;
|
||||
|
|
|
@ -51,11 +51,6 @@ PushoverFrontend::PushoverFrontend()
|
|||
});
|
||||
}
|
||||
|
||||
void PushoverFrontend::load()
|
||||
{
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
PluginSettingsWidget *PushoverFrontend::settingsWidget()
|
||||
{
|
||||
return new PushoverSettings(this);
|
||||
|
|
|
@ -49,9 +49,6 @@ protected:
|
|||
public Q_SLOTS:
|
||||
void slotActionInvoked(Snore::Notification notification);
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
Q_SIGNALS:
|
||||
void loggedInChanged(bool isLoggedIn);
|
||||
void error(QString error);
|
||||
|
|
|
@ -32,9 +32,14 @@ SnarlNetworkFrontend::SnarlNetworkFrontend():
|
|||
{
|
||||
connect(this, &SnarlNetworkFrontend::enabledChanged, [this](bool enabled) {
|
||||
if (enabled) {
|
||||
tcpServer = new QTcpServer(this);
|
||||
if (!tcpServer->listen(QHostAddress::Any, port)) {
|
||||
setErrorString(tr("The port is already used by a different application."));
|
||||
return;
|
||||
}
|
||||
connect(tcpServer, &QTcpServer::newConnection, this, SnarlNetworkFrontend::handleConnection);
|
||||
} else {
|
||||
disconnect(tcpServer, &QTcpServer::newConnection, this, SnarlNetworkFrontend::handleConnection);
|
||||
tcpServer->deleteLater();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -44,18 +49,6 @@ SnarlNetworkFrontend::~SnarlNetworkFrontend()
|
|||
delete parser;
|
||||
}
|
||||
|
||||
void SnarlNetworkFrontend::load()
|
||||
{
|
||||
tcpServer = new QTcpServer(this);
|
||||
if (!tcpServer->listen(QHostAddress::Any, port)) {
|
||||
snoreDebug(SNORE_DEBUG) << "The port is already used";
|
||||
emit loadedStateChanged(false);
|
||||
} else {
|
||||
std::cout << "The Snarl Network Protokoll is developed for Snarl <http://www.fullphat.net/>" << std::endl;
|
||||
}
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
void SnarlNetworkFrontend::slotActionInvoked(Snore::Notification notification)
|
||||
{
|
||||
|
||||
|
|
|
@ -43,7 +43,6 @@ public Q_SLOTS:
|
|||
void slotNotificationClosed(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
void handleConnection();
|
||||
void handleMessages();
|
||||
|
||||
|
|
|
@ -59,11 +59,6 @@ void NotifyMyAndroid::slotNotify(Notification notification)
|
|||
|
||||
}
|
||||
|
||||
void NotifyMyAndroid::load()
|
||||
{
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
PluginSettingsWidget *NotifyMyAndroid::settingsWidget()
|
||||
{
|
||||
return new NotifyMyAndroidSettings(this);
|
||||
|
|
|
@ -39,9 +39,6 @@ protected:
|
|||
public Q_SLOTS:
|
||||
void slotNotify(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
QNetworkAccessManager m_manager;
|
||||
|
||||
|
|
|
@ -120,11 +120,6 @@ void Pushover::slotNotify(Notification notification)
|
|||
|
||||
}
|
||||
|
||||
void Pushover::load()
|
||||
{
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
PluginSettingsWidget *Pushover::settingsWidget()
|
||||
{
|
||||
return new PushoverSettings(this);
|
||||
|
|
|
@ -39,9 +39,6 @@ protected:
|
|||
public Q_SLOTS:
|
||||
void slotNotify(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
QNetworkAccessManager m_manager;
|
||||
|
||||
|
|
|
@ -34,12 +34,6 @@ Sound::Sound():
|
|||
});
|
||||
}
|
||||
|
||||
void Sound::load()
|
||||
{
|
||||
m_player->setVolume(settingsValue(QLatin1String("Volume")).toInt());
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
PluginSettingsWidget *Sound::settingsWidget()
|
||||
{
|
||||
return new SoundSettings(this);
|
||||
|
@ -56,6 +50,7 @@ void Sound::slotNotificationDisplayed(Snore::Notification notification)
|
|||
if (notification.hints().value("silent").toBool()) {
|
||||
return;
|
||||
}
|
||||
m_player->setVolume(settingsValue(QLatin1String("Volume")).toInt());
|
||||
|
||||
QString sound = notification.hints().value("sound").toString();
|
||||
if (sound.isEmpty()) {
|
||||
|
|
|
@ -39,9 +39,6 @@ protected:
|
|||
public Q_SLOTS:
|
||||
void slotNotificationDisplayed(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
QMediaPlayer *m_player;
|
||||
};
|
||||
|
|
|
@ -77,11 +77,6 @@ void Toasty::slotNotify(Notification notification)
|
|||
|
||||
}
|
||||
|
||||
void Toasty::load()
|
||||
{
|
||||
emit loadedStateChanged(true);
|
||||
}
|
||||
|
||||
PluginSettingsWidget *Toasty::settingsWidget()
|
||||
{
|
||||
return new ToastySettings(this);
|
||||
|
|
|
@ -39,9 +39,6 @@ protected:
|
|||
public Q_SLOTS:
|
||||
void slotNotify(Snore::Notification notification) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
void load() override;
|
||||
|
||||
private:
|
||||
QNetworkAccessManager m_manager;
|
||||
|
||||
|
|
Loading…
Reference in New Issue