19#include "ui_useragentdialog.h"
33 , m_manager(
mApp->userAgentManager())
35 setAttribute(Qt::WA_DeleteOnClose);
38 ui->globalComboBox->setLayoutDirection(Qt::LeftToRight);
39 ui->table->setLayoutDirection(Qt::LeftToRight);
43 if (QGuiApplication::platformName() ==
QL1S(
"xcb"))
44 os.prepend(
QL1S(
"X11; "));
45 else if (QGuiApplication::platformName().startsWith(
QL1S(
"wayland")))
46 os.prepend(
QL1S(
"Wayland; "));
49 QRegularExpression chromeRx(
QSL(
"Chrome/([^\\s]+)"));
50 const QString chromeVersion = chromeRx.match(m_manager->
defaultUserAgent()).captured(1);
52 m_knownUserAgents <<
QSL(
"Opera/9.80 (%1) Presto/2.12.388 Version/12.16").arg(os)
53 <<
QSL(
"Mozilla/5.0 (%1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%2 Safari/537.36").arg(os, chromeVersion)
54 <<
QSL(
"Mozilla/5.0 (%1) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.12").arg(os)
55 <<
QSL(
"Mozilla/5.0 (%1; rv:102.0) Gecko/20100101 Firefox/102.0").arg(os);
57 ui->globalComboBox->addItems(m_knownUserAgents);
60 ui->changeGlobal->setChecked(!globalUserAgent.isEmpty());
61 ui->globalComboBox->lineEdit()->setText(globalUserAgent);
62 ui->globalComboBox->lineEdit()->setCursorPosition(0);
70 auto* siteItem =
new QTableWidgetItem(
i.key());
71 auto* userAgentItem =
new QTableWidgetItem(
i.value());
73 int row = ui->table->rowCount();
75 ui->table->insertRow(row);
76 ui->table->setItem(row, 0, siteItem);
77 ui->table->setItem(row, 1, userAgentItem);
80 ui->table->sortByColumn(-1, Qt::AscendingOrder);
82 connect(ui->add, &QAbstractButton::clicked,
this, &UserAgentDialog::addSite);
83 connect(ui->remove, &QAbstractButton::clicked,
this, &UserAgentDialog::removeSite);
84 connect(ui->edit, &QAbstractButton::clicked,
this, &UserAgentDialog::editSite);
85 connect(ui->table, &QTableWidget::itemDoubleClicked,
this, &UserAgentDialog::editSite);
87 connect(ui->changeGlobal, &QAbstractButton::clicked,
this, &UserAgentDialog::enableGlobalComboBox);
88 connect(ui->changePerSite, &QAbstractButton::clicked,
this, &UserAgentDialog::enablePerSiteFrame);
90 enableGlobalComboBox(ui->changeGlobal->isChecked());
91 enablePerSiteFrame(ui->changePerSite->isChecked());
94void UserAgentDialog::addSite()
99 if (showEditDialog(tr(
"Add new site"), &site, &userAgent)) {
100 auto* siteItem =
new QTableWidgetItem(site);
101 auto* userAgentItem =
new QTableWidgetItem(userAgent);
103 int row = ui->table->rowCount();
105 ui->table->insertRow(row);
106 ui->table->setItem(row, 0, siteItem);
107 ui->table->setItem(row, 1, userAgentItem);
111void UserAgentDialog::removeSite()
113 int row = ui->table->currentRow();
115 QTableWidgetItem* siteItem = ui->table->item(row, 0);
116 QTableWidgetItem* userAgentItem = ui->table->item(row, 1);
118 if (siteItem && userAgentItem) {
120 delete userAgentItem;
122 ui->table->removeRow(row);
126void UserAgentDialog::editSite()
128 int row = ui->table->currentRow();
130 QTableWidgetItem* siteItem = ui->table->item(row, 0);
131 QTableWidgetItem* userAgentItem = ui->table->item(row, 1);
133 if (siteItem && userAgentItem) {
134 QString site = siteItem->text();
135 QString userAgent = userAgentItem->text();
137 if (showEditDialog(tr(
"Edit site"), &site, &userAgent)) {
138 siteItem->setText(site);
139 userAgentItem->setText(userAgent);
144void UserAgentDialog::accept()
146 QString globalUserAgent = ui->changeGlobal->isChecked() ? ui->globalComboBox->currentText() : QString();
147 QStringList domainList;
148 QStringList userAgentsList;
150 for (
int i = 0;
i < ui->table->rowCount(); ++
i) {
151 QTableWidgetItem* siteItem = ui->table->item(
i, 0);
152 QTableWidgetItem* userAgentItem = ui->table->item(
i, 1);
154 if (!siteItem || !userAgentItem) {
158 QString domain = siteItem->text().trimmed();
159 QString userAgent = userAgentItem->text().trimmed();
161 if (domain.isEmpty() || userAgent.isEmpty()) {
165 domainList.append(domain);
166 userAgentsList.append(userAgent);
171 settings.
setValue(
QSL(
"UserAgent"), globalUserAgent);
175 settings.
setValue(
QSL(
"UsePerDomainUA"), ui->changePerSite->isChecked());
177 settings.
setValue(
QSL(
"UserAgentsList"), userAgentsList);
181 mApp->networkManager()->loadSettings();
185void UserAgentDialog::enableGlobalComboBox(
bool enable)
187 ui->globalComboBox->setEnabled(enable);
190void UserAgentDialog::enablePerSiteFrame(
bool enable)
192 ui->perSiteFrame->setEnabled(enable);
195bool UserAgentDialog::showEditDialog(
const QString &title, QString* rSite, QString* rUserAgent)
197 if (!rSite || !rUserAgent) {
201 auto* dialog =
new QDialog(
this);
202 auto* layout =
new QFormLayout(dialog);
203 auto* editSite =
new QLineEdit(dialog);
204 auto* editAgent =
new QComboBox(dialog);
205 editAgent->setLayoutDirection(Qt::LeftToRight);
206 editAgent->setEditable(
true);
207 editAgent->addItems(m_knownUserAgents);
209 auto* box =
new QDialogButtonBox(dialog);
210 box->addButton(QDialogButtonBox::Ok);
211 box->addButton(QDialogButtonBox::Cancel);
213 connect(box, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
214 connect(box, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
216 layout->addRow(
new QLabel(tr(
"Site domain: ")), editSite);
217 layout->addRow(
new QLabel(tr(
"User Agent: ")), editAgent);
220 editSite->setText(*rSite);
221 editAgent->lineEdit()->setText(*rUserAgent);
223 editSite->setFocus();
224 editAgent->lineEdit()->setCursorPosition(0);
226 dialog->setWindowTitle(title);
227 dialog->setMinimumSize(550, 100);
228 dialog->setMaximumWidth(550);
230 if (dialog->exec()) {
231 *rSite = editSite->text();
232 *rUserAgent = editAgent->currentText();
234 return !rSite->isEmpty() && !rUserAgent->isEmpty();
void beginGroup(const QString &prefix)
void setValue(const QString &key, const QVariant &defaultValue=QVariant())
UserAgentDialog(QWidget *parent=nullptr)
~UserAgentDialog() override
bool usePerDomainUserAgents() const
QString defaultUserAgent() const
QHash< QString, QString > perDomainUserAgentsList() const
QString globalUserAgent() const