settingsHandler: write default setting for missing keys

This commit is contained in:
Anika Raemer 2021-10-09 20:59:57 +02:00
parent 5e2e6e7f4b
commit a567428093
5 changed files with 119 additions and 12 deletions

View file

@ -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

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2021-09-25T15:10:11. -->
<!-- Written by QtCreator 4.8.2, 2021-09-26T21:51:47. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

View file

@ -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");
}

View file

@ -0,0 +1,37 @@
#ifndef SETTINGSHANDLER_H
#define SETTINGSHANDLER_H
#include <QObject>
#include <qsettings.h>
/**
* @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<QString,QVariant> mDefaults;
};
#endif // SETTINGSHANDLER_H

View file

@ -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);
}