]> code.citadel.org Git - citadel.git/blobdiff - citadel/room_ops.c
* Every user gets a Trash folder. Clients can also use _TRASH_
[citadel.git] / citadel / room_ops.c
index cb73a80cd53251e883910e8554ce09803fe56a19..46490bd9dd0702c783681ec3f83aff7cc3746e91 100644 (file)
@@ -824,13 +824,12 @@ void usergoto(char *where, int display_result, int transiently,
        get_mm();
         cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long));
         if (cdbfr != NULL) {
-               msglist = malloc(cdbfr->len);
-               memcpy(msglist, cdbfr->ptr, cdbfr->len);
+               msglist = (long *) cdbfr->ptr;
+               cdbfr->ptr = NULL;      /* usergoto() now owns this memory */
                num_msgs = cdbfr->len / sizeof(long);
                cdb_free(cdbfr);
        }
 
-       lprintf(CTDL_DEBUG, " *** START COUNT *** \n");
        total_messages = 0;
        for (a=0; a<num_msgs; ++a) {
                if (msglist[a] > 0L) ++total_messages;
@@ -860,7 +859,6 @@ void usergoto(char *where, int display_result, int transiently,
                        }
                }
        }
-       lprintf(CTDL_DEBUG, " ***  END  COUNT *** \n");
        new_messages = total_messages - old_messages;
 
        if (msglist != NULL) free(msglist);
@@ -934,15 +932,33 @@ void cmd_goto(char *gargs)
 
        getuser(&CC->user, CC->curr_user);
 
-       if (!strcasecmp(towhere, "_BASEROOM_"))
+       /*
+        * Handle some of the macro named rooms
+        */
+       if (!strcasecmp(towhere, "_BASEROOM_")) {
                safestrncpy(towhere, config.c_baseroom, sizeof towhere);
-
-       if (!strcasecmp(towhere, "_MAIL_"))
+       }
+       else if (!strcasecmp(towhere, "_MAIL_")) {
                safestrncpy(towhere, MAILROOM, sizeof towhere);
-
-       if (!strcasecmp(towhere, "_BITBUCKET_"))
+       }
+       else if (!strcasecmp(towhere, "_TRASH_")) {
+               safestrncpy(towhere, USERTRASHROOM, sizeof towhere);
+       }
+       else if (!strcasecmp(towhere, "_BITBUCKET_")) {
                safestrncpy(towhere, config.c_twitroom, sizeof towhere);
-
+       }
+       else if (!strcasecmp(towhere, "_CALENDAR_")) {
+               safestrncpy(towhere, USERCALENDARROOM, sizeof towhere);
+       }
+       else if (!strcasecmp(towhere, "_TASKS_")) {
+               safestrncpy(towhere, USERTASKSROOM, sizeof towhere);
+       }
+       else if (!strcasecmp(towhere, "_CONTACTS_")) {
+               safestrncpy(towhere, USERCONTACTSROOM, sizeof towhere);
+       }
+       else if (!strcasecmp(towhere, "_NOTES_")) {
+               safestrncpy(towhere, USERNOTESROOM, sizeof towhere);
+       }
 
        /* First try a regular match */
        c = getroom(&QRscratch, towhere);
@@ -1078,14 +1094,32 @@ void cmd_rdir(void)
                cprintf("%d not here.\n", ERROR + HIGHER_ACCESS_REQUIRED);
                return;
        }
-       cprintf("%d %s|%s/files/%s\n",
-       LISTING_FOLLOWS, config.c_fqdn, CTDLDIR, CC->room.QRdirname);
+       cprintf("%d %s|"
+#ifndef HAVE_DATA_DIR
+                       "."
+#else
+                       DATA_DIR
+#endif
+                       "/files/%s\n",
+                       LISTING_FOLLOWS, config.c_fqdn, CC->room.QRdirname);
 
-        snprintf(buf, sizeof buf, "ls %s/files/%s  >%s 2> /dev/null",
-                CTDLDIR, CC->room.QRdirname, tempfilename);
-        system(buf);
+       snprintf(buf, sizeof buf, "ls "
+#ifndef HAVE_DATA_DIR
+                        "."
+#else
+                        DATA_DIR
+#endif
+                        "/files/%s  >%s 2> /dev/null",
+                        CC->room.QRdirname, tempfilename);
+       system(buf);
 
-       snprintf(buf, sizeof buf, "%s/files/%s/filedir", CTDLDIR, CC->room.QRdirname);
+       snprintf(buf, sizeof buf, 
+#ifndef HAVE_DATA_DIR
+                        "."
+#else
+                        DATA_DIR
+#endif
+                        "/files/%s/filedir", CC->room.QRdirname);
        fd = fopen(buf, "r");
        if (fd == NULL)
                fd = fopen("/dev/null", "r");
@@ -1094,8 +1128,14 @@ void cmd_rdir(void)
        while (fgets(flnm, sizeof flnm, ls) != NULL) {
                flnm[strlen(flnm) - 1] = 0;
                if (strcasecmp(flnm, "filedir")) {
-                       snprintf(buf, sizeof buf, "%s/files/%s/%s",
-                               CTDLDIR, CC->room.QRdirname, flnm);
+                       snprintf(buf, sizeof buf, 
+#ifndef HAVE_DATA_DIR
+                                        "."
+#else
+                                        DATA_DIR
+#endif
+                                        "/files/%s/%s",
+                                        CC->room.QRdirname, flnm);
                        stat(buf, &statbuf);
                        safestrncpy(comment, "", sizeof comment);
                        fseek(fd, 0L, 0);
@@ -1401,7 +1441,13 @@ void cmd_setr(char *args)
 
        /* Create a room directory if necessary */
        if (CC->room.QRflags & QR_DIRECTORY) {
-               snprintf(buf, sizeof buf, "./files/%s", CC->room.QRdirname);
+               snprintf(buf, sizeof buf, 
+#ifndef HAVE_DATA_DIR
+                                "."
+#else
+                                DATA_DIR
+#endif
+                                "/files/%s", CC->room.QRdirname);
                mkdir(buf, 0755);
        }
        snprintf(buf, sizeof buf, "%s> edited by %s\n", CC->room.QRname, CC->curr_user);
@@ -1571,7 +1617,7 @@ void delete_room(struct ctdlroom *qrbuf)
        /* Delete the messages in the room
         * (Careful: this opens an S_ROOMS critical section!)
         */
-       CtdlDeleteMessages(qrbuf->QRname, 0L, "");
+       CtdlDeleteMessages(qrbuf->QRname, 0L, "", 0);
 
        /* Flag the room record as not in use */
        lgetroom(qrbuf, qrbuf->QRname);