2004-08-23 [colin] 0.9.12cvs77
[claws.git] / src / imap.c
index ec7632586ce1f483136447c012999d3076c625d3..73b2b18b8dad2a0ae0116a68ca53e76277344271 100644 (file)
@@ -92,7 +92,6 @@ struct _IMAPSession
        guint cmd_count;
 
        /* CLAWS */
-       time_t last_access_time;
        gboolean folder_content_changed;
        guint exists;
 };
@@ -659,19 +658,19 @@ static IMAPSession *imap_session_get(Folder *folder)
         * 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
@@ -685,9 +684,7 @@ static IMAPSession *imap_session_get(Folder *folder)
        }
 
        rfolder->session = SESSION(session);
-       if (session) {
-               session->last_access_time = time(NULL);
-       }
+       
        return IMAP_SESSION(session);
 }
 
@@ -1719,7 +1716,7 @@ static gint imap_rename_folder(Folder *folder, FolderItem *item,
 
        if (strchr(name, imap_get_path_separator(IMAP_FOLDER(folder), item->path)) != NULL) {
                g_warning(_("New folder name must not contain the namespace "
-                           "path seperator"));
+                           "path separator"));
                return -1;
        }
 
@@ -1902,6 +1899,8 @@ static GSList *imap_get_uncached_messages(IMAPSession *session,
                g_string_free(str, TRUE);
        }
        imap_seq_set_free(seq_list);
+       
+       session_set_access_time(SESSION(session));
 
        return newlist;
 }
@@ -2858,7 +2857,7 @@ static gint imap_cmd_search(IMAPSession *session, const gchar *criteria,
                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);
@@ -2942,7 +2941,7 @@ static gint imap_cmd_append(IMAPSession *session, const gchar *destfolder,
        gint size;
        gchar *destfolder_;
        gchar *flag_str;
-       guint32 new_uid_;
+       unsigned int new_uid_;
        gchar *ret = NULL;
        gchar buf[BUFFSIZE];
        FILE *fp;
@@ -2971,7 +2970,7 @@ static gint imap_cmd_append(IMAPSession *session, const gchar *destfolder,
        }
        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);
@@ -3022,13 +3021,13 @@ static gint imap_cmd_append(IMAPSession *session, const gchar *destfolder,
 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;
@@ -3261,6 +3260,8 @@ static gint imap_gen_recv(IMAPSession *session, gchar **ret)
        strretchomp(*ret);
 
        log_print("IMAP4< %s\n", *ret);
+       
+       session_set_access_time(SESSION(session));
 
        return IMAP_SUCCESS;
 }
@@ -3765,7 +3766,7 @@ gint imap_get_num_list(Folder *folder, FolderItem *_item, GSList **msgnum_list,
        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;
 
@@ -4103,9 +4104,10 @@ static gint imap_get_flags(Folder *folder, FolderItem *item,
        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;
@@ -4116,7 +4118,8 @@ static gint imap_get_flags(Folder *folder, FolderItem *item,
 
        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);
@@ -4169,24 +4172,27 @@ static gint imap_get_flags(Folder *folder, FolderItem *item,
        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);
                        }
@@ -4203,7 +4209,7 @@ static gint imap_get_flags(Folder *folder, FolderItem *item,
        }
 
        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);