Akonadi Contacts

contactdefaultactions.cpp
1 /*
2  This file is part of Akonadi Contact.
3 
4  SPDX-FileCopyrightText: 2009 Tobias Koenig <[email protected]>
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 
14 #include <KContacts/Address>
15 #include <KContacts/Addressee>
16 #include <KContacts/PhoneNumber>
17 
18 #include <KCountry>
19 
20 #include <QDesktopServices>
21 #include <QUrl>
22 #include <QUrlQuery>
23 
24 using namespace Akonadi;
25 
26 class Akonadi::ContactDefaultActionsPrivate
27 {
28 };
29 
31  : QObject(parent)
32  , d(nullptr)
33 {
34 }
35 
37 
39 {
40  const QMetaObject *metaObject = view->metaObject();
41 
42  if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("urlClicked(const QUrl&)").constData()) != -1) {
43  connect(view, SIGNAL(urlClicked(QUrl)), SLOT(showUrl(QUrl)));
44  }
45 
46  if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("emailClicked(const QString&, const QString&)").constData()) != -1) {
47  // clang-format off
48  connect(view, SIGNAL(emailClicked(QString,QString)), this, SLOT(sendEmail(QString,QString)));
49  // clang-format on
50  }
51 
52  if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("phoneNumberClicked(const KContacts::PhoneNumber&)").constData()) != -1) {
53  connect(view, SIGNAL(phoneNumberClicked(KContacts::PhoneNumber)), this, SLOT(dialPhoneNumber(KContacts::PhoneNumber)));
54  }
55 
56  if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("smsClicked(const KContacts::PhoneNumber&)").constData()) != -1) {
57  connect(view, SIGNAL(smsClicked(KContacts::PhoneNumber)), this, SLOT(sendSms(KContacts::PhoneNumber)));
58  }
59 
60  if (metaObject->indexOfSignal(QMetaObject::normalizedSignature("addressClicked(const KContacts::Address&)").constData()) != -1) {
61  connect(view, SIGNAL(addressClicked(KContacts::Address)), this, SLOT(showAddress(KContacts::Address)));
62  }
63 }
64 
66 {
68 }
69 
70 void ContactDefaultActions::sendEmail(const QString &name, const QString &address)
71 {
72  KContacts::Addressee contact;
73  contact.setNameFromString(name);
74 
75  QUrl url;
76  url.setScheme(QStringLiteral("mailto"));
77  url.setPath(contact.fullEmail(address));
79 }
80 
82 {
83  DialPhoneNumberAction action;
84  action.dialNumber(number);
85 }
86 
88 {
89  SendSmsAction action;
90  action.sendSms(number);
91 }
92 
94 {
95  // ### move geo: URI generation to KContacts::Address?
96  QUrl url;
97  url.setScheme(QStringLiteral("geo"));
98  if (address.geo().isValid()) {
99  url.setPath(QString::number(address.geo().latitude()) + QLatin1Char(',') + QString::number(address.geo().longitude()));
100  } else if (!address.isEmpty()) {
101  url.setPath(QStringLiteral("0,0"));
102  QStringList q;
103  if (!address.street().isEmpty()) {
104  q.push_back(address.street());
105  }
106  if (!address.locality().isEmpty()) {
107  q.push_back(address.postalCode().isEmpty() ? address.locality() : (address.postalCode() + QLatin1Char(' ') + address.locality()));
108  }
109  if (!address.region().isEmpty()) {
110  q.push_back(address.region());
111  }
112  if (!address.country().isEmpty()) {
113  const auto c = KCountry::fromName(address.country());
114  q.push_back(c.alpha2());
115  }
116  QUrlQuery query;
117  query.addQueryItem(QStringLiteral("q"), q.join(QLatin1String(", ")));
118  url.setQuery(query);
119  } else {
120  return;
121  }
122 
124 }
QString number(int n, int base)
void sendEmail(const QString &name, const QString &address)
Opens the users preferred mail composer and does the setup to send a mail to the contact with the giv...
~ContactDefaultActions() override
Destroys the contact default actions object.
void push_back(const T &value)
bool openUrl(const QUrl &url)
static KCountry fromName(QStringView name)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void sendSms(const KContacts::PhoneNumber &number)
Sends a sms to number with the application as configured by the user in the general settings dialog.
QByteArray normalizedSignature(const char *method)
void setScheme(const QString &scheme)
void showUrl(const QUrl &url)
Shows the given url in the users preferred webbrowser.
int indexOfSignal(const char *signal) const const
QString join(const QString &separator) const const
virtual const QMetaObject * metaObject() const const
void setQuery(const QString &query, QUrl::ParsingMode mode)
An action to dial the phone number of a contact.
ContactDefaultActions(QObject *parent=nullptr)
Creates a new contact default actions object.
void setNameFromString(const QString &s)
QString fullEmail(const QString &email=QString()) const
const char * constData() const const
void dialPhoneNumber(const KContacts::PhoneNumber &number)
Dials the given phone number with the application as configured by the user in the general settings d...
void setPath(const QString &path, QUrl::ParsingMode mode)
void connectToView(QObject *view)
Tries to connect the well known signals of the view to the well known slots of this object.
void showAddress(const KContacts::Address &address)
Shows the address of a contact in a webbrowser or application as configured by the user in the genera...
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sat Apr 1 2023 04:09:04 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.