420 |
*/ |
*/ |
421 |
int action_delete(char *mesgs, char *args) |
int action_delete(char *mesgs, char *args) |
422 |
{ |
{ |
423 |
char *tok, *mcp, *m; |
char *tok, *mcp, *m, *cm; |
424 |
|
|
425 |
action_list(mesgs, args); |
action_list(mesgs, args); |
426 |
|
|
427 |
|
cm = convert_messages(mesgs); |
428 |
|
|
429 |
convert_messages(mesgs); |
m = mcp = xstrdup(cm); |
|
|
|
|
m = mcp = xstrdup(mesgs); |
|
430 |
|
|
431 |
while ((tok = strsep(&m, " "))) |
while ((tok = strsep(&m, " "))) |
432 |
server_response(&sockpri, imap_store(&sockpri, tok, "\\Deleted")); |
server_response(&sockpri, imap_store(&sockpri, tok, "\\Deleted")); |
433 |
|
|
434 |
|
xfree(cm); |
435 |
xfree(mcp); |
xfree(mcp); |
436 |
|
|
437 |
|
|
438 |
return 0; |
return 0; |
439 |
} |
} |
440 |
|
|
445 |
int action_copy(char *mesgs, char *destmbox, char *args) |
int action_copy(char *mesgs, char *destmbox, char *args) |
446 |
{ |
{ |
447 |
int r = 0; |
int r = 0; |
448 |
char *tok = NULL, *mcp, *m; |
char *tok = NULL, *mcp, *m, *cm; |
449 |
|
|
450 |
action_list(mesgs, args); |
action_list(mesgs, args); |
451 |
|
|
452 |
convert_messages(mesgs); |
cm = convert_messages(mesgs); |
453 |
|
|
454 |
m = mcp = xstrdup(mesgs); |
m = mcp = xstrdup(cm); |
455 |
|
|
456 |
while ((tok = strsep(&m, " "))) { |
while ((tok = strsep(&m, " "))) { |
457 |
if ((r = copy_response(&sockpri, |
if ((r = copy_response(&sockpri, |
458 |
imap_copy(&sockpri, tok, destmbox))) == |
imap_copy(&sockpri, tok, destmbox))) == |
462 |
r = copy_response(&sockpri, imap_copy(&sockpri, tok, destmbox)); |
r = copy_response(&sockpri, imap_copy(&sockpri, tok, destmbox)); |
463 |
} |
} |
464 |
} |
} |
465 |
|
|
466 |
|
xfree(cm); |
467 |
xfree(mcp); |
xfree(mcp); |
468 |
|
|
469 |
return r; |
return r; |
649 |
* Convert messages with contiguous sequence number to the corresponding |
* Convert messages with contiguous sequence number to the corresponding |
650 |
* number range, eg. 1 2 3 5 7 8 --> 1:3 5 7:8 |
* number range, eg. 1 2 3 5 7 8 --> 1:3 5 7:8 |
651 |
*/ |
*/ |
652 |
void convert_messages(char *mesgs) |
char *convert_messages(char *mesgs) |
653 |
{ |
{ |
654 |
unsigned int maxlen; |
unsigned int maxlen; |
655 |
unsigned int start, end, tmp; |
unsigned int start, end, tmp; |
656 |
char *cp, *tail, *m; |
char *c, *cp, *tail; |
657 |
|
|
658 |
start = end = tmp = 0; |
start = end = tmp = 0; |
659 |
maxlen = strlen(mesgs) + 1; |
maxlen = strlen(mesgs) + 1; |
660 |
tail = NULL; |
tail = NULL; |
661 |
|
|
662 |
cp = xstrdup(mesgs); |
c = cp = xstrdup(mesgs); |
|
m = mesgs; |
|
663 |
|
|
664 |
start = (unsigned int) strtoul(cp, &tail, 10); |
start = (unsigned int) strtoul(mesgs, &tail, 10); |
665 |
end = start; |
end = start; |
666 |
|
|
667 |
do { |
do { |
674 |
end++; |
end++; |
675 |
else { |
else { |
676 |
if (start == end) { |
if (start == end) { |
677 |
xstrncpy(m, ultostr(start, 10), maxlen); |
xstrncpy(c, ultostr(start, 10), maxlen); |
678 |
m += strlen(m); |
c += strlen(c); |
679 |
} else { |
} else { |
680 |
xstrncpy(m, ultostr(start, 10), maxlen - 1); |
xstrncpy(c, ultostr(start, 10), maxlen - 1); |
681 |
m += strlen(m); |
c += strlen(c); |
682 |
*m = ':'; |
*c = ':'; |
683 |
*++m = 0; |
*++c = 0; |
684 |
xstrncpy(m, ultostr(end, 10), maxlen); |
xstrncpy(c, ultostr(end, 10), maxlen); |
685 |
m += strlen(m); |
c += strlen(c); |
686 |
} |
} |
687 |
|
|
688 |
if (tail && m - mesgs < maxlen) { |
if (tail && c - cp < maxlen) { |
689 |
*m = ' '; |
*c = ' '; |
690 |
*++m = 0; |
*++c = 0; |
691 |
} |
} |
692 |
start = end = tmp; |
start = end = tmp; |
693 |
} |
} |
694 |
} while (tmp); |
} while (tmp); |
695 |
|
|
696 |
xfree(cp); |
return cp; |
697 |
} |
} |