0.9.5claws30
[claws.git] / src / msgcache.c
index e8d5b1f7f4426ee7cac2079bac27e3fed2473894..7e5c3b3b44555e4756561e97ed873f25307ef6e3 100644 (file)
@@ -35,7 +35,7 @@ struct _MsgCache {
        time_t           last_access;
 };
 
-MsgCache *msgcache_new()
+MsgCache *msgcache_new(void)
 {
        MsgCache *cache;
        
@@ -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); \
        } \
 }
@@ -361,7 +363,7 @@ static void msgcache_write_func(gpointer key, gpointer value, gpointer user_data
 {
        MsgInfo *msginfo;
        struct write_fps *write_fps;
-       
+
        msginfo = (MsgInfo *)value;
        write_fps = user_data;
 
@@ -432,6 +434,7 @@ MsgInfo *msgcache_get_msg_by_id(MsgCache *cache, const gchar *msgid)
        MsgInfo *msginfo;
        
        g_return_val_if_fail(cache != NULL, NULL);
+       g_return_val_if_fail(msgid != NULL, NULL);
 
        msginfo = g_hash_table_lookup(cache->msgid_table, msgid);
        if(!msginfo)
@@ -443,20 +446,22 @@ MsgInfo *msgcache_get_msg_by_id(MsgCache *cache, const gchar *msgid)
 
 static void msgcache_get_msg_list_func(gpointer key, gpointer value, gpointer user_data)
 {
-       GSList **listptr = user_data;
+       MsgInfoList **listptr = user_data;
        MsgInfo *msginfo = value;
 
        *listptr = g_slist_prepend(*listptr, procmsg_msginfo_new_ref(msginfo));
 }
 
-GSList *msgcache_get_msg_list(MsgCache *cache)
+MsgInfoList *msgcache_get_msg_list(MsgCache *cache)
 {
-       GSList *msg_list = NULL;
+       MsgInfoList *msg_list = NULL;
 
        g_return_val_if_fail(cache != NULL, NULL);
 
        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;
 }