summaryrefslogtreecommitdiff
path: root/src/plugins/cpaster/pastebindotcomprotocol.cpp
diff options
context:
space:
mode:
authorMaurice Kalinowski <maurice.kalinowski@nokia.com>2009-07-13 08:32:46 +0200
committerMaurice Kalinowski <maurice.kalinowski@nokia.com>2009-07-27 20:55:19 +0200
commit3629e091c448f4a7418f3fd7dad830c5b4df8933 (patch)
tree827af3a3992b8fa2eaf8e3770ca74b4a7888d311 /src/plugins/cpaster/pastebindotcomprotocol.cpp
parent6e38027b4ff72ac177f91e34f03326a92f924d77 (diff)
downloadqt-creator-3629e091c448f4a7418f3fd7dad830c5b4df8933.tar.gz
refactor and add support for pastebin.com
- created protocol class as basis for different paste servers - removed custom classes and replaced functionality with simple QHttp* usage - removed poster and fetcher classes copied from cpaster application. It not getting updated anyways in creator - Known issue: Listing does not update, when user changes protocol - TODO: add pastebin.ca support. Code is done already, just needs to be placed inside plugin.
Diffstat (limited to 'src/plugins/cpaster/pastebindotcomprotocol.cpp')
-rw-r--r--src/plugins/cpaster/pastebindotcomprotocol.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/plugins/cpaster/pastebindotcomprotocol.cpp b/src/plugins/cpaster/pastebindotcomprotocol.cpp
new file mode 100644
index 0000000000..166fb93632
--- /dev/null
+++ b/src/plugins/cpaster/pastebindotcomprotocol.cpp
@@ -0,0 +1,131 @@
+/**************************************************************************
+**
+** 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 "pastebindotcomprotocol.h"
+#include "pastebindotcomsettings.h"
+#include <coreplugin/coreconstants.h>
+#include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/icore.h>
+#include <coreplugin/messagemanager.h>
+#include <coreplugin/messageoutputwindow.h>
+
+#include <QDebug>
+#include <QtNetwork/QHttp>
+#include <QtGui/QApplication>
+#include <QtGui/QClipboard>
+
+using namespace Core;
+
+PasteBinDotComProtocol::PasteBinDotComProtocol()
+{
+ settings = new PasteBinDotComSettings();
+ connect(&http, SIGNAL(requestFinished(int,bool)),
+ this, SLOT(postRequestFinished(int,bool)));
+ connect(&http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),
+ this, SLOT(readPostResponseHeader(const QHttpResponseHeader&)));
+}
+
+void PasteBinDotComProtocol::fetch(const QString &id)
+{
+ QString link = QLatin1String("http://");
+ if (!settings->hostPrefix().isEmpty())
+ link.append(QString("%1.").arg(settings->hostPrefix()));
+ link.append("pastebin.com/pastebin.php?dl=");
+ link.append(id);
+ QUrl url(link);
+ QNetworkRequest r(url);
+
+ reply = manager.get(r);
+ connect(reply, SIGNAL(finished()), this, SLOT(fetchFinished()));
+ fetchId = id;
+}
+
+void PasteBinDotComProtocol::paste(const QString &text,
+ const QString &username,
+ const QString &comment,
+ const QString &description)
+{
+ Q_UNUSED(comment);
+ Q_UNUSED(description);
+ QString data = "code2=";
+ data += text;
+ data += "&parent_pid=&format=text&expiry=d&poster=";
+ data += username;
+ data += "&paste=Send";
+ QHttpRequestHeader header("POST", "/pastebin.php");
+ header.setValue("host", "qt.pastebin.com" );
+ header.setContentType("application/x-www-form-urlencoded");
+ http.setHost("qt.pastebin.com", QHttp::ConnectionModeHttp);
+ header.setValue("User-Agent", "CreatorPastebin");
+ postId = http.request(header, data.toAscii());
+}
+
+void PasteBinDotComProtocol::readPostResponseHeader(const QHttpResponseHeader &header)
+{
+ switch (header.statusCode())
+ {
+ // If we receive any of those, everything is bon.
+ case 200:
+ case 301:
+ case 303:
+ case 307:
+ break;
+
+ case 302: {
+ QString link = header.value("Location");
+ emit pasteDone(link);
+ break;
+ }
+ default:
+ emit pasteDone(tr("Error during paste"));
+ }
+}
+
+void PasteBinDotComProtocol::postRequestFinished(int id, bool error)
+{
+ if (id == postId && error)
+ emit pasteDone(http.errorString());
+}
+
+void PasteBinDotComProtocol::fetchFinished()
+{
+ if (reply->error()) {
+ ICore::instance()->messageManager()->printToOutputPane(reply->errorString(), true);
+ } else {
+ QString title = QString::fromLatin1("Pastebin.com: %1").arg(fetchId);
+ QString data = reply->readAll();
+ EditorManager::instance()->newFile(Core::Constants::K_DEFAULT_TEXT_EDITOR, &title, data);
+ }
+ reply->deleteLater();
+}
+
+Core::IOptionsPage* PasteBinDotComProtocol::settingsPage()
+{
+ return settings;
+}