~unity-team/unity8/ota9.5

« back to all changes in this revision

Viewing changes to plugins/Unity/peoplepreviewdata.cpp

  • Committer: Michał Sawicz
  • Date: 2013-06-05 22:03:08 UTC
  • Revision ID: michal.sawicz@canonical.com-20130605220308-yny8fv3futtr04fg
Inital unity8 commit.

Previous history can be found at https://code.launchpad.net/~unity-team/unity/phablet

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2012 Canonical, Ltd.
 
3
 *
 
4
 * Authors:
 
5
 *  Guenter Schwann <guenter.schwann@canonical.com>
 
6
 *
 
7
 * This program is free software; you can redistribute it and/or modify
 
8
 * it under the terms of the GNU General Public License as published by
 
9
 * the Free Software Foundation; version 3.
 
10
 *
 
11
 * This program is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 * GNU General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
18
 */
 
19
 
 
20
#include "peoplepreviewdata.h"
 
21
 
 
22
#include <QDebug>
 
23
 
 
24
#include "lens.h"
 
25
 
 
26
static void phoneAppend(QQmlListProperty<PeoplePhoneData> *property, PeoplePhoneData *val)
 
27
{
 
28
    Q_UNUSED(val);
 
29
    Q_UNUSED(property);
 
30
}
 
31
static PeoplePhoneData *phoneAt(QQmlListProperty<PeoplePhoneData> *property, int index)
 
32
{
 
33
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
34
    return d->phoneNumberList().at(index);
 
35
}
 
36
static int phoneCount(QQmlListProperty<PeoplePhoneData> *property)
 
37
{
 
38
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
39
    return d->phoneNumberList().count();
 
40
}
 
41
static void phoneClear(QQmlListProperty<PeoplePhoneData> *property)
 
42
{
 
43
    Q_UNUSED(property);
 
44
}
 
45
 
 
46
static void emailAppend(QQmlListProperty<PeopleAddressData> *property, PeopleAddressData *val)
 
47
{
 
48
    Q_UNUSED(val);
 
49
    Q_UNUSED(property);
 
50
}
 
51
static PeopleAddressData *emailAt(QQmlListProperty<PeopleAddressData> *property, int index)
 
52
{
 
53
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
54
    return d->emailAddressesList().at(index);
 
55
}
 
56
static int emailCount(QQmlListProperty<PeopleAddressData> *property)
 
57
{
 
58
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
59
    return d->emailAddressesList().count();
 
60
}
 
61
static void emailClear(QQmlListProperty<PeopleAddressData> *property)
 
62
{
 
63
    Q_UNUSED(property);
 
64
}
 
65
 
 
66
static void imAppend(QQmlListProperty<PeopleIMData> *property, PeopleIMData *val)
 
67
{
 
68
    Q_UNUSED(val);
 
69
    Q_UNUSED(property);
 
70
}
 
71
static PeopleIMData *imAt(QQmlListProperty<PeopleIMData> *property, int index)
 
72
{
 
73
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
74
    return d->imAccountsList().at(index);
 
75
}
 
76
static int imCount(QQmlListProperty<PeopleIMData> *property)
 
77
{
 
78
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
79
    return d->imAccountsList().count();
 
80
}
 
81
static void imClear(QQmlListProperty<PeopleIMData> *property)
 
82
{
 
83
    Q_UNUSED(property);
 
84
}
 
85
 
 
86
static void addressAppend(QQmlListProperty<PeopleAddressData> *property, PeopleAddressData *val)
 
87
{
 
88
    Q_UNUSED(val);
 
89
    Q_UNUSED(property);
 
90
}
 
91
static PeopleAddressData *addressAt(QQmlListProperty<PeopleAddressData> *property, int index)
 
92
{
 
93
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
94
    return d->addressesList().at(index);
 
95
}
 
96
static int addressCount(QQmlListProperty<PeopleAddressData> *property)
 
97
{
 
98
    PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
 
99
    return d->addressesList().count();
 
100
}
 
101
static void addressClear(QQmlListProperty<PeopleAddressData> *property)
 
102
{
 
103
    Q_UNUSED(property);
 
104
}
 
105
 
 
106
 
 
107
using namespace unity;
 
108
 
 
109
PeoplePreviewData::PeoplePreviewData(QObject *parent)
 
