on 2bfccfb help sign in
unity8/plugins/Unity/peoplepreviewdata.cpp
438 lines 12 kB history raw
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 */
20#include "peoplepreviewdata.h"
22#include <QDebug>
24#include "lens.h"
26static void phoneAppend(QQmlListProperty<PeoplePhoneData> *property, PeoplePhoneData *val)
28 Q_UNUSED(val);
29 Q_UNUSED(property);
31static PeoplePhoneData *phoneAt(QQmlListProperty<PeoplePhoneData> *property, int index)
33 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
34 return d->phoneNumberList().at(index);
36static int phoneCount(QQmlListProperty<PeoplePhoneData> *property)
38 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
39 return d->phoneNumberList().count();
41static void phoneClear(QQmlListProperty<PeoplePhoneData> *property)
43 Q_UNUSED(property);
46static void emailAppend(QQmlListProperty<PeopleAddressData> *property, PeopleAddressData *val)
48 Q_UNUSED(val);
49 Q_UNUSED(property);
51static PeopleAddressData *emailAt(QQmlListProperty<PeopleAddressData> *property, int index)
53 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
54 return d->emailAddressesList().at(index);
56static int emailCount(QQmlListProperty<PeopleAddressData> *property)
58 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
59 return d->emailAddressesList().count();
61static void emailClear(QQmlListProperty<PeopleAddressData> *property)
63 Q_UNUSED(property);
66static void imAppend(QQmlListProperty<PeopleIMData> *property, PeopleIMData *val)
68 Q_UNUSED(val);
69 Q_UNUSED(property);
71static PeopleIMData *imAt(QQmlListProperty<PeopleIMData> *property, int index)
73 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
74 return d->imAccountsList().at(index);
76static int imCount(QQmlListProperty<PeopleIMData> *property)
78 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
79 return d->imAccountsList().count();
81static void imClear(QQmlListProperty<PeopleIMData> *property)
83 Q_UNUSED(property);
86static void addressAppend(QQmlListProperty<PeopleAddressData> *property, PeopleAddressData *val)
88 Q_UNUSED(val);
89 Q_UNUSED(property);
91static PeopleAddressData *addressAt(QQmlListProperty<PeopleAddressData> *property, int index)
93 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
94 return d->addressesList().at(index);
96static int addressCount(QQmlListProperty<PeopleAddressData> *property)
98 PeoplePreviewData *d = static_cast<PeoplePreviewData*>(property->data);
99 return d->addressesList().count();
101static void addressClear(QQmlListProperty<PeopleAddressData> *property)
103 Q_UNUSED(property);
107using namespace unity;
109PeoplePreviewData::PeoplePreviewData(QObject *parent)
110: QObject(parent)
111, m_lens(0)
112, m_ready(false)
116PeoplePreviewData::~PeoplePreviewData()
118 clearData();
121Lens *PeoplePreviewData::lens() const
123 return m_lens;
126void PeoplePreviewData::setLens(Lens *lens)
128 if (lens == m_lens)
129 return;
131 setReady(false);
133 if (m_lensConnection.connected())
134 m_lensConnection.disconnect();
136 m_lens = lens;
137 m_lensConnection = m_lens->unityLens()->preview_ready.connect(
138 sigc::mem_fun(this, &PeoplePreviewData::setUnityPreview));
139 Q_EMIT lensChanged();
141 if (!m_uri.isEmpty() && !m_lens)
142 getPeoplePreview();
145QString PeoplePreviewData::uri() const
147 return m_uri;
150void PeoplePreviewData::setUri(const QString &uri)
152 if (uri == m_uri)
153 return;
155 setReady(false);
157 m_uri = uri;
158 Q_EMIT uriChanged();
159 if (!m_uri.isEmpty() && m_lens)
160 getPeoplePreview();
163bool PeoplePreviewData::ready() const
165 return m_ready;
168void PeoplePreviewData::setReady(const bool &ready)
170 if (ready == m_ready)
171 return;
173 m_ready = ready;
174 Q_EMIT readyChanged();
177QString PeoplePreviewData::renderName() const
179 if (!m_unityPreview)
180 return QLatin1String("");
182 return QString::fromStdString(m_unityPreview->renderer_name());
185QString PeoplePreviewData::title() const
187 if (!m_unityPreview)
188 return QLatin1String("");
190 return QString::fromStdString(m_unityPreview->title());
193QString PeoplePreviewData::subTitle() const
195 if (!m_unityPreview)
196 return QLatin1String("");
198 return QString::fromStdString(m_unityPreview->subtitle());
201QString PeoplePreviewData::description() const
203 if (!m_unityPreview)
204 return QLatin1String("");
206 return QString::fromStdString(m_unityPreview->description());
209QString PeoplePreviewData::imageSource() const
211 if (!m_unityPreview)
212 return QLatin1String("");
214 return QString::fromStdString(m_unityPreview->image_source_uri());
217QQmlListProperty<PeoplePhoneData> PeoplePreviewData::phoneNumbers()
219 return QQmlListProperty<PeoplePhoneData> (this, this,
220 phoneAppend,
221 phoneCount,
222 phoneAt,
223 phoneClear);
226QQmlListProperty<PeopleAddressData> PeoplePreviewData::emailAddresses()
228 return QQmlListProperty<PeopleAddressData> (this, this,
229 emailAppend,
230 emailCount,
231 emailAt,
232 emailClear);
235QQmlListProperty<PeopleIMData> PeoplePreviewData::imAccounts()
237 return QQmlListProperty<PeopleIMData> (this, this,
238 imAppend,
239 imCount,
240 imAt,
241 imClear);
244QString PeoplePreviewData::displayName() const
246 if (!m_unityPreview)
247 return QLatin1String("");
249 return QString::fromStdString(m_unityPreview->display_name());
252QString PeoplePreviewData::status() const
254 if (!m_unityPreview)
255 return QLatin1String("");
257 return QString::fromStdString(m_unityPreview->status());
260QString PeoplePreviewData::statusTime() const
262 if (!m_unityPreview)
263 return QLatin1String("");
265 return QString::fromStdString(m_unityPreview->status_time());
268QString PeoplePreviewData::statusService() const
270 if (!m_unityPreview)
271 return QLatin1String("");
273 return QString::fromStdString(m_unityPreview->status_service());
276QString PeoplePreviewData::statusServiceIcon() const
278 if (!m_unityPreview)
279 return QLatin1String("");
281 glib::Object<GIcon> icon = m_unityPreview->status_service_icon();
282 if (!icon)
283 return QLatin1String("");
285 return QString(g_icon_to_string(icon));
288QString PeoplePreviewData::statusPostUri() const
290 if (!m_unityPreview)
291 return QLatin1String("");
293 return QString::fromStdString(m_unityPreview->status_post_uri());
296QQmlListProperty<PeopleAddressData> PeoplePreviewData::addresses()
298 return QQmlListProperty<PeopleAddressData> (this, this,
299 addressAppend,
300 addressCount,
301 addressAt,
302 addressClear);
305QString PeoplePreviewData::avatar() const
307 if (!m_unityPreview)
308 return QLatin1String("");
310 glib::Object<GIcon> avatar = m_unityPreview->avatar();
311 if (!avatar)
312 return QLatin1String("");
314 return QString(g_icon_to_string(avatar));
317void PeoplePreviewData::getPeoplePreview()
319 m_lens->unityLens()->Preview(m_uri.toStdString());
322void PeoplePreviewData::setUnityPreview(std::string const& uri, dash::Preview::Ptr const& preview)
324 if (uri != m_uri.toStdString())
325 return;
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 }
334 clearData();
335 m_unityPreview = peoplePtr;
336 getPhoneData();
337 getEmailAddresses();
338 getImAccounts();
339 getAddresses();
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();
356 setReady(true);
359void PeoplePreviewData::clearData()
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 }
379void PeoplePreviewData::getPhoneData()
381 dash::PeoplePreview::PhonePtrList uPhoneList;
382 uPhoneList = m_unityPreview->GetPhone();
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 }
393void PeoplePreviewData::getEmailAddresses()
395 dash::PeoplePreview::EmailPtrList uEmailList;
396 uEmailList = m_unityPreview->GetEmail();
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 }
406void PeoplePreviewData::getImAccounts()
408 dash::PeoplePreview::IMAccountPtrList uIMList;
409 uIMList = m_unityPreview->GetIMAccount();
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 }
419void PeoplePreviewData::getAddresses()
421 dash::PeoplePreview::AddressPtrList uAddressList;
422 uAddressList = m_unityPreview->GetAddress();
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 }