* FlushIgnetCfgs() get me out of FlushFolder, so we can reload GNET configs after...
authorWilfried Göesgens <willi@citadel.org>
Tue, 17 Aug 2010 20:54:14 +0000 (20:54 +0000)
committerWilfried Göesgens <willi@citadel.org>
Tue, 17 Aug 2010 20:54:14 +0000 (20:54 +0000)
* 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
webcit/roomops.c
webcit/roomops.h
webcit/static/t/room/edit/digestrecp_removal.html
webcit/static/t/room/edit/listrecp_removal.html

index ec6ef59248efcdc661650a46f5cb0da1fe595679..62f5b1578e4d5b00ff13d1967ec71bfcdc601c75 100644 (file)
@@ -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,
index 0f1e8637b8c6007c402ac20a4b76524db63770a8..3e3a18705b79d66bae74b074653f69e759063ddb 100644 (file)
@@ -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);
index 4f82fa373ac8e57e3e92d8ef4a82361e0d1d4f37..e0a6320791c387da51974405ba19f8c4d040f011 100644 (file)
@@ -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 */
index 45280107a566fb59e788ad468bbcdcf1cfc1c60d..f36b220f9c2462844092733fa731599d46e787b4 100644 (file)
@@ -1 +1 @@
-<a href="netedit?cmd=remove?tab=listserv?line=digestrecp|<?CONTEXTSTRARR("U")>"><?_("(remove)")></a><br />
+<?CONTEXTSTRARR(1, "X")><a href="netedit?cmd=remove?tab=listserv?line=digestrecp|<?CONTEXTSTRARR(1, "U")>"><?_("(remove)")></a><br />
index 8e35a9d2a50e7e99b9e394e6c77d92c91b07715f..6320cb651ce4d4785903f660747bdc04e49b6445 100644 (file)
@@ -1 +1 @@
-<a href="netedit?cmd=remove?tab=listserv?line=listrecp|<?CONTEXTSTRARR("U")>"><?_("(remove)")></a><br />
+<?CONTEXTSTRARR(1, "X")><a href="netedit?cmd=remove?tab=listserv?line=listrecp|<?CONTEXTSTRARR(1, "U")>"><?_("(remove)")></a><br />