Falkon Develop
Cross-platform Qt-based web browser
sitesettingsbrowsedialog.cpp
Go to the documentation of this file.
1// Falkon - SiteSettings permission browser dialog
2// SPDX-FileCopyrightText: 2024 Juraj Oravec <jurajoravec@mailo.com>
3// SPDX-License-Identifier: GPL-3.0-or-later
4
6#include "ui_sitesettingsbrowsedialog.h"
7
8#include "mainapplication.h"
9#include "sqldatabase.h"
10
11const int rolePermission = Qt::UserRole + 10;
12
13SiteSettingsBrowseDialog::SiteSettingsBrowseDialog(QString &name, QString &sqlColumn, QWidget* parent)
14 : QDialog(parent)
15 , m_ui(new Ui::SiteSettingsBrowseDialog)
16 , m_sqlColumn(sqlColumn)
17{
18 m_ui->setupUi(this);
19 m_ui->nameLabel->setText(name);
20
21 loadItems();
22
23 m_ui->treeWidget->header()->resizeSections(QHeaderView::ResizeToContents);
24
25 connect(m_ui->askButton, &QPushButton::clicked, this, [=]() { setPermission(SiteSettingsManager::Ask); });
26 connect(m_ui->allowButton, &QPushButton::clicked, this, [=]() { setPermission(SiteSettingsManager::Allow); });
27 connect(m_ui->denyButton, &QPushButton::clicked, this, [=]() { setPermission(SiteSettingsManager::Deny); });
28 connect(m_ui->defaultButton, &QPushButton::clicked, this, [=]() { setPermission(SiteSettingsManager::Default); });
29
30 connect(m_ui->buttonBox, &QDialogButtonBox::accepted, this, &SiteSettingsBrowseDialog::storeChanges);
31}
32
33void SiteSettingsBrowseDialog::loadItems()
34{
35 QSqlDatabase db = SqlDatabase::instance()->database();
36 QString sqlTable = mApp->siteSettingsManager()->sqlTable();
37
38 QSqlQuery query(SqlDatabase::instance()->database());
39 query.prepare(QSL("SELECT server, %2 FROM %1 WHERE %2!=?").arg(sqlTable, m_sqlColumn));
40 query.addBindValue(SiteSettingsManager::Default);
41 query.exec();
42
43 while (query.next()) {
44 QString server = query.value(0).toString();
45 auto permission = mApp->siteSettingsManager()->intToPermission(query.value(1).toInt());
46 QString permissionName = mApp->siteSettingsManager()->getPermissionName(permission);
47
48 auto* item = new QTreeWidgetItem(m_ui->treeWidget);
49 item->setText(0, server);
50 item->setText(1, permissionName);
51 item->setData(0, rolePermission, permission);
52
53 m_ui->treeWidget->addTopLevelItem(item);
54 }
55}
56
58{
59 QUrl url;
60 for (QHash<QString, int>::iterator it = m_listModifications.begin(); it != m_listModifications.end(); ++it) {
61 url.setHost(it.key());
62 mApp->siteSettingsManager()->setOption(m_sqlColumn, url, it.value());
63 }
64}
65
67{
68 QTreeWidgetItem* item = m_ui->treeWidget->currentItem();
69 if (!item) {
70 return;
71 }
72
73 const QString server = item->text(0);
74 auto itemPermission = static_cast<SiteSettingsManager::Permission>(item->data(0, Qt::UserRole + 10).toInt());
75 if (permission == itemPermission) {
76 m_listModifications.remove(server);
77 }
78
79 QString permissionName = mApp->siteSettingsManager()->getPermissionName(permission);
80
81 m_listModifications[server] = permission;
82 item->setText(1, permissionName);
83}
84
86{
87 m_ui->askButton->hide();
88}
89
void setPermission(const SiteSettingsManager::Permission permission)
SiteSettingsBrowseDialog(QString &name, QString &sqlColumn, QWidget *parent=nullptr)
static SqlDatabase * instance()
QSqlDatabase database()
#define mApp
#define QSL(x)
Definition: qzcommon.h:40
const int rolePermission