add QSettings for config parsing
This commit is contained in:
parent
f9af4c662a
commit
893a2990af
5 changed files with 71 additions and 31 deletions
|
|
@ -1,14 +1,19 @@
|
|||
#include "EnergySaver.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QFileInfo>
|
||||
#include <QProcess>
|
||||
#include <iostream>
|
||||
|
||||
void EnergySaver::init(int interval)
|
||||
void EnergySaver::init(int interval, const QString &shutdownScript)
|
||||
{
|
||||
EnergySaver* saver = instance();
|
||||
saver->initTimer(interval*1000);
|
||||
saver->restartTimer();
|
||||
QFileInfo script(shutdownScript);
|
||||
if(script.exists()){
|
||||
auto saver = instance();
|
||||
saver->setShutdownScript(shutdownScript);
|
||||
saver->initTimer(interval*1000);
|
||||
saver->restartTimer();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -39,13 +44,18 @@ void EnergySaver::initTimer(int interval)
|
|||
mTimer.setSingleShot(true);
|
||||
}
|
||||
|
||||
void EnergySaver::setShutdownScript(const QString &shutdownScript)
|
||||
{
|
||||
mShutdownScript = shutdownScript;
|
||||
}
|
||||
|
||||
|
||||
void EnergySaver::onTimeout()
|
||||
{
|
||||
std::cout << "Shutting down.";
|
||||
#ifndef _DEBUG
|
||||
QProcess p;
|
||||
p.start("/usr/local/sbin/do_shutdown.sh");
|
||||
p.start(mShutdownScript);
|
||||
p.waitForFinished();
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,18 +20,22 @@ class EnergySaver : public QObject
|
|||
Q_OBJECT
|
||||
|
||||
protected:
|
||||
explicit EnergySaver(QObject *parent = nullptr) : QObject(parent) {};
|
||||
explicit EnergySaver(QObject *parent = nullptr) : QObject(parent) {}
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief Create instance if necessary and set timeout interval.
|
||||
* @brief Create instance if necessary, configure it and start timer.
|
||||
* @param interval Timer interval in seconds
|
||||
* @param shutdownScript Path to shutdown script file
|
||||
* @see EnergySaver::instance
|
||||
*
|
||||
* Instance is initialized with timeout interval and shutdown script
|
||||
* and started if the provided script exists.
|
||||
*/
|
||||
static void init(int interval);
|
||||
static void init(int interval, const QString& shutdownScript);
|
||||
/**
|
||||
* @brief Implements the singleton pattern.
|
||||
* @return Instance
|
||||
* @return Instance of EnergySaver
|
||||
*
|
||||
* If no instance has been created yet, create new instance.
|
||||
*/
|
||||
|
|
@ -49,7 +53,9 @@ private:
|
|||
* @param interval Timeout interval in millisecond.
|
||||
*/
|
||||
void initTimer(int interval);
|
||||
void setShutdownScript(const QString& shutdownScript);
|
||||
QTimer mTimer;
|
||||
QString mShutdownScript;
|
||||
|
||||
private slots:
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 4.8.2, 2021-03-14T14:48:57. -->
|
||||
<!-- Written by QtCreator 4.8.2, 2021-09-25T15:10:11. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
|
@ -294,8 +294,8 @@
|
|||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">LenaPi</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/araemer/source/LenaPi/LenaPi/LenaPi.pro</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">LenaPi2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/ar/source/LenaPi/LenaPi/LenaPi.pro</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">LenaPi.pro</value>
|
||||
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||
|
|
|
|||
|
|
@ -1,39 +1,46 @@
|
|||
#include <QGuiApplication>
|
||||
#include <QQmlApplicationEngine>
|
||||
#include <QSettings>
|
||||
#include "controllers/NavigationController.h"
|
||||
#include "MouseEventSpy.h"
|
||||
#include "EnergySaver.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
/**
|
||||
/*
|
||||
* @todo Add command line parser to specify a custom config file
|
||||
* https://doc.qt.io/qt-5/qcommandlineparser.html
|
||||
* Add config handling https://doc.qt.io/qt-5/qsettings.html#QSettings-4
|
||||
* - set root path
|
||||
* ui mode -> pass to NavigationController and store in UiStateModel
|
||||
* - set mode
|
||||
* -- RasPi -> no volumeControl or exit Button
|
||||
* -- Desktop -> volumeControl and exit Button
|
||||
* -- in future probably also MobileApp
|
||||
* Energy saving options -> hand over to energy saver on initialization
|
||||
* - enable energy saving
|
||||
* - set energy saver timeout
|
||||
* - set shutdown script path
|
||||
*/
|
||||
QGuiApplication app(argc, argv);
|
||||
QQmlApplicationEngine engine;
|
||||
|
||||
/* Read Settings */
|
||||
QSettings settings("me", "LenaPi");
|
||||
const auto rootPath = settings.value("rootPath", "/home/ar/source/lenaMusic/").toString(); // path to music files
|
||||
const auto profile = settings.value("profile", "RasPiTouch").toString(); // known modes 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();
|
||||
|
||||
/* @todo Hand over profile to UiStateModel via NavigationController
|
||||
* Add properties to UiStateModel for showing volume controls and close button.
|
||||
* Set those properties according to profile and use them to hide/show elements in qml
|
||||
*/
|
||||
NavigationController navController;
|
||||
navController.setContext(engine.rootContext());
|
||||
navController.init("/home/ar/source/lenaMusic/");
|
||||
navController.init(rootPath);
|
||||
|
||||
// install MouseEventSpy and energy saver used for auto
|
||||
// shut down of RaspberryPi if not used for a predefined time.
|
||||
MouseEventSpy::init();
|
||||
EnergySaver::init(10);
|
||||
QObject::connect(MouseEventSpy::instance(), &MouseEventSpy::mouseEventDetected,
|
||||
EnergySaver::instance(), &EnergySaver::restartTimer);
|
||||
if(isEnergySavingEnabled){
|
||||
/* 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);
|
||||
QObject::connect(MouseEventSpy::instance(), &MouseEventSpy::mouseEventDetected,
|
||||
EnergySaver::instance(), &EnergySaver::restartTimer);
|
||||
}
|
||||
|
||||
// load GUI
|
||||
engine.load(QUrl("qrc:/main.qml"));
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,23 @@ signals:
|
|||
void sourceChanged();
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief Provides the possibility to configure UI according to profile.
|
||||
*/
|
||||
enum EProfile : uint{
|
||||
/**
|
||||
* @brief Profile designed for running LenaPi as window manager on Raspberry Pi Touch
|
||||
*
|
||||
* Start fullscreen and do NOT show close button or volume controls
|
||||
*/
|
||||
Profile_RasPiTouch = 0,
|
||||
/**
|
||||
* @brief Profiled designed for running LenaPi as a desktop app.
|
||||
*
|
||||
* Start fullscreen, show close button and volume controls.
|
||||
*/
|
||||
Profile_Desktop
|
||||
};
|
||||
explicit UiStateModel(QObject *parent = nullptr);
|
||||
|
||||
QUrl getSource() const;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue