]> code.citadel.org Git - citadel.git/blobdiff - webcit/roomlist.c
* cleanup & shuffle 'folders' struct (make clean!); Order and listorder are the same...
[citadel.git] / webcit / roomlist.c
index 5710b54d019568c5300423667e86c9bbc81e060a..0a8e7fb9decb6292b6990edb5b09c551b5948ad0 100644 (file)
@@ -125,16 +125,33 @@ HashList *GetRoomListHashLKRA(StrBuf *Target, WCTemplputParams *TP)
 
        if (WCC->Floors == NULL)
                GetFloorListHash(Target, TP);
-       serv_puts("LKRA");
        if (WCC->Rooms == NULL) 
+       {
+               serv_puts("LKRA");
                WCC->Rooms =  GetRoomListHash(Target, TP);
+       }
        return WCC->Rooms;
 }
 
+HashList *GetZappedRoomListHash(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+
+       if (WCC->Floors == NULL)
+               GetFloorListHash(Target, TP);
+       serv_puts("LZRM -1");
+       return GetRoomListHash(Target, TP);
+}
+
 void FlushFolder(folder *room)
 {
        int i;
 
+       FreeStrBuf(&room->XAPass);
+       FreeStrBuf(&room->Directory);
+       FreeStrBuf(&room->RoomAide);
+       FreeStrBuf(&room->XInfoText);
+
        FreeStrBuf(&room->name);
        if (room->IgnetCfgs[0] == (HashList*) StrBufNOTNULL)
        {
@@ -148,6 +165,7 @@ void FlushFolder(folder *room)
                        FreeStrBuf(&room->RoomNameParts[i]);
                free(room->RoomNameParts);
        }
+       memset(room, 0, sizeof(folder));
 }
 
 void vDeleteFolder(void *vFolder)
@@ -196,7 +214,7 @@ HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP)
 
                                room->QRFlags = StrBufExtractNext_long(Buf, &Pos, '|');
                                room->floorid = StrBufExtractNext_int(Buf, &Pos, '|');
-                               room->listorder = StrBufExtractNext_long(Buf, &Pos, '|');
+                               room->Order = StrBufExtractNext_long(Buf, &Pos, '|');
                                room->QRFlags2 = StrBufExtractNext_long(Buf, &Pos, '|');
 
                                room->RAFlags = StrBufExtractNext_long(Buf, &Pos, '|');
@@ -312,6 +330,7 @@ HashList *GetNetConfigHash(StrBuf *Target, WCTemplputParams *TP)
                                    IKEY(n),
                                    Content, 
                                    HFreeStrBuf);
+                               n++;
                        }
                }
        }
@@ -329,8 +348,8 @@ int SortRoomsByListOrder(const void *room1, const void *room2)
        folder *r1 = (folder*) GetSearchPayload(room1);
        folder *r2 = (folder*) GetSearchPayload(room2);
   
-       if (r1->listorder == r2->listorder) return 0;
-       if (r1->listorder > r2->listorder) return 1;
+       if (r1->Order == r2->Order) return 0;
+       if (r1->Order > r2->Order) return 1;
        return -1;
 }
 
@@ -522,6 +541,14 @@ void tmplput_ROOM_NAME(StrBuf *Target, WCTemplputParams *TP)
 {
        folder *Folder = (folder *)CTX;
 
+       if (Folder == NULL)
+       {
+               wcsession *WCC = WC;
+
+               if (WCC == NULL)
+                       return;
+               Folder = &WCC->CurRoom;
+       }
        StrBufAppendTemplate(Target, TP, Folder->name, 0);
 }
 void tmplput_ROOM_BASENAME(StrBuf *Target, WCTemplputParams *TP) 
@@ -580,7 +607,7 @@ void tmplput_ROOM_FLOORID(StrBuf *Target, WCTemplputParams *TP)
 void tmplput_ROOM_LISTORDER(StrBuf *Target, WCTemplputParams *TP) 
 {
        folder *Folder = (folder *)CTX;
-       StrBufAppendPrintf(Target, "%d", Folder->listorder);
+       StrBufAppendPrintf(Target, "%d", Folder->Order);
 }
 void tmplput_ROOM_VIEW(StrBuf *Target, WCTemplputParams *TP) 
 {
@@ -631,48 +658,6 @@ void tmplput_ROOM_FLOOR_NROOMS(StrBuf *Target, WCTemplputParams *TP)
 
 
 
-int ConditionalRoomHas_UA_KNOWN(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_KNOWN) != 0;
-}
-
-int ConditionalRoomHas_UA_GOTOALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_GOTOALLOWED) != 0;
-}
-
-int ConditionalRoomHas_UA_HASNEWMSGS(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_HASNEWMSGS) != 0;
-}
-
-int ConditionalRoomHas_UA_ZAPPED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_ZAPPED) != 0;
-}
-
-int ConditionalRoomHas_UA_POSTALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_POSTALLOWED) != 0;
-}
-
-int ConditionalRoomHas_UA_ADMINALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_ADMINALLOWED) != 0;
-}
-
-int ConditionalRoomHas_UA_DELETEALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_DELETEALLOWED) != 0;
-}
-
 
 int ConditionalRoomIsInbox(StrBuf *Target, WCTemplputParams *TP)
 {
@@ -735,6 +720,12 @@ int ConditionalFloorIsRESTSubFloor(StrBuf *Target, WCTemplputParams *TP)
        return WCC->CurrentFloor == MyFloor;
 }
 