110
:   QObject(parent)
 
111
,   m_lens(0)
 
112
,   m_ready(false)
 
113
{
 
114
}
 
115
 
 
116
PeoplePreviewData::~PeoplePreviewData()
 
117
{
 
118
    clearData();
 
119
}
 
120
 
 
121
Lens *PeoplePreviewData::lens() const
 
122
{
 
123
    return m_lens;
 
124
}
 
125
 
 
126
void PeoplePreviewData::setLens(Lens *lens)
 
127
{
 
128
    if (lens == m_lens)
 
129
        return;
 
130
 
 
131
    setReady(false);
 
132
 
 
133
    if (m_lensConnection.connected())
 
134
       m_lensConnection.disconnect();
 
135
 
 
136
    m_lens = lens;
 
137
    m_lensConnection = m_lens->unityLens()->preview_ready.connect(
 
138
                sigc::mem_fun(this, &PeoplePreviewData::setUnityPreview));
 
139
    Q_EMIT lensChanged();
 
140
 
 
141
    if (!m_uri.isEmpty() && !m_lens)
 
142
        getPeoplePreview();
 
143
}
 
144
 
 
145
QString PeoplePreviewData::uri() const
 
146
{
 
147
    return m_uri;
 
148
}
 
149
 
 
150
void PeoplePreviewData::setUri(const QString &uri)
 
151
{
 
152
    if (uri == m_uri)
 
153
        return;
 
154
 
 
155
    setReady(false);
 
156
 
 
157
    m_uri = uri;
 
158
    Q_EMIT uriChanged();
 
159
    if (!m_uri.isEmpty() && m_lens)
 
160
        getPeoplePreview();
 
161
}
 
162
 
 
163
bool PeoplePreviewData::ready() const
 
164
{
 
165
    return m_ready;
 
166
}
 
167
 
 
168
void PeoplePreviewData::setReady(const bool &ready)
 
169
{
 
170
    if (ready == m_ready)
 
171
        return;
 
172
 
 
173
    m_ready = ready;
 
174
    Q_EMIT readyChanged();
 
175
}
 
176
 
 
177
QString PeoplePreviewData::renderName() const
 
178
{
 
179
    if (!m_unityPreview)
 
180
        return QLatin1String("");
 
181
 
 
182
    return QString::fromStdString(m_unityPreview->renderer_name());
 
183
}
 
184
 
 
185
QString PeoplePreviewData::title() const
 
186
{
 
187
    if (!m_unityPreview)
 
188
        return QLatin1String("");
 
189
 
 
190
    return QString::fromStdString(m_unityPreview->title());
 
191
}
 
192
 
 
193
QString PeoplePreviewData::subTitle() const
 
194
{
 
195
    if (!m_unityPreview)
 
196
        return QLatin1String("");
 
197
 
 
198
    return QString::fromStdString(m_unityPreview->subtitle());
 
199
}
 
200
 
 
201
QString PeoplePreviewData::description() const
 
202
{
 
203
    if (!m_unityPreview)
 
204
        return QLatin1String("");
 
205
 
 
206
    return QString::fromStdString(m_unityPreview->description());
 
207
}
 
208
 
 
209
QString PeoplePreviewData::imageSource() const
 
210
{
 
211
    if (!m_unityPreview)
 
212
        return QLatin1String("");
 
213
 
 
214
    return QString::fromStdString(m_unityPreview->image_source_uri());
 
215
}
 
216
 
 
217
QQmlListProperty<PeoplePhoneData> PeoplePreviewData::phoneNumbers()
 
218
{
 
219
    return QQmlListProperty<PeoplePhoneData> (this, this,
 
220
                                              phoneAppend,
 
221
                                              phoneCount,
 
222
                                              phoneAt,
 
223
                                              phoneClear);
 
224
}
 
225
 
 
226
QQmlListProperty<PeopleAddressData> PeoplePreviewData::emailAddresses()
 
227
{
 
228
    return QQmlListProperty<PeopleAddressData> (this, this,
 
229
                                              emailAppend,
 
230
                                              emailCount,
 
231
                                              emailAt,
 
232
                                              emailClear);
 
233
}
 
234
 
 
235
QQmlListProperty<PeopleIMData> PeoplePreviewData::imAccounts()
 
