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