82.1.1
by Gustavo Pichorim Boiko
Expose the emergency numbers via DBus to clients. |
1 |
/**
|
2 |
* Copyright (C) 2013 Canonical, Ltd.
|
|
3 |
*
|
|
4 |
* This program is free software: you can redistribute it and/or modify it under
|
|
5 |
* the terms of the GNU Lesser General Public License version 3, as published by
|
|
6 |
* the Free Software Foundation.
|
|
7 |
*
|
|
8 |
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
9 |
* ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
|
|
10 |
* SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
11 |
* Lesser General Public License for more details.
|
|
12 |
*
|
|
13 |
* You should have received a copy of the GNU Lesser General Public License
|
|
14 |
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
15 |
*
|
|
16 |
* Authors: Tiago Salem Herrmann <tiago.herrmann@canonical.com>
|
|
17 |
* Gustavo Pichorim Boiko <gustavo.boiko@gmail.com>
|
|
18 |
*/
|
|
19 |
||
20 |
#include <QDebug> |
|
21 |
||
22 |
#include <TelepathyQt/Constants> |
|
23 |
#include <TelepathyQt/DBusObject> |
|
24 |
||
25 |
#include "emergencymodeiface.h" |
|
26 |
||
27 |
BaseConnectionEmergencyModeInterface::Adaptee::Adaptee(BaseConnectionEmergencyModeInterface *interface) |
|
28 |
: QObject(interface), |
|
29 |
mInterface(interface) |
|
30 |
{
|
|
31 |
}
|
|
32 |
||
33 |
||
34 |
struct TP_QT_NO_EXPORT BaseConnectionEmergencyModeInterface::Private { |
|
35 |
Private(BaseConnectionEmergencyModeInterface *parent) |
|
36 |
: adaptee(new BaseConnectionEmergencyModeInterface::Adaptee(parent)) { |
|
37 |
}
|
|
38 |
EmergencyNumbersCallback emergencyNumbersCB; |
|
39 |
BaseConnectionEmergencyModeInterface::Adaptee *adaptee; |
|
124.1.1
by Tiago Salem Herrmann
add a fakeEmergencyNumber property for testing |
40 |
QString fakeEmergencyNumber; |
149.4.7
by Tiago Salem Herrmann
Add country code support in the emergency mode interface |
41 |
QString countryCode; |
82.1.1
by Gustavo Pichorim Boiko
Expose the emergency numbers via DBus to clients. |
42 |
};
|
43 |
||
44 |
BaseConnectionEmergencyModeInterface::Adaptee::~Adaptee() |
|
45 |
{
|
|
46 |
}
|
|
47 |
||
48 |
void BaseConnectionEmergencyModeInterface::Adaptee::emergencyNumbers(const ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbersContextPtr &context) |
|
49 |
{
|
|
50 |
if (!mInterface->mPriv->emergencyNumbersCB.isValid()) { |
|
51 |
context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); |
|
52 |
return; |
|
53 |
}
|
|
54 |
Tp::DBusError error; |
|
55 |
QStringList numbers = mInterface->mPriv->emergencyNumbersCB(&error); |
|
56 |
if (error.isValid()) { |
|
57 |
context->setFinishedWithError(error.name(), error.message()); |
|
58 |
return; |
|
59 |
}
|
|
124.1.1
by Tiago Salem Herrmann
add a fakeEmergencyNumber property for testing |
60 |
if (mInterface->mPriv->fakeEmergencyNumber.isEmpty()) { |
61 |
context->setFinished(numbers); |
|
62 |
} else { |
|
63 |
context->setFinished(QStringList() << numbers << mInterface->mPriv->fakeEmergencyNumber); |
|
64 |
}
|
|
82.1.1
by Gustavo Pichorim Boiko
Expose the emergency numbers via DBus to clients. |
65 |
}
|
66 |
||
149.4.7
by Tiago Salem Herrmann
Add country code support in the emergency mode interface |
67 |
void BaseConnectionEmergencyModeInterface::Adaptee::countryCode(const ConnectionInterfaceEmergencyModeAdaptor::CountryCodeContextPtr &context) |
68 |
{
|
|
69 |
context->setFinished(mInterface->mPriv->countryCode); |
|
70 |
}
|
|
71 |
||
82.1.1
by Gustavo Pichorim Boiko
Expose the emergency numbers via DBus to clients. |
72 |
BaseConnectionEmergencyModeInterface::BaseConnectionEmergencyModeInterface() |
73 |
: AbstractConnectionInterface(TP_QT_IFACE_CONNECTION_EMERGENCYMODE), |
|
74 |
mPriv(new Private(this)) |
|
75 |
{
|
|
76 |
}
|
|
77 |
||
78 |
BaseConnectionEmergencyModeInterface::~BaseConnectionEmergencyModeInterface() |
|
79 |
{
|
|
80 |
delete mPriv; |
|
81 |
}
|
|
82 |
||
83 |
void BaseConnectionEmergencyModeInterface::setEmergencyNumbersCallback(const EmergencyNumbersCallback &cb) |
|
84 |
{
|
|
85 |
mPriv->emergencyNumbersCB = cb; |
|
86 |
}
|
|
87 |
||
88 |
void BaseConnectionEmergencyModeInterface::setEmergencyNumbers(const QStringList &numbers) |
|
89 |
{
|
|
124.1.1
by Tiago Salem Herrmann
add a fakeEmergencyNumber property for testing |
90 |
QStringList finalEmergencyList(numbers); |
91 |
||
92 |
if (!mPriv->fakeEmergencyNumber.isEmpty()) { |
|
93 |
finalEmergencyList << mPriv->fakeEmergencyNumber; |
|
94 |
}
|
|
95 |
||
96 |
Q_EMIT mPriv->adaptee->emergencyNumbersChanged(finalEmergencyList); |
|
97 |
}
|
|
98 |
||
149.4.7
by Tiago Salem Herrmann
Add country code support in the emergency mode interface |
99 |
void BaseConnectionEmergencyModeInterface::setCountryCode(const QString &countryCode) |
100 |
{
|
|
149.4.13
by Tiago Salem Herrmann
Don't notify the same country code twice |
101 |
if (mPriv->countryCode == countryCode) { |
102 |
return; |
|
103 |
}
|
|
149.4.7
by Tiago Salem Herrmann
Add country code support in the emergency mode interface |
104 |
mPriv->countryCode = countryCode; |
105 |
Q_EMIT mPriv->adaptee->countryCodeChanged(mPriv->countryCode); |
|
106 |
}
|
|
107 |
||
124.1.1
by Tiago Salem Herrmann
add a fakeEmergencyNumber property for testing |
108 |
void BaseConnectionEmergencyModeInterface::setFakeEmergencyNumber(const QString &fakeEmergencyNumber) |
109 |
{
|
|
110 |
mPriv->fakeEmergencyNumber = fakeEmergencyNumber; |
|
82.1.1
by Gustavo Pichorim Boiko
Expose the emergency numbers via DBus to clients. |
111 |
}
|
112 |
||
113 |
QVariantMap BaseConnectionEmergencyModeInterface::immutableProperties() const |
|
114 |
{
|
|
115 |
QVariantMap map; |
|
116 |
return map; |
|
117 |
}
|
|
118 |
||
119 |
void BaseConnectionEmergencyModeInterface::createAdaptor() |
|
120 |
{
|
|
121 |
(void) new ConnectionInterfaceEmergencyModeAdaptor(dbusObject()->dbusConnection(), |
|
122 |
mPriv->adaptee, dbusObject()); |
|
123 |
}
|
|
124 |
||
125 |
||
126 |
ConnectionInterfaceEmergencyModeAdaptor::ConnectionInterfaceEmergencyModeAdaptor(const QDBusConnection& bus, QObject* adaptee, QObject* parent) |
|
127 |
: Tp::AbstractAdaptor(bus, adaptee, parent) |
|
128 |
{
|
|
129 |
connect(adaptee, SIGNAL(emergencyNumbersChanged(QStringList)), SIGNAL(EmergencyNumbersChanged(QStringList))); |
|
149.4.7
by Tiago Salem Herrmann
Add country code support in the emergency mode interface |
130 |
connect(adaptee, SIGNAL(countryCodeChanged(QString)), SIGNAL(CountryCodeChanged(QString))); |
82.1.1
by Gustavo Pichorim Boiko
Expose the emergency numbers via DBus to clients. |
131 |
}
|
132 |
||
133 |
ConnectionInterfaceEmergencyModeAdaptor::~ConnectionInterfaceEmergencyModeAdaptor() |
|
134 |
{
|
|
135 |
}
|
|
136 |
||
137 |
QStringList ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbers(const QDBusMessage& dbusMessage) |
|
138 |
{
|
|
139 |
if (!adaptee()->metaObject()->indexOfMethod("emergencyNumbers(ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbersContextPtr)") == -1) { |
|
140 |
dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); |
|
141 |
return QStringList(); |
|
142 |
}
|
|
143 |
||
144 |
EmergencyNumbersContextPtr ctx = EmergencyNumbersContextPtr( |
|
145 |
new Tp::MethodInvocationContext< QStringList >(dbusConnection(), dbusMessage)); |
|
146 |
QMetaObject::invokeMethod(adaptee(), "emergencyNumbers", |
|
147 |
Q_ARG(ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbersContextPtr, ctx)); |
|
148 |
return QStringList(); |
|
149 |
}
|
|
149.4.7
by Tiago Salem Herrmann
Add country code support in the emergency mode interface |
150 |
|
151 |
QString ConnectionInterfaceEmergencyModeAdaptor::CountryCode(const QDBusMessage& dbusMessage) |
|
152 |
{
|
|
153 |
if (!adaptee()->metaObject()->indexOfMethod("countryCode(ConnectionInterfaceEmergencyModeAdaptor::CountryCodeContextPtr)") == -1) { |
|
154 |
dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); |
|
155 |
return QString(); |
|
156 |
}
|
|
157 |
||
158 |
CountryCodeContextPtr ctx = CountryCodeContextPtr( |
|
159 |
new Tp::MethodInvocationContext< QString >(dbusConnection(), dbusMessage)); |
|
160 |
QMetaObject::invokeMethod(adaptee(), "countryCode", |
|
161 |
Q_ARG(ConnectionInterfaceEmergencyModeAdaptor::CountryCodeContextPtr, ctx)); |
|
162 |
return QString(); |
|
163 |
}
|