1 /*
2 This file is part of Akonadi Contact.
3
4 SPDX-FileCopyrightText: 2009 Tobias Koenig <tokoe@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7 */
8
9 #include "contactdefaultactions.h"
10
11 #include "actions/dialphonenumberaction.h"
12 #include "actions/sendsmsaction.h"
13 #include "actions/showaddressaction.h"
14
15 #include <KContacts/Address>
16 #include <KContacts/Addressee>
17 #include <KContacts/PhoneNumber>
18 #include <QDesktopServices>
19 #include <QUrl>
20
21 using namespace Akonadi;
22
23 class Akonadi::ContactDefaultActionsPrivate
24 {
25 };
26
ContactDefaultActions(QObject * parent)27 ContactDefaultActions::ContactDefaultActions(QObject *parent)
28 : QObject(parent)
29 , d(nullptr)
30 {
31 }
32
~ContactDefaultActions()33 ContactDefaultActions::~ContactDefaultActions()
34 {
35 }
36
connectToView(QObject * view)37 void ContactDefaultActions::connectToView(QObject *view)
38 {
39 const QMetaObject *metaObject = view->metaObject();
40
41 if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("urlClicked(const QUrl&)").constData()) != -1) {
42 connect(view, SIGNAL(urlClicked(QUrl)), SLOT(showUrl(QUrl)));
43 }
44
45 if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("emailClicked(const QString&, const QString&)").constData()) != -1) {
46 // clang-format off
47 connect(view, SIGNAL(emailClicked(QString,QString)), this, SLOT(sendEmail(QString,QString)));
48 // clang-format on
49 }
50
51 if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("phoneNumberClicked(const KContacts::PhoneNumber&)").constData()) != -1) {
52 connect(view, SIGNAL(phoneNumberClicked(KContacts::PhoneNumber)), this, SLOT(dialPhoneNumber(KContacts::PhoneNumber)));
53 }
54
55 if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("smsClicked(const KContacts::PhoneNumber&)").constData()) != -1) {
56 connect(view, SIGNAL(smsClicked(KContacts::PhoneNumber)), this, SLOT(sendSms(KContacts::PhoneNumber)));
57 }
58
59 if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("addressClicked(const KContacts::Address&)").constData()) != -1) {
60 connect(view, SIGNAL(addressClicked(KContacts::Address)), this, SLOT(showAddress(KContacts::Address)));
61 }
62 }
63
showUrl(const QUrl & url)64 void ContactDefaultActions::showUrl(const QUrl &url)
65 {
66 QDesktopServices::openUrl(url);
67 }
68
sendEmail(const QString & name,const QString & address)69 void ContactDefaultActions::sendEmail(const QString &name, const QString &address)
70 {
71 KContacts::Addressee contact;
72 contact.setNameFromString(name);
73
74 QUrl url;
75 url.setScheme(QStringLiteral("mailto"));
76 url.setPath(contact.fullEmail(address));
77 QDesktopServices::openUrl(url);
78 }
79
dialPhoneNumber(const KContacts::PhoneNumber & number)80 void ContactDefaultActions::dialPhoneNumber(const KContacts::PhoneNumber &number)
81 {
82 DialPhoneNumberAction action;
83 action.dialNumber(number);
84 }
85
sendSms(const KContacts::PhoneNumber & number)86 void ContactDefaultActions::sendSms(const KContacts::PhoneNumber &number)
87 {
88 SendSmsAction action;
89 action.sendSms(number);
90 }
91
showAddress(const KContacts::Address & address)92 void ContactDefaultActions::showAddress(const KContacts::Address &address)
93 {
94 ShowAddressAction action;
95 action.showAddress(address);
96 }
97