From: Wilfried Göesgens Date: Sat, 27 Feb 2010 22:18:24 +0000 (+0000) Subject: * implement ITERATE:THISROOM:GNET X-Git-Tag: v7.86~366 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=f47d8c081fb443cd496c552cfc84adac30aa8add * implement ITERATE:THISROOM:GNET --- diff --git a/webcit/roomlist.c b/webcit/roomlist.c index 4405b5c24..bda73c6a1 100644 --- a/webcit/roomlist.c +++ b/webcit/roomlist.c @@ -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); diff --git a/webcit/roomops.c b/webcit/roomops.c index 25bb94e9b..099c40286 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -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); diff --git a/webcit/roomops.h b/webcit/roomops.h index adf548c25..31bd65dca 100644 --- a/webcit/roomops.h +++ b/webcit/roomops.h @@ -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); diff --git a/webcit/subst.c b/webcit/subst.c index 6bb180197..6f02936d1 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -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; /*----------------------------------------------------------------------------- diff --git a/webcit/subst.h b/webcit/subst.h index ca4842c20..52cd30eed 100644 --- a/webcit/subst.h +++ b/webcit/subst.h @@ -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)