diff options
author | Dan Winship <danw@src.gnome.org> | 2001-01-20 05:36:57 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2001-01-20 05:36:57 +0800 |
commit | 5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b (patch) | |
tree | 965f49d00b8e17acc50bccdb654d50a8bb026f42 /mail/subscribe-dialog.c | |
parent | e0ca9fc3346b8f27aefc63a9cc458ff437f2ff63 (diff) | |
download | gsoc2013-evolution-5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b.tar gsoc2013-evolution-5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b.tar.gz gsoc2013-evolution-5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b.tar.bz2 gsoc2013-evolution-5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b.tar.lz gsoc2013-evolution-5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b.tar.xz gsoc2013-evolution-5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b.tar.zst gsoc2013-evolution-5ca4a5eb37cc9347e1d01028d31edc46ef1cb90b.zip |
New function to add a folder and any parents of it that don't yet exist.
* subscribe-dialog.c (recursive_add_folder): New function to add a
folder and any parents of it that don't yet exist. Fixes bugzilla
#1028.
svn path=/trunk/; revision=7658
Diffstat (limited to 'mail/subscribe-dialog.c')
-rw-r--r-- | mail/subscribe-dialog.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/mail/subscribe-dialog.c b/mail/subscribe-dialog.c index a7538d766a..bdbdf347bf 100644 --- a/mail/subscribe-dialog.c +++ b/mail/subscribe-dialog.c @@ -332,6 +332,31 @@ do_subscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex) } static void +recursive_add_folder (EvolutionStorage *storage, const char *path, + const char *name, const char *url) +{ + char *parent, *pname, *p; + + p = strrchr (path, '/'); + if (p && p != path) { + parent = g_strndup (path, p - path); + if (!evolution_storage_folder_exists (storage, parent)) { + p = strrchr (parent, '/'); + if (p) + pname = g_strdup (p + 1); + else + pname = g_strdup (""); + recursive_add_folder (storage, parent, pname, ""); + g_free (pname); + } + g_free (parent); + } + + evolution_storage_new_folder (storage, path, name, "mail", url, + _("(No description)"), FALSE); +} + +static void cleanup_subscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex) { @@ -340,12 +365,9 @@ cleanup_subscribe_folder (gpointer in_data, gpointer op_data, if (!camel_exception_is_set (ex)) { if (input->subscribe) - evolution_storage_new_folder (input->sc->storage, - data->path, - data->name, "mail", - data->url, - _("(No description)") /* XXX */, - FALSE); + recursive_add_folder (input->sc->storage, + data->path, data->name, + data->url); else evolution_storage_removed_folder (input->sc->storage, data->path); } |