/**************************************************************************** * This file is part of the project AqHome. * AqHome (c) by 2025 Martin Preuss, all rights reserved. * * The license for this file can be found in the file COPYING which you * should have received along with this file. ****************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "./mdevices_setdevice.h" #include "aqhome-cgi/service/module.h" #include "aqhome-cgi/modules/mdataclient.h" #include #include #include /* ------------------------------------------------------------------------------------------------ * defs and enums * ------------------------------------------------------------------------------------------------ */ #define GBAS GWEN_Buffer_AppendString #define GBAA GWEN_Buffer_AppendArgs /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void _handleDeviceForm(AQH_DATACLIENT *dc, AQH_DEVICE *device, GWEN_DB_NODE *dbPost, GWEN_BUFFER *dbuf); /* ------------------------------------------------------------------------------------------------ * code * ------------------------------------------------------------------------------------------------ */ void AQH_ModDevices_RunSetDevice(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *session, AQH_DATACLIENT *dc, GWEN_BUFFER *dbuf) { AQH_SERVICE *sv; GWEN_DB_NODE *dbPost; const char *sDeviceName; AQH_DEVICE *device; DBG_ERROR(NULL, "Post device.html"); /* sample data */ sv=AQH_ModService_GetService(m); dbPost=AQCGI_Request_GetDbPostBody(rq); sDeviceName=dbPost?GWEN_DB_GetCharValue(dbPost, "device", 0, NULL):NULL; DBG_ERROR(NULL, "Device=[%s]", sDeviceName?sDeviceName:""); device=AQH_ModDevices_GetDevice(dc, sDeviceName); if (device) { int rv; DBG_ERROR(NULL, "Reading data from form"); _handleDeviceForm(dc, device, dbPost, dbuf); DBG_ERROR(NULL, "Updating device on server"); rv=AQH_DataClient_ModDevice(dc, device); if (rv<0) { DBG_ERROR(NULL, "here (%d)", rv); } AQH_Device_free(device); } else { DBG_ERROR(NULL, "device not found"); } if (sDeviceName && *sDeviceName) { GWEN_BUFFER *pbuf; pbuf=GWEN_Buffer_new(0, 256, 0, 1); GBAS(pbuf, "Location: /aqbt/devices/device.html?device="); GWEN_Text_EscapeToBuffer(sDeviceName, pbuf); AQCGI_Request_AddResponseHeaderData(rq, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); } AQCGI_Request_SetResponseCode(rq, 303); AQCGI_Request_SetResponseText(rq, "See other"); } void _handleDeviceForm(AQH_DATACLIENT *dc, AQH_DEVICE *device, GWEN_DB_NODE *dbPost, GWEN_BUFFER *dbuf) { AQH_Device_SetRoomName(device, GWEN_DB_GetCharValue(dbPost, "roomName", 0, NULL)); AQH_Device_SetNameForGui(device, GWEN_DB_GetCharValue(dbPost, "nameForGui", 0, NULL)); AQH_Device_SetLocation(device, GWEN_DB_GetCharValue(dbPost, "location", 0, NULL)); AQH_Device_SetDescription(device, GWEN_DB_GetCharValue(dbPost, "description", 0, NULL)); }