Store current journey details in persistent settings
authorDavid Llewellyn-Jones <david@flypig.co.uk>
Sat, 14 Jul 2018 02:41:02 +0000 (03:41 +0100)
committerDavid Llewellyn-Jones <david@flypig.co.uk>
Sat, 14 Jul 2018 02:41:02 +0000 (03:41 +0100)
harbour-pedalo.pro
qml/harbour-pedalo.qml
src/harbour-pedalo.cpp
src/harbour-pedalo.h [new file with mode: 0644]
src/settings.cpp [new file with mode: 0644]
src/settings.h [new file with mode: 0644]

index d1a3f1b..26b606e 100644 (file)
 # The name of your application
 TARGET = harbour-pedalo
 
+VERSION_MAJOR = 0
+VERSION_MINOR = 1
+VERSION_BUILD = 1
+
+#Target version
+VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}-$${VERSION_BUILD}
+
+DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR" \
+    "VERSION_MINOR=$$VERSION_MINOR" \
+    "VERSION_BUILD=$$VERSION_BUILD" \
+    "VERSION=\\\"$$VERSION\\\""
+
 CONFIG += sailfishapp
 
 SOURCES += src/harbour-pedalo.cpp \
     src/journey.cpp \
     src/journeymodel.cpp \
-    src/status.cpp
+    src/status.cpp \
+    src/settings.cpp
 
 DISTFILES += qml/harbour-pedalo.qml \
     qml/cover/CoverPage.qml \
@@ -49,4 +62,6 @@ TRANSLATIONS += translations/harbour-pedalo-de.ts
 HEADERS += \
     src/journey.h \
     src/journeymodel.h \
-    src/status.h
+    src/status.h \
+    src/settings.h \
+    src/harbour-pedalo.h
index 944e65e..22ccbbc 100644 (file)
@@ -1,6 +1,7 @@
 import QtQuick 2.0
 import Sailfish.Silica 1.0
 import "pages"
+import harbour.pedalo.settings 1.0
 
 ApplicationWindow
 {
index 144ddd3..6346ad3 100644 (file)
@@ -8,6 +8,9 @@
 #include "journey.h"
 #include "journeymodel.h"
 #include "status.h"
+#include "settings.h"
+
+#include "harbour-pedalo.h"
 
 int main(int argc, char *argv[])
 {
@@ -22,12 +25,22 @@ int main(int argc, char *argv[])
     // To display the view, call "show()" (will show fullscreen on device).
 
     QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv));
+    // These values are used by QSettings to access the config file in
+    // /home/nemo/.local/share/flypig/harbour-pedalo.conf
+    //QCoreApplication::setOrganizationName("flypig");
+    QCoreApplication::setOrganizationDomain("www.flypig.co.uk");
+    QCoreApplication::setApplicationName(APP_NAME);
+
+    Settings::instantiate();
+    qmlRegisterSingletonType<Settings>("harbour.pedalo.settings", 1, 0, "Settings", Settings::provider);
 
     JourneyModel journeys;
     Status currentStatus;
+    Settings::getInstance().setMainStatus(currentStatus);
+    Settings::getInstance().loadSettings();
 
     QFile file;
-    file.setFileName(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/journeys.csv");
+    file.setFileName(Settings::getConfigDir() + "/journeys.csv");
     journeys.importFromFile(file);
 
     QScopedPointer<QQuickView> view(SailfishApp::createView());
@@ -42,10 +55,12 @@ int main(int argc, char *argv[])
 
     // Write out the journey data
     QDir dir;
-    dir.mkpath(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation));
-    file.setFileName(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/journeys.csv");
+    dir.mkpath(Settings::getConfigDir());
+    file.setFileName(Settings::getConfigDir() + "/journeys.csv");
     qDebug() << "File saved as: " << file.fileName();
     journeys.exportToFile(file);
 
+    Settings::getInstance().saveSettings();
+
     return result;
 }
diff --git a/src/harbour-pedalo.h b/src/harbour-pedalo.h
new file mode 100644 (file)
index 0000000..5689583
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef HARBOURPEDALO_H
+#define HARBOURPEDALO_H
+
+#define APP_NAME "harbour-pedalo"
+
+#endif // HARBOURPEDALO_H
diff --git a/src/settings.cpp b/src/settings.cpp
new file mode 100644 (file)
index 0000000..0998d37
--- /dev/null
@@ -0,0 +1,56 @@
+#include <QDesktopServices>
+#include <QDateTime>
+#include <QDebug>
+
+#include "settings.h"
+
+Settings * Settings::instance = nullptr;
+
+Settings::Settings(QObject *parent) : QObject(parent),
+    settings(this),
+    mainStatus(nullptr)
+{
+}
+
+Settings::~Settings() {
+}
+
+void Settings::instantiate(QObject *parent) {
+    if (instance == nullptr) {
+        instance = new Settings(parent);
+    }
+}
+
+Settings & Settings::getInstance() {
+    return *instance;
+}
+
+QObject * Settings::provider(QQmlEngine *engine, QJSEngine *scriptEngine) {
+    Q_UNUSED(engine)
+    Q_UNUSED(scriptEngine)
+
+    return instance;
+}
+
+QString Settings::getConfigDir() {
+    return QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
+}
+
+void Settings::setMainStatus(Status &value) {
+    mainStatus = &value;
+}
+
+void Settings::loadSettings() {
+    if (mainStatus != nullptr) {
+        mainStatus->setCycling(settings.value("status/cycling", false).toBool());
+        mainStatus->setStartTime(settings.value("status/startTime", QDateTime::currentMSecsSinceEpoch()).toULongLong());
+    }
+}
+
+void Settings::saveSettings() {
+    if (mainStatus != nullptr) {
+        settings.setValue("status/cycling", mainStatus->getCycling());
+        settings.setValue("status/startTime", mainStatus->getStartTime());
+    }
+    settings.sync();
+}
diff --git a/src/settings.h b/src/settings.h
new file mode 100644 (file)
index 0000000..2390d89
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef SETTINGS_H
+#define SETTINGS_H
+
+#include <QObject>
+#include <QQmlEngine>
+#include <QSettings>
+
+#include "status.h"
+
+class Settings : public QObject
+{
+    Q_OBJECT
+public:
+    explicit Settings(QObject *parent = nullptr);
+    ~Settings();
+
+    static void instantiate(QObject *parent = nullptr);
+    static Settings & getInstance();
+    static QObject * provider(QQmlEngine *engine, QJSEngine *scriptEngine);
+
+    Q_INVOKABLE static QString getConfigDir();
+
+    void loadSettings();
+    void saveSettings();
+
+    void setMainStatus(Status & value);
+signals:
+
+public slots:
+
+private:
+    static Settings * instance;
+    QSettings settings;
+
+    // Configurable values
+    Status * mainStatus;
+};
+
+#endif // SETTINGS_H