diff --git a/LenaPi/LenaPi.pro b/LenaPi/LenaPi.pro index adf38c6..5750661 100644 --- a/LenaPi/LenaPi.pro +++ b/LenaPi/LenaPi.pro @@ -12,7 +12,8 @@ SOURCES += main.cpp \ controllers/MusicController.cpp \ models/MusicModel.cpp \ MouseEventSpy.cpp \ - EnergySaver.cpp + EnergySaver.cpp \ + controllers/SettingsHandler.cpp RESOURCES += qml.qrc \ lenapi.qrc @@ -47,6 +48,7 @@ HEADERS += \ controllers/MusicController.h \ models/MusicModel.h \ MouseEventSpy.h \ - EnergySaver.h + EnergySaver.h \ + controllers/SettingsHandler.h INCLUDEPATH+=/usr/local/include diff --git a/LenaPi/LenaPi.pro.user b/LenaPi/LenaPi.pro.user index e56d4b5..430c2b1 100644 --- a/LenaPi/LenaPi.pro.user +++ b/LenaPi/LenaPi.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/LenaPi/controllers/SettingsHandler.cpp b/LenaPi/controllers/SettingsHandler.cpp new file mode 100644 index 0000000..9dd1373 --- /dev/null +++ b/LenaPi/controllers/SettingsHandler.cpp @@ -0,0 +1,70 @@ +#include "SettingsHandler.h" + +constexpr const char* const rootPath = "rootPath"; +constexpr const char* const profile = "profile"; +constexpr const char* const enableEnergySaver = "enableEnergySaver"; +constexpr const char* const timeout = "timeout"; +constexpr const char* const shutdownScript = "shutdownScript"; + +SettingsHandler::SettingsHandler(QObject *parent) : QObject(parent) +{ + initDefaults(); +} + +SettingsHandler::SettingsHandler(QSettings *settings, QObject *parent) : SettingsHandler(parent) +{ + setSettings(settings); +} + +SettingsHandler* SettingsHandler::createSettingsHandlerAndFillWithDefaultsIfMissing(QSettings *settings) +{ + const auto handler = new SettingsHandler(settings); + handler->fillWithDefaultIfMissing(); + return handler; +} + +void SettingsHandler::fillWithDefaultIfMissing() +{ + for(const auto& key : mDefaults.keys()){ + if(!mSettings->contains(key)){ + mSettings->setValue(key,mDefaults.value(key)); + } + } +} + +QString SettingsHandler::getRootPath() const +{ + return mSettings->value(rootPath).toString(); +} + +QString SettingsHandler::getProfile() const +{ + return mSettings->value(profile).toString(); +} + +bool SettingsHandler::isEnergySaverEnabled() const +{ + return mSettings->value(enableEnergySaver).toBool(); +} + +int SettingsHandler::getEnergySaverTimeout() const +{ + return mSettings->value(timeout).toInt(); +} + +QString SettingsHandler::getShutdownScript() const +{ + return mSettings->value(shutdownScript).toString(); +} + +void SettingsHandler::initDefaults() +{ + mDefaults.insert(rootPath, "/home/ar/source/lenaMusic/"); + mDefaults.insert(profile, "RasPiTouch"); + mDefaults.insert(enableEnergySaver, true); + mDefaults.insert(timeout, 60); + mDefaults.insert(shutdownScript, "/usr/local/sbin/do_shutdown.sh"); +} + + + diff --git a/LenaPi/controllers/SettingsHandler.h b/LenaPi/controllers/SettingsHandler.h new file mode 100644 index 0000000..83b9868 --- /dev/null +++ b/LenaPi/controllers/SettingsHandler.h @@ -0,0 +1,37 @@ +#ifndef SETTINGSHANDLER_H +#define SETTINGSHANDLER_H + +#include +#include + +/** + * @brief Handles app settings + */ +class SettingsHandler : public QObject +{ + Q_OBJECT + +public: + explicit SettingsHandler(QObject *parent = nullptr); + SettingsHandler(QSettings* settings, QObject *parent = nullptr); + + static SettingsHandler* createSettingsHandlerAndFillWithDefaultsIfMissing(QSettings* settings); + + inline void setSettings(QSettings* settings) { mSettings = settings;} + inline QSettings* getSettings() const { return mSettings; } + void fillWithDefaultIfMissing(); + + QString getRootPath() const; + QString getProfile() const; + bool isEnergySaverEnabled() const; + int getEnergySaverTimeout() const; + QString getShutdownScript() const; + + +private: + void initDefaults(); + QSettings* mSettings; + QHash mDefaults; +}; + +#endif // SETTINGSHANDLER_H diff --git a/LenaPi/main.cpp b/LenaPi/main.cpp index baa329e..e4633a4 100644 --- a/LenaPi/main.cpp +++ b/LenaPi/main.cpp @@ -7,6 +7,7 @@ #include "controllers/NavigationController.h" #include "MouseEventSpy.h" #include "EnergySaver.h" +#include "controllers/SettingsHandler.h" int main(int argc, char *argv[]) { @@ -41,24 +42,21 @@ int main(int argc, char *argv[]) } /* Read Settings */ - const auto rootPath = settings->value("rootPath", "/home/ar/source/lenaMusic/").toString(); // path to music files - const auto profile = settings->value("profile", "RasPiTouch").toString(); // known profiles are "RasPiTouch" and "Desktop" - const auto isEnergySavingEnabled = settings->value("enableEnergySaver", true).toBool(); // enable/disable energy saver - const auto energySaverTimeout = settings->value("timeout", 60).toInt(); //timeout in seconds - const auto shutdownScript = settings->value("shutdownScript", "/usr/local/sbin/do_shutdown.sh").toString(); + const auto settingsHandler = SettingsHandler::createSettingsHandlerAndFillWithDefaultsIfMissing(settings); + // init main app NavigationController navController; navController.setContext(engine.rootContext()); - navController.init(rootPath); - navController.setUiProfile(profile); + navController.init(settingsHandler->getRootPath()); + navController.setUiProfile(settingsHandler->getProfile()); - if(isEnergySavingEnabled){ + if(settingsHandler->isEnergySaverEnabled()){ /* install MouseEventSpy and energy saver used for auto shut down of device * if not used for a predefined time. */ MouseEventSpy::init(); - EnergySaver::init(energySaverTimeout, shutdownScript); + EnergySaver::init(settingsHandler->getEnergySaverTimeout(), settingsHandler->getShutdownScript()); QObject::connect(MouseEventSpy::instance(), &MouseEventSpy::mouseEventDetected, EnergySaver::instance(), &EnergySaver::restartTimer); }