Skip to content

Commit

Permalink
Add import/export of settings.ini file for QML
Browse files Browse the repository at this point in the history
  • Loading branch information
Bionus committed Nov 10, 2020
1 parent 4ba579b commit d222bdb
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/gui-qml/src/components/settings/Setting.qml
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,12 @@ Item {

root.changed(val)
}

Connections {
target: backend
function onSettingsChanged() {
root.rawValue = root.obj.value(root.key, root.def);
root.value = root.parser !== null ? parser(root.rawValue) : root.rawValue
}
}
}
8 changes: 8 additions & 0 deletions src/gui-qml/src/components/settings/SettingsScreen.qml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ Page {
name: qsTr("Network")
icon: "/images/icons/network.png"
}
ListElement {
name: qsTr("Advanced")
icon: "/images/icons/settings.png"
}
ListElement {
name: qsTr("About")
icon: "/images/icons/info.png"
Expand Down Expand Up @@ -104,6 +108,10 @@ Page {
width: parent.width
visible: false
}
AdvancedSettingsPage {
width: parent.width
visible: false
}
AboutSettingsPage {
width: parent.width
visible: false
Expand Down
52 changes: 52 additions & 0 deletions src/gui-qml/src/components/settings/pages/AdvancedSettingsPage.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import QtQuick 2.12
import QtQuick.Layouts 1.12
import QtQuick.Dialogs 1.3
import Qt.labs.platform 1.1 as Labs

import "../items"

ColumnLayout {
spacing: 0

SettingTitle {
Layout.fillWidth: true
text: qsTr("Backup")
}
SettingItem {
name: qsTr("Export settings")
subtitle: qsTr("Backup the app settings.ini file on your device.")
Layout.fillWidth: true

onClicked: exportDialog.open()

FileDialog {
id: exportDialog

title: qsTr("Please choose a directory")
folder: Labs.StandardPaths.standardLocations(Labs.StandardPaths.DownloadLocation)[0]
selectFolder: true

onAccepted: backend.exportSettings(backend.toLocalFile(exportDialog.fileUrl.toString() + "/settings.ini"))
}
}
SettingItem {
name: qsTr("Import settings")
subtitle: qsTr("Import the app settings.ini from an existing file.")
Layout.fillWidth: true

onClicked: importDialog.open()

FileDialog {
id: importDialog

title: qsTr("Please choose a file")
folder: Labs.StandardPaths.standardLocations(Labs.StandardPaths.DownloadLocation)[0]

onAccepted: backend.importSettings(backend.toLocalFile(importDialog.fileUrl.toString()))
}
}

Item {
Layout.fillHeight: true
}
}
25 changes: 25 additions & 0 deletions src/gui-qml/src/main-screen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,31 @@ void MainScreen::loadSuggestions(const QString &prefix, int limit)
emit autoCompleteChanged();
}

bool MainScreen::exportSettings(const QString &dest)
{
return QFile::copy(m_profile->getSettings()->fileName(), dest);
}

bool MainScreen::importSettings(const QString &source)
{
QSettings sourceSettings(source, QSettings::IniFormat);
if (sourceSettings.status() != QSettings::NoError) {
return false;
}

QSettings *settings = m_profile->getSettings();
settings->clear();

for (const QString &key : sourceSettings.allKeys()) {
settings->setValue(key, sourceSettings.value(key));
}

settings->sync();
emit settingsChanged();

return true;
}

QString MainScreen::toLocalFile(const QString &url)
{
if (url.startsWith("file:")) {
Expand Down
3 changes: 3 additions & 0 deletions src/gui-qml/src/main-screen.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ class MainScreen : public QObject
void addFavorite(const QString &query, const QString &siteUrl);
void removeFavorite(const QString &query);
void loadSuggestions(const QString &prefix, int limit);
bool exportSettings(const QString &dest);
bool importSettings(const QString &source);

protected slots:
void refreshSites();
Expand All @@ -65,6 +67,7 @@ class MainScreen : public QObject
void sourcesChanged();
void favoritesChanged();
void autoCompleteChanged();
void settingsChanged();

private:
Profile *m_profile;
Expand Down
1 change: 1 addition & 0 deletions src/gui-qml/src/qml.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,6 @@
<file>components/SearchEdit.qml</file>
<file>components/FavoritesScreen.qml</file>
<file>components/AutoCompleteSearchEdit.qml</file>
<file>components/settings/pages/AdvancedSettingsPage.qml</file>
</qresource>
</RCC>

0 comments on commit d222bdb

Please sign in to comment.