summaryrefslogtreecommitdiff
path: root/sowatchd/daemon.cpp
blob: 3cbfb64d9b69302c9d6940074be5e6fec2ca5464 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <QtCore/QDebug>
#include <sowatch.h>
#include "daemon.h"

using namespace sowatch;

Daemon::Daemon(QObject *parent) :
	QObject(parent),
	_registry(Registry::registry())
{
	initWatches();
}

void Daemon::initWatches()
{
	QSettings settings;
	int size = settings.beginReadArray("watches");

	for (int i = 0; i < size; i++) {
		settings.setArrayIndex(i);
		QString driver = settings.value("driver").toString().toLower();
		WatchPluginInterface *plugin = _registry->getWatchPlugin(driver);
		if (plugin) {
			Watch *watch = plugin->getWatch(driver, settings, this);
			if (watch) {
				initWatch(watch, settings);
			} else {
				qWarning() << "Driver" << driver << "refused to getWatch";
			}
		} else {
			qWarning() << "Invalid driver" << driver;
		}
	}

	settings.endArray();
	qDebug() << "handling" << _servers.size() << "watches";
}

void Daemon::initWatch(Watch* watch, QSettings& settings)
{
	int size;

	// Create the server
	WatchServer* server = new WatchServer(watch, this);
	_servers.append(server);

	// Configure the server
	server->setNextWatchletButton(settings.value("nextWatchletButton").toString());

	// Initialize providers
	size = settings.beginReadArray("notifications");
	for (int i = 0; i < size; i++) {
		settings.setArrayIndex(i);
		QString id = settings.value("provider").toString().toLower();
		NotificationPluginInterface *plugin = _registry->getNotificationPlugin(id);
		if (plugin) {
			NotificationProvider *provider = plugin->getProvider(id, settings, server);
			server->addProvider(provider);
		} else {
			qWarning() << "Unknown notification provider" << id;
		}
	}
	settings.endArray();

	// Initialize watchlets
	size = settings.beginReadArray("watchlets");
	for (int i = 0; i < size; i++) {
		settings.setArrayIndex(i);
		QString id = settings.value("id").toString().toLower();
		WatchletPluginInterface *plugin = _registry->getWatchletPlugin(id);
		if (plugin) {
			plugin->getWatchlet(id, settings, server);
			// Watchlets are associated to server via parent-child relationship.
		} else {
			qWarning() << "Unknown watchlet" << id;
		}
	}
	settings.endArray();
}