~ci-train-bot/telepathy-ofono/telepathy-ofono-ubuntu-yakkety-landing-064

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
}