+int ConditionalFloorIsVirtual(StrBuf *Target, WCTemplputParams *TP)
+{
+       Floor *MyFloor = (Floor *)CTX;
+
+       return MyFloor->ID == VIRTUAL_MY_FLOOR;
+}
 
 int ConditionalFloorIsSUBROOM(StrBuf *Target, WCTemplputParams *TP)
 {
@@ -840,17 +831,6 @@ void jsonRoomFlr(void)
        end_burst(); 
 }
 
-
-void 
-SessionDetachModule_ROOMLIST
-(wcsession *sess)
-{
-       DeleteHash(&sess->Floors);
-       DeleteHash(&sess->Rooms);
-       DeleteHash(&sess->FloorsByName);
-}
-
-
 #define POP3_HOST 0
 #define POP3_USERNAME 1
 #define POP3_PASSWORD 2
@@ -876,6 +856,7 @@ InitModule_ROOMLIST
        RegisterNamespace("FLOOR:NAME", 0, 1, tmplput_FLOOR_NAME, NULL, CTX_FLOORS);
        RegisterNamespace("FLOOR:NROOMS", 0, 0, tmplput_FLOOR_NROOMS, NULL, CTX_FLOORS);
        RegisterConditional(HKEY("COND:FLOOR:ISSUBROOM"), 0, ConditionalFloorIsSUBROOM, CTX_FLOORS);
+       RegisterConditional(HKEY("COND:FLOOR:ISVIRTUAL"), 0, ConditionalFloorIsVirtual, CTX_FLOORS);
        RegisterConditional(HKEY("COND:ROOM:REST:ISSUBFLOOR"), 0, ConditionalFloorIsRESTSubFloor, CTX_FLOORS);
 
        RegisterIterator("ITERATE:THISROOM:GNET", 1, NULL, GetNetConfigHash, NULL, NULL, CTX_STRBUFARR, CTX_NONE, IT_NOFLAG);
@@ -883,10 +864,12 @@ InitModule_ROOMLIST
        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);
+       RegisterIterator("LZRM", 0, NULL, GetZappedRoomListHash, NULL, DeleteHash, CTX_ROOMS, CTX_NONE, IT_FLAG_DETECT_GROUPCHANGE);
+
 
        RegisterNamespace("ROOM:INFO:FLOORID", 0, 1, tmplput_ROOM_FLOORID, NULL, CTX_ROOMS);
        RegisterNamespace("ROOM:INFO:NAME", 0, 1, tmplput_ROOM_NAME, NULL, CTX_ROOMS);
-       RegisterNamespace("ROOM:INFO:PRINT_NAME", 0, 1, tmplput_ROOM_NAME, NULL, CTX_ROOMS);/// TODO!
+       RegisterNamespace("ROOM:INFO:PRINT_NAME", 0, 1, tmplput_ROOM_NAME, NULL, CTX_NONE);
        RegisterNamespace("ROOM:INFO:BASENAME", 0, 1, tmplput_ROOM_BASENAME, NULL, CTX_ROOMS);
        RegisterNamespace("ROOM:INFO:LEVELNTIMES", 1, 2, tmplput_ROOM_LEVEL_N_TIMES, NULL, CTX_ROOMS);
 
@@ -905,13 +888,6 @@ InitModule_ROOMLIST
        RegisterConditional(HKEY("COND:ROOM:REST:ISSUBROOM"), 0, ConditionalRoomIsRESTSubRoom, CTX_ROOMS);
 
        RegisterConditional(HKEY("COND:ROOM:INFO:IS_INBOX"), 0, ConditionalRoomIsInbox, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_KNOWN"), 0, ConditionalRoomHas_UA_KNOWN, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_GOTOALLOWED"), 0, ConditionalRoomHas_UA_GOTOALLOWED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_HASNEWMSGS"), 0, ConditionalRoomHas_UA_HASNEWMSGS, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_ZAPPED"), 0, ConditionalRoomHas_UA_ZAPPED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_POSTALLOWED"), 0, ConditionalRoomHas_UA_POSTALLOWED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_ADMINALLOWED"), 0, ConditionalRoomHas_UA_ADMINALLOWED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_DELETEALLOWED"), 0, ConditionalRoomHas_UA_DELETEALLOWED, CTX_ROOMS);
        RegisterConditional(HKEY("COND:ROOM:GROUPDAV_CONTENT"), 0, ConditionalRoomHasGroupdavContent, CTX_ROOMS);