File indexing completed on 2024-05-12 04:57:43
0001 /* 0002 This file is part of Choqok, the KDE micro-blogging client 0003 0004 SPDX-FileCopyrightText: 2010-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com> 0005 SPDX-FileCopyrightText: 2010 Scott Banwart <sbanwart@rogue-technology.com> 0006 0007 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0008 */ 0009 0010 #include "ur_ly.h" 0011 0012 #include <QDebug> 0013 #include <QJsonDocument> 0014 #include <QUrl> 0015 0016 #include <KIO/StoredTransferJob> 0017 #include <KLocalizedString> 0018 #include <KPluginFactory> 0019 0020 #include "notifymanager.h" 0021 0022 K_PLUGIN_FACTORY_WITH_JSON(Ur_lyFactory, "choqok_ur_ly.json", 0023 registerPlugin < Ur_ly> ();) 0024 0025 Ur_ly::Ur_ly(QObject *parent, const QVariantList &) 0026 : Choqok::Shortener(QLatin1String("choqok_ur_ly"), parent) 0027 { 0028 } 0029 0030 Ur_ly::~Ur_ly() 0031 { 0032 } 0033 0034 QString Ur_ly::shorten(const QString &url) 0035 { 0036 QUrl reqUrl(QLatin1String("http://ur.ly/new.json")); 0037 QUrlQuery reqQuery; 0038 reqQuery.addQueryItem(QLatin1String("href"), QUrl(url).url()); 0039 reqUrl.setQuery(reqQuery); 0040 0041 KIO::StoredTransferJob *job = KIO::storedGet(reqUrl, KIO::Reload, KIO::HideProgressInfo); 0042 job->exec(); 0043 0044 if (!job->error()) { 0045 const QByteArray data = job->data(); 0046 const QJsonDocument json = QJsonDocument::fromJson(data); 0047 if (!json.isNull()) { 0048 const QVariantMap result = json.toVariant().toMap(); 0049 0050 if (result.contains(QLatin1String("code"))) { 0051 return QStringLiteral("http://ur.ly/%1").arg(result.value(QLatin1String("code")).toString()); 0052 } 0053 } else { 0054 qCritical() << "Ur_ly::shorten: Parse error, Job error:" << job->errorString(); 0055 qCritical() << "Data:" << data; 0056 Choqok::NotifyManager::error(i18n("Malformed response"), i18n("Ur.ly Error")); 0057 } 0058 } else { 0059 qCritical() << "Cannot create a shortened url:" << job->errorString(); 0060 Choqok::NotifyManager::error(i18n("Cannot create a short URL.\n%1", 0061 job->errorString()), i18n("Ur.ly Error")); 0062 } 0063 return url; 0064 } 0065 0066 #include "moc_ur_ly.cpp" 0067 #include "ur_ly.moc"