0.8.11claws75

* src/imap.c
        use IMAPSet for imap_cmd_store() and imap_cmd_envelope()
This commit is contained in:
Christoph Hohmann 2003-04-06 19:13:39 +00:00
parent afcc60194a
commit f1e3488f27
3 changed files with 43 additions and 46 deletions

View file

@ -1,3 +1,8 @@
2003-04-06 [christoph] 0.8.11claws75
* src/imap.c
use IMAPSet for imap_cmd_store() and imap_cmd_envelope()
2003-04-06 [christoph] 0.8.11claws74
* src/common/utils.[ch]

View file

@ -11,7 +11,7 @@ MINOR_VERSION=8
MICRO_VERSION=11
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_VERSION=claws74
EXTRA_VERSION=claws75
VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
dnl set $target

View file

@ -69,6 +69,8 @@
} \
}
typedef gchar * IMAPSet;
struct _IMAPFolderItem
{
FolderItem item;
@ -170,8 +172,7 @@ static SockInfo *imap_init_sock(SockInfo *sock);
#endif
static gint imap_set_message_flags (IMAPSession *session,
guint32 first_uid,
guint32 last_uid,
MsgNumberList *numlist,
IMAPFlags flag,
gboolean is_set);
static gint imap_select (IMAPSession *session,
@ -215,7 +216,7 @@ static gint imap_greeting (SockInfo *sock,
static void imap_get_capability (Session *session);
static gboolean imap_has_capability (IMAPSession *session,
const gchar *cap);
static const gchar *numberlist_to_imapset(MsgNumberList *list);
static const IMAPSet numberlist_to_imapset(MsgNumberList *list);
/* low-level IMAP4rev1 commands */
static gint imap_cmd_login (SockInfo *sock,
@ -257,7 +258,7 @@ static gint imap_cmd_rename (SockInfo *sock,
static gint imap_cmd_delete (SockInfo *sock,
const gchar *folder);
static gint imap_cmd_envelope (SockInfo *sock,
MsgNumberList *numlist);
IMAPSet set);
static gint imap_cmd_fetch (SockInfo *sock,
guint32 uid,
const gchar *filename);
@ -270,8 +271,7 @@ static gint imap_cmd_copy (IMAPSession *session,
const gchar *destfolder,
gint32 *new_uid);
static gint imap_cmd_store (SockInfo *sock,
guint32 first_uid,
guint32 last_uid,
IMAPSet set,
gchar *sub_cmd);
static gint imap_cmd_expunge (SockInfo *sock);
@ -709,10 +709,9 @@ static gint imap_do_copy(Folder *folder, FolderItem *dest, MsgInfo *msginfo,
{
gchar *destdir;
IMAPSession *session;
IMAPFlags iflags = 0;
guint32 newuid = 0;
gint ok;
g_return_val_if_fail(folder != NULL, -1);
g_return_val_if_fail(FOLDER_CLASS(folder) == &imap_class, -1);
g_return_val_if_fail(dest != NULL, -1);
@ -746,26 +745,16 @@ static gint imap_do_copy(Folder *folder, FolderItem *dest, MsgInfo *msginfo,
ok = imap_cmd_copy(session, msginfo->msgnum, destdir, &newuid);
if (ok == IMAP_SUCCESS && remove_source) {
imap_set_message_flags(session, msginfo->msgnum, msginfo->msgnum,
MsgNumberList numlist;
numlist.next = NULL;
numlist.data = GINT_TO_POINTER(msginfo->msgnum);
imap_set_message_flags(session, &numlist,
IMAP_FLAG_DELETED, TRUE);
ok = imap_cmd_expunge(SESSION(session)->sock);
}
/* get the dest folder to set the flags */
if (newuid) {
ok = imap_select(session, IMAP_FOLDER(folder), dest->path,
NULL, NULL, NULL, NULL);
if (ok != IMAP_SUCCESS) /* the folder disappeared? */
return -1;
if (msginfo->flags.perm_flags & MSG_MARKED) iflags |= IMAP_FLAG_FLAGGED;
if (msginfo->flags.perm_flags & MSG_REPLIED) iflags |= IMAP_FLAG_ANSWERED;
if (iflags)
if (imap_set_message_flags(session, newuid, newuid, iflags, TRUE)
!= IMAP_SUCCESS)
newuid = 0;
}
g_free(destdir);
if (ok == IMAP_SUCCESS)
@ -802,7 +791,8 @@ gint imap_remove_msg(Folder *folder, FolderItem *item, gint uid)
gint ok;
IMAPSession *session;
gchar *dir;
MsgNumberList numlist;
g_return_val_if_fail(folder != NULL, -1);
g_return_val_if_fail(FOLDER_CLASS(folder) == &imap_class, -1);
g_return_val_if_fail(item != NULL, -1);
@ -815,9 +805,12 @@ gint imap_remove_msg(Folder *folder, FolderItem *item, gint uid)
if (ok != IMAP_SUCCESS)
return ok;
numlist.next = NULL;
numlist.data = GINT_TO_POINTER(uid);
ok = imap_set_message_flags
(IMAP_SESSION(REMOTE_FOLDER(folder)->session),
(guint32)uid, (guint32)uid, IMAP_FLAG_DELETED, TRUE);
&numlist, IMAP_FLAG_DELETED, TRUE);
if (ok != IMAP_SUCCESS) {
log_warning(_("can't set deleted flags: %d\n"), uid);
return ok;
@ -1423,7 +1416,7 @@ static GSList *imap_get_uncached_messages(IMAPSession *session,
g_return_val_if_fail(item->folder != NULL, NULL);
g_return_val_if_fail(FOLDER_CLASS(item->folder) == &imap_class, NULL);
if (imap_cmd_envelope(SESSION(session)->sock, numlist)
if (imap_cmd_envelope(SESSION(session)->sock, numberlist_to_imapset(numlist))
!= IMAP_SUCCESS) {
log_warning(_("can't get envelope\n"));
return NULL;
@ -2003,8 +1996,7 @@ static MsgInfo *imap_parse_envelope(SockInfo *sock, FolderItem *item,
}
static gint imap_set_message_flags(IMAPSession *session,
guint32 first_uid,
guint32 last_uid,
MsgNumberList *numlist,
IMAPFlags flags,
gboolean is_set)
{
@ -2024,7 +2016,7 @@ static gint imap_set_message_flags(IMAPSession *session,
g_string_append_c(buf, ')');
ok = imap_cmd_store(SESSION(session)->sock, first_uid, last_uid,
ok = imap_cmd_store(SESSION(session)->sock, numberlist_to_imapset(numlist),
buf->str);
g_string_free(buf, TRUE);
@ -2213,7 +2205,7 @@ static gboolean imap_has_capability(IMAPSession *session, const gchar *cap)
return FALSE;
}
static const gchar *numberlist_to_imapset(MsgNumberList *list)
static const IMAPSet numberlist_to_imapset(MsgNumberList *list)
{
static GString *imapset = NULL;
MsgNumberList *numlist, *elem;
@ -2630,7 +2622,7 @@ static gint imap_cmd_copy(IMAPSession * session,
return ok;
}
gint imap_cmd_envelope(SockInfo *sock, MsgNumberList *numlist)
gint imap_cmd_envelope(SockInfo *sock, IMAPSet set)
{
static GString *header_fields = NULL;
@ -2662,23 +2654,22 @@ gint imap_cmd_envelope(SockInfo *sock, MsgNumberList *numlist)
imap_cmd_gen_send
(sock, "UID FETCH %s (UID FLAGS RFC822.SIZE BODY.PEEK[HEADER.FIELDS (%s)])",
numberlist_to_imapset(numlist),
header_fields->str);
set, header_fields->str);
return IMAP_SUCCESS;
}
static gint imap_cmd_store(SockInfo *sock, guint32 first_uid, guint32 last_uid,
static gint imap_cmd_store(SockInfo *sock, IMAPSet set,
gchar *sub_cmd)
{
gint ok;
imap_cmd_gen_send(sock, "UID STORE %d:%d %s",
first_uid, last_uid, sub_cmd);
imap_cmd_gen_send(sock, "UID STORE %s %s",
set, sub_cmd);
if ((ok = imap_cmd_ok(sock, NULL)) != IMAP_SUCCESS) {
log_warning(_("error while imap command: STORE %d:%d %s\n"),
first_uid, last_uid, sub_cmd);
log_warning(_("error while imap command: STORE %s %s\n"),
set, sub_cmd);
return ok;
}
@ -3355,7 +3346,8 @@ void imap_change_flags(Folder *folder, FolderItem *item, MsgInfo *msginfo, MsgPe
IMAPSession *session;
IMAPFlags flags_set = 0, flags_unset = 0;
gint ok = IMAP_SUCCESS;
MsgNumberList numlist;
g_return_if_fail(folder != NULL);
g_return_if_fail(folder->klass == &imap_class);
g_return_if_fail(item != NULL);
@ -3385,15 +3377,16 @@ void imap_change_flags(Folder *folder, FolderItem *item, MsgInfo *msginfo, MsgPe
if ( MSG_IS_REPLIED(msginfo->flags) && !(newflags & MSG_REPLIED))
flags_set |= IMAP_FLAG_ANSWERED;
numlist.next = NULL;
numlist.data = GINT_TO_POINTER(msginfo->msgnum);
if (flags_set) {
ok = imap_set_message_flags(session, msginfo->msgnum,
msginfo->msgnum, flags_set, TRUE);
ok = imap_set_message_flags(session, &numlist, flags_set, TRUE);
if (ok != IMAP_SUCCESS) return;
}
if (flags_unset) {
ok = imap_set_message_flags(session, msginfo->msgnum,
msginfo->msgnum, flags_unset, FALSE);
ok = imap_set_message_flags(session, &numlist, flags_unset, FALSE);
if (ok != IMAP_SUCCESS) return;
}
@ -3401,4 +3394,3 @@ void imap_change_flags(Folder *folder, FolderItem *item, MsgInfo *msginfo, MsgPe
return;
}