From e6a9be314caac391dc8d8756a0e9231a837b62e8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Tue, 17 Aug 2010 20:54:14 +0000 Subject: [PATCH] * FlushIgnetCfgs() get me out of FlushFolder, so we can reload GNET configs after netedit() saving it * GetNetConfigHash() read all lines... and fix it all together * add missing defines to other lines of GNET so we don't struggle over it while reading that * print the recipient; listsub working now. --- webcit/roomlist.c | 92 +++++++++++-------- webcit/roomops.c | 7 ++ webcit/roomops.h | 1 + .../t/room/edit/digestrecp_removal.html | 2 +- .../static/t/room/edit/listrecp_removal.html | 2 +- 5 files changed, 66 insertions(+), 38 deletions(-) diff --git a/webcit/roomlist.c b/webcit/roomlist.c index ec6ef5924..62f5b1578 100644 --- a/webcit/roomlist.c +++ b/webcit/roomlist.c @@ -143,6 +143,18 @@ HashList *GetZappedRoomListHash(StrBuf *Target, WCTemplputParams *TP) return GetRoomListHash(Target, TP); } +void FlushIgnetCfgs(folder *room) +{ + int i; + if (room->IgnetCfgs[maxRoomNetCfg] == (HashList*) StrBufNOTNULL) + { + for (i = ignet_push_share; i < maxRoomNetCfg; i++) + DeleteHash(&room->IgnetCfgs[i]); + } + memset(&room->IgnetCfgs, 0, sizeof(HashList *) * (maxRoomNetCfg + 1)); + +} + void FlushFolder(folder *room) { int i; @@ -153,12 +165,9 @@ void FlushFolder(folder *room) FreeStrBuf(&room->XInfoText); FreeStrBuf(&room->name); - if (room->IgnetCfgs[0] == (HashList*) StrBufNOTNULL) - { - room->IgnetCfgs[0] = NULL; - for (i = ignet_push_share; i < maxRoomNetCfg; i++) - DeleteHash(&room->IgnetCfgs[i]); - } + + FlushIgnetCfgs(room); + if (room->RoomNameParts != NULL) { for (i=0; i < room->nRoomNameParts; i++) @@ -305,41 +314,52 @@ HashList *GetNetConfigHash(StrBuf *Target, WCTemplputParams *TP) if (GetServerStatus(Line, &State) == 1) { const char *Pos = NULL; - StrBuf_ServGetln(Line); - StrBufExtract_NextToken(Token, Line, &Pos, '|'); - PutTo = GetTokenDefine(SKEY(Token), -1); - if ((PutTo >= 0) && - (PutTo < maxRoomNetCfg) && - (Pos != StrBufNOTNULL)) - { - int n; - HashList *SubH; + int Done = 0; - if (WCC->CurRoom.IgnetCfgs[PutTo] == NULL) + while(!Done && StrBuf_ServGetln(Line)) + if ( (StrLength(Line)==3) && + !strcmp(ChrPtr(Line), "000")) { - n = 0; - WCC->CurRoom.IgnetCfgs[PutTo] = NewHash(1, NULL); + Done = 1; } - else + else { - n = GetCount(WCC->CurRoom.IgnetCfgs[PutTo]); - } - SubH = NewHash(1, NULL); - Put(WCC->CurRoom.IgnetCfgs[PutTo], - IKEY(n), - SubH, - HDeleteHash); - n = 0; - while (Pos != StrBufNOTNULL) { - Content = NewStrBuf(); - StrBufExtract_NextToken(Content, Line, &Pos, '|'); - Put(SubH, - IKEY(n), - Content, - HFreeStrBuf); - n++; + StrBufExtract_NextToken(Token, Line, &Pos, '|'); + PutTo = GetTokenDefine(SKEY(Token), -1); + if ((PutTo >= 0) && + (PutTo < maxRoomNetCfg) && + (Pos != StrBufNOTNULL)) + { + int n; + HashList *SubH; + + if (WCC->CurRoom.IgnetCfgs[PutTo] == NULL) + { + n = 0; + WCC->CurRoom.IgnetCfgs[PutTo] = NewHash(1, NULL); + } + else + { + n = GetCount(WCC->CurRoom.IgnetCfgs[PutTo]); + } + SubH = NewHash(1, NULL); + Put(WCC->CurRoom.IgnetCfgs[PutTo], + IKEY(n), + SubH, + HDeleteHash); + n = 1; /* #0 is the type... */ + while (Pos != StrBufNOTNULL) { + Content = NewStrBuf(); + StrBufExtract_NextToken(Content, Line, &Pos, '|'); + Put(SubH, + IKEY(n), + Content, + HFreeStrBuf); + n++; + } + } + Pos = NULL; } - } } else if (State == 550) StrBufAppendBufPlain(WCC->ImportantMsg, diff --git a/webcit/roomops.c b/webcit/roomops.c index 0f1e8637b..3e3a18705 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -1662,6 +1662,8 @@ void netedit(void) { serv_puts("000"); fclose(fp); + FlushIgnetCfgs(&WC->CurRoom); + http_transmit_thing(ChrPtr(do_template("room_edit", NULL)), 0); } @@ -2133,6 +2135,11 @@ InitModule_ROOMOPS REGISTERTokenParamDefine(VIEW_BLOG); /* GNET types: */ + /* server internal, we need to know but ignore them. */ + REGISTERTokenParamDefine(subpending); + REGISTERTokenParamDefine(unsubpending); + REGISTERTokenParamDefine(lastsent); + REGISTERTokenParamDefine(ignet_push_share); { /* these are the parts of an IGNET push config */ REGISTERTokenParamDefine(GNET_IGNET_NODE); diff --git a/webcit/roomops.h b/webcit/roomops.h index 4f82fa373..e0a632079 100644 --- a/webcit/roomops.h +++ b/webcit/roomops.h @@ -110,6 +110,7 @@ typedef struct _folder { HashList *GetFloorListHash(StrBuf *Target, WCTemplputParams *TP); void vDeleteFolder(void *vFolder); void FlushFolder(folder *room); +void FlushIgnetCfgs(folder *room); void ParseGoto(folder *proom, StrBuf *Line); void FlushRoomlist(void); /* release our caches, so a deleted / zapped room disapears */ void ReloadCurrentRoom(void); /* Flush cache; reload current state */ diff --git a/webcit/static/t/room/edit/digestrecp_removal.html b/webcit/static/t/room/edit/digestrecp_removal.html index 45280107a..f36b220f9 100644 --- a/webcit/static/t/room/edit/digestrecp_removal.html +++ b/webcit/static/t/room/edit/digestrecp_removal.html @@ -1 +1 @@ -">
+">
diff --git a/webcit/static/t/room/edit/listrecp_removal.html b/webcit/static/t/room/edit/listrecp_removal.html index 8e35a9d2a..6320cb651 100644 --- a/webcit/static/t/room/edit/listrecp_removal.html +++ b/webcit/static/t/room/edit/listrecp_removal.html @@ -1 +1 @@ -">
+">
-- 2.30.2