From 5c663082ccc5ba71c6b0509a2b0b6dfdcc45f2ea Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Fri, 31 Jul 2009 12:13:37 +0200 Subject: [PATCH] add pastebin.ca support for codepaster - cannot list and does not need any preferences, as there is only one server --- src/plugins/cpaster/cpaster.pro | 6 +- src/plugins/cpaster/cpasterplugin.cpp | 2 + src/plugins/cpaster/pastebindotcaprotocol.cpp | 101 ++++++++++++++++++ src/plugins/cpaster/pastebindotcaprotocol.h | 66 ++++++++++++ 4 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 src/plugins/cpaster/pastebindotcaprotocol.cpp create mode 100644 src/plugins/cpaster/pastebindotcaprotocol.h diff --git a/src/plugins/cpaster/cpaster.pro b/src/plugins/cpaster/cpaster.pro index dc4dfd4ae90..d201e667788 100644 --- a/src/plugins/cpaster/cpaster.pro +++ b/src/plugins/cpaster/cpaster.pro @@ -10,7 +10,8 @@ HEADERS += cpasterplugin.h \ pasteview.h \ codepastersettings.h \ pastebindotcomprotocol.h \ - pastebindotcomsettings.h + pastebindotcomsettings.h \ + pastebindotcaprotocol.h SOURCES += cpasterplugin.cpp \ settingspage.cpp \ protocol.cpp \ @@ -18,7 +19,8 @@ SOURCES += cpasterplugin.cpp \ pasteview.cpp \ codepastersettings.cpp \ pastebindotcomprotocol.cpp \ - pastebindotcomsettings.cpp + pastebindotcomsettings.cpp \ + pastebindotcaprotocol.cpp FORMS += settingspage.ui \ pasteselect.ui \ pasteview.ui \ diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp index 5040c941ef1..1bdffc380cf 100644 --- a/src/plugins/cpaster/cpasterplugin.cpp +++ b/src/plugins/cpaster/cpasterplugin.cpp @@ -35,6 +35,7 @@ #include "pasteview.h" #include "codepasterprotocol.h" #include "pastebindotcomprotocol.h" +#include "pastebindotcaprotocol.h" #include #include @@ -92,6 +93,7 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m // Create the protocols and append them to the Settings Protocol *protos[] = { new CodePasterProtocol(), new PasteBinDotComProtocol(), + new PasteBinDotCaProtocol(), 0}; for(int i=0; protos[i] != 0; ++i) { connect(protos[i], SIGNAL(pasteDone(QString)), this, SLOT(finishPost(QString))); diff --git a/src/plugins/cpaster/pastebindotcaprotocol.cpp b/src/plugins/cpaster/pastebindotcaprotocol.cpp new file mode 100644 index 00000000000..108ccc88224 --- /dev/null +++ b/src/plugins/cpaster/pastebindotcaprotocol.cpp @@ -0,0 +1,101 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#include "pastebindotcaprotocol.h" +#include "cgi.h" + +using namespace Core; + +PasteBinDotCaProtocol::PasteBinDotCaProtocol() +{ + connect(&http, SIGNAL(requestFinished(int,bool)), + this, SLOT(postRequestFinished(int,bool))); +} + +void PasteBinDotCaProtocol::fetch(const QString &id) +{ + QString link = QLatin1String("http://pastebin.ca/raw/"); + link.append(id); + QUrl url(link); + QNetworkRequest r(url); + + reply = manager.get(r); + connect(reply, SIGNAL(finished()), this, SLOT(fetchFinished())); + fetchId = id; +} + +void PasteBinDotCaProtocol::paste(const QString &text, + const QString &username, + const QString &comment, + const QString &description) +{ + Q_UNUSED(comment); + Q_UNUSED(description); + QString data = "content="; + data += CGI::encodeURL(text); + data += "&description="; + data += CGI::encodeURL(description); + data += "&type=1&expiry=1%20day&name="; + data += CGI::encodeURL(username); + QHttpRequestHeader header("POST", "/quiet-paste.php"); + header.setValue("host", "pastebin.ca" ); + header.setContentType("application/x-www-form-urlencoded"); + http.setHost("pastebin.ca", QHttp::ConnectionModeHttp); + header.setValue("User-Agent", "CreatorPastebin"); + postId = http.request(header, data.toAscii()); +} + +void PasteBinDotCaProtocol::postRequestFinished(int id, bool error) +{ + QString link; + if (id == postId) { + if (!error) { + QByteArray data = http.readAll(); + link = QString::fromLatin1("http://pastebin.ca/") + QString(data).remove("SUCCESS:"); + } else + link = http.errorString(); + emit pasteDone(link); + } +} + +void PasteBinDotCaProtocol::fetchFinished() +{ + QString title; + QString content; + bool error = reply->error(); + if (error) { + content = reply->errorString(); + } else { + title = QString::fromLatin1("Pastebin.ca: %1").arg(fetchId); + content = reply->readAll(); + } + reply->deleteLater(); + reply = 0; + emit fetchDone(title, content, error); +} diff --git a/src/plugins/cpaster/pastebindotcaprotocol.h b/src/plugins/cpaster/pastebindotcaprotocol.h new file mode 100644 index 00000000000..d6c2cc1725f --- /dev/null +++ b/src/plugins/cpaster/pastebindotcaprotocol.h @@ -0,0 +1,66 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef PASTEBINDOTCAPROTOCOL_H +#define PASTEBINDOTCAPROTOCOL_H +#include "protocol.h" +#include +#include +#include + +class PasteBinDotCaProtocol : public Protocol +{ + Q_OBJECT +public: + PasteBinDotCaProtocol(); + QString name() const { return QLatin1String("Pastebin.Ca"); } + + bool hasSettings() const { return false; } + bool canList() const { return false; } + + void fetch(const QString &id); + void paste(const QString &text, + const QString &username = "", + const QString &comment = "", + const QString &description = ""); +public slots: + void fetchFinished(); + + void postRequestFinished(int id, bool error); + +private: + QNetworkAccessManager manager; + QNetworkReply *reply; + QString fetchId; + + QHttp http; + int postId; +}; + +#endif // PASTEBINDOTCAPROTOCOL_H