* implement ITERATE:THISROOM:GNET
authorWilfried Göesgens <willi@citadel.org>
Sat, 27 Feb 2010 22:18:24 +0000 (22:18 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sat, 27 Feb 2010 22:18:24 +0000 (22:18 +0000)
webcit/roomlist.c
webcit/roomops.c
webcit/roomops.h
webcit/subst.c
webcit/subst.h

index 4405b5c2410c77e156dfa830aa4f8fd80f057b51..bda73c6a13e741824a09ae3efc612493c2c11783 100644 (file)
@@ -136,6 +136,12 @@ void FlushFolder(folder *room)
        int i;
 
        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]);
+       }
        if (room->RoomNameParts != NULL)
        {
                for (i=0; i < room->nRoomNameParts; i++)
@@ -162,7 +168,6 @@ HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP)
        folder *room;
        StrBuf *Buf;
        const char *Pos;
-       const char *Err;
        void *vFloor;
        wcsession *WCC = WC;
        CompareFunc SortIt;
@@ -170,7 +175,7 @@ HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP)
 
        Buf = NewStrBuf();
        rooms = NewHash(1, NULL);
-       StrBufTCP_read_line(Buf, &WC->serv_sock, 0, &Err);
+       StrBuf_ServGetln(Buf);
        if (GetServerStatus(Buf, NULL) == 1) 
        {
                while(!Done && StrBuf_ServGetln(Buf))
@@ -258,6 +263,51 @@ HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP)
        return rooms;
 }
 
+HashList *GetNetConfigHash(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+       StrBuf *Line;
+       StrBuf *Token;
+       StrBuf *Content;
+       long WantThisOne;
+       long PutTo;
+       
+       WantThisOne = GetTemplateTokenNumber(Target, TP, 6, 0);
+       if (WantThisOne == 0)
+               return NULL;
+       if (WCC->CurRoom.IgnetCfgs[0] == (HashList*) StrBufNOTNULL)
+               return WCC->CurRoom.IgnetCfgs[WantThisOne];
+
+       WCC->CurRoom.IgnetCfgs[0] = (HashList*) StrBufNOTNULL;
+       serv_puts("GNET");
+       Line = NewStrBuf();
+       Token = NewStrBuf();
+       StrBuf_ServGetln(Line);
+       if (GetServerStatus(Line, NULL) == 1) 
+       {
+               const char *Pos = NULL;
+               StrBuf_ServGetln(Line);
+               StrBufExtract_NextToken(Token, Line, &Pos, '|');
+               PutTo = GetTokenDefine(SKEY(Token), -1);
+               if ((PutTo > 0) && (PutTo < maxRoomNetCfg))
+               {
+                       int n;
+
+                       if (WCC->CurRoom.IgnetCfgs[PutTo] == NULL)
+                               WCC->CurRoom.IgnetCfgs[PutTo] = NewHash(1, NULL);
+                       Content = NewStrBuf();
+                       StrBufExtract_NextToken(Content, Line, &Pos, '|');
+                       n = GetCount(WCC->CurRoom.IgnetCfgs[PutTo]) + 1;
+                       Put(WCC->CurRoom.IgnetCfgs[PutTo], 
+                           IKEY(n),
+                           Content, 
+                           HFreeStrBuf);
+               }
+       }
+
+       return WCC->CurRoom.IgnetCfgs[WantThisOne];
+}
+
 /** Unused function that orders rooms by the listorder flag */
 int SortRoomsByListOrder(const void *room1, const void *room2) 
 {
@@ -783,6 +833,8 @@ InitModule_ROOMLIST
        RegisterNamespace("FLOOR:NROOMS", 0, 0, tmplput_FLOOR_NROOMS, NULL, CTX_FLOORS);
        RegisterConditional(HKEY("COND:ROOM:REST:ISSUBFLOOR"), 0, ConditionalFloorIsRESTSubFloor, CTX_FLOORS);
 
+       RegisterIterator("ITERATE:THISROOM:GNET", 0, NULL, GetNetConfigHash, NULL, NULL, CTX_STRBUF, CTX_NONE, IT_NOFLAG);
+
        RegisterIterator("LFLR", 0, NULL, GetFloorListHash, NULL, NULL, CTX_FLOORS, CTX_NONE, IT_FLAG_DETECT_GROUPCHANGE);
 
        RegisterIterator("LKRA", 0, NULL, GetRoomListHashLKRA, NULL, NULL, CTX_ROOMS, CTX_NONE, IT_FLAG_DETECT_GROUPCHANGE);
index 25bb94e9b9d743ca1f730fb64ae9758457e577be..099c40286e4c67f6a896994cd832177920ddbea3 100644 (file)
@@ -3288,7 +3288,6 @@ InitModule_ROOMOPS
        REGISTERTokenParamDefine(US_COLOR);
        REGISTERTokenParamDefine(US_USER_SET);
 
-
        REGISTERTokenParamDefine(VIEW_BBS);
        REGISTERTokenParamDefine(VIEW_MAILBOX); 
        REGISTERTokenParamDefine(VIEW_ADDRESSBOOK);
@@ -3300,6 +3299,14 @@ InitModule_ROOMOPS
        REGISTERTokenParamDefine(VIEW_JOURNAL);
        REGISTERTokenParamDefine(VIEW_BLOG);
 
+
+       REGISTERTokenParamDefine(ignet_push_share);
+       REGISTERTokenParamDefine(listrecp);
+       REGISTERTokenParamDefine(digestrecp);
+       REGISTERTokenParamDefine(pop3client);
+       REGISTERTokenParamDefine(rssclient);
+       REGISTERTokenParamDefine(participate);
+
        RegisterConditional(HKEY("COND:ROOMAIDE"), 2, ConditionalRoomAide, CTX_NONE);
        RegisterConditional(HKEY("COND:ACCESS:DELETE"), 2, ConditionalRoomAcessDelete, CTX_NONE);
 
index adf548c259af1f3b23e855a679759f016c7d41fb..31bd65dca725b6179cf2ae1e4aa3b04327f4fd57 100644 (file)
@@ -93,6 +93,8 @@ typedef struct _folder {
        int UsersNewMAilboxMessages; /* should we notify the user about new messages? */
        int IsTrash;
 
+       HashList *IgnetCfgs[maxRoomNetCfg];
+
 }folder;
 
 HashList *GetFloorListHash(StrBuf *Target, WCTemplputParams *TP);
index 6bb18019771959b4374aa1e6de6e055fe70492b8..6f02936d1f8cdf124dfa1e5992b7ddd723a1454e 100644 (file)
@@ -2442,6 +2442,22 @@ void RegisterTokenParamDefine(const char *Name, long len,
        Put(Defines, Name, len, PVal, NULL);
 }
 
+long GetTokenDefine(const char *Name, long len, 
+                   long DefValue)
+{
+       void *vPVal;
+
+       if (GetHash(Defines, Name, len, &vPVal) &&
+            (vPVal != NULL))
+        {
+                return *(long*) vPVal;
+        }
+        else
+        {
+                return DefValue;
+        }
+ }
+
 HashList *Defines;
 
 /*-----------------------------------------------------------------------------
index ca4842c20c2fb46fb4afcde3510cbb827d6cf85d..52cd30eedd703b46bc50085227efa761b94093ca 100644 (file)
@@ -307,6 +307,17 @@ void RegisterTokenParamDefine(const char *Name, long len,
  */
 #define REGISTERTokenParamDefine(a) RegisterTokenParamDefine(#a, sizeof(#a) - 1, a);
 
+/**
+ * @brief retrieve the long value of a registered string define
+ * @param Name The name of the define
+ * @param len length of Name
+ * @param Value the value to return if not found
+ */
+long GetTokenDefine(const char *Name, 
+                   long len, 
+                   long DefValue);
+
+
 #define IT_NOFLAG 0
 #define IT_FLAG_DETECT_GROUPCHANGE (1<<0)
 #define RegisterIterator(a, b, c, d, e, f, g, h, i) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, g, h, i)