diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-28 16:30:52 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-28 16:30:52 +0200 |
| commit | 6edd9e7a12a3827fb6aac62a88be01085e41e176 (patch) | |
| tree | 4513475c7efaea92a154ff20e970ed3d4b475b7c /src | |
| parent | a53e490d2e96d22a24293019921af26e00f2bf7a (diff) | |
| download | kristall-6edd9e7a12a3827fb6aac62a88be01085e41e176.tar.gz | |
Huge refacoring of the settings stuff. Provides automated migration between old and new configuration file stuff. Themes are now just files in a folder instead of encoded data in the config file.
Diffstat (limited to 'src')
| -rw-r--r-- | src/browsertab.cpp | 38 | ||||
| -rw-r--r-- | src/dialogs/certificatemanagementdialog.cpp | 34 | ||||
| -rw-r--r-- | src/dialogs/certificatemanagementdialog.hpp | 6 | ||||
| -rw-r--r-- | src/dialogs/certificatemanagementdialog.ui | 2 | ||||
| -rw-r--r-- | src/dialogs/certificateselectiondialog.cpp | 10 | ||||
| -rw-r--r-- | src/dialogs/newidentitiydialog.cpp | 2 | ||||
| -rw-r--r-- | src/dialogs/settingsdialog.cpp | 40 | ||||
| -rw-r--r-- | src/documentstyle.cpp | 232 | ||||
| -rw-r--r-- | src/documentstyle.hpp | 3 | ||||
| -rw-r--r-- | src/identitycollection.cpp | 63 | ||||
| -rw-r--r-- | src/identitycollection.hpp | 5 | ||||
| -rw-r--r-- | src/kristall.hpp | 45 | ||||
| -rw-r--r-- | src/main.cpp | 216 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 101 | ||||
| -rw-r--r-- | src/mainwindow.hpp | 6 | ||||
| -rw-r--r-- | src/protocols/abouthandler.cpp | 2 | ||||
| -rw-r--r-- | src/protocols/geminiclient.cpp | 4 | ||||
| -rw-r--r-- | src/protocols/webclient.cpp | 4 | ||||
| -rw-r--r-- | src/protocolsetup.cpp | 4 | ||||
| -rw-r--r-- | src/renderers/geminirenderer.cpp | 2 | ||||
| -rw-r--r-- | src/renderers/gophermaprenderer.cpp | 2 | ||||
| -rw-r--r-- | src/widgets/searchbar.cpp | 2 |
22 files changed, 567 insertions, 256 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp index c47858f..c979b4c 100644 --- a/src/browsertab.cpp +++ b/src/browsertab.cpp @@ -110,7 +110,7 @@ BrowserTab::~BrowserTab() void BrowserTab::navigateTo(const QUrl &url, PushToHistory mode) { - if (mainWindow->protocols.isSchemeSupported(url.scheme()) != ProtocolSetup::Enabled) + if (kristall::protocols.isSchemeSupported(url.scheme()) != ProtocolSetup::Enabled) { QMessageBox::warning(this, "Kristall", "URI scheme not supported or disabled: " + url.scheme()); return; @@ -180,11 +180,11 @@ void BrowserTab::toggleIsFavourite(bool isFavourite) { if (isFavourite) { - global_favourites.add(this->current_location); + kristall::favourites.add(this->current_location); } else { - global_favourites.remove(this->current_location); + kristall::favourites.remove(this->current_location); } this->updateUI(); @@ -425,11 +425,11 @@ void BrowserTab::on_requestComplete(const QByteArray &ref_data, const QString &m this->outline.clear(); - auto doc_style = mainWindow->current_style.derive(this->current_location); + auto doc_style = kristall::document_style.derive(this->current_location); this->ui->text_browser->setStyleSheet(QString("QTextBrowser { background-color: %1; }").arg(doc_style.background_color.name())); - bool plaintext_only = (global_options.text_display == GenericSettings::PlainText); + bool plaintext_only = (kristall::options.text_display == GenericSettings::PlainText); if (not plaintext_only and mime.is("text", "gemini")) { @@ -587,7 +587,7 @@ void BrowserTab::on_redirected(const QUrl &uri, bool is_permanent) this->network_timeout_timer.stop(); - if (redirection_count >= global_options.max_redirections) + if (redirection_count >= kristall::options.max_redirections) { setErrorMessage(QString("Too many consecutive redirections. The last redirection would have redirected you to:\r\n%1").arg(uri.toString(QUrl::FullyEncoded))); return; @@ -598,7 +598,7 @@ void BrowserTab::on_redirected(const QUrl &uri, bool is_permanent) bool is_cross_host = (this->current_location.host() != uri.host()); QString question; - if(global_options.redirection_policy == GenericSettings::WarnAlways) + if(kristall::options.redirection_policy == GenericSettings::WarnAlways) { question = QString( "The location you visited wants to redirect you to another location:\r\n" @@ -606,7 +606,7 @@ void BrowserTab::on_redirected(const QUrl &uri, bool is_permanent) "Do you want to allow the redirection?" ).arg(uri.toString(QUrl::FullyEncoded)); } - else if((global_options.redirection_policy & (GenericSettings::WarnOnHostChange | GenericSettings::WarnOnSchemeChange)) and is_cross_protocol and is_cross_host) + else if((kristall::options.redirection_policy & (GenericSettings::WarnOnHostChange | GenericSettings::WarnOnSchemeChange)) and is_cross_protocol and is_cross_host) { question = QString( "The location you visited wants to redirect you to another host and switch the protocol.\r\n" @@ -615,7 +615,7 @@ void BrowserTab::on_redirected(const QUrl &uri, bool is_permanent) "Do you want to allow the redirection?" ).arg(uri.scheme()).arg(uri.host()); } - else if((global_options.redirection_policy & GenericSettings::WarnOnSchemeChange) and is_cross_protocol) + else if((kristall::options.redirection_policy & GenericSettings::WarnOnSchemeChange) and is_cross_protocol) { question = QString( "The location you visited wants to switch the protocol.\r\n" @@ -623,7 +623,7 @@ void BrowserTab::on_redirected(const QUrl &uri, bool is_permanent) "Do you want to allow the redirection?" ).arg(uri.scheme()); } - else if((global_options.redirection_policy & GenericSettings::WarnOnHostChange) and is_cross_host) + else if((kristall::options.redirection_policy & GenericSettings::WarnOnHostChange) and is_cross_host) { question = QString( "The location you visited wants to redirect you to another host.\r\n" @@ -720,10 +720,10 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url) } if(this->current_location.scheme() == "gemini") { - global_gemini_trust.addTrust(this->current_location, this->current_server_certificate); + kristall::trust::gemini.addTrust(this->current_location, this->current_server_certificate); } else if(this->current_location.scheme() == "https") { - global_https_trust.addTrust(this->current_location, this->current_server_certificate); + kristall::trust::https.addTrust(this->current_location, this->current_server_certificate); } else { assert(false and "missing protocol implementation!"); @@ -745,7 +745,7 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url) if (real_url.isRelative()) real_url = this->current_location.resolved(url); - auto support = mainWindow->protocols.isSchemeSupported(real_url.scheme()); + auto support = kristall::protocols.isSchemeSupported(real_url.scheme()); if (support == ProtocolSetup::Enabled) { @@ -757,7 +757,7 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url) } else { - if (global_options.use_os_scheme_handler) + if (kristall::options.use_os_scheme_handler) { if (not QDesktopServices::openUrl(url)) { @@ -806,7 +806,7 @@ void BrowserTab::on_requestProgress(qint64 transferred) emit this->fileLoaded(this->current_stats); this->network_timeout_timer.stop(); - this->network_timeout_timer.start(global_options.network_timeout); + this->network_timeout_timer.start(kristall::options.network_timeout); } void BrowserTab::on_back_button_clicked() @@ -830,7 +830,7 @@ void BrowserTab::updateUI() this->ui->stop_button->setVisible(in_progress); this->ui->fav_button->setEnabled(this->successfully_loaded); - this->ui->fav_button->setChecked(global_favourites.contains(this->current_location)); + this->ui->fav_button->setChecked(kristall::favourites.contains(this->current_location)); } bool BrowserTab::trySetClientCertificate(const QString &query) @@ -939,7 +939,7 @@ bool BrowserTab::startRequest(const QUrl &url, ProtocolHandler::RequestOptions o } } else if(not this->current_identity.isValid()) { - for(auto ident_ptr : global_identities.allIdentities()) + for(auto ident_ptr : kristall::identities.allIdentities()) { if(ident_ptr->isAutomaticallyEnabledOn(url)) { @@ -969,7 +969,7 @@ bool BrowserTab::startRequest(const QUrl &url, ProtocolHandler::RequestOptions o this->current_location = url; this->ui->url_bar->setText(url.toString(QUrl::FormattingOptions(QUrl::FullyEncoded))); - this->network_timeout_timer.start(global_options.network_timeout); + this->network_timeout_timer.start(kristall::options.network_timeout); return this->current_handler->startRequest(url, options); } @@ -1016,7 +1016,7 @@ void BrowserTab::on_text_browser_customContextMenuRequested(const QPoint &pos) }); connect(menu.addAction("Copy link"), &QAction::triggered, [real_url]() { - global_clipboard->setText(real_url.toString(QUrl::FullyEncoded)); + kristall::clipboard->setText(real_url.toString(QUrl::FullyEncoded)); }); menu.addSeparator(); diff --git a/src/dialogs/certificatemanagementdialog.cpp b/src/dialogs/certificatemanagementdialog.cpp index 5141b30..1ed78dd 100644 --- a/src/dialogs/certificatemanagementdialog.cpp +++ b/src/dialogs/certificatemanagementdialog.cpp @@ -17,7 +17,7 @@ CertificateManagementDialog::CertificateManagementDialog(QWidget *parent) : { ui->setupUi(this); - this->ui->certificates->setModel(&global_identities); + this->ui->certificates->setModel(&identity_set); this->ui->certificates->expandAll(); connect( @@ -34,11 +34,23 @@ CertificateManagementDialog::~CertificateManagementDialog() delete ui; } +IdentityCollection CertificateManagementDialog::identitySet() const +{ + return this->identity_set; +} + +void CertificateManagementDialog::setIdentitySet(const IdentityCollection &src) +{ + this->identity_set = src; + this->ui->certificates->expandAll(); + +} + void CertificateManagementDialog::on_certificates_selected(QModelIndex const& index, QModelIndex const & previous) { Q_UNUSED(previous); - selected_identity = global_identities.getMutableIdentity(index); + selected_identity = identity_set.getMutableIdentity(index); this->ui->export_cert_button->setEnabled(selected_identity != nullptr); @@ -70,8 +82,8 @@ void CertificateManagementDialog::on_certificates_selected(QModelIndex const& in this->ui->cert_host_filter->setText(""); this->ui->cert_auto_enable->setChecked(false); - if(auto group_name = global_identities.group(index); not group_name.isEmpty()) { - this->ui->delete_cert_button->setEnabled(global_identities.canDeleteGroup(group_name)); + if(auto group_name = identity_set.group(index); not group_name.isEmpty()) { + this->ui->delete_cert_button->setEnabled(identity_set.canDeleteGroup(group_name)); } else { this->ui->delete_cert_button->setEnabled(false); } @@ -97,7 +109,7 @@ void CertificateManagementDialog::on_delete_cert_button_clicked() { auto index = this->ui->certificates->currentIndex(); - if(global_identities.getMutableIdentity(index) != nullptr) + if(identity_set.getMutableIdentity(index) != nullptr) { auto answer = QMessageBox::question( this, @@ -108,11 +120,11 @@ void CertificateManagementDialog::on_delete_cert_button_clicked() ); if(answer != QMessageBox::Yes) return; - if(not global_identities.destroyIdentity(index)) { + if(not identity_set.destroyIdentity(index)) { QMessageBox::warning(this, "Kristall", "Could not destroy identity!"); } } - else if(auto group_name = global_identities.group(index); not group_name.isEmpty()) { + else if(auto group_name = identity_set.group(index); not group_name.isEmpty()) { auto answer = QMessageBox::question( this, @@ -122,7 +134,7 @@ void CertificateManagementDialog::on_delete_cert_button_clicked() if(answer != QMessageBox::Yes) return; - if(not global_identities.deleteGroup(group_name)) { + if(not identity_set.deleteGroup(group_name)) { QMessageBox::warning(this, "Kristall", "Could not delete group!"); } } @@ -261,7 +273,7 @@ void CertificateManagementDialog::on_import_cert_button_clicked() return; } - if(not global_identities.addCertificate(tr("Imported Certificates"), ident)) { + if(not identity_set.addCertificate(tr("Imported Certificates"), ident)) { QMessageBox::warning( this, "Kristall", @@ -274,7 +286,7 @@ void CertificateManagementDialog::on_create_cert_button_clicked() { NewIdentitiyDialog dialog { this }; - dialog.setGroupName(global_identities.group(this->ui->certificates->currentIndex())); + dialog.setGroupName(identity_set.group(this->ui->certificates->currentIndex())); if(dialog.exec() != QDialog::Accepted) return; @@ -284,7 +296,7 @@ void CertificateManagementDialog::on_create_cert_button_clicked() return; id.is_persistent = true; - global_identities.addCertificate( + identity_set.addCertificate( dialog.groupName(), id); } diff --git a/src/dialogs/certificatemanagementdialog.hpp b/src/dialogs/certificatemanagementdialog.hpp index 0d7178a..23c07fa 100644 --- a/src/dialogs/certificatemanagementdialog.hpp +++ b/src/dialogs/certificatemanagementdialog.hpp @@ -4,6 +4,7 @@ #include <QDialog> #include "cryptoidentity.hpp" +#include "identitycollection.hpp" namespace Ui { class CertificateManagementDialog; @@ -17,6 +18,9 @@ public: explicit CertificateManagementDialog(QWidget *parent = nullptr); ~CertificateManagementDialog(); + IdentityCollection identitySet() const; + void setIdentitySet(IdentityCollection const & src); + private slots: void on_cert_notes_textChanged(); @@ -39,6 +43,8 @@ private: private: Ui::CertificateManagementDialog *ui; + IdentityCollection identity_set; + CryptoIdentity * selected_identity; }; diff --git a/src/dialogs/certificatemanagementdialog.ui b/src/dialogs/certificatemanagementdialog.ui index 8fe3f8b..596448f 100644 --- a/src/dialogs/certificatemanagementdialog.ui +++ b/src/dialogs/certificatemanagementdialog.ui @@ -255,7 +255,7 @@ <enum>Qt::Horizontal</enum> </property> <property name="standardButtons"> - <set>QDialogButtonBox::Ok</set> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property> </widget> </item> diff --git a/src/dialogs/certificateselectiondialog.cpp b/src/dialogs/certificateselectiondialog.cpp index f4dab38..4caf988 100644 --- a/src/dialogs/certificateselectiondialog.cpp +++ b/src/dialogs/certificateselectiondialog.cpp @@ -16,7 +16,7 @@ CertificateSelectionDialog::CertificateSelectionDialog(QWidget *parent) : ui->setupUi(this); this->ui->server_request->setVisible(false); - this->ui->certificates->setModel(&global_identities); + this->ui->certificates->setModel(&kristall::identities); this->ui->certificates->expandAll(); connect(this->ui->certificates->selectionModel(), &QItemSelectionModel::currentChanged, this, &CertificateSelectionDialog::on_currentChanged); @@ -86,7 +86,7 @@ void CertificateSelectionDialog::on_currentChanged(const QModelIndex ¤t, c { Q_UNUSED(current) Q_UNUSED(previous) - auto id = global_identities.getIdentity(current); + auto id = kristall::identities.getIdentity(current); this->ui->use_selected_cert->setEnabled(id.isValid()); } @@ -103,7 +103,7 @@ void CertificateSelectionDialog::on_create_new_cert_clicked() return; id.is_persistent = true; - global_identities.addCertificate( + kristall::identities.addCertificate( dialog.groupName(), id); } @@ -111,7 +111,7 @@ void CertificateSelectionDialog::on_create_new_cert_clicked() void CertificateSelectionDialog::on_use_selected_cert_clicked() { auto sel = this->ui->certificates->selectionModel()->currentIndex(); - this->cryto_identity = global_identities.getIdentity(sel); + this->cryto_identity = kristall::identities.getIdentity(sel); if(this->cryto_identity.isValid()) { this->accept(); } else { @@ -121,7 +121,7 @@ void CertificateSelectionDialog::on_use_selected_cert_clicked() void CertificateSelectionDialog::on_certificates_doubleClicked(const QModelIndex &index) { - this->cryto_identity = global_identities.getIdentity(index); + this->cryto_identity = kristall::identities.getIdentity(index); if(this->cryto_identity.isValid()) { this->accept(); } else { diff --git a/src/dialogs/newidentitiydialog.cpp b/src/dialogs/newidentitiydialog.cpp index af2a97e..30e0cc6 100644 --- a/src/dialogs/newidentitiydialog.cpp +++ b/src/dialogs/newidentitiydialog.cpp @@ -19,7 +19,7 @@ NewIdentitiyDialog::NewIdentitiyDialog(QWidget *parent) : ui->expiration_date->setTime(QTime(12, 00)); ui->group->clear(); - for(auto group_name : global_identities.groups()) + for(auto group_name : kristall::identities.groups()) { ui->group->addItem(group_name); } diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp index ebd1664..980957c 100644 --- a/src/dialogs/settingsdialog.cpp +++ b/src/dialogs/settingsdialog.cpp @@ -36,30 +36,29 @@ SettingsDialog::SettingsDialog(QWidget *parent) : setGeminiStyle(DocumentStyle { }); - int items = global_settings.beginReadArray("Themes"); - this->predefined_styles.clear(); - for(int i = 0; i < items; i++) + for(auto const & fileName : kristall::dirs::styles.entryList()) { - global_settings.setArrayIndex(i); + QSettings style_sheet { + kristall::dirs::styles.absoluteFilePath(fileName), + QSettings::IniFormat + }; - QString name = global_settings.value("name").toString(); + QString name = style_sheet.value("name").toString(); DocumentStyle style; - style.load(global_settings); + style.load(style_sheet); this->predefined_styles.insert(name, style); } - global_settings.endArray(); - this->ui->presets->clear(); for(auto const & style_name : this->predefined_styles.keys()) { this->ui->presets->addItem(style_name); } - if(items > 0) { + if(this->predefined_styles.size() > 0) { on_presets_currentIndexChanged(0); } else { this->on_presets_currentIndexChanged(-1); @@ -461,19 +460,28 @@ void SettingsDialog::on_preset_load_clicked() void SettingsDialog::on_SettingsDialog_accepted() { - global_settings.beginWriteArray("Themes", this->predefined_styles.size()); + QStringList files = kristall::dirs::styles.entryList(); - int index = 0; for(auto const & style_name : this->predefined_styles.keys()) { - global_settings.setArrayIndex(index); + QString fileName = DocumentStyle::createFileNameFromName(style_name, 0); + files.removeAll(fileName); + + QSettings style_sheet { + kristall::dirs::styles.absoluteFilePath(fileName), + QSettings::IniFormat + }; - global_settings.setValue("name", style_name); - this->predefined_styles.value(style_name).save(global_settings); + style_sheet.setValue("name", style_name); + this->predefined_styles.value(style_name).save(style_sheet); - index += 1; + style_sheet.sync(); + } + + for(auto const & fileName : files) + { + kristall::dirs::styles.remove(fileName); } - global_settings.endArray(); } void SettingsDialog::on_preset_import_clicked() diff --git a/src/documentstyle.cpp b/src/documentstyle.cpp index 6608d5b..7056cec 100644 --- a/src/documentstyle.cpp +++ b/src/documentstyle.cpp @@ -7,6 +7,7 @@ #include <QCryptographicHash> #include <QDebug> +#include <cctype> #include <array> #include <cmath> @@ -115,24 +116,24 @@ static QString encodeCssFont (const QFont& refFont) } DocumentStyle::DocumentStyle() : theme(Fixed), - standard_font(), - h1_font(), - h2_font(), - h3_font(), - preformatted_font(), - background_color("#edefff"), - standard_color(0x00, 0x00, 0x00), - preformatted_color(0x00, 0x00, 0x00), - h1_color("#022f90"), - h2_color("#022f90"), - h3_color("#022f90"), - blockquote_color("#FFFFFF"), - internal_link_color("#0e8fff"), - external_link_color("#0e8fff"), - cross_scheme_link_color("#0960a7"), - internal_link_prefix("→ "), - external_link_prefix("⇒ "), - margin(55.0) + standard_font(), + h1_font(), + h2_font(), + h3_font(), + preformatted_font(), + background_color("#edefff"), + standard_color(0x00, 0x00, 0x00), + preformatted_color(0x00, 0x00, 0x00), + h1_color("#022f90"), + h2_color("#022f90"), + h3_color("#022f90"), + blockquote_color("#FFFFFF"), + internal_link_color("#0e8fff"), + external_link_color("#0e8fff"), + cross_scheme_link_color("#0960a7"), + internal_link_prefix("→ "), + external_link_prefix("⇒ "), + margin(55.0) { preformatted_font.setFamily("monospace"); preformatted_font.setPointSizeF(10.0); @@ -153,61 +154,174 @@ DocumentStyle::DocumentStyle() : theme(Fixed), h3_font.setPointSizeF(12.0); } +QString DocumentStyle::createFileNameFromName(const QString &src, int index) +{ + QString result; + result.reserve(src.size() + 5); + for(int i = 0; i < src.size(); i++) + { + QChar c = src.at(i); + if(c.isLetterOrNumber()) { + result.append(c.toLower()); + } + else if(c.isSpace()) { + result.append('-'); + } + else { + result.append(QString("").arg(c.unicode())); + } + } + + if(index > 0) { + result.append(QString("-%1").arg(index)); + } + result.append(".kthm"); + return result; +} + bool DocumentStyle::save(QSettings &settings) const { - settings.setValue("standard_font", standard_font.toString()); - settings.setValue("h1_font", h1_font.toString()); - settings.setValue("h2_font", h2_font.toString()); - settings.setValue("h3_font", h3_font.toString()); - settings.setValue("preformatted_font", preformatted_font.toString()); + settings.setValue("version", 1); + settings.setValue("theme", int(theme)); settings.setValue("background_color", background_color.name()); - settings.setValue("standard_color", standard_color.name()); - settings.setValue("preformatted_color", preformatted_color.name()); settings.setValue("blockquote_color", blockquote_color.name()); - settings.setValue("h1_color", h1_color.name()); - settings.setValue("h2_color", h2_color.name()); - settings.setValue("h3_color", h3_color.name()); - settings.setValue("internal_link_color", internal_link_color.name()); - settings.setValue("external_link_color", external_link_color.name()); - settings.setValue("cross_scheme_link_color", cross_scheme_link_color.name()); - - settings.setValue("internal_link_prefix", internal_link_prefix); - settings.setValue("external_link_prefix", external_link_prefix); settings.setValue("margins", margin); - settings.setValue("theme", int(theme)); + + { + settings.beginGroup("Standard"); + settings.setValue("font", standard_font.toString()); + settings.setValue("color", standard_color.name()); + settings.endGroup(); + } + { + settings.beginGroup("Preformatted"); + settings.setValue("font", preformatted_font.toString()); + settings.setValue("color", preformatted_color.name()); + settings.endGroup(); + } + { + settings.beginGroup("H1"); + settings.setValue("font", h1_font.toString()); + settings.setValue("color", h1_color.name()); + settings.endGroup(); + } + { + settings.beginGroup("H2"); + settings.setValue("font", h2_font.toString()); + settings.setValue("color", h2_color.name()); + settings.endGroup(); + } + { + settings.beginGroup("H3"); + settings.setValue("font", h3_font.toString()); + settings.setValue("color", h3_color.name()); + settings.endGroup(); + } + { + settings.beginGroup("Link"); + + settings.setValue("color_internal", internal_link_color.name()); + settings.setValue("color_external", external_link_color.name()); + settings.setValue("color_cross_scheme", cross_scheme_link_color.name()); + + settings.setValue("internal_prefix", internal_link_prefix); + settings.setValue("external_prefix", external_link_prefix); + + settings.endGroup(); + } + return true; } bool DocumentStyle::load(QSettings &settings) { - if(settings.contains("standard_color")) + switch(settings.value("version", 0).toInt()) { - standard_font.fromString(settings.value("standard_font").toString()); - h1_font.fromString(settings.value("h1_font").toString()); - h2_font.fromString(settings.value("h2_font").toString()); - h3_font.fromString(settings.value("h3_font").toString()); - preformatted_font.fromString(settings.value("preformatted_font").toString()); - - background_color = QColor(settings.value("background_color").toString()); - standard_color = QColor(settings.value("standard_color").toString()); - preformatted_color = QColor(settings.value("preformatted_color").toString()); - blockquote_color = QColor(settings.value("blockquote_color").toString()); - h1_color = QColor(settings.value("h1_color").toString()); - h2_color = QColor(settings.value("h2_color").toString()); - h3_color = QColor(settings.value("h3_color").toString()); - internal_link_color = QColor(settings.value("internal_link_color").toString()); - external_link_color = QColor(settings.value("external_link_color").toString()); - cross_scheme_link_color = QColor(settings.value("cross_scheme_link_color").toString()); - - internal_link_prefix = settings.value("internal_link_prefix").toString(); - external_link_prefix = settings.value("external_link_prefix").toString(); - - margin = settings.value("margins").toDouble(); - theme = Theme(settings.value("theme").toInt()); + case 0: { + if(settings.contains("standard_color")) + { + standard_font.fromString(settings.value("standard_font").toString()); + h1_font.fromString(settings.value("h1_font").toString()); + h2_font.fromString(settings.value("h2_font").toString()); + h3_font.fromString(settings.value("h3_font").toString()); + preformatted_font.fromString(settings.value("preformatted_font").toString()); + + background_color = QColor(settings.value("background_color").toString()); + standard_color = QColor(settings.value("standard_color").toString()); + preformatted_color = QColor(settings.value("preformatted_color").toString()); + blockquote_color = QColor(settings.value("blockquote_color").toString()); + h1_color = QColor(settings.value("h1_color").toString()); + h2_color = QColor(settings.value("h2_color").toString()); + h3_color = QColor(settings.value("h3_color").toString()); + internal_link_color = QColor(settings.value("internal_link_color").toString()); + external_link_color = QColor(settings.value("external_link_color").toString()); + cross_scheme_link_color = QColor(settings.value("cross_scheme_link_color").toString()); + + internal_link_prefix = settings.value("internal_link_prefix").toString(); + external_link_prefix = settings.value("external_link_prefix").toString(); + + margin = settings.value("margins").toDouble(); + theme = Theme(settings.value("theme").toInt()); + } + return true; } - return true; + case 1: { + theme = Theme(settings.value("theme", int(theme)).toInt()); + + background_color = QColor { settings.value("background_color", background_color.name()).toString() }; + blockquote_color = QColor { settings.value("blockquote_color", blockquote_color.name()).toString() }; + + margin = settings.value("margins", 55).toInt(); + + { + settings.beginGroup("Standard"); + standard_font.fromString(settings.value("font", standard_font.toString()).toString()); + standard_color = QString { settings.value("color", standard_color.name()).toString() }; + settings.endGroup(); + } + { + settings.beginGroup("Preformatted"); + preformatted_font.fromString(settings.value("font", preformatted_font.toString()).toString()); + preformatted_color = QString { settings.value("color", preformatted_color.name()).toString() }; + settings.endGroup(); + } + { + settings.beginGroup("H1"); + h1_font.fromString(settings.value("font", h1_font.toString()).toString()); + h1_color = QString { settings.value("color", h1_color.name()).toString() }; + settings.endGroup(); + } + { + settings.beginGroup("H2"); + h2_font.fromString(settings.value("font", h2_font.toString()).toString()); + h2_color = QString { settings.value("color", h2_color.name()).toString() }; + settings.endGroup(); + } + { + settings.beginGroup("H3"); + h3_font.fromString(settings.value("font", h3_font.toString()).toString()); + h3_color = QString { settings.value("color", h3_color.name()).toString() }; + settings.endGroup(); + } + { + settings.beginGroup("Link"); + + internal_link_color = QString { settings.value("color_internal", internal_link_color.name()).toString() }; + external_link_color = QString {settings.value("color_external", external_link_color.name()).toString() }; + cross_scheme_link_color = QString {settings.value("color_cross_scheme", cross_scheme_link_color.name()).toString() }; + + internal_link_prefix = settings.value("internal_prefix", internal_link_prefix).toString(); + external_link_prefix = settings.value("external_prefix", external_link_prefix).toString(); + + settings.endGroup(); + } + + return true; + } + } + return false; } DocumentStyle DocumentStyle::derive(const QUrl &url) const diff --git a/src/documentstyle.hpp b/src/documentstyle.hpp index 6692cfd..eb01912 100644 --- a/src/documentstyle.hpp +++ b/src/documentstyle.hpp @@ -16,6 +16,9 @@ struct DocumentStyle DocumentStyle(); + //! Calculates a filtered/legal file name with all non-allowed chars escaped + static QString createFileNameFromName(QString const & src, int index); + Theme theme; QFont standard_font; diff --git a/src/identitycollection.cpp b/src/identitycollection.cpp index e839996..d68ab11 100644 --- a/src/identitycollection.cpp +++ b/src/identitycollection.cpp @@ -13,6 +13,69 @@ IdentityCollection::IdentityCollection(QObject *parent) } +IdentityCollection::IdentityCollection(const IdentityCollection &other) +{ + for(auto const & grp : other.root.children) + { + auto const & src_group = grp->as<GroupNode>(); + auto dst_group = std::make_unique<GroupNode>(); + + dst_group->title = src_group.title; + + for(auto const & id : src_group.children) { + auto const & src_id = id->as<IdentityNode>(); + auto dst_id = std::make_unique<IdentityNode>(); + + dst_id->identity = src_id.identity; + + dst_group->children.emplace_back(std::move(dst_id)); + } + + root.children.emplace_back(std::move(dst_group)); + } + + + relayout(); +} + +IdentityCollection &IdentityCollection::operator=(const IdentityCollection & other) +{ + beginResetModel(); + + root.children.clear(); + for(auto const & grp : other.root.children) + { + auto const & src_group = grp->as<GroupNode>(); + auto dst_group = std::make_unique<GroupNode>(); + + dst_group->title = src_group.title; + + for(auto const & id : src_group.children) { + auto const & src_id = id->as<IdentityNode>(); + auto dst_id = std::make_unique<IdentityNode>(); + + dst_id->identity = src_id.identity; + + dst_group->children.emplace_back(std::move(dst_id)); + } + + root.children.emplace_back(std::move(dst_group)); + } + + this->relayout(); + endResetModel(); + return *this; +} + +IdentityCollection &IdentityCollection::operator=(IdentityCollection && other) +{ + beginResetModel(); + this->root.children = std::move(other.root.children); + this->relayout(); + endResetModel(); + return *this; +} + void IdentityCollection::load(QSettings &settings) { this->beginResetModel(); diff --git a/src/identitycollection.hpp b/src/identitycollection.hpp index 82d48a6..0aaac09 100644 --- a/src/identitycollection.hpp +++ b/src/identitycollection.hpp @@ -46,6 +46,11 @@ class IdentityCollection : public QAbstractItemModel public: explicit IdentityCollection(QObject *parent = nullptr); + IdentityCollection(IdentityCollection const & other); + + IdentityCollection & operator=(IdentityCollection const &); + IdentityCollection & operator=(IdentityCollection &&); + public: void load(QSettings & settings); diff --git a/src/kristall.hpp b/src/kristall.hpp index cbe2510..ef9ab10 100644 --- a/src/kristall.hpp +++ b/src/kristall.hpp @@ -9,6 +9,8 @@ #include "identitycollection.hpp" #include "ssltrust.hpp" #include "favouritecollection.hpp" +#include "protocolsetup.hpp" +#include "documentstyle.hpp" enum class Theme : int { @@ -52,14 +54,6 @@ struct GenericSettings //! `:`-separated SHA256 hash QString toFingerprintString(QSslCertificate const & certificate); -extern QSettings global_settings; -extern IdentityCollection global_identities; -extern QClipboard * global_clipboard; -extern SslTrust global_gemini_trust; -extern SslTrust global_https_trust; -extern FavouriteCollection global_favourites; -extern GenericSettings global_options; - /// /// Kristall directory structure: /// ~/.cache/kristall/ @@ -72,11 +66,36 @@ extern GenericSettings global_options; /// namespace kristall { - extern QDir config_root; - extern QDir cache_root; - extern QDir offline_pages; - extern QDir themes; - extern QDir styles; + extern ProtocolSetup protocols; + + extern QSettings * settings; + extern IdentityCollection identities; + extern QClipboard * clipboard; + extern FavouriteCollection favourites; + extern GenericSettings options; + + extern DocumentStyle document_style; + + namespace trust { + extern SslTrust gemini; + extern SslTrust https; + } + + namespace dirs { + extern QDir config_root; + extern QDir cache_root; + + //! Contains files per host + extern QDir offline_pages; + + //! Contains custom UI themes for kristall + extern QDir themes; + + //! Contains custom document styles / presets + extern QDir styles; + } + + void saveSettings(); } #endif // KRISTALL_HPP diff --git a/src/main.cpp b/src/main.cpp index 6e71917..555734e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,31 +6,32 @@ #include <QSettings> #include <QCommandLineParser> #include <QDebug> - #include <QStandardPaths> - -IdentityCollection global_identities; -QSettings global_settings { "xqTechnologies", "Kristall" }; -QClipboard * global_clipboard; -SslTrust global_gemini_trust; -SslTrust global_https_trust; -FavouriteCollection global_favourites; -GenericSettings global_options; - -namespace kristall -{ - QDir config_root; - QDir cache_root; - QDir offline_pages; - QDir themes; - QDir styles; -} +#include <cassert> + +ProtocolSetup kristall::protocols; +IdentityCollection kristall::identities; +QSettings * kristall::settings; +QClipboard * kristall::clipboard; +SslTrust kristall::trust::gemini; +SslTrust kristall::trust::https; +FavouriteCollection kristall::favourites; +GenericSettings kristall::options; +DocumentStyle kristall::document_style; + +QDir kristall::dirs::config_root; +QDir kristall::dirs::cache_root; +QDir kristall::dirs::offline_pages; +QDir kristall::dirs::themes; +QDir kristall::dirs::styles; QString toFingerprintString(QSslCertificate const & certificate) { return QCryptographicHash::hash(certificate.toDer(), QCryptographicHash::Sha256).toHex(':'); } +static QSettings * app_settings_ptr; + #define SSTR(X) STR(X) #define STR(X) #X @@ -53,7 +54,7 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); app.setApplicationVersion(SSTR(KRISTALL_VERSION)); - global_clipboard = app.clipboard(); + kristall::clipboard = app.clipboard(); QCommandLineParser cli_parser; cli_parser.addVersionOption(); @@ -62,33 +63,119 @@ int main(int argc, char *argv[]) cli_parser.process(app); - - QString cache_root = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); QString config_root = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); - kristall::config_root = QDir { config_root }; - kristall::cache_root = QDir { cache_root }; + kristall::dirs::config_root = QDir { config_root }; + kristall::dirs::cache_root = QDir { cache_root }; + + kristall::dirs::offline_pages = derive_dir(kristall::dirs::cache_root, "offline-pages"); + kristall::dirs::themes = derive_dir(kristall::dirs::config_root, "themes"); + + kristall::dirs::styles = derive_dir(kristall::dirs::config_root, "styles"); + kristall::dirs::styles.setNameFilters(QStringList { "*.kthm" }); + kristall::dirs::styles.setFilter(QDir::Files); + + QSettings app_settings { + kristall::dirs::config_root.absoluteFilePath("config.ini"), + QSettings::IniFormat + }; + app_settings_ptr = &app_settings; + + { + QSettings deprecated_settings { "xqTechnologies", "Kristall" }; + if(QFile(deprecated_settings.fileName()).exists()) + { + if(deprecated_settings.value("deprecated", false) == false) + { + qDebug() << "Migrating to new configuration style."; + for(auto const & key : deprecated_settings.allKeys()) + { + app_settings.setValue(key, deprecated_settings.value(key)); + } + + // Migrate themes to new model + { + int items = deprecated_settings.beginReadArray("Themes"); + + for(int i = 0; i < items; i++) + { + deprecated_settings.setArrayIndex(i); + + QString name = deprecated_settings.value("name").toString(); + + DocumentStyle style; + style.load(deprecated_settings); + + QString fileName; + int index = 0; + do { + fileName = DocumentStyle::createFileNameFromName(name, index); + index += 1; + } while(kristall::dirs::styles.exists(fileName)); + + QSettings style_sheet { + kristall::dirs::styles.absoluteFilePath(fileName), + QSettings::IniFormat + }; + style_sheet.setValue("name", name); + style.save(style_sheet); + style_sheet.sync(); + } + + deprecated_settings.endArray(); + } + + // Remove old theming stuff + app_settings.remove("Theme"); + app_settings.remove("Themes"); + + // Migrate "current theme" to new format + { + DocumentStyle current_style; + deprecated_settings.beginGroup("Theme"); + current_style.load(deprecated_settings); + deprecated_settings.endGroup(); + + app_settings.beginGroup("Theme"); + current_style.save(app_settings); + app_settings.endGroup(); + } + + deprecated_settings.setValue("deprecated", true); + } + else + { + qDebug() << "Migration complete. Please delete" << deprecated_settings.fileName(); + } + } + } + + kristall::settings = &app_settings; - kristall::offline_pages = derive_dir(kristall::cache_root, "offline-pages"); - kristall::themes = derive_dir(kristall::config_root, "themes"); - kristall::styles = derive_dir(kristall::config_root, "styles"); + kristall::options.load(app_settings); - global_options.load(global_settings); + app_settings.beginGroup("Protocols"); + kristall::protocols.load(app_settings); + app_settings.endGroup(); - global_settings.beginGroup("Client Identities"); - global_identities.load(global_settings); - global_settings.endGroup(); + app_settings.beginGroup("Client Identities"); + kristall::identities.load(app_settings); + app_settings.endGroup(); - global_settings.beginGroup("Trusted Servers"); - global_gemini_trust.load(global_settings); - global_settings.endGroup(); + app_settings.beginGroup("Trusted Servers"); + kristall::trust::gemini.load(app_settings); + app_settings.endGroup(); - global_settings.beginGroup("Trusted HTTPS Servers"); - global_https_trust.load(global_settings); - global_settings.endGroup(); + app_settings.beginGroup("Trusted HTTPS Servers"); + kristall::trust::https.load(app_settings); + app_settings.endGroup(); - global_favourites.load(global_settings); + app_settings.beginGroup("Theme"); + kristall::document_style.load(app_settings); + app_settings.endGroup(); + + kristall::favourites.load(app_settings); MainWindow w(&app); @@ -106,9 +193,29 @@ int main(int argc, char *argv[]) else { w.addEmptyTab(true, true); } + + app_settings.beginGroup("Window State"); + if(app_settings.contains("geometry")) { + w.restoreGeometry(app_settings.value("geometry").toByteArray()); + } + if(app_settings.contains("state")) { + w.restoreState(app_settings.value("state").toByteArray()); + } + app_settings.endGroup(); + + w.show(); - return app.exec(); + int exit_code = app.exec(); + + app_settings.beginGroup("Window State"); + app_settings.setValue("geometry", w.saveGeometry()); + app_settings.setValue("state", w.saveState()); + app_settings.endGroup(); + + kristall::saveSettings(); + + return exit_code; } void GenericSettings::load(QSettings &settings) @@ -161,3 +268,36 @@ void GenericSettings::save(QSettings &settings) const settings.setValue("redirection_policy", int(redirection_policy)); settings.setValue("network_timeout", network_timeout); } + + +void kristall::saveSettings() +{ + assert(app_settings_ptr != nullptr); + QSettings & app_settings = *app_settings_ptr; + + kristall::favourites.save(app_settings); + + app_settings.beginGroup("Protocols"); + kristall::protocols.save(app_settings); + app_settings.endGroup(); + + app_settings.beginGroup("Client Identities"); + kristall::identities.save(app_settings); + app_settings.endGroup(); + + app_settings.beginGroup("Trusted Servers"); + kristall::trust::gemini.save(app_settings); + app_settings.endGroup(); + + app_settings.beginGroup("Trusted HTTPS Servers"); + kristall::trust::https.save(app_settings); + app_settings.endGroup(); + + app_settings.beginGroup("Theme"); + kristall::document_style.save(app_settings); + app_settings.endGroup(); + + kristall::options.save(app_settings); + + app_settings.sync(); +} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 885b5b4..b0305df 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -33,13 +33,7 @@ MainWindow::MainWindow(QApplication * app, QWidget *parent) : this->statusBar()->addPermanentWidget(this->file_size); this->statusBar()->addPermanentWidget(this->load_time); - this->protocols.load(global_settings); - - global_settings.beginGroup("Theme"); - this->current_style.load(global_settings); - global_settings.endGroup(); - - ui->favourites_view->setModel(&global_favourites); + ui->favourites_view->setModel(&kristall::favourites); this->ui->outline_window->setVisible(false); this->ui->history_window->setVisible(false); @@ -58,7 +52,7 @@ MainWindow::MainWindow(QApplication * app, QWidget *parent) : connect(this->ui->menuNavigation, &QMenu::aboutToShow, [this]() { BrowserTab * tab = qobject_cast<BrowserTab*>(this->ui->browser_tabs->currentWidget()); if(tab != nullptr) { - ui->actionAdd_to_favourites->setChecked(global_favourites.contains(tab->current_location)); + ui->actionAdd_to_favourites->setChecked(kristall::favourites.contains(tab->current_location)); } }); @@ -75,17 +69,6 @@ MainWindow::MainWindow(QApplication * app, QWidget *parent) : connect(sc, &QShortcut::activated, this, &MainWindow::on_focus_inputbar); } - { - global_settings.beginGroup("Window State"); - if(global_settings.contains("geometry")) { - restoreGeometry(global_settings.value("geometry").toByteArray()); - } - if(global_settings.contains("state")) { - restoreState(global_settings.value("state").toByteArray()); - } - global_settings.endGroup(); - } - this->ui->favourites_view->setContextMenuPolicy(Qt::CustomContextMenu); this->ui->history_view->setContextMenuPolicy(Qt::CustomContextMenu); @@ -94,7 +77,6 @@ MainWindow::MainWindow(QApplication * app, QWidget *parent) : MainWindow::~MainWindow() { - this->saveSettings(); delete ui; } @@ -112,7 +94,7 @@ BrowserTab * MainWindow::addEmptyTab(bool focus_new, bool load_default) } if(load_default) { - tab->navigateTo(QUrl(global_options.start_page), BrowserTab::PushImmediate); + tab->navigateTo(QUrl(kristall::options.start_page), BrowserTab::PushImmediate); } else { tab->navigateTo(QUrl("about:blank"), BrowserTab::DontPush); } @@ -141,41 +123,6 @@ void MainWindow::setUrlPreview(const QUrl &url) } } -void MainWindow::saveSettings() -{ - global_favourites.save(global_settings); - this->protocols.save(global_settings); - - global_settings.beginGroup("Client Identities"); - global_identities.save(global_settings); - global_settings.endGroup(); - - global_settings.beginGroup("Trusted Servers"); - global_gemini_trust.save(global_settings); - global_settings.endGroup(); - - global_settings.beginGroup("Trusted HTTPS Servers"); - global_https_trust.save(global_settings); - global_settings.endGroup(); - - global_settings.beginGroup("Theme"); - this->current_style.save(global_settings); - global_settings.endGroup(); - - { - global_settings.beginGroup("Window State"); - - global_settings.setValue("geometry", saveGeometry()); - global_settings.setValue("state", saveState()); - - global_settings.endGroup(); - } - - global_options.save(global_settings); - - global_settings.sync(); -} - void MainWindow::on_browser_tabs_currentChanged(int index) { if(index >= 0) { @@ -202,7 +149,7 @@ void MainWindow::on_browser_tabs_currentChanged(int index) void MainWindow::on_favourites_view_doubleClicked(const QModelIndex &index) { - if(auto url = global_favourites.get(index); url.isValid()) { + if(auto url = kristall::favourites.get(index); url.isValid()) { this->addNewTab(true, url); } } @@ -256,23 +203,23 @@ void MainWindow::on_actionSettings_triggered() { SettingsDialog dialog; - dialog.setGeminiStyle(this->current_style); - dialog.setProtocols(this->protocols); - dialog.setOptions(global_options); - dialog.setGeminiSslTrust(global_gemini_trust); - dialog.setHttpsSslTrust(global_https_trust); + dialog.setGeminiStyle(kristall::document_style); + dialog.setProtocols(kristall::protocols); + dialog.setOptions(kristall::options); + dialog.setGeminiSslTrust(kristall::trust::gemini); + dialog.setHttpsSslTrust(kristall::trust::https); if(dialog.exec() != QDialog::Accepted) return; - global_gemini_trust = dialog.geminiSslTrust(); - global_https_trust = dialog.httpsSslTrust(); - global_options = dialog.options(); + kristall::trust::gemini = dialog.geminiSslTrust(); + kristall::trust::https = dialog.httpsSslTrust(); + kristall::options = dialog.options(); - this->protocols = dialog.protocols(); - this->current_style = dialog.geminiStyle(); + kristall::protocols = dialog.protocols(); + kristall::document_style = dialog.geminiStyle(); - this->saveSettings(); + kristall::saveSettings(); this->reloadTheme(); } @@ -338,12 +285,12 @@ void MainWindow::on_actionAbout_Qt_triggered() void MainWindow::reloadTheme() { - if(global_options.theme == Theme::os_default) + if(kristall::options.theme == Theme::os_default) { application->setStyleSheet(""); QIcon::setThemeName("light"); } - if(global_options.theme == Theme::light) + if(kristall::options.theme == Theme::light) { QFile file(":/light.qss"); file.open(QFile::ReadOnly | QFile::Text); @@ -352,7 +299,7 @@ void MainWindow::reloadTheme() QIcon::setThemeName("light"); } - else if(global_options.theme == Theme::dark) + else if(kristall::options.theme == Theme::dark) { QFile file(":/dark.qss"); file.open(QFile::ReadOnly | QFile::Text); @@ -406,7 +353,7 @@ void MainWindow::on_actionGo_to_home_triggered() { BrowserTab * tab = qobject_cast<BrowserTab*>(this->ui->browser_tabs->currentWidget()); if(tab != nullptr) { - tab->navigateTo(QUrl(global_options.start_page), BrowserTab::PushImmediate); + tab->navigateTo(QUrl(kristall::options.start_page), BrowserTab::PushImmediate); } } @@ -470,7 +417,7 @@ void MainWindow::on_history_view_customContextMenuRequested(const QPoint &pos) void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint &pos) { if(auto idx = this->ui->favourites_view->indexAt(pos); idx.isValid()) { - if(QUrl url = global_favourites.get(idx); url.isValid()) { + if(QUrl url = kristall::favourites.get(idx); url.isValid()) { QMenu menu; BrowserTab * tab = qobject_cast<BrowserTab*>(this->ui->browser_tabs->currentWidget()); @@ -498,7 +445,11 @@ void MainWindow::on_actionManage_Certificates_triggered() { CertificateManagementDialog dialog { this }; - dialog.exec(); + dialog.setIdentitySet(kristall::identities); + if(dialog.exec() != QDialog::Accepted) + return; + + kristall::identities = dialog.identitySet(); - this->saveSettings(); + kristall::saveSettings(); } diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index 85b9d59..daf50b8 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -8,7 +8,6 @@ #include "favouritecollection.hpp" #include "renderers/geminirenderer.hpp" -#include "protocolsetup.hpp" #include "widgets/elidelabel.hpp" @@ -33,8 +32,6 @@ public: void setUrlPreview(QUrl const & url); - void saveSettings(); - private slots: void on_browser_tabs_currentChanged(int index); @@ -98,9 +95,6 @@ private: public: QApplication * application; - DocumentStyle current_style; - ProtocolSetup protocols; - private: Ui::MainWindow *ui; diff --git a/src/protocols/abouthandler.cpp b/src/protocols/abouthandler.cpp index 01eefff..f87afb8 100644 --- a/src/protocols/abouthandler.cpp +++ b/src/protocols/abouthandler.cpp @@ -28,7 +28,7 @@ bool AboutHandler::startRequest(const QUrl &url, ProtocolHandler::RequestOptions document.append("# Favourites\n"); document.append("\n"); - for (auto const &fav : global_favourites.getAll()) + for (auto const &fav : kristall::favourites.getAll()) { document.append("=> " + fav.toString().toUtf8() + "\n"); } diff --git a/src/protocols/geminiclient.cpp b/src/protocols/geminiclient.cpp index 6986250..13f795a 100644 --- a/src/protocols/geminiclient.cpp +++ b/src/protocols/geminiclient.cpp @@ -51,7 +51,7 @@ bool GeminiClient::startRequest(const QUrl &url, RequestOptions options) QSslConfiguration ssl_config = socket.sslConfiguration(); ssl_config.setProtocol(QSsl::TlsV1_2); - if(not global_gemini_trust.enable_ca) + if(not kristall::trust::gemini.enable_ca) ssl_config.setCaCertificates(QList<QSslCertificate> { }); else ssl_config.setCaCertificates(QSslConfiguration::systemCaCertificates()); @@ -316,7 +316,7 @@ void GeminiClient::sslErrors(QList<QSslError> const & errors) bool ignore = false; if(SslTrust::isTrustRelated(err.error())) { - switch(global_gemini_trust.getTrust(target_url, socket.peerCertificate())) + switch(kristall::trust::gemini.getTrust(target_url, socket.peerCertificate())) { case SslTrust::Trusted: ignore = true; diff --git a/src/protocols/webclient.cpp b/src/protocols/webclient.cpp index ed87694..299b39b 100644 --- a/src/protocols/webclient.cpp +++ b/src/protocols/webclient.cpp @@ -36,7 +36,7 @@ bool WebClient::startRequest(const QUrl &url, RequestOptions options) auto ssl_config = request.sslConfiguration(); // ssl_config.setProtocol(QSsl::TlsV1_2); - if(global_https_trust.enable_ca) + if(kristall::trust::https.enable_ca) ssl_config.setCaCertificates(QSslConfiguration::systemCaCertificates()); else ssl_config.setCaCertificates(QList<QSslCertificate> { }); @@ -182,7 +182,7 @@ void WebClient::on_sslErrors(const QList<QSslError> &errors) if(SslTrust::isTrustRelated(err.error())) { auto cert = this->current_reply->sslConfiguration().peerCertificate(); - switch(global_https_trust.getTrust(this->current_reply->url(), cert)) + switch(kristall::trust::https.getTrust(this->current_reply->url(), cert)) { case SslTrust::Trusted: ignore = true; diff --git a/src/protocolsetup.cpp b/src/protocolsetup.cpp index 33b454e..e5a87fb 100644 --- a/src/protocolsetup.cpp +++ b/src/protocolsetup.cpp @@ -11,20 +11,16 @@ ProtocolSetup::ProtocolSetup() void ProtocolSetup::save(QSettings &settings) const { - settings.beginGroup("Protocols"); #define MAC(X) settings.setValue(#X, this->X); PROTOCOLS(MAC) #undef MAC - settings.endGroup(); } void ProtocolSetup::load(QSettings &settings) { - settings.beginGroup("Protocols"); #define MAC(X) if(settings.contains(#X)) this->X = settings.value(#X).toBool(); PROTOCOLS(MAC) #undef MAC - settings.endGroup(); } ProtocolSetup::ProtocolSupport ProtocolSetup::isSchemeSupported(QString const & _scheme) const diff --git a/src/renderers/geminirenderer.cpp b/src/renderers/geminirenderer.cpp index 1f94602..e1379b5 100644 --- a/src/renderers/geminirenderer.cpp +++ b/src/renderers/geminirenderer.cpp @@ -38,7 +38,7 @@ std::unique_ptr<GeminiDocument> GeminiRenderer::render( result->background_color = themed_style.background_color; result->setIndentWidth(20); - bool emit_fancy_text = global_options.enable_text_decoration; + bool emit_fancy_text = kristall::options.enable_text_decoration; QTextCursor cursor{result.get()}; diff --git a/src/renderers/gophermaprenderer.cpp b/src/renderers/gophermaprenderer.cpp index 6779a9a..841e40b 100644 --- a/src/renderers/gophermaprenderer.cpp +++ b/src/renderers/gophermaprenderer.cpp @@ -26,7 +26,7 @@ std::unique_ptr<QTextDocument> GophermapRenderer::render(const QByteArray &input external_link.setFont(themed_style.standard_font); external_link.setForeground(QBrush(themed_style.external_link_color)); - bool emit_text_only = (global_options.gophermap_display == GenericSettings::PlainText); + bool emit_text_only = (kristall::options.gophermap_display == GenericSettings::PlainText); std::unique_ptr<QTextDocument> result = std::make_unique<QTextDocument>(); result->setDocumentMargin(themed_style.margin); diff --git a/src/widgets/searchbar.cpp b/src/widgets/searchbar.cpp index a89b8d6..807a979 100644 --- a/src/widgets/searchbar.cpp +++ b/src/widgets/searchbar.cpp @@ -7,7 +7,7 @@ SearchBar::SearchBar(QWidget *parent) : QLineEdit(parent) { QCompleter *completer = new QCompleter(this); - completer->setModel(&global_favourites); + completer->setModel(&kristall::favourites); completer->setCaseSensitivity(Qt::CaseInsensitive); completer->setCompletionRole(Qt::DisplayRole); this->setCompleter(completer); |
