• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

messageviewer

  • sources
  • kde-4.14
  • kdepim
  • messageviewer
  • scamdetection
scamcheckshorturl.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2013-2015 Montel Laurent <montel@kde.org>
3  based on ktp code
4 
5  This program is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License, version 2, as
7  published by the Free Software Foundation.
8 
9  This program is distributed in the hope that it will be useful, but
10  WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License along
15  with this program; if not, write to the Free Software Foundation, Inc.,
16  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
19 #include "scamcheckshorturl.h"
20 
21 #include <libkdepim/misc/broadcaststatus.h>
22 
23 #include <KGlobal>
24 #include <KStandardDirs>
25 #include <KLocalizedString>
26 
27 #include <qjson/parser.h>
28 
29 #include <QFile>
30 #include <QVariantMap>
31 #include <QDebug>
32 #include <QNetworkAccessManager>
33 #include <QNetworkRequest>
34 
35 using namespace MessageViewer;
36 QStringList ScamCheckShortUrl::sSupportedServices = QStringList();
37 
38 ScamCheckShortUrl::ScamCheckShortUrl(QObject *parent)
39  : QObject(parent),
40  mNetworkAccessManager(new QNetworkAccessManager(this))
41 {
42  loadLongUrlServices();
43  connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotExpandFinished(QNetworkReply*)));
44  connect ( Solid::Networking::notifier(), SIGNAL(statusChanged(Solid::Networking::Status)),
45  this, SLOT(slotSystemNetworkStatusChanged(Solid::Networking::Status)) );
46  const Solid::Networking::Status networkStatus = Solid::Networking::status();
47  slotSystemNetworkStatusChanged(networkStatus);
48 }
49 
50 ScamCheckShortUrl::~ScamCheckShortUrl()
51 {
52 }
53 
54 void ScamCheckShortUrl::expandedUrl(const KUrl &url)
55 {
56  if (!mNetworkUp) {
57  KPIM::BroadcastStatus::instance()->setStatusMsg( i18n( "No network connection detected, we cannot expand url.") );
58  return;
59  }
60  const QUrl newUrl = QString::fromLatin1("http://api.longurl.org/v2/expand?url=%1&format=json").arg(url.url());
61 
62  //qDebug()<<" newUrl "<<newUrl;
63  QNetworkReply *reply = mNetworkAccessManager->get(QNetworkRequest(newUrl));
64  reply->setProperty("shortUrl", url.url());
65  connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError)));
66 }
67 
68 void ScamCheckShortUrl::slotExpandFinished(QNetworkReply *reply)
69 {
70  KUrl shortUrl;
71  if (!reply->property("shortUrl").isNull()) {
72  shortUrl.setUrl(reply->property("shortUrl").toString());
73  }
74  const QString jsonData = QString::fromUtf8(reply->readAll());
75  reply->deleteLater();
76 
77  //qDebug() << jsonData;
78 
79  QJson::Parser parser;
80  bool ok;
81 
82  const QMap<QString, QVariant> map = parser.parse(jsonData.toUtf8(), &ok).toMap();
83  if (!ok) {
84  return;
85  }
86 
87  KUrl longUrl;
88  if (map.contains(QLatin1String("long-url"))) {
89  longUrl.setUrl(map.value(QLatin1String("long-url")).toString());
90  } else {
91  return;
92  }
93 
94  KPIM::BroadcastStatus::instance()->setStatusMsg( i18n( "Short url \'%1\' redirects to \'%2\'.", shortUrl.url(), longUrl.prettyUrl() ) );
95 }
96 
97 void ScamCheckShortUrl::slotError(QNetworkReply::NetworkError error)
98 {
99  Q_EMIT expandUrlError(error);
100 }
101 
102 bool ScamCheckShortUrl::isShortUrl(const KUrl &url)
103 {
104  if (!url.path().isEmpty() && QString::compare(url.path(),QLatin1String("/")) && sSupportedServices.contains(url.host())) {
105  return true;
106  } else {
107  return false;
108  }
109 }
110 
111 void ScamCheckShortUrl::loadLongUrlServices()
112 {
113  QFile servicesFile(KGlobal::dirs()->findResource("data", QLatin1String("messageviewer/longurlServices.json")));
114  if (servicesFile.open(QIODevice::ReadOnly)) {
115  const QVariantMap response = QJson::Parser().parse(&servicesFile).toMap();
116  sSupportedServices = response.uniqueKeys();
117  } else {
118  qDebug()<<" json file \'longurlServices.json\' not found";
119  }
120 }
121 
122 void ScamCheckShortUrl::slotSystemNetworkStatusChanged( Solid::Networking::Status status )
123 {
124  if ( status == Solid::Networking::Connected || status == Solid::Networking::Unknown) {
125  mNetworkUp = true;
126  } else {
127  mNetworkUp = false;
128  }
129 }
130 
MessageViewer::ScamCheckShortUrl::expandedUrl
void expandedUrl(const KUrl &url)
Definition: scamcheckshorturl.cpp:54
QMap::contains
bool contains(const Key &key) const
QNetworkReply
QMap
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
MessageViewer::ScamCheckShortUrl::~ScamCheckShortUrl
~ScamCheckShortUrl()
Definition: scamcheckshorturl.cpp:50
MessageViewer::ScamCheckShortUrl::loadLongUrlServices
static void loadLongUrlServices()
Definition: scamcheckshorturl.cpp:111
QFile
QNetworkRequest
QString::fromUtf8
QString fromUtf8(const char *str, int size)
MessageViewer::ScamCheckShortUrl::isShortUrl
static bool isShortUrl(const KUrl &url)
Definition: scamcheckshorturl.cpp:102
QObject::property
QVariant property(const char *name) const
QVariant::isNull
bool isNull() const
QObject
QIODevice::readAll
QByteArray readAll()
QObject::deleteLater
void deleteLater()
QString
QFile::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > mode)
QStringList
MessageViewer::ScamCheckShortUrl::expandUrlError
void expandUrlError(QNetworkReply::NetworkError error)
scamcheckshorturl.h
QUrl
QNetworkAccessManager
MessageViewer::ScamCheckShortUrl::ScamCheckShortUrl
ScamCheckShortUrl(QObject *parent=0)
Definition: scamcheckshorturl.cpp:38
QLatin1String
QString::fromLatin1
QString fromLatin1(const char *str, int size)
QObject::setProperty
bool setProperty(const char *name, const QVariant &value)
QNetworkAccessManager::get
QNetworkReply * get(const QNetworkRequest &request)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString::compare
int compare(const QString &other) const
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QVariant::toString
QString toString() const
QMap::value
const T value(const Key &key) const
QString::toUtf8
QByteArray toUtf8() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:32:45 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

messageviewer

Skip menu "messageviewer"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer
  • pimprint

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal