aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cpaster
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-05-04 14:52:47 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2020-05-05 12:35:11 +0000
commit97165f0cb89921439b4f0c9eee92d8599606ac04 (patch)
tree874458015aebdebda34398dd97131899d89edf37 /src/plugins/cpaster
parent43a0e9d2c57cdbaf1c73cb5af2e4dbf6095ad59b (diff)
CodePaster: Expose privacy setting
Let the user decide whether their pasted content is public. Default is non-public, for safety reasons. Task-number: QTCREATORBUG-23972 Change-Id: I5be444807d3f2cb41c629825715f0eaaa50d34c7 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/cpaster')
-rw-r--r--src/plugins/cpaster/cpasterplugin.cpp4
-rw-r--r--src/plugins/cpaster/fileshareprotocol.cpp14
-rw-r--r--src/plugins/cpaster/fileshareprotocol.h2
-rw-r--r--src/plugins/cpaster/pastebindotcomprotocol.cpp15
-rw-r--r--src/plugins/cpaster/pastebindotcomprotocol.h1
-rw-r--r--src/plugins/cpaster/pastecodedotxyzprotocol.cpp14
-rw-r--r--src/plugins/cpaster/pastecodedotxyzprotocol.h1
-rw-r--r--src/plugins/cpaster/pasteview.cpp26
-rw-r--r--src/plugins/cpaster/pasteview.h6
-rw-r--r--src/plugins/cpaster/pasteview.ui22
-rw-r--r--src/plugins/cpaster/protocol.h1
-rw-r--r--src/plugins/cpaster/settings.cpp7
-rw-r--r--src/plugins/cpaster/settings.h1
-rw-r--r--src/plugins/cpaster/settingspage.cpp2
-rw-r--r--src/plugins/cpaster/settingspage.ui9
-rw-r--r--src/plugins/cpaster/stickynotespasteprotocol.cpp15
-rw-r--r--src/plugins/cpaster/stickynotespasteprotocol.h1
-rw-r--r--src/plugins/cpaster/urlopenprotocol.cpp4
-rw-r--r--src/plugins/cpaster/urlopenprotocol.h2
19 files changed, 108 insertions, 39 deletions
diff --git a/src/plugins/cpaster/cpasterplugin.cpp b/src/plugins/cpaster/cpasterplugin.cpp
index dcfd01dda5..681f1aef3f 100644
--- a/src/plugins/cpaster/cpasterplugin.cpp
+++ b/src/plugins/cpaster/cpasterplugin.cpp
@@ -275,8 +275,8 @@ void CodePasterPluginPrivate::post(QString data, const QString &mimeType)
const FileDataList diffChunks = splitDiffToFiles(data);
const int dialogResult = diffChunks.isEmpty() ?
- view.show(username, QString(), QString(), m_settings.expiryDays, data) :
- view.show(username, QString(), QString(), m_settings.expiryDays, diffChunks);
+ view.show(username, QString(), QString(), m_settings.expiryDays, m_settings.publicPaste, data) :
+ view.show(username, QString(), QString(), m_settings.expiryDays, m_settings.publicPaste, 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 3b821db4e3..937165a3f2 100644
--- a/src/plugins/cpaster/fileshareprotocol.cpp
+++ b/src/plugins/cpaster/fileshareprotocol.cpp
@@ -177,11 +177,15 @@ void FileShareProtocol::list()
emit listDone(name(), entries);
}
-void FileShareProtocol::paste(const QString &text,
- ContentType /* ct */, int /* expiryDays */,
- const QString &username,
- const QString & /* comment */,
- const QString &description)
+void FileShareProtocol::paste(
+ const QString &text,
+ ContentType /* ct */,
+ int /* expiryDays */,
+ bool /* publicPaste */,
+ const QString &username,
+ const QString & /* comment */,
+ const QString &description
+ )
{
// Write out temp XML file
Utils::TempFileSaver saver(m_settings->path + QLatin1Char('/') + QLatin1String(tempPatternC));
diff --git a/src/plugins/cpaster/fileshareprotocol.h b/src/plugins/cpaster/fileshareprotocol.h
index ea89e41f2a..a22fa62a97 100644
--- a/src/plugins/cpaster/fileshareprotocol.h
+++ b/src/plugins/cpaster/fileshareprotocol.h
@@ -54,7 +54,7 @@ public:
void fetch(const QString &id) override;
void list() override;
void paste(const QString &text,
- ContentType ct = Text, int expiryDays = 1,
+ ContentType ct = Text, int expiryDays = 1, bool publicPaste = false,
const QString &username = QString(),
const QString &comment = QString(),
const QString &description = QString()) override;
diff --git a/src/plugins/cpaster/pastebindotcomprotocol.cpp b/src/plugins/cpaster/pastebindotcomprotocol.cpp
index fb3d60ba92..ed4db9cf46 100644
--- a/src/plugins/cpaster/pastebindotcomprotocol.cpp
+++ b/src/plugins/cpaster/pastebindotcomprotocol.cpp
@@ -99,11 +99,15 @@ static inline QByteArray expirySpecification(int expiryDays)
return QByteArray("N");
}
-void PasteBinDotComProtocol::paste(const QString &text,
- ContentType ct, int expiryDays,
- const QString & /* username */, // Not used unless registered user
- const QString &comment,
- const QString &description)
+void PasteBinDotComProtocol::paste(
+ const QString &text,
+ ContentType ct,
+ int expiryDays,
+ bool publicPaste,
+ const QString & /* username */, // Not used unless registered user
+ const QString &comment,
+ const QString &description
+ )
{
Q_UNUSED(comment)
Q_UNUSED(description)
@@ -118,6 +122,7 @@ void PasteBinDotComProtocol::paste(const QString &text,
pasteData += format(ct);
pasteData += "api_paste_name="; // Title or name.
pasteData += QUrl::toPercentEncoding(description);
+ pasteData.append("&api_paste_private=").append(QByteArray(publicPaste ? "0" : "1"));
pasteData += "&api_paste_code=";
pasteData += QUrl::toPercentEncoding(fixNewLines(text));
// fire request
diff --git a/src/plugins/cpaster/pastebindotcomprotocol.h b/src/plugins/cpaster/pastebindotcomprotocol.h
index f5f308a77b..7e2d1f5cdf 100644
--- a/src/plugins/cpaster/pastebindotcomprotocol.h
+++ b/src/plugins/cpaster/pastebindotcomprotocol.h
@@ -42,6 +42,7 @@ public:
void paste(const QString &text,
ContentType ct = Text,
int expiryDays = 1,
+ bool publicPaste = false,
const QString &username = QString(),
const QString &comment = QString(),
const QString &description = QString()) override;
diff --git a/src/plugins/cpaster/pastecodedotxyzprotocol.cpp b/src/plugins/cpaster/pastecodedotxyzprotocol.cpp
index 8ca7d5c547..71f7ec6c89 100644
--- a/src/plugins/cpaster/pastecodedotxyzprotocol.cpp
+++ b/src/plugins/cpaster/pastecodedotxyzprotocol.cpp
@@ -65,15 +65,23 @@ void PasteCodeDotXyzProtocol::fetch(const QString &id)
});
}
-void PasteCodeDotXyzProtocol::paste(const QString &text, Protocol::ContentType ct, int expiryDays,
- const QString &username, const QString &comment,
- const QString &description)
+void PasteCodeDotXyzProtocol::paste(
+ const QString &text,
+ Protocol::ContentType ct,
+ int expiryDays,
+ bool publicPaste,
+ const QString &username,
+ const QString &comment,
+ const QString &description
+ )
{
QByteArray data;
data += "text=" + QUrl::toPercentEncoding(fixNewLines(text));
data += "&expire=" + QUrl::toPercentEncoding(QString::number(expiryDays * 24 * 60));
data += "&title=" + QUrl::toPercentEncoding(description);
data += "&name=" + QUrl::toPercentEncoding(username);
+ if (!publicPaste)
+ data += "&private=1";
static const auto langValue = [](Protocol::ContentType type) -> QByteArray {
switch (type) {
case Protocol::Text: return "text";
diff --git a/src/plugins/cpaster/pastecodedotxyzprotocol.h b/src/plugins/cpaster/pastecodedotxyzprotocol.h
index 7988ad9dc8..ef62956d6d 100644
--- a/src/plugins/cpaster/pastecodedotxyzprotocol.h
+++ b/src/plugins/cpaster/pastecodedotxyzprotocol.h
@@ -43,6 +43,7 @@ private:
void paste(const QString &text,
ContentType ct = Text,
int expiryDays = 1,
+ bool publicPaste = false,
const QString &username = QString(),
const QString &comment = QString(),
const QString &description = QString()) override;
diff --git a/src/plugins/cpaster/pasteview.cpp b/src/plugins/cpaster/pasteview.cpp
index 17ad2abcfc..d5775adb5e 100644
--- a/src/plugins/cpaster/pasteview.cpp
+++ b/src/plugins/cpaster/pasteview.cpp
@@ -139,8 +139,14 @@ int PasteView::showDialog()
}
// Show up with checkable list of diff chunks.
-int PasteView::show(const QString &user, const QString &description,
- const QString &comment, int expiryDays, const FileDataList &parts)
+int PasteView::show(
+ const QString &user,
+ const QString &description,
+ const QString &comment,
+ int expiryDays,
+ bool makePublic,
+ const FileDataList &parts
+ )
{
setupDialog(user, description, comment);
m_ui.uiPatchList->clear();
@@ -156,18 +162,20 @@ int PasteView::show(const QString &user, const QString &description,
m_ui.stackedWidget->setCurrentIndex(0);
m_ui.uiPatchView->setPlainText(content);
setExpiryDays(expiryDays);
+ setMakePublic(makePublic);
return showDialog();
}
// Show up with editable plain text.
int PasteView::show(const QString &user, const QString &description,
- const QString &comment, int expiryDays, const QString &content)
+ const QString &comment, int expiryDays, bool makePublic, const QString &content)
{
setupDialog(user, description, comment);
m_mode = PlainTextMode;
m_ui.stackedWidget->setCurrentIndex(1);
m_ui.plainTextEdit->setPlainText(content);
setExpiryDays(expiryDays);
+ setMakePublic(makePublic);
return showDialog();
}
@@ -176,11 +184,21 @@ void PasteView::setExpiryDays(int d)
m_ui.expirySpinBox->setValue(d);
}
+void PasteView::setMakePublic(bool p)
+{
+ m_ui.makePublicCheckBox->setChecked(p);
+}
+
int PasteView::expiryDays() const
{
return m_ui.expirySpinBox->value();
}
+bool PasteView::makePublic() const
+{
+ return m_ui.makePublicCheckBox->isChecked();
+}
+
void PasteView::accept()
{
const int index = m_ui.protocolBox->currentIndex();
@@ -197,7 +215,7 @@ void PasteView::accept()
return;
const Protocol::ContentType ct = Protocol::contentType(m_mimeType);
- protocol->paste(data, ct, expiryDays(), user(), comment(), description());
+ protocol->paste(data, ct, expiryDays(), makePublic(), 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 cdaf8db592..6a2b78c64e 100644
--- a/src/plugins/cpaster/pasteview.h
+++ b/src/plugins/cpaster/pasteview.h
@@ -52,10 +52,10 @@ public:
// Show up with checkable list of diff chunks.
int show(const QString &user, const QString &description, const QString &comment,
- int expiryDays, const FileDataList &parts);
+ int expiryDays, bool makePublic, const FileDataList &parts);
// Show up with editable plain text.
int show(const QString &user, const QString &description, const QString &comment,
- int expiryDays, const QString &content);
+ int expiryDays, bool makePublic, const QString &content);
void setProtocol(const QString &protocol);
@@ -65,7 +65,9 @@ public:
QString content() const;
QString protocol() const;
void setExpiryDays(int d);
+ void setMakePublic(bool p);
int expiryDays() const;
+ bool makePublic() const;
void accept() override;
diff --git a/src/plugins/cpaster/pasteview.ui b/src/plugins/cpaster/pasteview.ui
index 2575317920..c4719dded1 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="2" column="0">
+ <item row="3" column="0">
<widget class="QLabel" name="userLabel">
<property name="text">
<string>&amp;Username:</string>
@@ -36,14 +36,14 @@
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="3" column="1">
<widget class="QLineEdit" name="uiUsername">
<property name="placeholderText">
<string>&lt;Username&gt;</string>
</property>
</widget>
</item>
- <item row="3" column="0">
+ <item row="4" column="0">
<widget class="QLabel" name="descriptionLabel">
<property name="text">
<string>&amp;Description:</string>
@@ -53,14 +53,14 @@
</property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="4" column="1">
<widget class="QLineEdit" name="uiDescription">
<property name="placeholderText">
<string>&lt;Description&gt;</string>
</property>
</widget>
</item>
- <item row="1" column="1">
+ <item row="2" column="1">
<widget class="QSpinBox" name="expirySpinBox">
<property name="suffix">
<string> Days</string>
@@ -73,7 +73,7 @@
</property>
</widget>
</item>
- <item row="1" column="0">
+ <item row="2" column="0">
<widget class="QLabel" name="expiryLabel">
<property name="text">
<string>&amp;Expires after:</string>
@@ -83,6 +83,16 @@
</property>
</widget>
</item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="makePublicLabel">
+ <property name="text">
+ <string>Make public:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="makePublicCheckBox"/>
+ </item>
</layout>
</item>
<item>
diff --git a/src/plugins/cpaster/protocol.h b/src/plugins/cpaster/protocol.h
index c315a673d1..d9b66d7cc4 100644
--- a/src/plugins/cpaster/protocol.h
+++ b/src/plugins/cpaster/protocol.h
@@ -68,6 +68,7 @@ public:
virtual void paste(const QString &text,
ContentType ct = Text,
int expiryDays = 1,
+ bool publicPaste = false,
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 b29a1fa673..61508a201d 100644
--- a/src/plugins/cpaster/settings.cpp
+++ b/src/plugins/cpaster/settings.cpp
@@ -36,14 +36,15 @@ static const char expiryDaysKeyC[] = "ExpiryDays";
static const char defaultProtocolKeyC[] = "DefaultProtocol";
static const char copyToClipboardKeyC[] = "CopyToClipboard";
static const char displayOutputKeyC[] = "DisplayOutput";
+static const char publicPasteKeyC[] = "DisplayOutput";
namespace CodePaster {
bool Settings::equals(const Settings &rhs) const
{
return copyToClipboard == rhs.copyToClipboard && displayOutput == rhs.displayOutput
- && expiryDays == rhs.expiryDays && username == rhs.username
- && protocol == rhs.protocol;
+ && expiryDays == rhs.expiryDays && username == rhs.username
+ && protocol == rhs.protocol && publicPaste == rhs.publicPaste;
}
void Settings::toSettings(QSettings *settings) const
@@ -54,6 +55,7 @@ void Settings::toSettings(QSettings *settings) const
settings->setValue(QLatin1String(expiryDaysKeyC), expiryDays);
settings->setValue(QLatin1String(copyToClipboardKeyC), copyToClipboard);
settings->setValue(QLatin1String(displayOutputKeyC), displayOutput);
+ settings->setValue(publicPasteKeyC, publicPaste);
settings->endGroup();
}
@@ -66,6 +68,7 @@ void Settings::fromSettings(const QSettings *settings)
protocol = settings->value(rootKey + QLatin1String(defaultProtocolKeyC), PasteBinDotComProtocol::protocolName()).toString();
copyToClipboard = settings->value(rootKey + QLatin1String(copyToClipboardKeyC), true).toBool();
displayOutput = settings->value(rootKey + QLatin1String(displayOutputKeyC), true).toBool();
+ publicPaste = settings->value(rootKey + publicPasteKeyC, false).toBool();
}
} // namespace CodePaster
diff --git a/src/plugins/cpaster/settings.h b/src/plugins/cpaster/settings.h
index d47c2f7ce3..451f85e0f3 100644
--- a/src/plugins/cpaster/settings.h
+++ b/src/plugins/cpaster/settings.h
@@ -44,6 +44,7 @@ public:
int expiryDays = 1;
bool copyToClipboard = true;
bool displayOutput = true;
+ bool publicPaste = false;
};
inline bool operator==(const Settings &s1, const Settings &s2) { return s1.equals(s2); }
diff --git a/src/plugins/cpaster/settingspage.cpp b/src/plugins/cpaster/settingspage.cpp
index b9b70a9e73..c21b0fe485 100644
--- a/src/plugins/cpaster/settingspage.cpp
+++ b/src/plugins/cpaster/settingspage.cpp
@@ -56,6 +56,7 @@ SettingsWidget::SettingsWidget(const QStringList &protocols, Settings *settings)
const int index = m_ui.defaultProtocol->findText(m_settings->protocol);
m_ui.defaultProtocol->setCurrentIndex(index == -1 ? 0 : index);
m_ui.expirySpinBox->setValue(m_settings->expiryDays);
+ m_ui.publicCheckBox->setChecked(m_settings->publicPaste);
m_ui.clipboardBox->setChecked(m_settings->copyToClipboard);
m_ui.displayBox->setChecked(m_settings->displayOutput);
}
@@ -66,6 +67,7 @@ void SettingsWidget::apply()
rc.username = m_ui.userEdit->text();
rc.protocol = m_ui.defaultProtocol->currentText();
rc.expiryDays = m_ui.expirySpinBox->value();
+ rc.publicPaste = m_ui.publicCheckBox->isChecked();
rc.copyToClipboard = m_ui.clipboardBox->isChecked();
rc.displayOutput = m_ui.displayBox->isChecked();
diff --git a/src/plugins/cpaster/settingspage.ui b/src/plugins/cpaster/settingspage.ui
index 906f8de474..de4020433d 100644
--- a/src/plugins/cpaster/settingspage.ui
+++ b/src/plugins/cpaster/settingspage.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>291</width>
+ <width>370</width>
<height>229</height>
</rect>
</property>
@@ -81,6 +81,13 @@
</property>
</widget>
</item>
+ <item row="6" column="0">
+ <widget class="QCheckBox" name="publicCheckBox">
+ <property name="text">
+ <string>Make pasted content public by default</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<tabstops>
diff --git a/src/plugins/cpaster/stickynotespasteprotocol.cpp b/src/plugins/cpaster/stickynotespasteprotocol.cpp
index 9c8ad232eb..c4924a70c8 100644
--- a/src/plugins/cpaster/stickynotespasteprotocol.cpp
+++ b/src/plugins/cpaster/stickynotespasteprotocol.cpp
@@ -97,16 +97,21 @@ static inline QByteArray pasteLanguage(Protocol::ContentType ct)
return QByteArray("language=text");
}
-void StickyNotesPasteProtocol::paste(const QString &text,
- ContentType ct, int expiryDays,
- const QString &username,
- const QString &comment,
- const QString &description)
+void StickyNotesPasteProtocol::paste(
+ const QString &text,
+ ContentType ct,
+ int expiryDays,
+ bool publicPaste,
+ const QString &username,
+ const QString &comment,
+ const QString &description
+ )
{
enum { maxDescriptionLength = 30 }; // Length of description is limited.
Q_UNUSED(username)
Q_UNUSED(comment)
+ Q_UNUSED(publicPaste)
QTC_ASSERT(!m_pasteReply, return);
// Format body
diff --git a/src/plugins/cpaster/stickynotespasteprotocol.h b/src/plugins/cpaster/stickynotespasteprotocol.h
index 584c90a921..8c0b35e08c 100644
--- a/src/plugins/cpaster/stickynotespasteprotocol.h
+++ b/src/plugins/cpaster/stickynotespasteprotocol.h
@@ -39,6 +39,7 @@ public:
void paste(const QString &text,
ContentType ct = Text,
int expiryDays = 1,
+ bool publicPaste = false,
const QString &username = QString(),
const QString &comment = QString(),
const QString &description = QString()) override;
diff --git a/src/plugins/cpaster/urlopenprotocol.cpp b/src/plugins/cpaster/urlopenprotocol.cpp
index 64f416b19e..01e1cd58d8 100644
--- a/src/plugins/cpaster/urlopenprotocol.cpp
+++ b/src/plugins/cpaster/urlopenprotocol.cpp
@@ -63,7 +63,7 @@ void UrlOpenProtocol::fetchFinished()
emit fetchDone(title, content, error);
}
-void UrlOpenProtocol::paste(const QString &, ContentType, int, const QString &,
- const QString &, const QString &)
+void UrlOpenProtocol::paste(const QString &, ContentType, int, bool,
+ const QString &, const QString &, const QString &)
{
}
diff --git a/src/plugins/cpaster/urlopenprotocol.h b/src/plugins/cpaster/urlopenprotocol.h
index 65f1fcb504..161d2a16b2 100644
--- a/src/plugins/cpaster/urlopenprotocol.h
+++ b/src/plugins/cpaster/urlopenprotocol.h
@@ -36,7 +36,7 @@ public:
QString name() const override;
unsigned capabilities() const override;
void fetch(const QString &url) override;
- void paste(const QString &, ContentType, int, const QString &, const QString &, const QString &) override;
+ void paste(const QString &, ContentType, int, bool, const QString &, const QString &, const QString &) override;
private:
void fetchFinished();