Override the default init_trash() with the our custom one (since
2001-03-08 Jeffrey Stedfast <fejj@ximian.com> * mail-local.c (mail_local_store_class_init): Override the default init_trash() with the our custom one (since MailLocalStore doesn't let the CamelStore keep a hash of opened folders and instead keepts track of them itself). (init_trash): custom implementation of the init_trash method for MailLocalStores (get_folder): i18nize. (register_folder_registered): Don't add the folder to the vtrash here. svn path=/trunk/; revision=8596
This commit is contained in:
committed by
Jeffrey Stedfast
parent
e74803511e
commit
8632f73b6f
@ -1,3 +1,15 @@
|
||||
2001-03-08 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* mail-local.c (mail_local_store_class_init): Override the default
|
||||
init_trash() with the our custom one (since MailLocalStore doesn't
|
||||
let the CamelStore keep a hash of opened folders and instead
|
||||
keepts track of them itself).
|
||||
(init_trash): custom implementation of the init_trash method for
|
||||
MailLocalStores
|
||||
(get_folder): i18nize.
|
||||
(register_folder_registered): Don't add the folder to the vtrash
|
||||
here.
|
||||
|
||||
2001-03-08 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* component-factory.c (component_fn): Specify a NULL
|
||||
|
||||
@ -49,6 +49,7 @@
|
||||
#include "evolution-storage-listener.h"
|
||||
|
||||
#include "camel/camel.h"
|
||||
#include "camel/camel-vee-store.h"
|
||||
#include "camel/camel-vee-folder.h"
|
||||
|
||||
#include "filter/vfolder-context.h"
|
||||
@ -175,11 +176,11 @@ typedef struct {
|
||||
|
||||
GNOME_Evolution_LocalStorage corba_local_storage;
|
||||
EvolutionStorageListener *local_storage_listener;
|
||||
|
||||
|
||||
char *local_path;
|
||||
int local_pathlen;
|
||||
GHashTable *folders, /* points to MailLocalFolder */
|
||||
*unread;
|
||||
GHashTable *folders; /* points to MailLocalFolder */
|
||||
GHashTable *unread;
|
||||
} MailLocalStore;
|
||||
|
||||
typedef struct {
|
||||
@ -211,6 +212,8 @@ static void delete_folder (CamelStore *store, const char *folder_name,
|
||||
static void rename_folder (CamelStore *store, const char *old_name,
|
||||
const char *new_name, CamelException *ex);
|
||||
|
||||
static void init_trash (CamelStore *store);
|
||||
|
||||
static CamelStoreClass *local_parent_class;
|
||||
|
||||
static void
|
||||
@ -227,7 +230,8 @@ mail_local_store_class_init (MailLocalStoreClass *mail_local_store_class)
|
||||
/* Don't cache folders */
|
||||
camel_store_class->hash_folder_name = NULL;
|
||||
camel_store_class->compare_folder_name = NULL;
|
||||
|
||||
|
||||
camel_store_class->init_trash = init_trash;
|
||||
camel_store_class->get_folder = get_folder;
|
||||
camel_store_class->get_folder_info = get_folder_info;
|
||||
camel_store_class->free_folder_info = camel_store_free_folder_info_full;
|
||||
@ -320,7 +324,7 @@ get_folder (CamelStore *store, const char *folder_name,
|
||||
MailLocalStore *local_store = (MailLocalStore *)store;
|
||||
CamelFolder *folder;
|
||||
MailLocalFolder *local_folder;
|
||||
|
||||
|
||||
local_folder = g_hash_table_lookup (local_store->folders, folder_name);
|
||||
if (local_folder) {
|
||||
folder = local_folder->folder;
|
||||
@ -328,11 +332,57 @@ get_folder (CamelStore *store, const char *folder_name,
|
||||
} else {
|
||||
folder = NULL;
|
||||
camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
|
||||
"No such folder %s", folder_name);
|
||||
_("No such folder %s"), folder_name);
|
||||
}
|
||||
|
||||
return folder;
|
||||
}
|
||||
|
||||
static void
|
||||
trash_add_folder (gpointer key, gpointer value, gpointer data)
|
||||
{
|
||||
MailLocalFolder *local_folder = (MailLocalFolder *) value;
|
||||
CamelFolder *folder = local_folder->folder;
|
||||
CamelStore *store = CAMEL_STORE (data);
|
||||
|
||||
camel_vee_folder_add_folder (CAMEL_VEE_FOLDER (store->vtrash), folder);
|
||||
}
|
||||
|
||||
static void
|
||||
trash_finalize (CamelObject *trash, gpointer event_data, gpointer user_data)
|
||||
{
|
||||
CamelStore *store = CAMEL_STORE (user_data);
|
||||
|
||||
store->vtrash = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
init_trash (CamelStore *store)
|
||||
{
|
||||
MailLocalStore *local_store = MAIL_LOCAL_STORE (store);
|
||||
char *name;
|
||||
|
||||
name = g_strdup_printf ("%s?(match-all (system-flag \"Deleted\"))", "vTrash");
|
||||
|
||||
store->vtrash = camel_vee_folder_new (store, name, CAMEL_STORE_FOLDER_CREATE |
|
||||
CAMEL_STORE_VEE_FOLDER_AUTO, NULL);
|
||||
|
||||
g_free (name);
|
||||
|
||||
if (store->vtrash) {
|
||||
/* attach to the finalize event of the vtrash */
|
||||
camel_object_hook_event (CAMEL_OBJECT (store->vtrash), "finalize",
|
||||
trash_finalize, store);
|
||||
|
||||
/* add all the pre-opened folders to the vtrash */
|
||||
if (local_store->folders) {
|
||||
/* lock? */
|
||||
g_hash_table_foreach (local_store->folders, trash_add_folder, store);
|
||||
/* unlock? */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
populate_folders (gpointer key, gpointer data, gpointer user_data)
|
||||
{
|
||||
@ -509,21 +559,14 @@ register_folder_registered(struct _mail_msg *mm)
|
||||
struct _register_msg *m = (struct _register_msg *)mm;
|
||||
MailLocalFolder *local_folder = m->local_folder;
|
||||
int unread;
|
||||
|
||||
|
||||
if (local_folder->folder) {
|
||||
CamelStore *store = CAMEL_STORE (local_folder->local_store);
|
||||
|
||||
g_hash_table_insert (local_folder->local_store->folders, local_folder->uri + 8,
|
||||
local_folder);
|
||||
|
||||
/* Add the folder to the vTrash folder */
|
||||
if (store->vtrash)
|
||||
camel_vee_folder_add_folder (CAMEL_VEE_FOLDER (store->vtrash),
|
||||
local_folder->folder);
|
||||
|
||||
/* add the folder to the vfolder lists FIXME: merge stuff above with this */
|
||||
vfolder_register_source(local_folder->folder);
|
||||
|
||||
|
||||
unread = local_folder->last_unread;
|
||||
local_folder->last_unread = 0;
|
||||
local_folder_changed (CAMEL_OBJECT (local_folder->folder), GINT_TO_POINTER (unread),
|
||||
|
||||
Reference in New Issue
Block a user