aqhome-cgi: rewrite of the page module.

This commit is contained in:
Martin Preuss
2026-08-24 23:35:54 +02:00
parent 5587dd5abc
commit 8158bc28fb
26 changed files with 2095 additions and 70 deletions

View File

@@ -11,7 +11,7 @@
#endif
#include "./mdevices.h"
#include "./mdevices_p.h"
#include "aqhome-cgi/modules/devices/mdevices_index.h"
#include "aqhome-cgi/modules/devices/mdevices_valuestable.h"
@@ -22,6 +22,7 @@
#include "aqhome-cgi/modules/devices/mdevices_device.h"
#include "aqhome-cgi/modules/devices/mdevices_setdevice.h"
#include "aqhome-cgi/modules/devices/mdevices_page.h"
#include "aqhome-cgi/modules/devices/mdevices_page2.h"
#include "aqhome-cgi/modules/mdataclient.h"
#include <aqcgi/service/module.h>
@@ -46,12 +47,21 @@
#define P_VALUEWRITE AQH_MODDEVICES_PERMS_VALUEWRITE
/* ------------------------------------------------------------------------------------------------
* global vars
* ------------------------------------------------------------------------------------------------
*/
GWEN_INHERIT(AQCGI_MODULE, AQH_MOD_DEVICES)
/* ------------------------------------------------------------------------------------------------
* forward declarations
* ------------------------------------------------------------------------------------------------
*/
static void GWENHYWFAR_CB _freeData(void *bp, void *p);
static AQCGI_MODULE *_loadSubModule(AQCGI_MODULE *m, AQCGI_REQUEST *rq, AQCGI_SESSION *session, const char *sModuleName);
static int _handleRequest(AQCGI_MODULE *m, AQCGI_REQUEST *rq, AQCGI_SESSION *session, const char *sLastPathElem);
@@ -103,13 +113,94 @@ static AQH_MODSERVICE_HANDLER_ENTRY _requestTable[]={
void AQH_ModDevices_Extend(AQCGI_MODULE *m, AQCGI_SERVICE *sv, const char *baseFolder)
{
AQH_MOD_DEVICES *xm;
AQH_ModService_Extend(m, sv, baseFolder);
GWEN_NEW_OBJECT(AQH_MOD_DEVICES, xm);
GWEN_INHERIT_SETDATA(AQCGI_MODULE, AQH_MOD_DEVICES, m, xm, _freeData);
AQH_ModService_SetHandleRequestFn(m, _handleRequest);
AQH_ModService_SetLoadSubModuleFn(m, _loadSubModule);
}
void _freeData(GWEN_UNUSED void *bp, void *p)
{
AQH_MOD_DEVICES *xm;
xm=(AQH_MOD_DEVICES*) p;
AQH_Value_List_free(xm->valueList);
AQH_Device_List_free(xm->deviceList);
GWEN_FREE_OBJECT(xm);
}
AQH_DEVICE_LIST *AQH_ModDevices_GetDeviceList(const AQCGI_MODULE *m)
{
if (m) {
AQH_MOD_DEVICES *xm;
xm=GWEN_INHERIT_GETDATA(AQCGI_MODULE, AQH_MOD_DEVICES, m);
if (xm) {
return xm->deviceList;
}
}
return NULL;
}
void AQH_ModDevices_SetDeviceList(AQCGI_MODULE *m, AQH_DEVICE_LIST *deviceList)
{
if (m) {
AQH_MOD_DEVICES *xm;
xm=GWEN_INHERIT_GETDATA(AQCGI_MODULE, AQH_MOD_DEVICES, m);
if (xm) {
AQH_Device_List_free(xm->deviceList);
xm->deviceList=deviceList;
}
}
}
AQH_VALUE_LIST *AQH_ModDevices_GetValueList(const AQCGI_MODULE *m)
{
if (m) {
AQH_MOD_DEVICES *xm;
xm=GWEN_INHERIT_GETDATA(AQCGI_MODULE, AQH_MOD_DEVICES, m);
if (xm) {
return xm->valueList;
}
}
return NULL;
}
void AQH_ModDevices_SetValueList(AQCGI_MODULE *m, AQH_VALUE_LIST *valueList)
{
if (m) {
AQH_MOD_DEVICES *xm;
xm=GWEN_INHERIT_GETDATA(AQCGI_MODULE, AQH_MOD_DEVICES, m);
if (xm) {
AQH_Value_List_free(xm->valueList);
xm->valueList=valueList;
}
}
}
AQCGI_MODULE *_loadSubModule(AQCGI_MODULE *m, AQCGI_REQUEST *rq, AQCGI_SESSION *session, const char *sModuleName)
{
return NULL;
@@ -183,7 +274,7 @@ void _handleRqDevicePost(AQCGI_MODULE *m, AQCGI_REQUEST *rq, AQCGI_SESSION *sess
void _handleRqPageGet(AQCGI_MODULE *m, AQCGI_REQUEST *rq, AQCGI_SESSION *session, GWEN_BUFFER *dbuf)
{
AQH_ModDataClient_HandleRequest(m, rq, session, AQH_ModDevices_RunPageGet, dbuf);
AQH_ModDataClient_HandleRequest(m, rq, session, AQH_ModDevices_RunPage2Get, dbuf);
}
@@ -197,7 +288,7 @@ void _handleRqPagePost(AQCGI_MODULE *m, AQCGI_REQUEST *rq, AQCGI_SESSION *sessio
void _handleRqPageGraphGet(AQCGI_MODULE *m, AQCGI_REQUEST *rq, AQCGI_SESSION *session, GWEN_BUFFER *dbuf)
{
AQH_ModDataClient_HandleRequest(m, rq, session, AQH_ModDevices_RunPageGraph, dbuf);
AQH_ModDataClient_HandleRequest(m, rq, session, AQH_ModDevices_RunPage2Graph, dbuf);
}
@@ -583,3 +674,41 @@ AQDG_GRAPH_DATAPAIR_LIST *_createDataPairListFromDataPoints(const uint64_t *data
void AQH_ModDevices_ReadDevicesAndValues(AQCGI_MODULE *m, AQH_DATACLIENT *dc)
{
AQH_DEVICE_LIST *deviceList;
AQH_VALUE_LIST *valueList;
deviceList=AQH_DataClient_GetDevices(dc, NULL);
AQH_ModDevices_SetDeviceList(m, deviceList);
valueList=AQH_DataClient_GetValues(dc, NULL, 0);
AQH_ModDevices_SetValueList(m, valueList);
if (deviceList && valueList) {
AQH_VALUE *v;
v=AQH_Value_List_First(valueList);
while(v) {
const char *s;
s=AQH_Value_GetDeviceNameForSystem(v);
if (s && *s) {
AQH_DEVICE *device;
device=AQH_Device_List_GetByNameForSystem(deviceList, s);
if (device) {
AQH_Value_SetDevicePtr(v, device);
}
else {
DBG_ERROR(NULL, "Device %s not found in list", s);
}
}
v=AQH_Value_List_Next(v);
}
}
}