Fix output of UID COPY operation
[citadel.git] / citadel / modules / imap / imap_misc.c
index 3665264554ddc574840d88acef5e64017c857a31..39ae34b82356cf43060f25a6462b698890979a55 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1987-2015 by the citadel.org team
+ * Copyright (c) 1987-2017 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 as published by
@@ -160,26 +160,24 @@ int imap_do_copy(const char *destination_folder) {
  * are both globally unique and persistent across a room-to-room copy, we
  * can get this done quite easily.
  */
-void imap_output_copyuid_response(void) {
-       citimap *Imap = IMAP;
+void imap_output_copyuid_response(citimap *Imap) {
        int i;
-       int num_output = 0;
-  
+       StrBuf *MsgsCopied = NewStrBuf();
+
        for (i = 0; i < Imap->num_msgs; ++i) {
                if (Imap->flags[i] & IMAP_SELECTED) {
-                       ++num_output;
-                       if (num_output == 1) {
-                               IAPuts("[COPYUID ");
-                       }
-                       else if (num_output > 1) {
-                               IAPuts(",");
+                       if (StrLength(MsgsCopied) > 0) {
+                               StrBufAppendBufPlain(MsgsCopied, HKEY(","), 0);
                        }
-                       IAPrintf("%ld", Imap->msgids[i]);
+                       StrBufAppendPrintf(MsgsCopied, "%ld", Imap->msgids[i]);
                }
        }
-       if (num_output > 0) {
-               IAPuts("] ");
+
+       if (StrLength(MsgsCopied) > 0) {
+               IAPrintf("[COPYUID %ld %s %s] ", GLOBAL_UIDVALIDITY_VALUE, ChrPtr(MsgsCopied), ChrPtr(MsgsCopied));
        }
+
+       FreeStrBuf(&MsgsCopied);
 }
 
 
@@ -205,7 +203,7 @@ void imap_copy(int num_parms, ConstStr *Params) {
        ret = imap_do_copy(Params[3].Key);
        if (!ret) {
                IAPrintf("%s OK ", Params[0].Key);
-               imap_output_copyuid_response();
+               imap_output_copyuid_response(IMAP);
                IAPuts("COPY completed\r\n");
        }
        else {
@@ -233,7 +231,7 @@ void imap_uidcopy(int num_parms, ConstStr *Params) {
 
        if (imap_do_copy(Params[4].Key) == 0) {
                IAPrintf("%s OK ", Params[0].Key);
-               imap_output_copyuid_response();
+               imap_output_copyuid_response(IMAP);
                IAPuts("UID COPY completed\r\n");
        }
        else {
@@ -351,10 +349,10 @@ void imap_append(int num_parms, ConstStr *Params) {
        client_getln(dummy, sizeof dummy);
 
        /* Convert RFC822 newlines (CRLF) to Unix newlines (LF) */
-       IMAPM_syslog(LOG_DEBUG, "Converting CRLF to LF");
+       syslog(LOG_DEBUG, "Converting CRLF to LF");
        StrBufToUnixLF(Imap->TransmittedMessage);
 
-       IMAPM_syslog(LOG_DEBUG, "Converting message format");
+       syslog(LOG_DEBUG, "Converting message format");
        msg = convert_internet_message_buf(&Imap->TransmittedMessage);
 
        ret = imap_grabroom(roomname, Params[2].Key, 1);