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-2011 Marcello Ceschia <marcelloceschia@users.sourceforge.net>
0005     SPDX-FileCopyrightText: 2010-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com>
0006 
0007     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0008 */
0009 
0010 #include "yourls.h"
0011 
0012 #include <QUrl>
0013 
0014 #include <KIO/StoredTransferJob>
0015 #include <KLocalizedString>
0016 #include <KPluginFactory>
0017 
0018 #include "notifymanager.h"
0019 #include "passwordmanager.h"
0020 
0021 #include "yourlssettings.h"
0022 
0023 K_PLUGIN_CLASS_WITH_JSON(Yourls, "choqok_yourls.json")
0024 
0025 Yourls::Yourls(QObject *parent, const QVariantList &)
0026     : Choqok::Shortener(QLatin1String("choqok_yourls"), parent)
0027 {
0028     connect(YourlsSettings::self(), &YourlsSettings::configChanged,
0029             this, &Yourls::reloadConfigs);
0030 }
0031 
0032 Yourls::~Yourls()
0033 {}
0034 
0035 QString Yourls::shorten(const QString &url)
0036 {
0037     QUrl reqUrl(YourlsSettings::yourlsHost());
0038     QUrlQuery reqQuery;
0039     reqQuery.addQueryItem(QLatin1String("action"), QLatin1String("shorturl"));           /* set action to shorturl */
0040     reqQuery.addQueryItem(QLatin1String("format"), QLatin1String("xml"));                /* get result as xml */
0041     reqQuery.addQueryItem(QLatin1String("url"), QUrl(url).url());                        /* url to be shorted */
0042     password = QLatin1String(Choqok::PasswordManager::self()->readPassword(
0043                    QStringLiteral("yourls_%1").arg(YourlsSettings::username())).toUtf8());
0044     if (!YourlsSettings::username().isEmpty()) {
0045         reqQuery.addQueryItem(QLatin1String("username"), YourlsSettings::username());
0046         reqQuery.addQueryItem(QLatin1String("password"), password);
0047     }
0048 
0049     reqUrl.setQuery(reqQuery);
0050     KIO::StoredTransferJob *job = KIO::storedGet(reqUrl, KIO::Reload, KIO::HideProgressInfo);
0051     job->exec();
0052 
0053     if (!job->error()) {
0054         const QByteArray data = job->data();                            /* output field */
0055         QString output = QLatin1String(data);
0056 
0057         QRegExp rx(QLatin1String("<shorturl>(.+)</shorturl>"));
0058         rx.setMinimal(true);
0059         rx.indexIn(output);
0060         output = rx.cap(1);
0061 
0062         if (!output.isEmpty()) {
0063             return output;
0064         } else {
0065             output = QLatin1String(data);
0066             QRegExp rx(QLatin1String("<message>(.+)</message>"));
0067             rx.setMinimal(true);
0068             rx.indexIn(output);
0069             output = rx.cap(1);
0070 
0071             Choqok::NotifyManager::error(output, i18n("Yourls Error"));
0072         }
0073     } else {
0074         Choqok::NotifyManager::error(i18n("Cannot create a short URL.\n%1",
0075                                           job->errorString()));
0076     }
0077     return url;
0078 }
0079 
0080 void Yourls::reloadConfigs()
0081 {
0082     password = QLatin1String(Choqok::PasswordManager::self()->readPassword(
0083                    QStringLiteral("yourls_%1").arg(YourlsSettings::username())).toUtf8());
0084 }
0085 
0086 #include "moc_yourls.cpp"
0087 #include "yourls.moc"