aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--data/poi.toml14
-rw-r--r--src/browser.cpp8
-rw-r--r--src/forms/profilesdialog.cpp4
-rw-r--r--src/forms/profilesdialog.ui2
-rw-r--r--src/forms/profileview.cpp58
-rw-r--r--src/forms/profileview.h4
-rw-r--r--src/forms/profileview.ui7
-rw-r--r--src/mainwindow.cpp14
-rw-r--r--src/mainwindow.h3
-rw-r--r--src/webengine/webengineprofile.cpp60
-rw-r--r--src/webengine/webengineprofile.h8
-rw-r--r--src/widgets/mainwindowmenubar.cpp3
-rw-r--r--src/widgets/webviewtabbar.cpp2
14 files changed, 100 insertions, 88 deletions
diff --git a/README.md b/README.md
index 26881dd..dca7b23 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@ _yet another Qt browser_
### What is this and why should I care?
The aim is to create a small, fast and clean web browser.
+
* minimal - just a browser, not a platform
* configurable - settings file in plain sight and plain text
diff --git a/data/poi.toml b/data/poi.toml
index fe3a4fc..e5fc6ac 100644
--- a/data/poi.toml
+++ b/data/poi.toml
@@ -13,15 +13,13 @@
# - QStandardPaths::AppConfigLocation + "/poi.conf"
#
## Variables
-# §home is QStandardPaths::HomeLocation
-# $cache is QStandardPaths::CacheLocation
-# $settings is the directory where the settings file is located
+# §home is QStandardPaths::HomeLocation, usually /home/username
+# $cache is QStandardPaths::CacheLocation, usually /home/username/.cache/smolbote
+# $settings is the directory where the settings file is located, usually /home/username/config/.smolbote
# General
[general]
-homepage="https://duckduckgo.com"
-newtab="about:blank"
-search="https://duckduckgo.com/?q=$term&kp=-1"
+search="https://duckduckgo.com/lite?q=$term" # FIXME remove; move to profile
# Browser: application-wide settings
[browser]
@@ -32,11 +30,13 @@ search="https://duckduckgo.com/?q=$term&kp=-1"
[browser.profile]
default=""
path="$home/.config/smolbote/profiles/"
+storagePath="$home/.config/smolbote/profiles/"
+cachePath="$home/.cache/smolbote/profiles/"
[browser.profile.new]
-path="$home/.config/smolbote/profiles"
homepage="https://duckduckgo.com"
newtab="about:blank"
+search="https://duckduckgo.com/lite?q=$term" # FIXME
# Main window settings
[window]
diff --git a/src/browser.cpp b/src/browser.cpp
index 0c4191f..20a91dd 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -255,7 +255,13 @@ void Browser::removeWindow(MainWindow *window)
WebEngineProfile* Browser::profile(const QString name)
{
if(!m_profiles.contains(name)) {
- m_profiles.insert(name, new WebEngineProfile(name, this));
+ if(name.isEmpty()) {
+ // Create off-the-record profile
+ m_profiles.insert(name, new WebEngineProfile(this));
+ } else {
+ // Create regular profile
+ m_profiles.insert(name, new WebEngineProfile(name, this));
+ }
if(!m_urlRequestInterceptor) {
m_urlRequestInterceptor = new UrlRequestInterceptor(this);
diff --git a/src/forms/profilesdialog.cpp b/src/forms/profilesdialog.cpp
index 34bd063..557d865 100644
--- a/src/forms/profilesdialog.cpp
+++ b/src/forms/profilesdialog.cpp
@@ -51,7 +51,9 @@ ProfilesDialog::ProfilesDialog(MainWindow *window, QWidget *parent) :
connect(ui->listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(viewProfile(int)));
connect(ui->new_toolButton, SIGNAL(released()), this, SLOT(newProfile()));
- connect(this, SIGNAL(accepted()), this, SLOT(loadSelectedProfile()));
+ disconnect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(ui->buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(loadSelectedProfile()));
+ connect(ui->buttonBox->button(QDialogButtonBox::Save), SIGNAL(clicked()), m_view, SLOT(updateProfile()));
loadProfiles();
}
diff --git a/src/forms/profilesdialog.ui b/src/forms/profilesdialog.ui
index 7a140b5..7e8bad5 100644
--- a/src/forms/profilesdialog.ui
+++ b/src/forms/profilesdialog.ui
@@ -69,7 +69,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Save</set>
</property>
</widget>
</item>
diff --git a/src/forms/profileview.cpp b/src/forms/profileview.cpp
index cece4e4..2695311 100644
--- a/src/forms/profileview.cpp
+++ b/src/forms/profileview.cpp
@@ -41,13 +41,13 @@ ProfileView::ProfileView(WebEngineProfile *profile, QWidget *parent) :
// actions
connect(ui->clearCache_pushButton, &QPushButton::clicked, [this]() {
- this->_profile->clearHttpCache();
+ this->m_profile->clearHttpCache();
});
connect(ui->clearHistory_pushButton, &QPushButton::clicked, [this]() {
- this->_profile->clearAllVisitedLinks();
+ this->m_profile->clearAllVisitedLinks();
});
- connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(updateProfile()));
+ //connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(updateProfile()));
}
ProfileView::~ProfileView()
@@ -62,28 +62,28 @@ void ProfileView::setProfile(WebEngineProfile *profile)
}
//Q_ASSERT(profile);
- _profile = profile;
- setWindowTitle(_profile->name());
+ m_profile = profile;
+ setWindowTitle(m_profile->name());
- m_cookiesForm = new CookiesForm(_profile->cookieStore(), this);
+ m_cookiesForm = new CookiesForm(m_profile->cookieStore(), this);
//ui->tabWidget->addTab(m_cookiesForm, m_cookiesForm->windowTitle());
// general
- ui->homepage_lineEdit->setText(_profile->homepage().toString());
- ui->newtab_lineEdit->setText(_profile->newtab().toString());
+ ui->homepage_lineEdit->setText(m_profile->homepage().toString());
+ ui->newtab_lineEdit->setText(m_profile->newtab().toString());
// http
- ui->userAgent->setPlainText(_profile->httpUserAgent());
- ui->acceptLanguage->setPlainText(_profile->httpAcceptLanguage());
- ui->cacheType->setCurrentIndex(_profile->httpCacheType());
- ui->cacheSize->setText(QString::number(_profile->httpCacheMaximumSize()));
+ ui->userAgent->setPlainText(m_profile->httpUserAgent());
+ ui->acceptLanguage->setPlainText(m_profile->httpAcceptLanguage());
+ ui->cacheType->setCurrentIndex(m_profile->httpCacheType());
+ ui->cacheSize->setText(QString::number(m_profile->httpCacheMaximumSize()));
// path
- ui->storagePath_lineEdit->setText(_profile->persistentStoragePath());
- ui->cachePath_lineEdit->setText(_profile->cachePath());
+ ui->storagePath_lineEdit->setText(m_profile->persistentStoragePath());
+ ui->cachePath_lineEdit->setText(m_profile->cachePath());
// policy
- ui->cookiePolicy->setCurrentIndex(_profile->persistentCookiesPolicy());
+ ui->cookiePolicy->setCurrentIndex(m_profile->persistentCookiesPolicy());
//ui->formLayout_3->addWidget(m_cookiesForm);
ui->verticalLayout_3->addWidget(m_cookiesForm);
@@ -97,44 +97,50 @@ void ProfileView::showProfile()
void ProfileView::showCookies()
{
- ui->tabWidget->setCurrentIndex(4);
+ ui->tabWidget->setCurrentIndex(2);
show();
}
void ProfileView::updateProfile()
{
- qDebug("Updating profile...");
+ qDebug("Updating profile [%s]...", qUtf8Printable(m_profile->name()));
+
+ // general
+ m_profile->setHomepage(QUrl::fromUserInput(ui->homepage_lineEdit->text()));
+ m_profile->setNewtab(QUrl::fromUserInput(ui->newtab_lineEdit->text()));
// http
- _profile->setHttpUserAgent(ui->userAgent->toPlainText());
- _profile->setHttpAcceptLanguage(ui->acceptLanguage->toPlainText());
+ m_profile->setHttpUserAgent(ui->userAgent->toPlainText());
+ m_profile->setHttpAcceptLanguage(ui->acceptLanguage->toPlainText());
switch (ui->cacheType->currentIndex()) {
case 0:
- _profile->setHttpCacheType(QWebEngineProfile::MemoryHttpCache);
+ m_profile->setHttpCacheType(QWebEngineProfile::MemoryHttpCache);
break;
case 1:
- _profile->setHttpCacheType(QWebEngineProfile::DiskHttpCache);
+ m_profile->setHttpCacheType(QWebEngineProfile::DiskHttpCache);
break;
case 2:
- _profile->setHttpCacheType(QWebEngineProfile::NoCache);
+ m_profile->setHttpCacheType(QWebEngineProfile::NoCache);
break;
default:
break;
}
- _profile->setHttpCacheMaximumSize(ui->cacheSize->text().toInt());
+ m_profile->setHttpCacheMaximumSize(ui->cacheSize->text().toInt());
// policy
switch (ui->cookiePolicy->currentIndex()) {
case 0:
- _profile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
+ m_profile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
break;
case 1:
- _profile->setPersistentCookiesPolicy(QWebEngineProfile::AllowPersistentCookies);
+ m_profile->setPersistentCookiesPolicy(QWebEngineProfile::AllowPersistentCookies);
break;
case 2:
- _profile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);
+ m_profile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);
break;
default:
break;
}
+
+ m_profile->saveProfile();
}
diff --git a/src/forms/profileview.h b/src/forms/profileview.h
index 5dbdb59..a2ac98e 100644
--- a/src/forms/profileview.h
+++ b/src/forms/profileview.h
@@ -42,13 +42,11 @@ public:
public slots:
void showProfile();
void showCookies();
-
-private slots:
void updateProfile();
private:
- WebEngineProfile *_profile;
Ui::ProfileView *ui;
+ WebEngineProfile *m_profile;
CookiesForm *m_cookiesForm;
};
diff --git a/src/forms/profileview.ui b/src/forms/profileview.ui
index bed045a..5823d02 100644
--- a/src/forms/profileview.ui
+++ b/src/forms/profileview.ui
@@ -216,13 +216,6 @@
</widget>
</widget>
</item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="standardButtons">
- <set>QDialogButtonBox::Save</set>
- </property>
- </widget>
- </item>
</layout>
</widget>
<resources/>
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index bda8bdb..856298d 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -109,7 +109,7 @@ MainWindow::MainWindow(QUrl defaultUrl, QWidget *parent) :
if(!defaultUrl.isEmpty()) {
newTab(defaultUrl);
} else {
- newTab(sSettings->value("general.homepage").toUrl());
+ newTab(tabBar->profile()->homepage());
}
resize(sSettings->value("window.width").toInt(), sSettings->value("window.height").toInt());
@@ -155,7 +155,7 @@ void MainWindow::newTab(const QUrl &url)
if(!url.isEmpty()) {
tabBar->addTab(url);
} else {
- tabBar->addTab(sSettings->value("general.newtab").toUrl());
+ tabBar->addTab(tabBar->profile()->newtab());
}
}
@@ -241,13 +241,3 @@ void MainWindow::handleTitleUpdated(const QString &title)
{
setWindowTitle(sSettings->value("window.title").toString().replace("title", title).replace("profile", tabBar->profile()->name()));
}
-
-void MainWindow::profileAction()
-{
- tabBar->profile()->dialog()->showProfile();
-}
-
-void MainWindow::cookiesAction()
-{
- tabBar->profile()->dialog()->showCookies();
-}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 2f5a662..4e0ed3a 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -53,9 +53,6 @@ public slots:
void newTab(const QUrl &url = QUrl(""));
void newWindow(const QUrl &url = QUrl(""));
- void profileAction();
- void cookiesAction();
-
void setProfile(WebEngineProfile *profile);
void toggleFullscreen();
diff --git a/src/webengine/webengineprofile.cpp b/src/webengine/webengineprofile.cpp
index 0a16cd5..583be3e 100644
--- a/src/webengine/webengineprofile.cpp
+++ b/src/webengine/webengineprofile.cpp
@@ -23,23 +23,38 @@
#include <QSettings>
#include <QWebEngineSettings>
-WebEngineProfile::WebEngineProfile(const QString &name, QObject *parent) :
+WebEngineProfile::WebEngineProfile(QObject *parent) :
QWebEngineProfile(parent)
{
- if(name.isEmpty()) {
- m_name = tr("Off-the-record");
- // off-the-record should have no storage or cache
- } else {
- m_name = name;
- setPersistentStoragePath(sSettings->value("browser.profile.path").toString() + name);
- setCachePath(sSettings->value("browser.profile.path").toString() + name);
- }
+ m_name = tr("Off-the-record");
- QString profilePath = sSettings->value("browser.profile.path").toString() + name + "/profile.ini";
- if(QFile::exists(profilePath)) {
+ // Off-the-record profiles have no persistent path
- qDebug("Reading profile from [%s]", qUtf8Printable(profilePath));
- QSettings config(profilePath, QSettings::IniFormat);
+ m_homepage = sSettings->value("browser.profile.new.homepage").toUrl();
+ m_newtab = sSettings->value("browser.profile.new.newtab").toUrl();
+}
+
+WebEngineProfile::WebEngineProfile(const QString &name, QObject *parent) :
+ QWebEngineProfile(name, parent)
+{
+ m_name = name;
+ setPersistentStoragePath(sSettings->value("browser.profile.storagePath").toString() + name);
+ setCachePath(sSettings->value("browser.profile.cachePath").toString() + name);
+
+ // Read profile settings
+ QString profileIniPath = sSettings->value("browser.profile.path").toString() + name + "/profile.ini";
+
+ // If none exist, use the defaults
+ if(!QFile::exists(profileIniPath)) {
+ qDebug("Creating new profile...");
+ m_homepage = sSettings->value("browser.profile.new.homepage").toUrl();
+ m_newtab = sSettings->value("browser.profile.new.newtab").toUrl();
+
+ // Else read them
+ } else {
+
+ qDebug("Reading profile from [%s]", qUtf8Printable(profileIniPath));
+ QSettings config(profileIniPath, QSettings::IniFormat);
m_homepage = config.value("homepage", m_homepage).toUrl();
m_newtab = config.value("newtab", m_newtab).toUrl();
@@ -117,17 +132,14 @@ QString WebEngineProfile::name() const
return m_name;
}
-ProfileView *WebEngineProfile::dialog()
+QUrl WebEngineProfile::homepage() const
{
- if(m_profileDialog == nullptr) {
- m_profileDialog = new ProfileView(this);
- }
- return m_profileDialog;
+ return m_homepage;
}
-QUrl WebEngineProfile::homepage() const
+void WebEngineProfile::setHomepage(const QUrl &url)
{
- return m_homepage;
+ m_homepage = url;
}
QUrl WebEngineProfile::newtab() const
@@ -135,10 +147,18 @@ QUrl WebEngineProfile::newtab() const
return m_newtab;
}
+void WebEngineProfile::setNewtab(const QUrl &url)
+{
+ m_newtab = url;
+}
+
void WebEngineProfile::saveProfile()
{
QSettings config(persistentStoragePath() + "/profile.ini", QSettings::IniFormat);
+ config.setValue("homepage", homepage().toString());
+ config.setValue("newtab", newtab().toString());
+
config.beginGroup("http");
config.setValue("userAgent", httpUserAgent());
config.setValue("accept-lang", httpAcceptLanguage());
diff --git a/src/webengine/webengineprofile.h b/src/webengine/webengineprofile.h
index e225462..f457f53 100644
--- a/src/webengine/webengineprofile.h
+++ b/src/webengine/webengineprofile.h
@@ -29,16 +29,18 @@ class WebEngineProfile : public QWebEngineProfile
{
Q_OBJECT
public:
+ explicit WebEngineProfile(QObject *parent = Q_NULLPTR);
explicit WebEngineProfile(const QString &name, QObject *parent = Q_NULLPTR);
~WebEngineProfile();
QString name() const;
+
QUrl homepage() const;
- QUrl newtab() const;
+ void setHomepage(const QUrl &url);
- // TODO: remove
- ProfileView *dialog();
+ QUrl newtab() const;
+ void setNewtab(const QUrl &url);
signals:
diff --git a/src/widgets/mainwindowmenubar.cpp b/src/widgets/mainwindowmenubar.cpp
index 4ad9d67..ba28607 100644
--- a/src/widgets/mainwindowmenubar.cpp
+++ b/src/widgets/mainwindowmenubar.cpp
@@ -69,9 +69,6 @@ MainWindowMenuBar::MainWindowMenuBar(MainWindow *parent) :
QMenu *profileMenu = new QMenu(tr("Profile"), this);
addMenu(profileMenu);
profileMenu->addAction(tr("Profiles"), this, SLOT(handleLoadProfile()));
- profileMenu->addSeparator();
- profileMenu->addAction(tr("View profile"), parent, SLOT(profileAction()));
- profileMenu->addAction(tr("Cookies"), parent, SLOT(cookiesAction()));
// Page menu
QMenu *pageMenu = new QMenu(tr("Page"), this);
diff --git a/src/widgets/webviewtabbar.cpp b/src/widgets/webviewtabbar.cpp
index bd24304..eb2e463 100644
--- a/src/widgets/webviewtabbar.cpp
+++ b/src/widgets/webviewtabbar.cpp
@@ -142,7 +142,7 @@ QSize WebViewTabBar::tabSizeHint(int index) const
void WebViewTabBar::handleCurrentChanged(int index)
{
if(index < 0) {
- addTab(QUrl::fromUserInput(sSettings->value("general.newtab").toString()));
+ addTab(profile()->newtab());
return;
}
emit currentTabChanged(m_views.at(index));