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"