diff --git a/0BUILD b/0BUILD index f406ef5..b128842 100644 --- a/0BUILD +++ b/0BUILD @@ -2,7 +2,7 @@ - + $(project_name) $(project_vmajor).$(project_vminor).$(project_vpatchlevel) diff --git a/apps/aqhome-cgi/modules/devices/mdevices_page.c b/apps/aqhome-cgi/modules/devices/mdevices_page.c index f6def1d..7d3b3bb 100644 --- a/apps/aqhome-cgi/modules/devices/mdevices_page.c +++ b/apps/aqhome-cgi/modules/devices/mdevices_page.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -75,6 +76,8 @@ static int _getColorComponent(GWEN_DB_NODE *dbPost, const char *sValueName, cons static void _setOnOffData(AQH_DATACLIENT *dc, const AQH_VALUE *value, const char *sValue); static void _setOnOffAutoData(AQH_DATACLIENT *dc, const AQH_VALUE *value, const char *sValue); +static void _sendPageList(AQH_MODULE *m, GWEN_BUFFER *dbuf); +static GWEN_STRINGLIST *_listPageFiles(AQH_MODULE *m); static GWEN_XMLNODE *_readPage(AQH_MODULE *m, const char *sPageName); static GWEN_XMLNODE *_readPageFile(const char *sFilename); static int _layoutFromString(const char *s); @@ -93,7 +96,7 @@ void AQH_ModDevices_RunPageGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *se DBG_INFO(NULL, "RunPageGet"); dbQuery=AQCGI_Request_GetDbQuery(rq); - sPageId=GWEN_DB_GetCharValue(dbQuery, "page", 0, NULL); + sPageId=dbQuery?GWEN_DB_GetCharValue(dbQuery, "page", 0, NULL):NULL; if (sPageId && *sPageId) { GWEN_XMLNODE *fileNode; @@ -115,6 +118,10 @@ void AQH_ModDevices_RunPageGet(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_SESSION *se DBG_INFO(NULL, "here"); } } + else { + DBG_ERROR(NULL, "Reading page list"); + _sendPageList(m, dbuf); + } } @@ -812,6 +819,86 @@ void _setOnOffAutoData(AQH_DATACLIENT *dc, const AQH_VALUE *value, const char *s +void _sendPageList(AQH_MODULE *m, GWEN_BUFFER *dbuf) +{ + GWEN_STRINGLIST *sl; + + GBAS(dbuf, "

Page List

\n"); + sl=_listPageFiles(m); + if (sl) { + GWEN_STRINGLISTENTRY *se; + + GBAS(dbuf, + "\n" + "\n" + "\n"); + se=GWEN_StringList_FirstEntry(sl); + while(se) { + const char *filename; + + filename=GWEN_StringListEntry_Data(se); + if (filename && *filename) { + GWEN_XMLNODE *node; + + DBG_ERROR(NULL, "Reading file \"%s\"", filename); + node=_readPageFile(filename); + if (node) { + GWEN_XMLNODE *nPage; + + nPage=GWEN_XMLNode_FindFirstTag(node, "page", NULL, NULL); + if (nPage) { + const char *sId; + const char *sTitle; + + sId=GWEN_XMLNode_GetProperty(nPage, "id", NULL); + sTitle=GWEN_XMLNode_GetProperty(nPage, "title", sId); + if (sId && *sId) + GBAA(dbuf, "\n", sId, sId, sTitle); + } + GWEN_XMLNode_free(node); + } + } + se=GWEN_StringListEntry_Next(se); + } + GBAS(dbuf, "
PageTitle
%s%s
"); + GWEN_StringList_free(sl); + } + else { + GBAS(dbuf, "No pages."); + } +} + + + +GWEN_STRINGLIST *_listPageFiles(AQH_MODULE *m) +{ + GWEN_BUFFER *fbuf; + AQH_SERVICE *sv; + GWEN_STRINGLIST *sl; + int rv; + + sv=AQH_ModService_GetService(m); + fbuf=GWEN_Buffer_new(0, 256, 0, 1); + GBAA(fbuf, "%s%spages", AQH_Service_GetRuntimeFolder(sv), GWEN_DIR_SEPARATOR_S); + sl=GWEN_StringList_new(); + rv=GWEN_Directory_GetMatchingFilesRecursively(GWEN_Buffer_GetStart(fbuf), sl, "*.xml"); + if (rv<0) { + DBG_INFO(NULL, "Error reading pages (%d)", rv); + GWEN_StringList_free(sl); + GWEN_Buffer_free(fbuf); + return NULL; + } + if (GWEN_StringList_Count(sl)<1) { + GWEN_StringList_free(sl); + GWEN_Buffer_free(fbuf); + return NULL; + } + GWEN_Buffer_free(fbuf); + + return sl; +} + + GWEN_XMLNODE *_readPage(AQH_MODULE *m, const char *sPageName) { diff --git a/apps/aqhome-cgi/modules/static/en/header.html b/apps/aqhome-cgi/modules/static/en/header.html index e1a740a..0f20969 100644 --- a/apps/aqhome-cgi/modules/static/en/header.html +++ b/apps/aqhome-cgi/modules/static/en/header.html @@ -16,6 +16,7 @@