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

messageviewer

  • sources
  • kde-4.12
  • kdepim
  • messageviewer
  • scamdetection
scamcheckshorturl.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2013 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 <KLocale>
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  Solid::Networking::Status networkStatus = Solid::Networking::status();
47  if ( ( networkStatus == Solid::Networking::Unconnected ) ||
48  ( networkStatus == Solid::Networking::Disconnecting ) ||
49  ( networkStatus == Solid::Networking::Connecting ))
50  mNetworkUp = false;
51  else
52  mNetworkUp = true;
53 }
54 
55 ScamCheckShortUrl::~ScamCheckShortUrl()
56 {
57 }
58 
59 void ScamCheckShortUrl::expandedUrl(const KUrl &url)
60 {
61  if (!mNetworkUp) {
62  KPIM::BroadcastStatus::instance()->setStatusMsg( i18n( "No network connection detected, we cannot expand url.") );
63  return;
64  }
65  const QUrl newUrl = QString::fromLatin1("http://api.longurl.org/v2/expand?url=%1&format=json").arg(url.url());
66 
67  //qDebug()<<" newUrl "<<newUrl;
68  QNetworkReply *reply = mNetworkAccessManager->get(QNetworkRequest(newUrl));
69  reply->setProperty("shortUrl", url.url());
70  connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError)));
71 }
72 
73 void ScamCheckShortUrl::slotExpandFinished(QNetworkReply *reply)
74 {
75  KUrl shortUrl;
76  if (!reply->property("shortUrl").isNull()) {
77  shortUrl.setUrl(reply->property("shortUrl").toString());
78  }
79  reply->deleteLater();
80  const QString jsonData = QString::fromUtf8(reply->readAll());
81 
82  //qDebug() << jsonData;
83 
84  QJson::Parser parser;
85  bool ok;
86 
87  const QMap<QString, QVariant> map = parser.parse(jsonData.toUtf8(), &ok).toMap();
88  if (!ok) {
89  return;
90  }
91 
92  KUrl longUrl;
93  if (map.contains(QLatin1String("long-url"))) {
94  longUrl.setUrl(map.value(QLatin1String("long-url")).toString());
95  } else {
96  return;
97  }
98 
99  KPIM::BroadcastStatus::instance()->setStatusMsg( i18n( "Short url \'%1\' redirects to \'%2\'.", shortUrl.url(), longUrl.prettyUrl() ) );
100 }
101 
102 void ScamCheckShortUrl::slotError(QNetworkReply::NetworkError error)
103 {
104  Q_EMIT expandUrlError(error);
105 }
106 
107 bool ScamCheckShortUrl::isShortUrl(const KUrl &url)
108 {
109  if (!url.path().isEmpty() && QString::compare(url.path(),QLatin1String("/")) && sSupportedServices.contains(url.host())) {
110  return true;
111  } else {
112  return false;
113  }
114 }
115 
116 void ScamCheckShortUrl::loadLongUrlServices()
117 {
118  QFile servicesFile(KGlobal::dirs()->findResource("data", QLatin1String("messageviewer/longurlServices.json")));
119  if (!servicesFile.open(QIODevice::ReadOnly)) {
120  qDebug()<<" json file \'longurlServices.json\' not found";
121  } else {
122  const QVariantMap response = QJson::Parser().parse(&servicesFile).toMap();
123  sSupportedServices = response.uniqueKeys();
124  }
125 }
126 
127 void ScamCheckShortUrl::slotSystemNetworkStatusChanged( Solid::Networking::Status status )
128 {
129  if ( status == Solid::Networking::Connected || status == Solid::Networking::Unknown) {
130  mNetworkUp = true;
131  } else {
132  mNetworkUp = false;
133  }
134 }
135 
136 #include "scamcheckshorturl.moc"
MessageViewer::ScamCheckShortUrl::expandedUrl
void expandedUrl(const KUrl &url)
Definition: scamcheckshorturl.cpp:59
MessageViewer::ScamCheckShortUrl::~ScamCheckShortUrl
~ScamCheckShortUrl()
Definition: scamcheckshorturl.cpp:55
MessageViewer::ScamCheckShortUrl::loadLongUrlServices
static void loadLongUrlServices()
Definition: scamcheckshorturl.cpp:116
QObject
MessageViewer::ScamCheckShortUrl::isShortUrl
static bool isShortUrl(const KUrl &url)
Definition: scamcheckshorturl.cpp:107
MessageViewer::ScamCheckShortUrl::expandUrlError
void expandUrlError(QNetworkReply::NetworkError error)
scamcheckshorturl.h
MessageViewer::ScamCheckShortUrl::ScamCheckShortUrl
ScamCheckShortUrl(QObject *parent=0)
Definition: scamcheckshorturl.cpp:38
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:57 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

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