236
{
 
237
    return QQmlListProperty<PeopleIMData> (this, this,
 
238
                                              imAppend,
 
239
                                              imCount,
 
240
                                              imAt,
 
241
                                              imClear);
 
242
}
 
243
 
 
244
QString PeoplePreviewData::displayName() const
 
245
{
 
246
    if (!m_unityPreview)
 
247
        return QLatin1String("");
 
248
 
 
249
    return QString::fromStdString(m_unityPreview->display_name());
 
250
}
 
251
 
 
252
QString PeoplePreviewData::status() const
 
253
{
 
254
    if (!m_unityPreview)
 
255
        return QLatin1String("");
 
256
 
 
257
    return QString::fromStdString(m_unityPreview->status());
 
258
}
 
259
 
 
260
QString PeoplePreviewData::statusTime() const
 
261
{
 
262
    if (!m_unityPreview)
 
263
        return QLatin1String("");
 
264
 
 
265
    return QString::fromStdString(m_unityPreview->status_time());
 
266
}
 
267
 
 
268
QString PeoplePreviewData::statusService() const
 
269
{
 
270
    if (!m_unityPreview)
 
271
        return QLatin1String("");
 
272
 
 
273
    return QString::fromStdString(m_unityPreview->status_service());
 
274
}
 
275
 
 
276
QString PeoplePreviewData::statusServiceIcon() const
 
277
{
 
278
    if (!m_unityPreview)
 
279
        return QLatin1String("");
 
280
 
 
281
    glib::Object<GIcon> icon = m_unityPreview->status_service_icon();
 
282
    if (!icon)
 
283
        return QLatin1String("");
 
284
 
 
285
    return QString(g_icon_to_string(icon));
 
286
}
 
287
 
 
288
QString PeoplePreviewData::statusPostUri() const
 
289
{
 
290
    if (!m_unityPreview)
 
291
        return QLatin1String("");
 
292
 
 
293
    return QString::fromStdString(m_unityPreview->status_post_uri());
 
294
}
 
295
 
 
296
QQmlListProperty<PeopleAddressData> PeoplePreviewData::addresses()
 
297
{
 
298
    return QQmlListProperty<PeopleAddressData> (this, this,
 
299
                                              addressAppend,
 
300
                                              addressCount,
 
301
                                              addressAt,
 
302
                                              addressClear);
 
303
}
 
304
 
 
305
QString PeoplePreviewData::avatar() const
 
306
{
 
307
    if (!m_unityPreview)
 
308
        return QLatin1String("");
 
309
 
 
310
    glib::Object<GIcon> avatar = m_unityPreview->avatar();
 
311
    if (!avatar)
 
312
        return QLatin1String("");
 
313
 
 
314
    return QString(g_icon_to_string(avatar));
 
315
}
 
316
 
 
317
void PeoplePreviewData::getPeoplePreview()
 
318
{
 
319
    m_lens->unityLens()->Preview(m_uri.toStdString());
 
320
}
 
321
 
 
322
void PeoplePreviewData::setUnityPreview(std::string const& uri, dash::Preview::Ptr const& preview)
 
323
{
 
324
    if (uri != m_uri.toStdString())
 
325
        return;
 
326
 
 
327
    dash::PeoplePreview::Ptr peoplePtr = std::dynamic_pointer_cast<dash::PeoplePreview>(preview);
 
328
    if (peoplePtr == nullptr) {
 
329
        qWarning() << "Backend returned a dash::Preview that isn't a dash::PeoplePreview";
 
330
        Q_EMIT error();
 
331
        return;
 
332
    }
 
333
 
 
334
    clearData();
 
335
    m_unityPreview = peoplePtr;
 
336
    getPhoneData();
 
337
    getEmailAddresses();
 
338
    getImAccounts();
 
339
    getAddresses();
 
340
 
 
341
    Q_EMIT renderNameChanged();
 
342
    Q_EMIT titleChanged();
 
343
    Q_EMIT subTitleChanged();
 
344
    Q_EMIT descriptionChanged();
 
345
    Q_EMIT imageSourceChanged();
 
346
    Q_EMIT phoneNumbersChanged();
 
347
    Q_EMIT emailAddressesChanged();
 
348
    Q_EMIT imAccountsChanged();
 
349
    Q_EMIT displayNameChanged();
 
350
    Q_EMIT statusChanged();
 
351
    Q_EMIT statusTimeChanged();
 
352
    Q_EMIT statusServiceChanged();
 
353
    Q_EMIT addressesChanged();
 
354
    Q_EMIT avatarChanged();
 
355
 
 
356
    setReady(true);
 
357
}
 
358
 
 
359
void PeoplePreviewData::clearData()
 
360
{
 
361
    while (!m_phoneList.empty()) {
 
362
        PeoplePhoneData *phone = m_phoneList.takeLast();
 
363
        delete phone;
 
364
    }
 
365
    while (!m_emailList.empty()) {
 
366
        PeopleAddressData *email = m_emailList.takeLast();
 
367
        delete email;
 
368
    }
 
369
    while (!m_imList.empty()) {
 
370
        PeopleIMData *im = m_imList.takeLast();
 
371
        delete im;
 
372
    }
 
373
    while (!m_addressList.empty()) {
 
374
        PeopleAddressData *address = m_addressList.takeLast();
 
375
        delete address;
 
376
    }
 
377
}
 
378
 
 
379
void PeoplePreviewData::getPhoneData()
 
380
{
 
381
    dash::PeoplePreview::PhonePtrList uPhoneList;
 
382
    uPhoneList = m_unityPreview->GetPhone();
 
383
 
 
384
    for (size_t i=0; i<uPhoneList.size(); ++i) {
 
385
        PeoplePhoneData *phone = new PeoplePhoneData;
 
386
        phone->m_type = QString::fromStdString(uPhoneList[i]->type);
 
387
        phone->m_location = QString::fromStdString(uPhoneList[i]->location);
 
388
        phone->m_number = QString::fromStdString(uPhoneList[i]->number);
 
389
        m_phoneList.append(phone);
 
390
    }
 
391
}
 
392
 
 
393
void PeoplePreviewData::getEmailAddresses()
 
394
{
 
395
    dash::PeoplePreview::EmailPtrList uEmailList;
 
396
    uEmailList = m_unityPreview->GetEmail();
 
397
 
 
398
    for (size_t i=0; i<uEmailList.size(); ++i) {
 
399
        PeopleAddressData *email = new PeopleAddressData;
 
400
        email->m_type = QString::fromStdString(uEmailList[i]->type);
 
401
        email->m_address = QString::fromStdString(uEmailList[i]->address);
 
402
        m_emailList.append(email);
 
403
    }
 
404
}
 
405
 
 
406
void PeoplePreviewData::getImAccounts()
 
407
{
 
408
    dash::PeoplePreview::IMAccountPtrList uIMList;
 
409
    uIMList = m_unityPreview->GetIMAccount();
 
410
 
 
411
    for (size_t i=0; i<uIMList.size(); ++i) {
 
412
        PeopleIMData *im = new PeopleIMData;
 
413
        im->m_protocol = QString::fromStdString(uIMList[i]->protocol);
 
414
        im->m_address = QString::fromStdString(uIMList[i]->address);
 
415
        m_imList.append(im);
 
416
    }
 
417
}
 
418
 
 
419
void PeoplePreviewData::getAddresses()
 
420
{
 
421
    dash::PeoplePreview::AddressPtrList uAddressList;
 
422
    uAddressList = m_unityPreview->GetAddress();
 
423
 
 
424
    for (size_t i=0; i<uAddressList.size(); ++i) {
 
425
        PeopleAddressData *address = new PeopleAddressData;
 
426
        address->m_type = QString::fromStdString(uAddressList[i]->type);
 
427
        address->m_address = QString::fromStdString(uAddressList[i]->address);
 
428
        address->m_poBox = QString::fromStdString(uAddressList[i]->po_box);
 
429
        address->m_extension = QString::fromStdString(uAddressList[i]->extension);
 
430
        address->m_street = QString::fromStdString(uAddressList[i]->street);
 
431
        address->m_locality = QString::fromStdString(uAddressList[i]->locality);
 
432
        address->m_region = QString::fromStdString(uAddressList[i]->region);
 
433
        address->m_postalCode = QString::fromStdString(uAddressList[i]->postal_code);
 
434
        address->m_country = QString::fromStdString(uAddressList[i]->country);
 
435
        address->m_addressFormat = QString::fromStdString(uAddressList[i]->address_format);
 
436
        m_addressList.append(address);
 
437
    }
 
438
}