diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-10-07 13:20:54 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-10-07 18:19:19 +0200 |
commit | 2a5ea0269a1f9511c51d661a6c7d7bdc7d0176fa (patch) | |
tree | 7649cf4c1c20bbe8c801d642148992eea314d3ec /plugins/ProfileEditor | |
parent | Add hint on enabling plugins to makepkg (diff) | |
download | smolbote-2a5ea0269a1f9511c51d661a6c7d7bdc7d0176fa.tar.xz |
Expand HTTP header settings #4
- add doc/Usage/Filter.asciidoc to explain the usage of the filter headers
- add HTTP headers to Profile (section "headers")
- Use request interceptor to apply filter headers, then profile headers
- add insert/delete actions to ProfileEditor
Diffstat (limited to 'plugins/ProfileEditor')
-rw-r--r-- | plugins/ProfileEditor/CMakeLists.txt | 3 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/newhttpheaderdialog.cpp | 32 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/newhttpheaderdialog.h | 33 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/newhttpheaderdialog.ui | 84 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/profileview.cpp | 46 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/profileview.h | 3 | ||||
-rw-r--r-- | plugins/ProfileEditor/forms/profileview.ui | 68 |
7 files changed, 267 insertions, 2 deletions
diff --git a/plugins/ProfileEditor/CMakeLists.txt b/plugins/ProfileEditor/CMakeLists.txt index d22d3d6..7c9a774 100644 --- a/plugins/ProfileEditor/CMakeLists.txt +++ b/plugins/ProfileEditor/CMakeLists.txt @@ -20,6 +20,9 @@ add_library(ProfileEditorPlugin SHARED forms/newprofiledialog.cpp forms/newprofiledialog.h forms/newprofiledialog.ui + forms/newhttpheaderdialog.cpp + forms/newhttpheaderdialog.h + forms/newhttpheaderdialog.ui ) target_include_directories(ProfileEditorPlugin diff --git a/plugins/ProfileEditor/forms/newhttpheaderdialog.cpp b/plugins/ProfileEditor/forms/newhttpheaderdialog.cpp new file mode 100644 index 0000000..3978c4e --- /dev/null +++ b/plugins/ProfileEditor/forms/newhttpheaderdialog.cpp @@ -0,0 +1,32 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "newhttpheaderdialog.h" +#include "ui_newhttpheaderdialog.h" + +NewHttpHeaderDialog::NewHttpHeaderDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::NewHttpHeaderDialog) +{ + ui->setupUi(this); +} + +NewHttpHeaderDialog::~NewHttpHeaderDialog() +{ + delete ui; +} + +QString NewHttpHeaderDialog::header() const +{ + return ui->header->text(); +} + +QString NewHttpHeaderDialog::value() const +{ + return ui->value->text(); +} diff --git a/plugins/ProfileEditor/forms/newhttpheaderdialog.h b/plugins/ProfileEditor/forms/newhttpheaderdialog.h new file mode 100644 index 0000000..53a2a80 --- /dev/null +++ b/plugins/ProfileEditor/forms/newhttpheaderdialog.h @@ -0,0 +1,33 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef NEWHTTPHEADERDIALOG_H +#define NEWHTTPHEADERDIALOG_H + +#include <QDialog> + +namespace Ui { +class NewHttpHeaderDialog; +} + +class NewHttpHeaderDialog : public QDialog +{ + Q_OBJECT + +public: + explicit NewHttpHeaderDialog(QWidget *parent = nullptr); + ~NewHttpHeaderDialog(); + + QString header() const; + QString value() const; + +private: + Ui::NewHttpHeaderDialog *ui; +}; + +#endif // NEWHTTPHEADERDIALOG_H diff --git a/plugins/ProfileEditor/forms/newhttpheaderdialog.ui b/plugins/ProfileEditor/forms/newhttpheaderdialog.ui new file mode 100644 index 0000000..a457ba6 --- /dev/null +++ b/plugins/ProfileEditor/forms/newhttpheaderdialog.ui @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>NewHttpHeaderDialog</class> + <widget class="QDialog" name="NewHttpHeaderDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>320</width> + <height>108</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dialog</string> + </property> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="header_label"> + <property name="text"> + <string>Header</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="header"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="value_label"> + <property name="text"> + <string>Value</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="value"/> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>NewHttpHeaderDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>NewHttpHeaderDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/plugins/ProfileEditor/forms/profileview.cpp b/plugins/ProfileEditor/forms/profileview.cpp index ccb4ae5..4a89af6 100644 --- a/plugins/ProfileEditor/forms/profileview.cpp +++ b/plugins/ProfileEditor/forms/profileview.cpp @@ -13,6 +13,7 @@ #include <QWebEngineSettings> #include <QWebEngineCookieStore> #include <QDateTime> +#include "newhttpheaderdialog.h" inline void connectSetting(QCheckBox *checkBox, WebProfile *profile, QWebEngineSettings::WebAttribute attr) { @@ -86,6 +87,28 @@ ProfileView::ProfileView(WebProfile *profile, QWidget *parent) ui->storagePath_lineEdit->setText(m_profile->persistentStoragePath()); ui->cachePath_lineEdit->setText(m_profile->cachePath()); + // headers tab + for(auto i = m_profile->headers().constBegin(); i != m_profile->headers().constEnd(); ++i) { + //ui->httpHeaders->addItem(); + headerChanged(i.key(), i.value()); + } + connect(m_profile, &WebProfile::headerChanged, this, &ProfileView::headerChanged); + connect(m_profile, &WebProfile::headerRemoved, this, &ProfileView::headerRemoved); + connect(ui->headers_insert, &QPushButton::clicked, m_profile, [this]() { + auto *dlg = new NewHttpHeaderDialog(this); + if(dlg->exec() == QDialog::Accepted) { + m_profile->setHttpHeader(dlg->header(), dlg->value()); + } + delete dlg; + }); + connect(ui->headers_delete, &QPushButton::clicked, m_profile, [this]() { + for(auto &list : ui->httpHeaders->selectedRanges()) { + for(int i = list.bottomRow(); i >= list.topRow(); --i) { + m_profile->removeHttpHeader(ui->httpHeaders->item(i, 0)->text()); + } + } + }); + // settings tab connectSetting(ui->autoloadImages, m_profile, QWebEngineSettings::AutoLoadImages); connectSetting(ui->autoloadIcons, m_profile, QWebEngineSettings::AutoLoadIconsForPage); @@ -157,6 +180,29 @@ void ProfileView::loadCookies(QWebEngineCookieStore *store) connect(ui->cookies_deleteAll, &QPushButton::clicked, store, &QWebEngineCookieStore::deleteAllCookies); } +void ProfileView::headerChanged(const QString &name, const QString &value) +{ + const auto items = ui->httpHeaders->findItems(name, Qt::MatchExactly); + if(!items.isEmpty()) { + QTableWidgetItem *valueItem = ui->httpHeaders->item(items.constFirst()->row(), 1); + valueItem->setText(value); + } else { + // new header + const int index = ui->httpHeaders->rowCount(); + ui->httpHeaders->setRowCount(index + 1); + ui->httpHeaders->setItem(index, 0, new QTableWidgetItem(name)); + ui->httpHeaders->setItem(index, 1, new QTableWidgetItem(value)); + } +} + +void ProfileView::headerRemoved(const QString& name) +{ + const auto items = ui->httpHeaders->findItems(name, Qt::MatchExactly); + if(!items.isEmpty()) { + ui->httpHeaders->removeRow(items.constFirst()->row()); + } +} + void ProfileView::cookieAdded(const QNetworkCookie &cookie) { auto index = ui->cookies->rowCount(); diff --git a/plugins/ProfileEditor/forms/profileview.h b/plugins/ProfileEditor/forms/profileview.h index 5ff472b..d05b0f1 100644 --- a/plugins/ProfileEditor/forms/profileview.h +++ b/plugins/ProfileEditor/forms/profileview.h @@ -33,6 +33,9 @@ public: private slots: void loadCookies(QWebEngineCookieStore *store); + void headerChanged(const QString &name, const QString &value); + void headerRemoved(const QString &name); + void cookieAdded(const QNetworkCookie &cookie); void cookieRemoved(const QNetworkCookie &cookie); diff --git a/plugins/ProfileEditor/forms/profileview.ui b/plugins/ProfileEditor/forms/profileview.ui index 74b6d5d..630e53d 100644 --- a/plugins/ProfileEditor/forms/profileview.ui +++ b/plugins/ProfileEditor/forms/profileview.ui @@ -234,6 +234,70 @@ </item> </layout> </widget> + <widget class="QWidget" name="httpHeadersTab"> + <attribute name="title"> + <string>Headers</string> + </attribute> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QTableWidget" name="httpHeaders"> + <attribute name="horizontalHeaderDefaultSectionSize"> + <number>200</number> + </attribute> + <attribute name="horizontalHeaderMinimumSectionSize"> + <number>100</number> + </attribute> + <attribute name="horizontalHeaderStretchLastSection"> + <bool>true</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <column> + <property name="text"> + <string>Name</string> + </property> + </column> + <column> + <property name="text"> + <string>Value</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QPushButton" name="headers_insert"> + <property name="text"> + <string>Insert</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="headers_delete"> + <property name="text"> + <string>Delete</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> <widget class="QWidget" name="settingsTab"> <attribute name="title"> <string>Settings</string> @@ -249,8 +313,8 @@ <rect> <x>0</x> <y>0</y> - <width>276</width> - <height>855</height> + <width>584</width> + <height>797</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout_4"> |