* fix flags for state of rest parsing
authorWilfried Göesgens <willi@citadel.org>
Wed, 21 Apr 2010 19:52:03 +0000 (19:52 +0000)
committerWilfried Göesgens <willi@citadel.org>
Wed, 21 Apr 2010 19:52:03 +0000 (19:52 +0000)
* DAV-Message-list: expect timestamp next to the EUID

webcit/groupdav_main.c
webcit/groupdav_propfind.c
webcit/roomops.h

index fb3f5203c56cb0fc083542b6a06ad77f1dcc29d4..313efe83c3216c3b503a6bcc24e2c78998885ab2 100644 (file)
@@ -293,12 +293,13 @@ void tmplput_DAV_NAMESPACE(StrBuf *Target, WCTemplputParams *TP)
 
 int GroupdavDispatchREST(RESTDispatchID WhichAction, int IgnoreFloor)
 {
-
+       wcsession *WCC = WC;
+       void *vDir;
+       
        switch(WhichAction){
        case ExistsID:
-               //WCC->Directory
-//nRoomNameParts
-//             return locate_message_by_uid() != -1;
+               GetHash(WCC->Directory, IKEY(WCC->ThisRoom->nRoomNameParts + 1), &vDir);
+               return locate_message_by_uid(ChrPtr((StrBuf*)vDir)) != -1;
                /* TODO: remember euid */
        case PutID:
        case DeleteID:
index f3a37294a2b0e60799da5ddce71b6f758ffedfb1..d8dfc211e98f02f583ff2744d2f80188003fa362 100644 (file)
@@ -122,7 +122,9 @@ const folder *GetRESTFolder(int IgnoreFloor, HashList *Subfolders)
                        /* Room has more parts than the URL, it might be a sub-room? */
                        else if (iRoom <ThisFolder->nRoomNameParts) 
                        {//// TODO: ThisFolder->nRoomNameParts == urlp - IgnoreFloor???
-                               Put(Subfolders, SKEY(ThisFolder->name), ThisFolder, reference_free_handler);
+                               Put(Subfolders, SKEY(ThisFolder->name), 
+                                   /* Cast away const, its a reference. */
+                                   (void*)ThisFolder, reference_free_handler);
                        }
                }
                else {
@@ -174,14 +176,13 @@ const folder *GetRESTFolder(int IgnoreFloor, HashList *Subfolders)
 
 
 
-long GotoRestRoom()
+long GotoRestRoom(HashList *SubRooms)
 {
        int IgnoreFloor = 0; /* deprecated... */
        wcsession *WCC = WC;
        long Count;
        long State;
        const folder *ThisFolder;
-       HashList *SubRooms = NULL;
 
        State = REST_TOPLEVEL;
 
@@ -205,33 +206,33 @@ long GotoRestRoom()
        {
                IgnoreFloor = 0;
                State |= REST_IN_FLOOR;
-               SubRooms = NewHash(1, Flathash);
+
                ThisFolder = GetRESTFolder(IgnoreFloor, SubRooms);
                if (ThisFolder != NULL)
                {
                        if (WCC->ThisRoom != NULL)
-                               if (CompareRooms(WCC->ThisRoom, ThisFolder))
+                               if (CompareRooms(WCC->ThisRoom, ThisFolder) != 0)
                                        gotoroom(ThisFolder->name);
                        State |= REST_IN_ROOM;
+                       
                }
+               if (GetCount(SubRooms) > 0)
+                       State |= REST_HAVE_SUB_ROOMS;
        }
        if ((WCC->ThisRoom != NULL) && 
            (Count + IgnoreFloor > 3))
        {
-               if (WCC->Hdr->HR.Handler.RID(ExistsID, IgnoreFloor))
+               if (WCC->Hdr->HR.Handler->RID(ExistsID, IgnoreFloor))
                {
-                       State |= REST_GOT_EUID;
-               }/////TODO
+                       State |= REST_GOT_LOCAL_PART;
+               }
                else {
                        /// WHOOPS, not there???
+                       State |= REST_NONEXIST;
                }
 
 
        }
-       /// TODO: ID detection
-       /// TODO: File detection
-
-
        return State;
 }
 
@@ -421,6 +422,7 @@ void groupdav_collection_list(void)
  */
 void groupdav_propfind(void) 
 {
+       HashList *SubRooms = NULL;
        wcsession *WCC = WC;
        StrBuf *dav_roomname;
        StrBuf *dav_uid;
@@ -448,9 +450,10 @@ void groupdav_propfind(void)
         * If the room name is blank, the client is requesting a
         * folder list.
         */
-       State = GotoRestRoom();
+       SubRooms = NewHash(1, Flathash);
+       State = GotoRestRoom(SubRooms);
        if (((State & REST_IN_ROOM) == 0) ||
-           (((State & (REST_GOT_EUID|REST_GOT_ID|REST_GOT_FILENAME)) == 0) &&
+           (((State & (REST_GOT_LOCAL_PART)) == 0) &&
             (WCC->Hdr->HR.dav_depth == 0)))
        {
                now = time(NULL);
@@ -476,14 +479,21 @@ void groupdav_propfind(void)
                end_burst();
                FreeStrBuf(&dav_roomname);
                FreeStrBuf(&dav_uid);
+               FreeHashList(&SubRooms);
                return;
        }
 
-       if ((State & (REST_GOT_EUID|REST_GOT_ID|REST_GOT_FILENAME)) == 0) {
+       if ((State & (REST_GOT_LOCAL_PART)) == 0) {
                readloop(headers, eReadEUIDS);
+               FreeHashList(&SubRooms);
                return;
 
        }
+
+
+       
+       FreeHashList(&SubRooms);
+
 #endif
 
        /*
@@ -725,6 +735,8 @@ int ParseMessageListHeaders_EUID(StrBuf *Line,
 {
        Msg->euid = NewStrBuf();
        StrBufExtract_NextToken(Msg->euid,  Line, pos, '|');
+       Msg->date = StrBufExtractNext_long(Line, pos, '|');
+       
        return StrLength(Msg->euid) > 0;
 }
 
index 5753b23fc73901b8c75b41717d55976b1c30e09b..a416b402ee2b6550df773e2d97d31a6ae46e3e38 100644 (file)
@@ -112,6 +112,6 @@ int CompareRooms(const folder *room1, const folder *room2);
 #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)