From dc00aae06b576243bc49457286d9ab72252994e4 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Thu, 30 Mar 2023 00:41:29 +0200 Subject: [PATCH] make db file a config option. --- aqhome/msgmanager.c | 49 ++++++++++++++++++++++++++++++++++++++----- aqhome/msgmanager.h | 3 +++ aqhome/msgmanager_p.h | 1 + 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/aqhome/msgmanager.c b/aqhome/msgmanager.c index a438771..dacb891 100644 --- a/aqhome/msgmanager.c +++ b/aqhome/msgmanager.c @@ -72,11 +72,48 @@ void _freeData(void *bp, void *p) xmgr=(AQH_MSG_MANAGER*) p; AQH_NodeDb_free(xmgr->nodeDb); + free(xmgr->dbFilename); GWEN_FREE_OBJECT(xmgr); } +const char *AQH_MsgManager_GetDbFilename(const GWEN_MSG_ENDPOINT_MGR *emgr) +{ + AQH_MSG_MANAGER *xmgr; + + xmgr=GWEN_INHERIT_GETDATA(GWEN_MSG_ENDPOINT_MGR, AQH_MSG_MANAGER, emgr); + if (xmgr) + return xmgr->dbFilename; + return NULL; +} + + + +void AQH_MsgManager_SetDbFilename(GWEN_MSG_ENDPOINT_MGR *emgr, const char *s) +{ + AQH_MSG_MANAGER *xmgr; + + xmgr=GWEN_INHERIT_GETDATA(GWEN_MSG_ENDPOINT_MGR, AQH_MSG_MANAGER, emgr); + if (xmgr) { + free(xmgr->dbFilename); + xmgr->dbFilename=s?strdup(s):NULL; + if (xmgr->dbFilename) { + GWEN_DB_NODE *dbNodeDb; + int rv; + + dbNodeDb=GWEN_DB_Group_new("dbNodes"); + rv=GWEN_DB_ReadFile(dbNodeDb, xmgr->dbFilename, GWEN_DB_FLAGS_DEFAULT); + if (rv==0) { + AQH_NodeDb_fromDb(xmgr->nodeDb, dbNodeDb); + GWEN_DB_Group_free(dbNodeDb); + } + } + } +} + + + int AQH_MsgManager_LoopOnce(GWEN_MSG_ENDPOINT_MGR *emgr) { int rv; @@ -116,12 +153,14 @@ void _loopOnceOverEndpoints(GWEN_MSG_ENDPOINT_MGR *emgr) } if (AQH_NodeDb_IsModified(xmgr->nodeDb)) { - GWEN_DB_NODE *dbNodeDb; + if (xmgr->dbFilename) { + GWEN_DB_NODE *dbNodeDb; - dbNodeDb=GWEN_DB_Group_new("nodeDb"); - AQH_NodeDb_toDb(xmgr->nodeDb, dbNodeDb); - GWEN_DB_WriteFile(dbNodeDb, "nodedb.db", GWEN_DB_FLAGS_DEFAULT); - GWEN_DB_Group_free(dbNodeDb); + dbNodeDb=GWEN_DB_Group_new("nodeDb"); + AQH_NodeDb_toDb(xmgr->nodeDb, dbNodeDb); + GWEN_DB_WriteFile(dbNodeDb, xmgr->dbFilename, GWEN_DB_FLAGS_DEFAULT); + GWEN_DB_Group_free(dbNodeDb); + } } } diff --git a/aqhome/msgmanager.h b/aqhome/msgmanager.h index d78c98b..883e7d0 100644 --- a/aqhome/msgmanager.h +++ b/aqhome/msgmanager.h @@ -25,6 +25,9 @@ AQHOME_API GWEN_MSG_ENDPOINT_MGR *AQH_MsgManager_new(uint8_t busAddr); AQHOME_API int AQH_MsgManager_LoopOnce(GWEN_MSG_ENDPOINT_MGR *emgr); +AQHOME_API const char *AQH_MsgManager_GetDbFilename(const GWEN_MSG_ENDPOINT_MGR *emgr); +AQHOME_API void AQH_MsgManager_SetDbFilename(GWEN_MSG_ENDPOINT_MGR *emgr, const char *s); + diff --git a/aqhome/msgmanager_p.h b/aqhome/msgmanager_p.h index bbd77f2..089b505 100644 --- a/aqhome/msgmanager_p.h +++ b/aqhome/msgmanager_p.h @@ -20,6 +20,7 @@ typedef struct AQH_MSG_MANAGER AQH_MSG_MANAGER; struct AQH_MSG_MANAGER { AQH_NODE_DB *nodeDb; + char *dbFilename; };