track c_lastseen so we can use it in read operations
[citadel.git] / webcit-ng / room_functions.c
index 4d166e320310d490739cff37a110b9bd555bc223..21fe56460fa5cc407b2ad3e4faff034335433dc7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Room functions
  *
- * Copyright (c) 1996-2017 by the citadel.org team
+ * Copyright (c) 1996-2018 by the citadel.org team
  *
  * This program is open source software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 3.
@@ -136,6 +136,11 @@ void object_in_room(struct http_transaction *h, struct ctdlsession *c)
                return;
        }
 
+       if (!strncasecmp(buf, "flat", 5)) {                     // Client is requesting a flat view (still kind of fuzzy here)
+               flat_view(h, c, &buf[5]);
+               return;
+       }
+
        if (    (c->room_default_view == VIEW_CALENDAR)         // room types where objects are referenced by EUID
                || (c->room_default_view == VIEW_TASKS)
                || (c->room_default_view == VIEW_ADDRESSBOOK)
@@ -382,7 +387,7 @@ void propfind_the_room_itself(struct http_transaction *h, struct ctdlsession *c)
                                                StrBufAppendPrintf(Buf, "</D:getlastmodified>");
                                                free(datestring);
                                        }
-                                       if (enumerate_by_euid) {                // FIXME ajc 2017oct30 should this really be inside the timestamp conditional?
+                                       if (enumerate_by_euid) {                // FIXME ajc 2017oct30 should this be inside the timestamp conditional?
                                                StrBufAppendPrintf(Buf, "<D:getetag>\"%ld\"</D:getetag>", msglist[i]);
                                        }
                                }
@@ -419,6 +424,7 @@ void get_the_room_itself(struct http_transaction *h, struct ctdlsession *c)
        JsonObjectAppend(j, NewJsonNumber(      HKEY("default_view"),   c->room_default_view    ));
        JsonObjectAppend(j, NewJsonNumber(      HKEY("new_messages"),   c->new_messages         ));
        JsonObjectAppend(j, NewJsonNumber(      HKEY("total_messages"), c->total_messages       ));
+       JsonObjectAppend(j, NewJsonNumber(      HKEY("last_seen"),      c->last_seen            ));
 
        StrBuf *sj = NewStrBuf();
        SerializeJson(sj, j, 1);                        // '1' == free the source array
@@ -548,7 +554,7 @@ void ctdl_r(struct http_transaction *h, struct ctdlsession *c)
                         //     3       (int)info                       Info flag: set to nonzero if the user needs to read this room's info file
                         //     4       (int)CCC->room.QRflags          Various flags associated with this room.
                         //     5       (long)CCC->room.QRhighest       The highest message number present in this room
-                        //     6       (long)vbuf.v_lastseen           The highest message number the user has read in this room
+                        c->last_seen = extract_long(&buf[4], 6);       // The highest message number the user has read in this room
                         //     7       (int)rmailflag                  Boolean flag: 1 if this is a Mail> room, 0 otherwise.
                         //     8       (int)raideflag                  Nonzero if user is either Aide or a Room Aide in this room
                         //     9       (int)newmailcount               The number of new Mail messages the user has