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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
/*
Copyright 2014 Canonical Ltd.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License, version 3
as published by the Free Software Foundation.
This program 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 this program. If not, see
<http://www.gnu.org/licenses/>.
*/
#include "pushclient.h"
#include <QtDBus/QDBusConnection>
#include <QtDBus/QDBusMessage>
#include <QtDBus/QDBusPendingCall>
#include <QtDBus/QDBusPendingReply>
#include <QTimer>
#define PUSH_SERVICE "com.ubuntu.PushNotifications"
#define POSTAL_SERVICE "com.ubuntu.Postal"
#define PUSH_PATH "/com/ubuntu/PushNotifications"
#define POSTAL_PATH "/com/ubuntu/Postal"
#define PUSH_IFACE "com.ubuntu.PushNotifications"
#define POSTAL_IFACE "com.ubuntu.Postal"
PushClient::PushClient(QObject *parent) : QObject(parent) {
}
void PushClient::registerApp(const QString &appId) {
pkgname = appId.split("_").at(0);
pkgname = pkgname.replace(".","_2e").replace("-","_2d");
Q_EMIT appIdChanged(appId);
}
QString PushClient::getAppId() {
return appId;
}
QString PushClient::getToken() {
return token;
}
void PushClient::emitError() {
Q_EMIT error(status);
}
void PushClient::clearPersistent(const QStringList &tags) {
QDBusConnection bus = QDBusConnection::sessionBus();
QString path(POSTAL_PATH);
path += "/" + pkgname;
QDBusMessage message = QDBusMessage::createMethodCall(
POSTAL_SERVICE, path, POSTAL_IFACE, "ClearPersistent");
message << this->appId;
for (int i = 0; i < tags.size(); ++i) {
message << tags.at(i);
}
bus.send(message);
QDBusPendingCall pcall = bus.asyncCall(message);
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pcall, this);
connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
this, SLOT(clearPersistentFinished(QDBusPendingCallWatcher*)));
}
void PushClient::clearPersistentFinished(QDBusPendingCallWatcher *watcher) {
QDBusPendingReply<void> reply = *watcher;
if (reply.isError()) {
Q_EMIT error(reply.error().message());
} else {
Q_EMIT persistentCleared();
}
watcher->deleteLater();
}
void PushClient::setCount(int count) {
QDBusConnection bus = QDBusConnection::sessionBus();
QString path(POSTAL_PATH);
bool visible = count != 0;
counter = count;
path += "/" + pkgname;
QDBusMessage message = QDBusMessage::createMethodCall(POSTAL_SERVICE, path, POSTAL_IFACE, "setCounter");
message << this->appId << count << visible;
QDBusPendingCall pcall = bus.asyncCall(message);
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pcall, this);
connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
this, SLOT(setCounterFinished(QDBusPendingCallWatcher*)));
}
void PushClient::setCounterFinished(QDBusPendingCallWatcher *watcher) {
QDBusPendingReply<void> reply = *watcher;
if (reply.isError()) {
Q_EMIT error(reply.error().message());
}
else {
Q_EMIT countChanged(counter);
}
watcher->deleteLater();
}
int PushClient::getCount() {
return counter;
}
void PushClient::setAppId(const QString &appId) {
this->appId = appId;
}
|