/[imapfilter]/imapfilter/request.c
ViewVC logotype

Diff of /imapfilter/request.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.44 by lefcha, Thu Mar 6 15:00:46 2003 UTC revision 1.45 by lefcha, Fri Mar 7 14:04:38 2003 UTC
# Line 2  Line 2 
2  #include <stdlib.h>  #include <stdlib.h>
3  #include <string.h>  #include <string.h>
4  #include <errno.h>  #include <errno.h>
5    #include <time.h>
6    
7  #include "config.h"  #include "config.h"
8  #include "imapfilter.h"  #include "imapfilter.h"
# Line 72  login(int *sock, char *user, char *pass) Line 73  login(int *sock, char *user, char *pass)
73   * Check if a mailbox exists.   * Check if a mailbox exists.
74   */   */
75  int  int
76  check_mailbox(int *sock, char *mbox, namesp_t * nsp)  check_mailbox(int *sock, char *mbox)
77  {  {
78          return server_response(sock, imap_examine(sock,          return server_response(sock, imap_status(sock, mbox, "MESSAGES"));
                 apply_namespace(mbox, nsp->prefix, nsp->delim)));  
79  }  }
80    
81    
# Line 480  action_copy(char *mesgs, char *destmbox, Line 480  action_copy(char *mesgs, char *destmbox,
480  {  {
481          int r;          int r;
482          char *tok, *mcp, *m;          char *tok, *mcp, *m;
483          char dm[MBOX_NAME_LEN];          char dm[2][MBOX_NAME_LEN];
484    
485          r = 0;          r = 0;
486          tok = NULL;          tok = NULL;
# Line 492  action_copy(char *mesgs, char *destmbox, Line 492  action_copy(char *mesgs, char *destmbox,
492          else          else
493                  m = mcp = convert_messages(mesgs);                  m = mcp = convert_messages(mesgs);
494    
495            xstrncpy(dm[0], destmbox, MBOX_NAME_LEN - 1);
496            current_date(dm[0]);
497          tok = strtok_r(m, " ", &m);          tok = strtok_r(m, " ", &m);
498          while (tok != NULL) {          while (tok != NULL) {
499                  xstrncpy(dm, destmbox, MBOX_NAME_LEN - 1);                  xstrncpy(dm[1], dm[0], MBOX_NAME_LEN - 1);
500                  current_date(dm);                  message_date(tok, dm[1]);
                 message_date(tok, dm);  
501    
502                  if ((r = copy_response(&sockpri, imap_copy(&sockpri, tok,                  if ((r = copy_response(&sockpri, imap_copy(&sockpri, tok,
503                                  dm))) == RESPONSE_TRYCREATE)                                  dm[1]))) == RESPONSE_TRYCREATE)
504                          if (!server_response(&sockpri, imap_create(&sockpri,                          if (!server_response(&sockpri, imap_create(&sockpri,
505                                      dm))) {                                      dm[1]))) {
506                                  if ((options & OPTION_SUBSCRIBE))                                  if ((options & OPTION_SUBSCRIBE))
507                                          server_response(&sockpri,                                          server_response(&sockpri,
508                                              imap_subscribe(&sockpri, dm));                                              imap_subscribe(&sockpri, dm[1]));
509                                  r = copy_response(&sockpri,                                  r = copy_response(&sockpri,
510                                      imap_copy(&sockpri, tok, dm));                                      imap_copy(&sockpri, tok, dm[1]));
511                          }                          }
512                  tok = strtok_r(NULL, " ", &m);                  tok = strtok_r(NULL, " ", &m);
513          }          }
# Line 540  action_rcopy(char *mesgs, account_t * de Line 541  action_rcopy(char *mesgs, account_t * de
541          char *tok, *m, *mcp, *ndm;          char *tok, *m, *mcp, *ndm;
542          unsigned int n;          unsigned int n;
543          char buf[RESPONSE_BUF * 2];          char buf[RESPONSE_BUF * 2];
544            char dm[3][MBOX_NAME_LEN];
545    
546            *dm[0] = *dm[1] = *dm[2] = '\0';
547    
548          if (init_connection(&sockaux, destacc->server, destacc->port,          if (init_connection(&sockaux, destacc->server, destacc->port,
549                  destacc->ssl))                  destacc->ssl))
# Line 570  action_rcopy(char *mesgs, account_t * de Line 574  action_rcopy(char *mesgs, account_t * de
574          }          }
575          check_namespace(&sockaux, &nspaux);          check_namespace(&sockaux, &nspaux);
576    
         /* apply_namespace() returns a pointer to a static buffer. */  
         ndm = apply_namespace(destmbox, nspaux.prefix, nspaux.delim);  
   
         r = check_mailbox(&sockaux, destmbox, &nspaux);  
   
         if (r == RESPONSE_OK)  
                 close_mailbox(&sockaux);  
         else if (r == RESPONSE_NO) {  
                 server_response(&sockaux, imap_create(&sockaux, ndm));  
                 if ((options & OPTION_SUBSCRIBE))  
                         server_response(&sockaux, imap_subscribe(&sockaux,  
                                 ndm));  
         }  
577          m = mcp = xstrdup(mesgs);          m = mcp = xstrdup(mesgs);
578    
579            xstrncpy(dm[1], destmbox, MBOX_NAME_LEN - 1);
580            current_date(dm[1]);
581    
582          tok = strtok_r(m, " ", &m);          tok = strtok_r(m, " ", &m);
583          while (tok != NULL) {          while (tok != NULL) {
584                    xstrncpy(dm[2], dm[1], MBOX_NAME_LEN - 1);
585                    message_date(tok, dm[2]);
586    
587                    /* apply_namespace() returns a pointer to a static buffer. */
588                    ndm = apply_namespace(dm[2], nspaux.prefix, nspaux.delim);
589    
590                    /* Check only if mailbox name is different from last one. */
591                    if (strncmp(dm[0], dm[2], strlen(dm[2]))) {
592                            r = check_mailbox(&sockaux, ndm);
593                            if (r == RESPONSE_NO) {
594                                    server_response(&sockaux,
595                                        imap_create(&sockaux, ndm));
596                                    if ((options & OPTION_SUBSCRIBE))
597                                            server_response(&sockaux,
598                                                imap_subscribe(&sockaux, ndm));
599                            }
600                    }
601                    xstrncpy(dm[0], dm[2], MBOX_NAME_LEN - 1);
602    
603                  fetchsize_response(&sockpri, &n,                  fetchsize_response(&sockpri, &n,
604                      imap_fetch(&sockpri, tok, "RFC822.SIZE"));                      imap_fetch(&sockpri, tok, "RFC822.SIZE"));
605    

Legend:
Removed from v.1.44  
changed lines
  Added in v.1.45

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26