guint cmd_count;
/* CLAWS */
- time_t last_access_time;
gboolean folder_content_changed;
guint exists;
};
* A better solution than sending a NOOP every time would be
* for every command to be prepared to retry until it is
* successfully sent. -- mbp */
- if (time(NULL) - session->last_access_time > SESSION_TIMEOUT) {
+ if (time(NULL) - SESSION(session)->last_access_time > SESSION_TIMEOUT_INTERVAL) {
/* verify that the session is still alive */
if (imap_cmd_noop(session) != IMAP_SUCCESS) {
/* Check if this is the first try to establish a
connection, if yes we don't try to reconnect */
if (rfolder->session == NULL) {
- log_warning(_("Connecting %s failed"),
+ log_warning(_("Connecting to %s failed"),
folder->account->recv_server);
session_destroy(SESSION(session));
session = NULL;
} else {
log_warning(_("IMAP4 connection to %s has been"
- " disconnected. Reconnecting...\n"),
+ " disconnected. Reconnecting...\n"),
folder->account->recv_server);
session_destroy(SESSION(session));
/* Clear folders session to make imap_session_get create
}
rfolder->session = SESSION(session);
- if (session) {
- session->last_access_time = time(NULL);
- }
+
return IMAP_SESSION(session);
}
g_return_val_if_fail(item->path != NULL, -1);
g_return_val_if_fail(name != NULL, -1);
+ if (strchr(name, imap_get_path_separator(IMAP_FOLDER(folder), item->path)) != NULL) {
+ g_warning(_("New folder name must not contain the namespace "
+ "path separator"));
+ return -1;
+ }
+
session = imap_session_get(folder);
if (!session) return -1;
g_string_free(str, TRUE);
}
imap_seq_set_free(seq_list);
+
+ session_set_access_time(SESSION(session));
return newlist;
}
{
gchar *real_path;
gint ok;
- gint exists_, recent_, unseen_, uid_validity_;
+ gint exists_, recent_, unseen_;
+ guint32 uid_validity_;
if (!exists || !recent || !unseen || !uid_validity) {
if (session->mbox && strcmp(session->mbox, path) == 0)
GPtrArray *argbuf;
gchar *select_cmd;
gchar *folder_;
+ unsigned int uid_validity_;
*exists = *recent = *unseen = *uid_validity = 0;
argbuf = g_ptr_array_new();
resp_str = search_array_contain_str(argbuf, "UIDVALIDITY");
if (resp_str) {
- if (sscanf(resp_str, "OK [UIDVALIDITY %u] ", uid_validity)
+ if (sscanf(resp_str, "OK [UIDVALIDITY %u] ", &uid_validity_)
!= 1) {
g_warning("imap_cmd_select(): invalid UIDVALIDITY line.\n");
THROW;
}
+ *uid_validity = uid_validity_;
}
resp_str = search_array_contain_str(argbuf, "UNSEEN");
for (p = strlist; *p != NULL; ++p) {
guint msgnum;
- if (sscanf(*p, "%d", &msgnum) == 1)
+ if (sscanf(*p, "%u", &msgnum) == 1)
*list = g_slist_append(*list, GINT_TO_POINTER(msgnum));
}
g_strfreev(strlist);
gint size;
gchar *destfolder_;
gchar *flag_str;
- guint32 new_uid_;
+ unsigned int new_uid_;
gchar *ret = NULL;
gchar buf[BUFFSIZE];
FILE *fp;
}
g_free(ret);
- log_print("IMAP4> %s\n", _("(sending file...)"));
+ log_print("IMAP4> %s\n", "(sending file...)");
while (fgets(buf, sizeof(buf), fp) != NULL) {
strretchomp(buf);
static MsgNumberList *imapset_to_numlist(IMAPSet imapset)
{
gchar **ranges, **range;
- guint32 low, high;
+ unsigned int low, high;
MsgNumberList *uids = NULL;
ranges = g_strsplit(imapset, ",", 0);
for (range = ranges; *range != NULL; range++) {
printf("%s\n", *range);
- if(sscanf(*range, "%u:%u", &low, &high) == 1)
+ if (sscanf(*range, "%u:%u", &low, &high) == 1)
uids = g_slist_prepend(uids, GINT_TO_POINTER(low));
else {
int i;
strretchomp(*ret);
log_print("IMAP4< %s\n", *ret);
+
+ session_set_access_time(SESSION(session));
return IMAP_SUCCESS;
}
IMAPFolderItem *item = (IMAPFolderItem *)_item;
IMAPSession *session;
gint ok, nummsgs = 0, exists, recent, uid_val, uid_next, unseen;
- GSList *uidlist;
+ GSList *uidlist = NULL;
gchar *dir;
gboolean selected_folder;
GSList *sorted_list;
/*
GSList *new = NULL, *p_new;
+ GSList *deleted = NULL, *p_deleted;
*/
- GSList *unseen = NULL, *answered = NULL, *flagged = NULL, *deleted = NULL;
- GSList *p_unseen, *p_answered, *p_flagged, *p_deleted;
+ GSList *unseen = NULL, *answered = NULL, *flagged = NULL;
+ GSList *p_unseen, *p_answered, *p_flagged;
GSList *elem;
GSList *seq_list, *cur;
gboolean reverse_seen = FALSE;
g_return_val_if_fail(folder != NULL, -1);
g_return_val_if_fail(item != NULL, -1);
- g_return_val_if_fail(msginfo_list != NULL, -1);
+ if (msginfo_list == NULL)
+ return 0;
session = imap_session_get(folder);
g_return_val_if_fail(session != NULL, -1);
p_unseen = unseen;
p_answered = answered;
p_flagged = flagged;
+/*
p_deleted = deleted;
-
+*/
for (elem = sorted_list; elem != NULL; elem = g_slist_next(elem)) {
MsgInfo *msginfo;
MsgPermFlags flags;
+ gboolean wasnew;
msginfo = (MsgInfo *) elem->data;
flags = msginfo->flags.perm_flags;
- flags &= ~((reverse_seen ? 0 : MSG_UNREAD) | MSG_REPLIED | MSG_MARKED);
+ wasnew = (flags & MSG_NEW);
+ flags &= ~((reverse_seen ? 0 : MSG_UNREAD | MSG_NEW) | MSG_REPLIED | MSG_MARKED);
if (reverse_seen)
- flags |= MSG_UNREAD;
+ flags |= MSG_UNREAD | (wasnew ? MSG_NEW : 0);
/*
if (gslist_find_next_num(&p_new, msginfo->msgnum) == msginfo->msgnum)
flags |= MSG_NEW;
*/
if (gslist_find_next_num(&p_unseen, msginfo->msgnum) == msginfo->msgnum) {
if (!reverse_seen) {
- flags |= MSG_UNREAD;
+ flags |= MSG_UNREAD | (wasnew ? MSG_NEW : 0);
} else {
flags &= ~(MSG_UNREAD | MSG_NEW);
}
}
imap_seq_set_free(seq_list);
- g_slist_free(deleted);
+ /* g_slist_free(deleted); */
g_slist_free(flagged);
g_slist_free(answered);
g_slist_free(unseen);