From 19a4810ce84b5a2a9d25c94035dc0c9a85ca28c6 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@digia.com> Date: Thu, 4 Apr 2013 17:20:15 +0200 Subject: [PATCH] CodePaster: Add setting for expiry. Add a setting for expiry in days and additional setting for PasteView dialog which can be used to override. Change-Id: Ie45e26b5cefd8f468d2f5c47df148cce582b201e Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/cpaster/codepasterprotocol.cpp | 2 +- src/plugins/cpaster/codepasterprotocol.h | 1 + src/plugins/cpaster/cpasterplugin.cpp | 4 +- src/plugins/cpaster/fileshareprotocol.cpp | 2 +- src/plugins/cpaster/fileshareprotocol.h | 2 +- src/plugins/cpaster/kdepasteprotocol.cpp | 6 +- src/plugins/cpaster/kdepasteprotocol.h | 1 + src/plugins/cpaster/pastebindotcaprotocol.cpp | 6 +- src/plugins/cpaster/pastebindotcaprotocol.h | 1 + .../cpaster/pastebindotcomprotocol.cpp | 8 +-- src/plugins/cpaster/pastebindotcomprotocol.h | 1 + src/plugins/cpaster/pasteview.cpp | 18 +++++- src/plugins/cpaster/pasteview.h | 6 +- src/plugins/cpaster/pasteview.ui | 31 +++++++++-- src/plugins/cpaster/protocol.h | 1 + src/plugins/cpaster/settings.cpp | 8 ++- src/plugins/cpaster/settings.h | 1 + src/plugins/cpaster/settingspage.cpp | 2 + src/plugins/cpaster/settingspage.ui | 55 +++++++++++++------ src/plugins/cpaster/urlopenprotocol.cpp | 2 +- src/plugins/cpaster/urlopenprotocol.h | 2 +- 21 files changed, 116 insertions(+), 44 deletions(-) diff --git a/src/plugins/cpaster/codepasterprotocol.cpp b/src/plugins/cpaster/codepasterprotocol.cpp index 9ac4d6d1483..07447151bb3 100644 --- a/src/plugins/cpaster/codepasterprotocol.cpp +++ b/src/plugins/cpaster/codepasterprotocol.cpp @@ -125,7 +125,7 @@ void CodePasterProtocol::list() } void CodePasterProtocol::paste(const QString &text, - ContentType /* ct */, + ContentType /* ct */, int /* expiryDays */, const QString &username, const QString &comment, const QString &description) diff --git a/src/plugins/cpaster/codepasterprotocol.h b/src/plugins/cpaster/codepasterprotocol.h index 912f0a3e5b5..097f55e66c1 100644 --- a/src/plugins/cpaster/codepasterprotocol.h +++ b/src/plugins/cpaster/codepasterprotocol.h @@ -58,6 +58,7 @@ public: void list(); void paste(const QString &text, ContentType ct = Text, + int expiryDays = 1, const QString &username = QString(), const QString &comment = QString(), const QString &description = QString()); diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp index e22513e1669..5ed8bafae69 100644 --- a/src/plugins/cpaster/cpasterplugin.cpp +++ b/src/plugins/cpaster/cpasterplugin.cpp @@ -262,8 +262,8 @@ void CodepasterPlugin::post(QString data, const QString &mimeType) const FileDataList diffChunks = splitDiffToFiles(data); const int dialogResult = diffChunks.isEmpty() ? - view.show(username, QString(), QString(), data) : - view.show(username, QString(), QString(), diffChunks); + view.show(username, QString(), QString(), m_settings->expiryDays, data) : + view.show(username, QString(), QString(), m_settings->expiryDays, diffChunks); // Save new protocol in case user changed it. if (dialogResult == QDialog::Accepted && m_settings->protocol != view.protocol()) { diff --git a/src/plugins/cpaster/fileshareprotocol.cpp b/src/plugins/cpaster/fileshareprotocol.cpp index d616439e89d..0663a5463fa 100644 --- a/src/plugins/cpaster/fileshareprotocol.cpp +++ b/src/plugins/cpaster/fileshareprotocol.cpp @@ -181,7 +181,7 @@ void FileShareProtocol::list() } void FileShareProtocol::paste(const QString &text, - ContentType /* ct */, + ContentType /* ct */, int /* expiryDays */, const QString &username, const QString & /* comment */, const QString &description) diff --git a/src/plugins/cpaster/fileshareprotocol.h b/src/plugins/cpaster/fileshareprotocol.h index aee36c44795..62648918aa5 100644 --- a/src/plugins/cpaster/fileshareprotocol.h +++ b/src/plugins/cpaster/fileshareprotocol.h @@ -59,7 +59,7 @@ public: virtual void fetch(const QString &id); virtual void list(); virtual void paste(const QString &text, - ContentType ct = Text, + ContentType ct = Text, int expiryDays = 1, const QString &username = QString(), const QString &comment = QString(), const QString &description = QString()); diff --git a/src/plugins/cpaster/kdepasteprotocol.cpp b/src/plugins/cpaster/kdepasteprotocol.cpp index 8c0fde42431..eca0e9a4448 100644 --- a/src/plugins/cpaster/kdepasteprotocol.cpp +++ b/src/plugins/cpaster/kdepasteprotocol.cpp @@ -43,8 +43,6 @@ enum { debug = 0 }; static const char hostUrlC[]= "http://paste.kde.org/"; static const char showPhpScriptpC[] = "show.php"; -enum { expirySeconds = 86400 }; - namespace CodePaster { KdePasteProtocol::KdePasteProtocol(const NetworkAccessManagerProxyPtr &nw) : NetworkProtocol(nw), @@ -97,7 +95,7 @@ static inline QByteArray pasteLanguage(Protocol::ContentType ct) } void KdePasteProtocol::paste(const QString &text, - ContentType ct, + ContentType ct, int expiryDays, const QString &username, const QString &comment, const QString &description) @@ -115,7 +113,7 @@ void KdePasteProtocol::paste(const QString &text, pasteData += "&paste_data="; pasteData += QUrl::toPercentEncoding(fixNewLines(text)); pasteData += "&paste_expire="; - pasteData += QByteArray::number(expirySeconds); + pasteData += QByteArray::number(expiryDays * 86400); pasteData += '&'; pasteData += pasteLanguage(ct); diff --git a/src/plugins/cpaster/kdepasteprotocol.h b/src/plugins/cpaster/kdepasteprotocol.h index 651c9b64d90..8c4f2ac43cf 100644 --- a/src/plugins/cpaster/kdepasteprotocol.h +++ b/src/plugins/cpaster/kdepasteprotocol.h @@ -48,6 +48,7 @@ public: virtual void fetch(const QString &id); virtual void paste(const QString &text, ContentType ct = Text, + int expiryDays = 1, const QString &username = QString(), const QString &comment = QString(), const QString &description = QString()); diff --git a/src/plugins/cpaster/pastebindotcaprotocol.cpp b/src/plugins/cpaster/pastebindotcaprotocol.cpp index ac62c7e3d91..acce9146488 100644 --- a/src/plugins/cpaster/pastebindotcaprotocol.cpp +++ b/src/plugins/cpaster/pastebindotcaprotocol.cpp @@ -90,7 +90,7 @@ static QByteArray toTypeId(Protocol::ContentType ct) } void PasteBinDotCaProtocol::paste(const QString &text, - ContentType ct, + ContentType ct, int expiryDays, const QString &username, const QString & /* comment */, const QString &description) @@ -103,7 +103,9 @@ void PasteBinDotCaProtocol::paste(const QString &text, data += toTypeId(ct); data += "&description="; data += QUrl::toPercentEncoding(description); - data += "expiry=1%20day&name="; + data += "&expiry="; + data += QByteArray::number(expiryDays); + data += "%20day&name="; data += QUrl::toPercentEncoding(username); // fire request const QString link = QLatin1String(urlC) + QLatin1String("quiet-paste.php"); diff --git a/src/plugins/cpaster/pastebindotcaprotocol.h b/src/plugins/cpaster/pastebindotcaprotocol.h index 9910d328725..b045240b90e 100644 --- a/src/plugins/cpaster/pastebindotcaprotocol.h +++ b/src/plugins/cpaster/pastebindotcaprotocol.h @@ -48,6 +48,7 @@ public: virtual void fetch(const QString &id); virtual void paste(const QString &text, ContentType ct = Text, + int expiryDays = 1, const QString &username = QString(), const QString &comment = QString(), const QString &description = QString()); diff --git a/src/plugins/cpaster/pastebindotcomprotocol.cpp b/src/plugins/cpaster/pastebindotcomprotocol.cpp index 8fceb8a8d5c..031c8383c2e 100644 --- a/src/plugins/cpaster/pastebindotcomprotocol.cpp +++ b/src/plugins/cpaster/pastebindotcomprotocol.cpp @@ -99,7 +99,7 @@ static inline QByteArray format(Protocol::ContentType ct) } void PasteBinDotComProtocol::paste(const QString &text, - ContentType ct, + ContentType ct, int expiryDays, const QString &username, const QString &comment, const QString &description) @@ -111,14 +111,14 @@ void PasteBinDotComProtocol::paste(const QString &text, // Format body QByteArray pasteData = API_KEY; pasteData += "api_option=paste&"; - pasteData += "api_paste_expire_date=1M&"; + pasteData += "api_paste_expire_date="; + pasteData += QByteArray::number(expiryDays); + pasteData += "D&"; pasteData += format(ct); pasteData += "api_paste_name="; pasteData += QUrl::toPercentEncoding(username); - pasteData += "&api_paste_code="; pasteData += QUrl::toPercentEncoding(fixNewLines(text)); - // fire request m_pasteReply = httpPost(QLatin1String(PASTEBIN_BASE) + QLatin1String(PASTEBIN_API), pasteData); connect(m_pasteReply, SIGNAL(finished()), this, SLOT(pasteFinished())); diff --git a/src/plugins/cpaster/pastebindotcomprotocol.h b/src/plugins/cpaster/pastebindotcomprotocol.h index 3bbccbd4ad8..685dd8c3f6c 100644 --- a/src/plugins/cpaster/pastebindotcomprotocol.h +++ b/src/plugins/cpaster/pastebindotcomprotocol.h @@ -48,6 +48,7 @@ public: virtual void fetch(const QString &id); virtual void paste(const QString &text, ContentType ct = Text, + int expiryDays = 1, const QString &username = QString(), const QString &comment = QString(), const QString &description = QString()); diff --git a/src/plugins/cpaster/pasteview.cpp b/src/plugins/cpaster/pasteview.cpp index b201b1ce7c2..f8de8f95335 100644 --- a/src/plugins/cpaster/pasteview.cpp +++ b/src/plugins/cpaster/pasteview.cpp @@ -144,7 +144,7 @@ int PasteView::showDialog() // Show up with checkable list of diff chunks. int PasteView::show(const QString &user, const QString &description, - const QString &comment, const FileDataList &parts) + const QString &comment, int expiryDays, const FileDataList &parts) { setupDialog(user, description, comment); m_ui.uiPatchList->clear(); @@ -159,20 +159,32 @@ int PasteView::show(const QString &user, const QString &description, } m_ui.stackedWidget->setCurrentIndex(0); m_ui.uiPatchView->setPlainText(content); + setExpiryDays(expiryDays); return showDialog(); } // Show up with editable plain text. int PasteView::show(const QString &user, const QString &description, - const QString &comment, const QString &content) + const QString &comment, int expiryDays, const QString &content) { setupDialog(user, description, comment); m_mode = PlainTextMode; m_ui.stackedWidget->setCurrentIndex(1); m_ui.plainTextEdit->setPlainText(content); + setExpiryDays(expiryDays); return showDialog(); } +void PasteView::setExpiryDays(int d) +{ + m_ui.expirySpinBox->setValue(d); +} + +int PasteView::expiryDays() const +{ + return m_ui.expirySpinBox->value(); +} + void PasteView::accept() { const int index = m_ui.protocolBox->currentIndex(); @@ -189,7 +201,7 @@ void PasteView::accept() return; const Protocol::ContentType ct = Protocol::contentType(m_mimeType); - protocol->paste(data, ct, user(), comment(), description()); + protocol->paste(data, ct, expiryDays(), user(), comment(), description()); // Store settings and close QSettings *settings = Core::ICore::settings(); settings->beginGroup(QLatin1String(groupC)); diff --git a/src/plugins/cpaster/pasteview.h b/src/plugins/cpaster/pasteview.h index a919feba2c7..acb2c2fae13 100644 --- a/src/plugins/cpaster/pasteview.h +++ b/src/plugins/cpaster/pasteview.h @@ -56,10 +56,10 @@ public: // Show up with checkable list of diff chunks. int show(const QString &user, const QString &description, const QString &comment, - const FileDataList &parts); + int expiryDays, const FileDataList &parts); // Show up with editable plain text. int show(const QString &user, const QString &description, const QString &comment, - const QString &content); + int expiryDays, const QString &content); void setProtocol(const QString &protocol); @@ -68,6 +68,8 @@ public: QString comment() const; QString content() const; QString protocol() const; + void setExpiryDays(int d); + int expiryDays() const; virtual void accept(); diff --git a/src/plugins/cpaster/pasteview.ui b/src/plugins/cpaster/pasteview.ui index 36c19658b0e..714826778a8 100644 --- a/src/plugins/cpaster/pasteview.ui +++ b/src/plugins/cpaster/pasteview.ui @@ -26,7 +26,7 @@ <item row="0" column="1"> <widget class="QComboBox" name="protocolBox"/> </item> - <item row="1" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="userLabel"> <property name="text"> <string>&Username:</string> @@ -36,14 +36,14 @@ </property> </widget> </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QLineEdit" name="uiUsername"> <property name="placeholderText"> <string><Username></string> </property> </widget> </item> - <item row="2" column="0"> + <item row="3" column="0"> <widget class="QLabel" name="descriptionLabel"> <property name="text"> <string>&Description:</string> @@ -53,13 +53,36 @@ </property> </widget> </item> - <item row="2" column="1"> + <item row="3" column="1"> <widget class="QLineEdit" name="uiDescription"> <property name="placeholderText"> <string><Description></string> </property> </widget> </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="expirySpinBox"> + <property name="suffix"> + <string>Days</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>365</number> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="expiryLabel"> + <property name="text"> + <string>&Expires after:</string> + </property> + <property name="buddy"> + <cstring>expirySpinBox</cstring> + </property> + </widget> + </item> </layout> </item> <item> diff --git a/src/plugins/cpaster/protocol.h b/src/plugins/cpaster/protocol.h index 76c0e569850..6fd81568166 100644 --- a/src/plugins/cpaster/protocol.h +++ b/src/plugins/cpaster/protocol.h @@ -74,6 +74,7 @@ public: virtual void list(); virtual void paste(const QString &text, ContentType ct = Text, + int expiryDays = 1, const QString &username = QString(), const QString &comment = QString(), const QString &description = QString()) = 0; diff --git a/src/plugins/cpaster/settings.cpp b/src/plugins/cpaster/settings.cpp index de6ebeddd8b..0c724ffe130 100644 --- a/src/plugins/cpaster/settings.cpp +++ b/src/plugins/cpaster/settings.cpp @@ -36,20 +36,22 @@ static const char groupC[] = "CodePaster"; static const char userNameKeyC[] = "UserName"; +static const char expiryDaysKeyC[] = "ExpiryDays"; static const char defaultProtocolKeyC[] = "DefaultProtocol"; static const char copyToClipboardKeyC[] = "CopyToClipboard"; static const char displayOutputKeyC[] = "DisplayOutput"; namespace CodePaster { -Settings::Settings() : copyToClipboard(true), displayOutput(true) +Settings::Settings() : expiryDays(1), copyToClipboard(true), displayOutput(true) { } bool Settings::equals(const Settings &rhs) const { return copyToClipboard == rhs.copyToClipboard && displayOutput == rhs.displayOutput - && username == rhs.username && protocol == rhs.protocol; + && expiryDays == rhs.expiryDays && username == rhs.username + && protocol == rhs.protocol; } void Settings::toSettings(QSettings *settings) const @@ -57,6 +59,7 @@ void Settings::toSettings(QSettings *settings) const settings->beginGroup(QLatin1String(groupC)); settings->setValue(QLatin1String(userNameKeyC), username); settings->setValue(QLatin1String(defaultProtocolKeyC), protocol); + settings->setValue(QLatin1String(expiryDaysKeyC), expiryDays); settings->setValue(QLatin1String(copyToClipboardKeyC), copyToClipboard); settings->setValue(QLatin1String(displayOutputKeyC), displayOutput); settings->endGroup(); @@ -66,6 +69,7 @@ void Settings::fromSettings(const QSettings *settings) { const QString rootKey = QLatin1String(groupC) + QLatin1Char('/'); const QString defaultUser = Utils::Environment::systemEnvironment().userName(); + expiryDays = settings->value(rootKey + QLatin1String(expiryDaysKeyC), 1).toInt(); username = settings->value(rootKey + QLatin1String(userNameKeyC), defaultUser).toString(); protocol = settings->value(rootKey + QLatin1String(defaultProtocolKeyC), PasteBinDotComProtocol::protocolName()).toString(); copyToClipboard = settings->value(rootKey + QLatin1String(copyToClipboardKeyC), true).toBool(); diff --git a/src/plugins/cpaster/settings.h b/src/plugins/cpaster/settings.h index 59c54f81594..54ebc913aad 100644 --- a/src/plugins/cpaster/settings.h +++ b/src/plugins/cpaster/settings.h @@ -46,6 +46,7 @@ struct Settings { QString username; QString protocol; + int expiryDays; bool copyToClipboard; bool displayOutput; }; diff --git a/src/plugins/cpaster/settingspage.cpp b/src/plugins/cpaster/settingspage.cpp index cf87bfb12c6..35060653eb9 100644 --- a/src/plugins/cpaster/settingspage.cpp +++ b/src/plugins/cpaster/settingspage.cpp @@ -59,6 +59,7 @@ void SettingsWidget::setSettings(const Settings &settings) m_ui.userEdit->setText(settings.username); const int index = m_ui.defaultProtocol->findText(settings.protocol); m_ui.defaultProtocol->setCurrentIndex(index == -1 ? 0 : index); + m_ui.expirySpinBox->setValue(settings.expiryDays); m_ui.clipboardBox->setChecked(settings.copyToClipboard); m_ui.displayBox->setChecked(settings.displayOutput); } @@ -68,6 +69,7 @@ Settings SettingsWidget::settings() Settings rc; rc.username = m_ui.userEdit->text(); rc.protocol = m_ui.defaultProtocol->currentText(); + rc.expiryDays = m_ui.expirySpinBox->value(); rc.copyToClipboard = m_ui.clipboardBox->isChecked(); rc.displayOutput = m_ui.displayBox->isChecked(); return rc; diff --git a/src/plugins/cpaster/settingspage.ui b/src/plugins/cpaster/settingspage.ui index 21ee0564d03..8cb5bc1ce44 100644 --- a/src/plugins/cpaster/settingspage.ui +++ b/src/plugins/cpaster/settingspage.ui @@ -11,7 +11,14 @@ </rect> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="8" column="0" colspan="2"> + <item row="4" column="0" colspan="2"> + <widget class="QCheckBox" name="clipboardBox"> + <property name="text"> + <string>Copy-paste URL to clipboard</string> + </property> + </widget> + </item> + <item row="9" column="0" colspan="2"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -24,22 +31,35 @@ </property> </spacer> </item> - <item row="4" column="0" colspan="2"> - <widget class="QCheckBox" name="displayBox"> + <item row="1" column="1"> + <widget class="QLineEdit" name="userEdit"/> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="defaultProtocol"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="protocolLabel"> <property name="text"> - <string>Display Output pane after sending a post</string> + <string>Default protocol:</string> </property> </widget> </item> - <item row="3" column="0" colspan="2"> - <widget class="QCheckBox" name="clipboardBox"> + <item row="2" column="0"> + <widget class="QLabel" name="expiryLabel"> <property name="text"> - <string>Copy-paste URL to clipboard</string> + <string>&Expires after:</string> + </property> + <property name="buddy"> + <cstring>expirySpinBox</cstring> </property> </widget> </item> - <item row="1" column="1"> - <widget class="QLineEdit" name="userEdit"/> + <item row="5" column="0" colspan="2"> + <widget class="QCheckBox" name="displayBox"> + <property name="text"> + <string>Display Output pane after sending a post</string> + </property> + </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="userNameLabel"> @@ -48,13 +68,16 @@ </property> </widget> </item> - <item row="0" column="1"> - <widget class="QComboBox" name="defaultProtocol"/> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="protocolLabel"> - <property name="text"> - <string>Default protocol:</string> + <item row="2" column="1"> + <widget class="QSpinBox" name="expirySpinBox"> + <property name="suffix"> + <string>Days</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>365</number> </property> </widget> </item> diff --git a/src/plugins/cpaster/urlopenprotocol.cpp b/src/plugins/cpaster/urlopenprotocol.cpp index 86589828221..f2e429e671f 100644 --- a/src/plugins/cpaster/urlopenprotocol.cpp +++ b/src/plugins/cpaster/urlopenprotocol.cpp @@ -71,7 +71,7 @@ void UrlOpenProtocol::fetchFinished() emit fetchDone(title, content, error); } -void UrlOpenProtocol::paste(const QString &, ContentType, const QString &, +void UrlOpenProtocol::paste(const QString &, ContentType, int, const QString &, const QString &, const QString &) { } diff --git a/src/plugins/cpaster/urlopenprotocol.h b/src/plugins/cpaster/urlopenprotocol.h index dbd00674caf..3179078e1e0 100644 --- a/src/plugins/cpaster/urlopenprotocol.h +++ b/src/plugins/cpaster/urlopenprotocol.h @@ -43,7 +43,7 @@ public: QString name() const; unsigned capabilities() const; void fetch(const QString &url); - void paste(const QString &, ContentType, const QString &, const QString &, const QString &); + void paste(const QString &, ContentType, int, const QString &, const QString &, const QString &); private slots: void fetchFinished(); -- GitLab