SUBST: Dynamicaly generate contexts
[citadel.git] / webcit / roomops.h
index adf548c259af1f3b23e855a679759f016c7d41fb..d64cf1f0418374a9c2eb9476492555c6ee4b0058 100644 (file)
@@ -56,13 +56,8 @@ struct __ofolder {
  */
 typedef struct _folder {
        /* Data citserver tells us about the room */
-       StrBuf *name;   /* the full name of the room we're talking about */
        long QRFlags;    /* roomflags */
-       int floorid;      /* which floor is it on */
-
-       long listorder; /* todo */
        long QRFlags2;    /* Bitbucket NO2 */
-
        long RAFlags;
 
        int view;       /* whats its default view? inbox/calendar.... */
@@ -70,19 +65,24 @@ typedef struct _folder {
        long lastchange; /* todo... */
 
        /* later evaluated data from the serverdata */
+       StrBuf *name;   /* the full name of the room we're talking about */
        long nRoomNameParts;
        StrBuf **RoomNameParts;
 
-       const Floor *Floor;   /* pint to the floor we're on.. */
+       int floorid;      /* which floor is it on */
+       const Floor *Floor;   /* point to the floor we're on.. */
 
        int hasnewmsgs; /* are there unread messages inside */
        int is_inbox;   /* is it a mailbox?  */
 
+       int RoomAideLoaded;
+       StrBuf *RoomAide;
 
-
-       int selectable; /* can we select it ??? */
-       long num_rooms; /* If this is a floor, how many rooms does it have */
-
+/* only available if GETR was run */
+       int XALoaded;
+       StrBuf *XAPass;
+       StrBuf *Directory;
+       long Order;
 
 /* Only available from the GOTO context... */
        long nNewMessages;
@@ -92,18 +92,63 @@ typedef struct _folder {
        int ShowInfo;
        int UsersNewMAilboxMessages; /* should we notify the user about new messages? */
        int IsTrash;
+/* Only available if certain other commands ran */
+       int XHaveRoomPic;
+       int XHaveRoomPicLoaded;
 
+       int XHaveInfoTextLoaded;
+       StrBuf *XInfoText;
+
+       int XHaveDownloadCount;
+       int XDownloadCount;
+       
+       int BumpUsers; /* if SETR set to 1 to make all users who knew this room to forget about it. */
+
+       HashList *IgnetCfgs[maxRoomNetCfg + 1];
 }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 */
+
+HashList *GetFloorListHash(StrBuf *Target, WCTemplputParams *TP);
+HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP);
+int SortRoomsByListOrder(const void *room1, const void *room2);
+void tmplput_roombanner(StrBuf *Target, WCTemplputParams *TP);
+
+
+void LoadRoomAide(void);
+void LoadRoomXA (void);
+void LoadXRoomPic(void);
+void LoadXRoomInfoText(void);
+void LoadXRoomXCountFiles(void);
+
+long gotoroom(const StrBuf *gname);
+
+void slrp_highest(void);
+void remove_march(const StrBuf *aaa);
+void dotskip(void);
+void smart_goto(const StrBuf *next_room);
+void free_march_list(wcsession *wcf);
+
+/*
+ * wrapper around usual sort-comparator; private rooms will allways be prefered, -1 if one of them NULL
+ */
+int CompareRooms(const folder *room1, const folder *room2);
+
 
 #define REST_TOPLEVEL 0
 #define REST_IN_NAMESPACE (1<<0)
 #define REST_IN_FLOOR (1<<1)
 #define REST_IN_ROOM (1<<2)
-#define REST_GOT_EUID (1<<3)
-#define REST_GOT_ID (1<<4)
-#define REST_GOT_FILENAME (1<<5)
+#define REST_HAVE_SUB_ROOMS (1<<3)
+#define REST_GOT_LOCAL_PART (1<<4)
+#define REST_NONEXIST (1<<5)
+
+
+extern CtxType CTX_ROOMS;
+extern CtxType CTX_FLOORS;