/*
- * Copyright 2022-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2022-2024 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc>.
*
#include "ui_SettingsPrivacy.h"
#include "ui_SettingsSpellCheck.h"
#include "databases/BookmarksDatabase.h"
+#include "databases/DomainsDatabase.h"
#include "dialogs/AddBookmarkDialog.h"
#include "dialogs/AddFolderDialog.h"
#include "dialogs/BookmarksDialog.h"
// Remove the focus from the URL line edit.
urlLineEditPointer->clearFocus();
- // Create the domain settings dialog pointer.
- DomainSettingsDialog *domainSettingsDialogPointer;
-
// Get the current domain settings name.
QString ¤tDomainSettingsName = tabWidgetPointer->getDomainSettingsName();
// Run the commands according to the current domain settings status.
if (currentDomainSettingsName == QStringLiteral("")) // Domain settings are not currently applied.
{
- // Instruct the domain settings dialog to add a new domain.
- domainSettingsDialogPointer = new DomainSettingsDialog(DomainSettingsDialog::ADD_DOMAIN, currentUrl.host());
- }
- else // Domain settings are currently applied.
- {
- // Instruct the domain settings dialog to edit the current domain.
- domainSettingsDialogPointer = new DomainSettingsDialog(DomainSettingsDialog::EDIT_DOMAIN, currentDomainSettingsName);
+ // Get the current settings status.
+ int javaScriptInt = calculateSettingsInt(javaScriptEnabled, Settings::javaScriptEnabled());
+ int localStorageInt = calculateSettingsInt(localStorageActionPointer->isChecked(), Settings::localStorageEnabled());
+ int domStorageInt = calculateSettingsInt(domStorageActionPointer->isChecked(), Settings::domStorageEnabled());
+
+ // Get the current user agent string.
+ QString currentUserAgentString = tabWidgetPointer->getCurrentUserAgent();
+
+ // Get the current user agent database string.
+ QString currentUserAgentDatabaseString = UserAgentHelper::getDatabaseUserAgentNameFromUserAgent(currentUserAgentString);
+
+ // Initialize the user agent database string.
+ QString userAgentDatabaseString = UserAgentHelper::SYSTEM_DEFAULT_DATABASE;
+
+ // Replace the user agent database string if the current user agent is not the default.
+ if (currentUserAgentDatabaseString != Settings::userAgent())
+ userAgentDatabaseString = currentUserAgentDatabaseString;
+
+ // Initialize the zoom factor variables.
+ int zoomFactorInt = DomainsDatabase::SYSTEM_DEFAULT;
+
+ // Use a custom zoom factor if currently applied. Doubles cannot be reliably compared using `==`, so a mathematical workaround is used.
+ if (abs(currentZoomFactorDouble - defaultZoomFactorDouble ) > 0.01)
+ zoomFactorInt = DomainsDatabase::CUSTOM;
+
+ // Add the domain.
+ DomainsDatabase::addDomain(currentUrl.host(), javaScriptInt, localStorageInt, domStorageInt, userAgentDatabaseString, zoomFactorInt, currentZoomFactorDouble);
+
+ // Apply the domain settings.
+ tabWidgetPointer->applyDomainSettingsAndReload();
}
+ // Create the domain settings dialog pointer.
+ DomainSettingsDialog *domainSettingsDialogPointer = new DomainSettingsDialog(DomainSettingsDialog::EDIT_DOMAIN, currentDomainSettingsName);
+
// Reload the tabs when domain settings are updated.
connect(domainSettingsDialogPointer, SIGNAL(domainSettingsUpdated()), tabWidgetPointer, SLOT(applyDomainSettingsAndReload()));
tabWidgetPointer->back();
}
+int BrowserWindow::calculateSettingsInt(const bool settingCurrentlyEnabled, const bool settingEnabledByDefault) const
+{
+ // Return the int that matches the current state.
+ if (settingCurrentlyEnabled == settingEnabledByDefault) // The current system default is used.
+ return DomainsDatabase::SYSTEM_DEFAULT;
+ else if (settingCurrentlyEnabled) // The setting is enabled, which is different from the system default.
+ return DomainsDatabase::ENABLED;
+ else // The setting is disabled, which is different from the system default.
+ return DomainsDatabase::DISABLED;
+}
+
void BrowserWindow::clearUrlLineEditFocus() const
{
// Remove the focus from the URL line edit.
void BrowserWindow::decrementZoom()
{
// Update the current zoom factor.
- currentZoomFactor = currentZoomFactor - 0.25;
+ currentZoomFactorDouble = currentZoomFactorDouble - 0.25;
// Check to make sure the zoom factor is in the valid range (0.25 to 5.00).
- if (currentZoomFactor < 0.25)
- currentZoomFactor = 0.25;
+ if (currentZoomFactorDouble < 0.25)
+ currentZoomFactorDouble = 0.25;
// Set the new zoom factor.
- tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactor);
+ tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactorDouble);
// Update the on-the-fly action text.
- updateZoomActions(currentZoomFactor);
+ updateZoomActions(currentZoomFactorDouble);
}
void BrowserWindow::editBookmarks() const
bool okClicked;
// Display a dialog to get the new zoom factor from the user. Format the double to display two decimals and have a 0.25 step.
- double newZoomFactor = QInputDialog::getDouble(this, i18nc("The on-the-fly zoom factor dialog title", "On-The-Fly Zoom Factor"),
+ double newZoomFactorDouble = QInputDialog::getDouble(this, i18nc("The on-the-fly zoom factor dialog title", "On-The-Fly Zoom Factor"),
i18nc("The instruction text of the on-the-fly zoom factor dialog", "Enter a zoom factor between 0.25 and 5.00"),
- currentZoomFactor, .025, 5.00, 2, &okClicked, Qt::WindowFlags(), 0.25);
+ currentZoomFactorDouble, .025, 5.00, 2, &okClicked, Qt::WindowFlags(), 0.25);
// Update the zoom factor if the user clicked OK.
if (okClicked)
{
// Set the new zoom factor.
- tabWidgetPointer->applyOnTheFlyZoomFactor(newZoomFactor);
+ tabWidgetPointer->applyOnTheFlyZoomFactor(newZoomFactorDouble);
// Update the on-the-fly action text.
- updateZoomActions(newZoomFactor);
+ updateZoomActions(newZoomFactorDouble);
}
}
void BrowserWindow::incrementZoom()
{
// Update the current zoom factor.
- currentZoomFactor = currentZoomFactor + 0.25;
+ currentZoomFactorDouble = currentZoomFactorDouble + 0.25;
// Check to make sure the zoom factor is in the valid range (0.25 to 5.00).
- if (currentZoomFactor > 5.0)
- currentZoomFactor = 5.0;
+ if (currentZoomFactorDouble > 5.0)
+ currentZoomFactorDouble = 5.0;
// Set the new zoom factor.
- tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactor);
+ tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactorDouble);
// Update the on-the-fly action text.
- updateZoomActions(currentZoomFactor);
+ updateZoomActions(currentZoomFactorDouble);
}
void BrowserWindow::loadUrlFromLineEdit(const QString &url) const
connect(cookiesDialogPointer, SIGNAL(deleteCookie(QNetworkCookie)), tabWidgetPointer, SLOT(deleteCookieFromStore(QNetworkCookie)));
}
-void BrowserWindow::showDownloadLocationBrowseDialog() const
+void BrowserWindow::showDownloadDirectoryBrowseDialog() const
{
- // Get the current download location.
- QString currentDownloadLocation = downloadLocationComboBoxPointer->currentText();
+ // Get the current download directory.
+ QString currentDownloadDirectory = downloadDirectoryComboBoxPointer->currentText();
// Resolve the system download directory if specified.
- if (currentDownloadLocation == QStringLiteral("System Download Directory"))
- currentDownloadLocation = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
+ if (currentDownloadDirectory == QStringLiteral("System Download Directory"))
+ currentDownloadDirectory = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
- // Get the new download location.
- QString newDownloadLocation = QFileDialog::getExistingDirectory(configDialogPointer, i18nc("Select download location dialog caption", "Select Download Location"), currentDownloadLocation);
+ // Get the new download directory.
+ QString newDownloadDirectory = QFileDialog::getExistingDirectory(configDialogPointer, i18nc("Select download directory dialog caption", "Select Download Directory"),
+ currentDownloadDirectory);
- // Populate the download location combo box according to the new download location.
- if (newDownloadLocation == QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)) // The default download location was selected.
+ // Populate the download directory combo box according to the new download location.
+ if (newDownloadDirectory == QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)) // The default download location was selected.
{
// Populate the download location with the default text.
- downloadLocationComboBoxPointer->setCurrentText("System Download Directory");
+ downloadDirectoryComboBoxPointer->setCurrentText("System Download Directory");
}
- else if (newDownloadLocation != QStringLiteral("")) // A different directory was selected.
+ else if (newDownloadDirectory != QStringLiteral("")) // A different directory was selected.
{
// Populate the download location.
- downloadLocationComboBoxPointer->setCurrentText(newDownloadLocation);
+ downloadDirectoryComboBoxPointer->setCurrentText(newDownloadDirectory);
}
}
userAgentLabelPointer = privacySettingsUi.userAgentLabel;
QComboBox *searchEngineComboBoxPointer = generalSettingsUi.kcfg_searchEngine;
searchEngineLabelPointer = generalSettingsUi.searchEngineLabel;
- downloadLocationComboBoxPointer = generalSettingsUi.kcfg_downloadLocation;
+ downloadDirectoryComboBoxPointer = generalSettingsUi.kcfg_downloadDirectory;
QPushButton *browseButtonPointer = generalSettingsUi.browseButton;
QListWidget *spellCheckListWidgetPointer = spellCheckSettingsUi.spellCheckListWidget;
connect(userAgentComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateUserAgentLabel(const QString)));
connect(searchEngineComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateSearchEngineLabel(const QString)));
- // Connect the download location directory browse button.
- connect(browseButtonPointer, SIGNAL(clicked()), this, SLOT(showDownloadLocationBrowseDialog()));
+ // Connect the download directory directory browse button.
+ connect(browseButtonPointer, SIGNAL(clicked()), this, SLOT(showDownloadDirectoryBrowseDialog()));
// Create a dictionaries QDir from the `QTWEBENGINE_DICTIONARIES_PATH` environment variable.
QDir dictionariesDir = QDir(qEnvironmentVariable("QTWEBENGINE_DICTIONARIES_PATH"));
cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", numberOfCookies));
}
-void BrowserWindow::updateDefaultZoomFactor(const double newDefaultZoomFactor)
+void BrowserWindow::updateDefaultZoomFactor(const double newDefaultZoomFactorDouble)
{
// Store the new default zoom factor.
- defaultZoomFactor = newDefaultZoomFactor;
+ defaultZoomFactorDouble = newDefaultZoomFactorDouble;
}
void BrowserWindow::updateDomStorageAction(const bool &isEnabled) const
setWindowTitle(title);
}
-void BrowserWindow::updateZoomActions(const double &zoomFactor)
+void BrowserWindow::updateZoomActions(const double zoomFactorDouble)
{
// Set the current zoom factor.
- currentZoomFactor = zoomFactor;
+ currentZoomFactorDouble = zoomFactorDouble;
// Set the status of the default zoom action.
- zoomDefaultActionPointer->setEnabled(currentZoomFactor != defaultZoomFactor);
+ zoomDefaultActionPointer->setEnabled(currentZoomFactorDouble != defaultZoomFactorDouble);
// Set the status of the zoom in action and button.
- zoomInActionPointer->setEnabled(currentZoomFactor <= 4.99);
- zoomPlusButtonPointer->setEnabled(currentZoomFactor <= 4.99);
+ zoomInActionPointer->setEnabled(currentZoomFactorDouble <= 4.99);
+ zoomPlusButtonPointer->setEnabled(currentZoomFactorDouble <= 4.99);
// Set the status of the zoom out action and button.
- zoomMinusButtonPointer->setEnabled(currentZoomFactor > 0.25);
- zoomOutActionPointer->setEnabled(currentZoomFactor > 0.25);
+ zoomMinusButtonPointer->setEnabled(currentZoomFactorDouble > 0.25);
+ zoomOutActionPointer->setEnabled(currentZoomFactorDouble > 0.25);
// Update the zoom factor action text, formatting the double with 2 decimal places. `0` specifies no extra field width. `'0'` sets the format to not use scientific notation.
- zoomFactorActionPointer->setText(ki18nc("The zoom factor action", "Zoom Factor - %1").subs(zoomFactor, 0, '0', 2).toString());
+ zoomFactorActionPointer->setText(ki18nc("The zoom factor action", "Zoom Factor - %1").subs(zoomFactorDouble, 0, '0', 2).toString());
// Update the status bar zoom factor label.
- currentZoomButtonPointer->setText(ki18nc("The status bar zoom, which is just the formatted zoom factor", "%1").subs(zoomFactor, 0, '0', 2).toString());
+ currentZoomButtonPointer->setText(ki18nc("The status bar zoom, which is just the formatted zoom factor", "%1").subs(zoomFactorDouble, 0, '0', 2).toString());
}
void BrowserWindow::zoomDefault()
{
// Set the new zoom factor.
- tabWidgetPointer->applyOnTheFlyZoomFactor(defaultZoomFactor);
+ tabWidgetPointer->applyOnTheFlyZoomFactor(defaultZoomFactorDouble);
// Update the on-the-fly action text.
- updateZoomActions(defaultZoomFactor);
+ updateZoomActions(defaultZoomFactorDouble);
}