Fix output of UID COPY operation
[citadel.git] / citadel / modules / imap / imap_misc.c
index b966f87b4cc16f8affeb07a8a6ef52aec7f415db..39ae34b82356cf43060f25a6462b698890979a55 100644 (file)
@@ -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 {