From: David Llewellyn-Jones Date: Sat, 14 Jul 2018 02:41:02 +0000 (+0100) Subject: Store current journey details in persistent settings X-Git-Url: https://www.flypig.org.uk/git/?p=harbour-pedalo.git;a=commitdiff_plain;h=d42485b9c24c02503080b05e5e466112f47c909a Store current journey details in persistent settings --- diff --git a/harbour-pedalo.pro b/harbour-pedalo.pro index d1a3f1b..26b606e 100644 --- a/harbour-pedalo.pro +++ b/harbour-pedalo.pro @@ -12,12 +12,25 @@ # 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 diff --git a/qml/harbour-pedalo.qml b/qml/harbour-pedalo.qml index 944e65e..22ccbbc 100644 --- a/qml/harbour-pedalo.qml +++ b/qml/harbour-pedalo.qml @@ -1,6 +1,7 @@ import QtQuick 2.0 import Sailfish.Silica 1.0 import "pages" +import harbour.pedalo.settings 1.0 ApplicationWindow { diff --git a/src/harbour-pedalo.cpp b/src/harbour-pedalo.cpp index 144ddd3..6346ad3 100644 --- a/src/harbour-pedalo.cpp +++ b/src/harbour-pedalo.cpp @@ -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 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("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 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 index 0000000..5689583 --- /dev/null +++ b/src/harbour-pedalo.h @@ -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 index 0000000..0998d37 --- /dev/null +++ b/src/settings.cpp @@ -0,0 +1,56 @@ +#include +#include +#include + +#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 index 0000000..2390d89 --- /dev/null +++ b/src/settings.h @@ -0,0 +1,39 @@ +#ifndef SETTINGS_H +#define SETTINGS_H + +#include +#include +#include + +#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