aboutsummaryrefslogtreecommitdiffstats
path: root/mail/subscribe-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/subscribe-dialog.c')
-rw-r--r--mail/subscribe-dialog.c183
1 files changed, 51 insertions, 132 deletions
diff --git a/mail/subscribe-dialog.c b/mail/subscribe-dialog.c
index a361f9ad26..a8ac2a99d3 100644
--- a/mail/subscribe-dialog.c
+++ b/mail/subscribe-dialog.c
@@ -260,6 +260,7 @@ typedef struct subscribe_folder_input_s {
SubscribeDialog *sc;
CamelStore *store;
CamelFolderInfo *info;
+ gboolean subscribe;
SubscribeFolderCallback cb;
gpointer cb_data;
} subscribe_folder_input_t;
@@ -274,14 +275,24 @@ static gchar *
describe_subscribe_folder (gpointer in_data, gboolean gerund)
{
subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data;
-
- if (gerund)
- return g_strdup_printf
- (_("Subscribing to folder \"%s\""),
- input->info->name);
- else
- return g_strdup_printf (_("Subscribe to folder \"%s\""),
- input->info->name);
+
+ if (gerund) {
+ if (input->subscribe)
+ return g_strdup_printf
+ (_("Subscribing to folder \"%s\""),
+ input->info->name);
+ else
+ return g_strdup_printf
+ (_("Unsubscribing from folder \"%s\""),
+ input->info->name);
+ } else {
+ if (input->subscribe)
+ return g_strdup_printf (_("Subscribe to folder \"%s\""),
+ input->info->name);
+ else
+ return g_strdup_printf (_("Unsubscribe from folder \"%s\""),
+ input->info->name);
+ }
}
static void
@@ -289,11 +300,11 @@ setup_subscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex)
{
subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data;
subscribe_folder_data_t *data = (subscribe_folder_data_t *) op_data;
-
+
data->path = storage_tree_path (input->info);
data->name = g_strdup (input->info->name);
data->url = g_strdup (input->info->url);
-
+
camel_object_ref (CAMEL_OBJECT (input->store));
gtk_object_ref (GTK_OBJECT (input->sc));
}
@@ -303,9 +314,12 @@ do_subscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex)
{
subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data;
subscribe_folder_data_t *data = (subscribe_folder_data_t *) op_data;
-
+
mail_tool_camel_lock_up ();
- camel_store_subscribe_folder (input->store, data->name, ex);
+ if (input->subscribe)
+ camel_store_subscribe_folder (input->store, data->name, ex);
+ else
+ camel_store_unsubscribe_folder (input->store, data->name, ex);
mail_tool_camel_lock_down ();
}
@@ -315,22 +329,26 @@ cleanup_subscribe_folder (gpointer in_data, gpointer op_data,
{
subscribe_folder_input_t *input = (subscribe_folder_input_t *) in_data;
subscribe_folder_data_t *data = (subscribe_folder_data_t *) op_data;
-
- if (!camel_exception_is_set (ex))
- evolution_storage_new_folder (input->sc->storage,
- data->path,
- data->name, "mail",
- data->url,
- _("(No description)") /* XXX */,
- FALSE);
-
+
+ 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);
+ else
+ evolution_storage_removed_folder (input->sc->storage, data->path);
+ }
+
if (input->cb)
- input->cb (input->sc, !camel_exception_is_set(ex), input->cb_data);
-
+ input->cb (input->sc, !camel_exception_is_set (ex), input->cb_data);
+
g_free (data->path);
g_free (data->name);
g_free (data->url);
-
+
camel_object_unref (CAMEL_OBJECT (input->store));
gtk_object_unref (GTK_OBJECT (input->sc));
}
@@ -345,123 +363,24 @@ static const mail_operation_spec op_subscribe_folder = {
static void
subscribe_do_subscribe_folder (SubscribeDialog *sc, CamelStore *store, CamelFolderInfo *info,
- SubscribeFolderCallback cb, gpointer cb_data)
+ gboolean subscribe, SubscribeFolderCallback cb, gpointer cb_data)
{
subscribe_folder_input_t *input;
-
+
g_return_if_fail (CAMEL_IS_STORE (store));
g_return_if_fail (info);
-
+
input = g_new (subscribe_folder_input_t, 1);
input->sc = sc;
input->store = store;
input->info = info;
+ input->subscribe = subscribe;
input->cb = cb;
input->cb_data = cb_data;
-
+
mail_operation_queue (&op_subscribe_folder, input, TRUE);
}
-/* ** UNSUBSCRIBE FOLDER ******************************************************* */
-
-typedef struct unsubscribe_folder_input_s {
- SubscribeDialog *sc;
- CamelStore *store;
- CamelFolderInfo *info;
- SubscribeFolderCallback cb;
- gpointer cb_data;
-} unsubscribe_folder_input_t;
-
-typedef struct unsubscribe_folder_data_s {
- char *name;
- char *path;
-} unsubscribe_folder_data_t;
-
-static gchar *
-describe_unsubscribe_folder (gpointer in_data, gboolean gerund)
-{
- unsubscribe_folder_input_t *input = (unsubscribe_folder_input_t *) in_data;
-
- if (gerund)
- return g_strdup_printf
- (_("Unsubscribing to folder \"%s\""),
- input->info->name);
- else
- return g_strdup_printf (_("Unsubscribe to folder \"%s\""),
- input->info->name);
-}
-
-static void
-setup_unsubscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex)
-{
- unsubscribe_folder_input_t *input = (unsubscribe_folder_input_t *) in_data;
- unsubscribe_folder_data_t *data = (unsubscribe_folder_data_t *) op_data;
-
- data->name = g_strdup (input->info->name);
- data->path = storage_tree_path (input->info);
-
- camel_object_ref (CAMEL_OBJECT (input->store));
- gtk_object_ref (GTK_OBJECT (input->sc));
-}
-
-static void
-do_unsubscribe_folder (gpointer in_data, gpointer op_data, CamelException *ex)
-{
- unsubscribe_folder_input_t *input = (unsubscribe_folder_input_t *) in_data;
- unsubscribe_folder_data_t *data = (unsubscribe_folder_data_t *) op_data;
-
- mail_tool_camel_lock_up ();
- camel_store_unsubscribe_folder (input->store, data->name, ex);
- mail_tool_camel_lock_down ();
-}
-
-static void
-cleanup_unsubscribe_folder (gpointer in_data, gpointer op_data,
- CamelException *ex)
-{
- unsubscribe_folder_input_t *input = (unsubscribe_folder_input_t *) in_data;
- unsubscribe_folder_data_t *data = (unsubscribe_folder_data_t *) op_data;
-
- if (!camel_exception_is_set (ex))
- evolution_storage_removed_folder (input->sc->storage, data->path);
-
- if (input->cb)
- input->cb (input->sc, !camel_exception_is_set(ex), input->cb_data);
-
- g_free (data->path);
- g_free (data->name);
-
- camel_object_unref (CAMEL_OBJECT (input->store));
- gtk_object_unref (GTK_OBJECT (input->sc));
-}
-
-static const mail_operation_spec op_unsubscribe_folder = {
- describe_unsubscribe_folder,
- sizeof (unsubscribe_folder_data_t),
- setup_unsubscribe_folder,
- do_unsubscribe_folder,
- cleanup_unsubscribe_folder
-};
-
-static void
-subscribe_do_unsubscribe_folder (SubscribeDialog *sc, CamelStore *store, CamelFolderInfo *info,
- SubscribeFolderCallback cb, gpointer cb_data)
-{
- unsubscribe_folder_input_t *input;
-
- g_return_if_fail (CAMEL_IS_STORE (store));
- g_return_if_fail (info);
-
- input = g_new (unsubscribe_folder_input_t, 1);
- input->sc = sc;
- input->store = store;
- input->info = info;
- input->cb = cb;
- input->cb_data = cb_data;
-
- mail_operation_queue (&op_unsubscribe_folder, input, TRUE);
-}
-
static gboolean
@@ -485,8 +404,8 @@ subscribe_folder_info (SubscribeDialog *sc, CamelFolderInfo *info, ETreePath *no
/* folders without urls cannot be subscribed to */
if (info->url == NULL)
return;
-
- subscribe_do_subscribe_folder (sc, sc->store, info, node_changed_cb, node);
+
+ subscribe_do_subscribe_folder (sc, sc->store, info, TRUE, node_changed_cb, node);
}
static void
@@ -495,8 +414,8 @@ unsubscribe_folder_info (SubscribeDialog *sc, CamelFolderInfo *info, ETreePath *
/* folders without urls cannot be subscribed to */
if (info->url == NULL)
return;
-
- subscribe_do_unsubscribe_folder (sc, sc->store, info, node_changed_cb, node);
+
+ subscribe_do_subscribe_folder (sc, sc->store, info, FALSE, node_changed_cb, node);
}
static void