diff options
Diffstat (limited to 'camel/providers')
-rw-r--r-- | camel/providers/MH/camel-mh-folder.c | 38 | ||||
-rw-r--r-- | camel/providers/MH/camel-mh-store.c | 72 |
2 files changed, 95 insertions, 15 deletions
diff --git a/camel/providers/MH/camel-mh-folder.c b/camel/providers/MH/camel-mh-folder.c index 50c0ad34d4..e4bd6335c1 100644 --- a/camel/providers/MH/camel-mh-folder.c +++ b/camel/providers/MH/camel-mh-folder.c @@ -20,7 +20,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ - +#include <config.h> #include <sys/stat.h> #include <unistd.h> #include <sys/types.h> @@ -54,7 +54,7 @@ static CamelMimeMessage *_get_message (CamelFolder *folder, gint number); static void camel_mh_folder_class_init (CamelMhFolderClass *camel_mh_folder_class) { - CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_mh_folder_class); + CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_mh_folder_class); parent_class = gtk_type_class (camel_folder_get_type ()); @@ -126,12 +126,13 @@ _init_with_store (CamelFolder *folder, CamelStore *parent_store) static void _set_name (CamelFolder *folder, const gchar *name) { - CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder); + CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder); const gchar *root_dir_path; gchar *full_name; const gchar *parent_full_name; gchar separator; - + + CAMEL_LOG_FULL_DEBUG ("Entering CamelMhFolder::set_name\n"); g_assert(folder); g_assert(name); g_assert(folder->parent_store); @@ -143,9 +144,15 @@ _set_name (CamelFolder *folder, const gchar *name) separator = camel_store_get_separator (folder->parent_store); root_dir_path = camel_mh_store_get_toplevel_dir (CAMEL_MH_STORE(folder->parent_store)); - + + CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::set_name full_name is %s\n", folder->full_name); + CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::set_name root_dir_path is %s\n", root_dir_path); + CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::separator is %c\n", separator); + mh_folder->directory_path = g_strdup_printf ("%s%c%s", root_dir_path, separator, folder->full_name); + CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::set_name mh_folder->directory_path is %s\n", mh_folder->directory_path); + CAMEL_LOG_FULL_DEBUG ("Leaving CamelMhFolder::set_name\n"); } @@ -158,14 +165,21 @@ _exists (CamelFolder *folder) gint stat_error; gboolean exists; + CAMEL_LOG_FULL_DEBUG ("Entering CamelMhFolder::exists\n"); g_assert (folder); - + if (!mh_folder->directory_path) return FALSE; - + stat_error = stat (mh_folder->directory_path, &stat_buf); - if (stat_error == -1) return FALSE; + if (stat_error == -1) { + CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::exists when executing stat on %s, stat_error = %d\n", + mh_folder->directory_path, stat_error); + CAMEL_LOG_FULL_DEBUG (" Full error text is : %s\n", strerror(errno)); + return FALSE; + } + exists = S_ISDIR (stat_buf.st_mode); - exists = S_ISDIR(stat_buf.st_mode); + CAMEL_LOG_FULL_DEBUG ("Leaving CamelMhFolder::exists\n"); return exists; } @@ -321,8 +335,10 @@ _list_subfolders(CamelFolder *folder) /* is it a directory ? */ if ((stat_error != -1) && S_ISDIR (stat_buf.st_mode)) { /* yes, add it to the list */ - CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::list_subfolders adding %s\n", entry_name); - subfolder_name_list = g_list_append (subfolder_name_list, g_strdup (entry_name)); + if (entry_name[0] != '.') { + CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::list_subfolders adding %s\n", entry_name); + subfolder_name_list = g_list_append (subfolder_name_list, g_strdup (entry_name)); + } } /* read next entry */ dir_entry = readdir (dir_handle); diff --git a/camel/providers/MH/camel-mh-store.c b/camel/providers/MH/camel-mh-store.c index efdb2b86e9..0e382fa913 100644 --- a/camel/providers/MH/camel-mh-store.c +++ b/camel/providers/MH/camel-mh-store.c @@ -23,25 +23,42 @@ #include "camel-mh-store.h" #include "camel-mh-folder.h" +#include "url-util.h" -static GtkObjectClass *parent_class=NULL; +static CamelStoreClass *parent_class=NULL; /* Returns the class for a CamelMhStore */ -#define CS_CLASS(so) CAMEL_MH_STORE_CLASS (GTK_OBJECT(so)->klass) +#define CMHS_CLASS(so) CAMEL_MH_STORE_CLASS (GTK_OBJECT(so)->klass) +#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass) +#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (GTK_OBJECT(so)->klass) +static void _init (CamelStore *store, CamelSession *session, gchar *url_name); +static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name); static void camel_mh_store_class_init (CamelMhStoreClass *camel_mh_store_class) { + CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_mh_store_class); + parent_class = gtk_type_class (camel_store_get_type ()); /* virtual method definition */ /* virtual method overload */ + camel_store_class->init = _init; + camel_store_class->get_folder = _get_folder; } +static void +camel_mh_store_init (gpointer object, gpointer klass) +{ + CamelMhStore *mh_store = CAMEL_MH_STORE (object); + CamelStore *store = CAMEL_STORE (object); + + store->separator = '/'; +} @@ -58,13 +75,13 @@ camel_mh_store_get_type (void) sizeof (CamelMhStore), sizeof (CamelMhStoreClass), (GtkClassInitFunc) camel_mh_store_class_init, - (GtkObjectInitFunc) NULL, + (GtkObjectInitFunc) camel_mh_store_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; - camel_mh_store_type = gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_mh_store_info); + camel_mh_store_type = gtk_type_unique (CAMEL_STORE_TYPE, &camel_mh_store_info); } return camel_mh_store_type; @@ -87,3 +104,50 @@ camel_mh_store_get_toplevel_dir (CamelMhStore *store) { return store->toplevel_dir; } + + + +static void +_init (CamelStore *store, CamelSession *session, gchar *url_name) +{ + CamelMhStore *mh_store = CAMEL_MH_STORE (store); + Gurl *store_url; + + g_assert (url_name); + /* call parent implementation */ + parent_class->init (store, session, url_name); + + + /* find the path in the URL*/ + store_url = g_url_new (url_name); + + g_return_if_fail (store_url); + g_return_if_fail (store_url->path); + + mh_store->toplevel_dir = g_strdup (store_url->path); + g_url_free (store_url); + + + +} + + +static CamelFolder * +_get_folder (CamelStore *store, const gchar *folder_name) +{ + CamelMhFolder *new_mh_folder; + CamelFolder *new_folder; + + /* check if folder has already been created */ + /* call the standard routine for that when */ + /* it is done ... */ + + new_mh_folder = gtk_type_new (CAMEL_MH_FOLDER_TYPE); + new_folder = CAMEL_FOLDER (new_mh_folder); + + CF_CLASS (new_folder)->init_with_store (new_folder, store); + CF_CLASS (new_folder)->set_name (new_folder, folder_name); + + + return new_folder; +} |