speed improvements
[claws.git] / src / msgcache.c
index e8d5b1f7f4426ee7cac2079bac27e3fed2473894..9ccd7299967e11e8f7de8049856c801032fabe2f 100644 (file)
@@ -165,7 +165,7 @@ static gint msgcache_read_cache_data_str(FILE *fp, gchar **str)
                ret = -1;
 
        if (ret < 0)
-               g_warning(_("Cache data is corrupted\n"));
+               g_warning("Cache data is corrupted\n");
 
        return ret;
 }
@@ -183,7 +183,7 @@ static gint msgcache_read_cache_data_str(FILE *fp, gchar **str)
 #define READ_CACHE_DATA_INT(n, fp) \
 { \
        if (fread(&n, sizeof(n), 1, fp) != 1) { \
-               g_warning(_("Cache data is corrupted\n")); \
+               g_warning("Cache data is corrupted\n"); \
                procmsg_msginfo_free(msginfo); \
                error = TRUE; \
                break; \
@@ -195,7 +195,7 @@ MsgCache *msgcache_read_cache(FolderItem *item, const gchar *cache_file)
        MsgCache *cache;
        FILE *fp;
        MsgInfo *msginfo;
-/*     MsgFlags default_flags; */
+       MsgTmpFlags tmp_flags = 0;
        gchar file_buf[BUFFSIZE];
        gint ver;
        guint num;
@@ -220,6 +220,12 @@ MsgCache *msgcache_read_cache(FolderItem *item, const gchar *cache_file)
                return NULL;
        }
 
+       if (item->stype == F_QUEUE) {
+               tmp_flags |= MSG_QUEUED;
+       } else if (item->stype == F_DRAFT) {
+               tmp_flags |= MSG_DRAFT;
+       }
+
        cache = msgcache_new();
 
        g_hash_table_freeze(cache->msgnum_table);
@@ -245,11 +251,8 @@ MsgCache *msgcache_read_cache(FolderItem *item, const gchar *cache_file)
                READ_CACHE_DATA(msginfo->references, fp);
                READ_CACHE_DATA(msginfo->xref, fp);
 
-/*
-               MSG_SET_PERM_FLAGS(msginfo->flags, default_flags.perm_flags);
-               MSG_SET_TMP_FLAGS(msginfo->flags, default_flags.tmp_flags);
-*/
                msginfo->folder = item;
+               msginfo->flags.tmp_flags |= tmp_flags;
 
                g_hash_table_insert(cache->msgnum_table, &msginfo->msgnum, msginfo);
                if(msginfo->msgid)
@@ -308,13 +311,12 @@ void msgcache_read_mark(MsgCache *cache, const gchar *mark_file)
 #define WRITE_CACHE_DATA(data, fp) \
 { \
        gint len; \
- \
-       if (data == NULL || (len = strlen(data)) == 0) { \
+       if (data == NULL) \
                len = 0; \
-               WRITE_CACHE_DATA_INT(len, fp); \
-       } else { \
+       else \
                len = strlen(data); \
-               WRITE_CACHE_DATA_INT(len, fp); \
+       WRITE_CACHE_DATA_INT(len, fp); \
+       if (len > 0) { \
                fwrite(data, len, 1, fp); \
        } \
 }
@@ -457,6 +459,8 @@ GSList *msgcache_get_msg_list(MsgCache *cache)
 
        g_hash_table_foreach((GHashTable *)cache->msgnum_table, msgcache_get_msg_list_func, (gpointer)&msg_list);       
        cache->last_access = time(NULL);
+       
+       msg_list = g_slist_reverse(msg_list);
 
        return msg_list;
 }