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"