[balsa/wip/gtk4: 331/351] Move some BalsaMailboxNode methods
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 331/351] Move some BalsaMailboxNode methods
- Date: Wed, 23 May 2018 21:44:48 +0000 (UTC)
commit a1151f45e86a9177f1cd9b1d4e61c3617ee3c9bb
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Fri May 4 12:00:02 2018 -0400
Move some BalsaMailboxNode methods
from balsa-app.[ch] to mailbox-node.[ch].
src/balsa-app.c | 196 +-------------------------------------------------
src/balsa-app.h | 5 --
src/balsa-mblist.c | 4 +-
src/folder-conf.c | 4 +-
src/mailbox-conf.c | 4 +-
src/mailbox-node.c | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++--
src/mailbox-node.h | 4 +
src/save-restore.c | 4 +-
8 files changed, 212 insertions(+), 213 deletions(-)
---
diff --git a/src/balsa-app.c b/src/balsa-app.c
index 3d31060..a253cc7 100644
--- a/src/balsa-app.c
+++ b/src/balsa-app.c
@@ -537,135 +537,6 @@ balsa_add_open_mailbox_urls(GPtrArray * url_array)
append_url_if_open, url_array);
}
-/*
- * Utilities for searching a GNode tree of BalsaMailboxNodes
- *
- * First a structure for the search info
- */
-struct _BalsaFind {
- gconstpointer data;
- LibBalsaServer *server;
- BalsaMailboxNode *mbnode;
-};
-typedef struct _BalsaFind BalsaFind;
-
-static gint
-find_mailbox(GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter,
- gpointer user_data)
-{
- BalsaFind *bf = user_data;
- BalsaMailboxNode *mbnode;
-
- gtk_tree_model_get(model, iter, 0, &mbnode, -1);
- if (mbnode->mailbox == bf->data) {
- bf->mbnode = mbnode;
- return TRUE;
- }
- g_object_unref(mbnode);
-
- return FALSE;
-}
-
-/* balsa_find_mailbox:
- looks for given mailbox in the GNode tree, usually but not limited to
- balsa_app.mailbox_nodes; caller must unref mbnode if non-NULL.
-*/
-BalsaMailboxNode *
-balsa_find_mailbox(LibBalsaMailbox * mailbox)
-{
- BalsaFind bf;
-
- bf.data = mailbox;
- bf.mbnode = NULL;
- if (balsa_app.mblist_tree_store)
- gtk_tree_model_foreach(GTK_TREE_MODEL(balsa_app.mblist_tree_store),
- find_mailbox, &bf);
-
- return bf.mbnode;
-}
-
-/* balsa_find_dir:
- looks for a mailbox node with dir equal to path.
- returns NULL on failure; caller must unref mbnode when non-NULL.
-*/
-static gint
-find_path(GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter,
- BalsaFind * bf)
-{
- BalsaMailboxNode *mbnode;
-
- gtk_tree_model_get(model, iter, 0, &mbnode, -1);
- if (mbnode->server == bf->server &&
- g_strcmp0(mbnode->dir, (const gchar *) bf->data) == 0) {
- bf->mbnode = mbnode;
- return TRUE;
- }
- g_object_unref(mbnode);
-
- return FALSE;
-}
-
-BalsaMailboxNode *
-balsa_find_dir(LibBalsaServer *server, const gchar * path)
-{
- BalsaFind bf;
-
- bf.data = path;
- bf.server = server;
- bf.mbnode = NULL;
- gtk_tree_model_foreach(GTK_TREE_MODEL(balsa_app.mblist_tree_store),
- (GtkTreeModelForeachFunc) find_path, &bf);
-
- return bf.mbnode;
-}
-
-static gint
-find_url(GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter,
- BalsaFind * bf)
-{
- BalsaMailboxNode *mbnode;
- LibBalsaMailbox *mailbox;
-
- gtk_tree_model_get(model, iter, 0, &mbnode, -1);
- if ((mailbox = mbnode->mailbox) != NULL &&
- strcmp(libbalsa_mailbox_get_url(mailbox), bf->data) == 0) {
- bf->mbnode = mbnode;
- return TRUE;
- }
- g_object_unref(mbnode);
-
- return FALSE;
-}
-
-/* balsa_find_url:
- * looks for a mailbox node with the given url.
- * returns NULL on failure; caller must unref mbnode when non-NULL.
- */
-
-BalsaMailboxNode *
-balsa_find_url(const gchar * url)
-{
- BalsaFind bf;
-
- bf.data = url;
- bf.mbnode = NULL;
-
- if (balsa_app.mblist_tree_store)
- g_object_ref(balsa_app.mblist_tree_store);
- /*
- * Check again, in case the main thread managed to finalize
- * balsa_app.mblist_tree_store between the check and the object-ref.
- */
- if (balsa_app.mblist_tree_store) {
- gtk_tree_model_foreach(GTK_TREE_MODEL(balsa_app.mblist_tree_store),
- (GtkTreeModelForeachFunc) find_url,
- &bf);
- g_object_unref(balsa_app.mblist_tree_store);
- }
-
- return bf.mbnode;
-}
-
/* balsa_find_mailbox_by_url:
* looks for a mailbox with the given url.
* returns NULL on failure
@@ -676,7 +547,7 @@ balsa_find_mailbox_by_url(const gchar * url)
BalsaMailboxNode *mbnode;
LibBalsaMailbox *mailbox = NULL;
- if ((mbnode = balsa_find_url(url))) {
+ if ((mbnode = balsa_mailbox_node_find_from_url(url))) {
mailbox = mbnode->mailbox;
g_object_unref(mbnode);
}
@@ -695,7 +566,7 @@ balsa_get_short_mailbox_name(const gchar *url)
{
BalsaMailboxNode *mbnode;
- if ((mbnode = balsa_find_url(url)) && mbnode->mailbox) {
+ if ((mbnode = balsa_mailbox_node_find_from_url(url)) && mbnode->mailbox) {
if (mbnode->server) {
return g_strconcat(libbalsa_server_get_host(mbnode->server), ":",
libbalsa_mailbox_get_name(mbnode->mailbox), NULL);
@@ -754,69 +625,6 @@ balsa_find_iter_by_data(GtkTreeIter * iter , gpointer data)
/* End of search utilities. */
-/* balsa_remove_children_mailbox_nodes:
- remove all children of given node leaving the node itself intact.
- */
-static void
-ba_remove_children_mailbox_nodes(GtkTreeModel * model, GtkTreeIter * parent,
- GSList ** specials)
-{
- GtkTreeIter iter;
- BalsaMailboxNode *mbnode;
- gboolean valid;
-
- if (!gtk_tree_model_iter_children(model, &iter, parent))
- return;
-
- do {
- gtk_tree_model_get(model, &iter, 0, &mbnode, -1);
- if (mbnode->parent) {
- LibBalsaMailbox *mailbox = mbnode->mailbox;
- if (mailbox == balsa_app.inbox
- || mailbox == balsa_app.outbox
- || mailbox == balsa_app.sentbox
- || mailbox == balsa_app.draftbox
- || mailbox == balsa_app.trash) {
- g_object_ref(mailbox);
- *specials = g_slist_prepend(*specials, mailbox);
- }
- ba_remove_children_mailbox_nodes(model, &iter, specials);
- valid =
- gtk_tree_store_remove(balsa_app.mblist_tree_store, &iter);
- } else {
- printf("sparing %s %s\n",
- mbnode->mailbox ? "mailbox" : "folder ",
- mbnode->mailbox ? libbalsa_mailbox_get_name(mbnode->mailbox) : mbnode->name);
- valid = gtk_tree_model_iter_next(model, &iter);
- }
- g_object_unref(mbnode);
- } while (valid);
-}
-
-void
-balsa_remove_children_mailbox_nodes(BalsaMailboxNode * mbnode)
-{
- GtkTreeModel *model = GTK_TREE_MODEL(balsa_app.mblist_tree_store);
- GtkTreeIter parent;
- GtkTreeIter *iter = NULL;
- GSList *specials = NULL, *l;
-
- if (balsa_app.debug)
- printf("Destroying children of %p %s\n",
- mbnode, mbnode && mbnode->name ? mbnode->name : "");
-
- if (mbnode && balsa_find_iter_by_data(&parent, mbnode))
- iter = &parent;
-
- ba_remove_children_mailbox_nodes(model, iter, &specials);
-
- for (l = specials; l; l = l->next)
- balsa_mblist_mailbox_node_append(NULL,
- balsa_mailbox_node_new_from_mailbox
- (l->data));
- g_slist_free(specials);
-}
-
/* balsa_find_index_by_mailbox:
returns BalsaIndex displaying passed mailbox, or NULL, if mailbox is
not displayed.
diff --git a/src/balsa-app.h b/src/balsa-app.h
index 985a905..d2ee8d1 100644
--- a/src/balsa-app.h
+++ b/src/balsa-app.h
@@ -394,9 +394,6 @@ gchar *ask_password(LibBalsaServer * server, LibBalsaMailbox * mbox);
void balsa_open_mailbox_list(gchar ** urls);
/* Search functions */
-BalsaMailboxNode *balsa_find_mailbox(LibBalsaMailbox * mailbox);
-BalsaMailboxNode *balsa_find_dir(LibBalsaServer *server, const gchar * path);
-BalsaMailboxNode *balsa_find_url(const gchar * url);
LibBalsaMailbox *balsa_find_mailbox_by_url(const gchar * url);
LibBalsaMailbox *balsa_find_sentbox_by_url(const gchar * url);
void balsa_add_open_mailbox_urls(GPtrArray * url_array);
@@ -408,8 +405,6 @@ gchar *balsa_get_short_mailbox_name(const gchar * url);
gboolean balsa_find_iter_by_data(GtkTreeIter * iter, gpointer data);
BalsaIndex* balsa_find_index_by_mailbox(LibBalsaMailbox* mailbox);
-void balsa_remove_children_mailbox_nodes(BalsaMailboxNode * mbnode);
-
GRegex *balsa_quote_regex_new(void);
#endif /* __BALSA_APP_H__ */
diff --git a/src/balsa-mblist.c b/src/balsa-mblist.c
index c540e3b..cac9ebe 100644
--- a/src/balsa-mblist.c
+++ b/src/balsa-mblist.c
@@ -1015,7 +1015,7 @@ bmbl_open_mailbox(LibBalsaMailbox * mailbox, gboolean set_current)
GtkWidget *index;
BalsaMailboxNode *mbnode;
- mbnode = balsa_find_mailbox(mailbox);
+ mbnode = balsa_mailbox_node_find_from_mailbox(mailbox);
if (!mbnode) {
g_warning(_("Failed to find mailbox"));
return;
@@ -1065,7 +1065,7 @@ balsa_mblist_close_mailbox(LibBalsaMailbox * mailbox)
{
BalsaMailboxNode *mbnode;
- mbnode = balsa_find_mailbox(mailbox);
+ mbnode = balsa_mailbox_node_find_from_mailbox(mailbox);
if (!mbnode) {
g_warning(_("Failed to find mailbox"));
return;
diff --git a/src/folder-conf.c b/src/folder-conf.c
index 43daaaf..a113edb 100644
--- a/src/folder-conf.c
+++ b/src/folder-conf.c
@@ -683,7 +683,7 @@ folder, parent);
&& !strncmp(parent, sdd->old_parent, strlen(parent))) {
/* moved it up the tree */
BalsaMailboxNode *mbnode =
- balsa_find_dir(sdd->parent->server, parent);
+ balsa_mailbox_node_find_from_dir(sdd->parent->server, parent);
if (mbnode) {
balsa_mailbox_node_rescan(mbnode);
g_object_unref(mbnode);
@@ -694,7 +694,7 @@ folder, parent);
strlen(sdd->old_parent))) {
/* moved it down the tree */
BalsaMailboxNode *mbnode =
- balsa_find_dir(sdd->parent->server, sdd->old_parent);
+ balsa_mailbox_node_find_from_dir(sdd->parent->server, sdd->old_parent);
if (mbnode) {
balsa_mailbox_node_rescan(mbnode);
g_object_unref(mbnode);
diff --git a/src/mailbox-conf.c b/src/mailbox-conf.c
index 0480224..5be65fb 100644
--- a/src/mailbox-conf.c
+++ b/src/mailbox-conf.c
@@ -1079,7 +1079,7 @@ mailbox_conf_update(MailboxConfWindow *mcw)
gchar *path;
gchar *name;
- mbnode = balsa_find_mailbox(mailbox);
+ mbnode = balsa_mailbox_node_find_from_mailbox(mailbox);
filename =
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(mcw->window));
path =
@@ -1110,7 +1110,7 @@ mailbox_conf_update(MailboxConfWindow *mcw)
balsa_mailbox_local_append(mailbox);
/* We might have moved a subtree. */
- mbnode = balsa_find_mailbox(mailbox);
+ mbnode = balsa_mailbox_node_find_from_mailbox(mailbox);
balsa_mailbox_node_rescan(mbnode);
}
diff --git a/src/mailbox-node.c b/src/mailbox-node.c
index e57a239..f6e4082 100644
--- a/src/mailbox-node.c
+++ b/src/mailbox-node.c
@@ -747,7 +747,7 @@ find_dir(const gchar *dir)
if (strcmp(dir, balsa_app.local_mail_directory) == 0)
return g_object_ref(balsa_app.root_node);
- return balsa_find_dir(NULL, dir);
+ return balsa_mailbox_node_find_from_dir(NULL, dir);
}
@@ -776,6 +776,69 @@ balsa_mailbox_local_append(LibBalsaMailbox *mbx)
}
+/* balsa_mailbox_node_remove_children:
+ remove all children of given node leaving the node itself intact.
+ */
+static void
+remove_children_mailbox_nodes(GtkTreeModel * model, GtkTreeIter * parent,
+ GSList ** specials)
+{
+ GtkTreeIter iter;
+ BalsaMailboxNode *mbnode;
+ gboolean valid;
+
+ if (!gtk_tree_model_iter_children(model, &iter, parent))
+ return;
+
+ do {
+ gtk_tree_model_get(model, &iter, 0, &mbnode, -1);
+ if (mbnode->parent) {
+ LibBalsaMailbox *mailbox = mbnode->mailbox;
+ if (mailbox == balsa_app.inbox
+ || mailbox == balsa_app.outbox
+ || mailbox == balsa_app.sentbox
+ || mailbox == balsa_app.draftbox
+ || mailbox == balsa_app.trash) {
+ g_object_ref(mailbox);
+ *specials = g_slist_prepend(*specials, mailbox);
+ }
+ remove_children_mailbox_nodes(model, &iter, specials);
+ valid =
+ gtk_tree_store_remove(balsa_app.mblist_tree_store, &iter);
+ } else {
+ printf("sparing %s %s\n",
+ mbnode->mailbox ? "mailbox" : "folder ",
+ mbnode->mailbox ? libbalsa_mailbox_get_name(mbnode->mailbox) : mbnode->name);
+ valid = gtk_tree_model_iter_next(model, &iter);
+ }
+ g_object_unref(mbnode);
+ } while (valid);
+}
+
+static void
+balsa_mailbox_node_remove_children(BalsaMailboxNode * mbnode)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL(balsa_app.mblist_tree_store);
+ GtkTreeIter parent;
+ GtkTreeIter *iter = NULL;
+ GSList *specials = NULL, *l;
+
+ if (balsa_app.debug)
+ printf("Destroying children of %p %s\n",
+ mbnode, mbnode && mbnode->name ? mbnode->name : "");
+
+ if (mbnode && balsa_find_iter_by_data(&parent, mbnode))
+ iter = &parent;
+
+ remove_children_mailbox_nodes(model, iter, &specials);
+
+ for (l = specials; l; l = l->next)
+ balsa_mblist_mailbox_node_append(NULL,
+ balsa_mailbox_node_new_from_mailbox
+ (l->data));
+ g_slist_free(specials);
+}
+
/* balsa_mailbox_node_rescan:
rescans given folders. It can be called on configuration update or just
to discover mailboxes that did not exist when balsa was initially
@@ -793,9 +856,9 @@ balsa_mailbox_node_rescan(BalsaMailboxNode *mn)
if (mn) {
balsa_mailbox_node_clear_children_cache(mn);
- balsa_remove_children_mailbox_nodes(mn);
+ balsa_mailbox_node_remove_children(mn);
} else {
- balsa_remove_children_mailbox_nodes(mn);
+ balsa_mailbox_node_remove_children(mn);
mn = balsa_app.root_node;
}
mn->scanned = FALSE;
@@ -1227,7 +1290,7 @@ remove_mailbox_from_nodes(LibBalsaMailbox *mailbox)
{
BalsaMailboxNode *mbnode;
- mbnode = balsa_find_mailbox(mailbox);
+ mbnode = balsa_mailbox_node_find_from_mailbox(mailbox);
if (mbnode)
balsa_mblist_mailbox_node_remove(mbnode);
else
@@ -1391,7 +1454,7 @@ imap_scan_create_mbnode(BalsaMailboxNode *root,
gchar *url = libbalsa_imap_url(root->server, isi->fn);
LibBalsaMailbox *mailbox = NULL;
- mbnode = balsa_find_url(url);
+ mbnode = balsa_mailbox_node_find_from_url(url);
if (mbnode) {
/* A mailbox with this url is already in the tree... */
LibBalsaMailboxView *view;
@@ -1416,7 +1479,7 @@ imap_scan_create_mbnode(BalsaMailboxNode *root,
g_free(url);
parent_name = get_parent_folder_name(isi->fn, delim);
- parent = balsa_find_dir(root->server, parent_name);
+ parent = balsa_mailbox_node_find_from_dir(root->server, parent_name);
if (parent == NULL) {
parent = root;
g_object_ref(parent);
@@ -1563,3 +1626,132 @@ mark_imap_path(const gchar *fn,
if (!list && balsa_app.debug)
printf(" not found.\n");
}
+
+/*
+ * Utilities for searching a GNode tree of BalsaMailboxNodes
+ *
+ * First a structure for the search info
+ */
+struct _BalsaFind {
+ gconstpointer data;
+ LibBalsaServer *server;
+ BalsaMailboxNode *mbnode;
+};
+typedef struct _BalsaFind BalsaFind;
+
+static gint
+find_mailbox(GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter,
+ gpointer user_data)
+{
+ BalsaFind *bf = user_data;
+ BalsaMailboxNode *mbnode;
+
+ gtk_tree_model_get(model, iter, 0, &mbnode, -1);
+ if (mbnode->mailbox == bf->data) {
+ bf->mbnode = mbnode;
+ return TRUE;
+ }
+ g_object_unref(mbnode);
+
+ return FALSE;
+}
+
+/* balsa_mailbox_node_find_from_mailbox:
+ looks for given mailbox in the GNode tree, usually but not limited to
+ balsa_app.mailbox_nodes; caller must unref mbnode if non-NULL.
+*/
+BalsaMailboxNode *
+balsa_mailbox_node_find_from_mailbox(LibBalsaMailbox * mailbox)
+{
+ BalsaFind bf;
+
+ bf.data = mailbox;
+ bf.mbnode = NULL;
+ if (balsa_app.mblist_tree_store)
+ gtk_tree_model_foreach(GTK_TREE_MODEL(balsa_app.mblist_tree_store),
+ find_mailbox, &bf);
+
+ return bf.mbnode;
+}
+
+/* balsa_find_dir:
+ looks for a mailbox node with dir equal to path.
+ returns NULL on failure; caller must unref mbnode when non-NULL.
+*/
+static gint
+find_path(GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter,
+ BalsaFind * bf)
+{
+ BalsaMailboxNode *mbnode;
+
+ gtk_tree_model_get(model, iter, 0, &mbnode, -1);
+ if (mbnode->server == bf->server &&
+ g_strcmp0(mbnode->dir, (const gchar *) bf->data) == 0) {
+ bf->mbnode = mbnode;
+ return TRUE;
+ }
+ g_object_unref(mbnode);
+
+ return FALSE;
+}
+
+BalsaMailboxNode *
+balsa_mailbox_node_find_from_dir(LibBalsaServer *server, const gchar * path)
+{
+ BalsaFind bf;
+
+ bf.data = path;
+ bf.server = server;
+ bf.mbnode = NULL;
+ gtk_tree_model_foreach(GTK_TREE_MODEL(balsa_app.mblist_tree_store),
+ (GtkTreeModelForeachFunc) find_path, &bf);
+
+ return bf.mbnode;
+}
+
+static gint
+find_url(GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter,
+ BalsaFind * bf)
+{
+ BalsaMailboxNode *mbnode;
+ LibBalsaMailbox *mailbox;
+
+ gtk_tree_model_get(model, iter, 0, &mbnode, -1);
+ if ((mailbox = mbnode->mailbox) != NULL &&
+ strcmp(libbalsa_mailbox_get_url(mailbox), bf->data) == 0) {
+ bf->mbnode = mbnode;
+ return TRUE;
+ }
+ g_object_unref(mbnode);
+
+ return FALSE;
+}
+
+/* balsa_find_url:
+ * looks for a mailbox node with the given url.
+ * returns NULL on failure; caller must unref mbnode when non-NULL.
+ */
+
+BalsaMailboxNode *
+balsa_mailbox_node_find_from_url(const gchar * url)
+{
+ BalsaFind bf;
+
+ bf.data = url;
+ bf.mbnode = NULL;
+
+ if (balsa_app.mblist_tree_store)
+ g_object_ref(balsa_app.mblist_tree_store);
+ /*
+ * Check again, in case the main thread managed to finalize
+ * balsa_app.mblist_tree_store between the check and the object-ref.
+ */
+ if (balsa_app.mblist_tree_store) {
+ gtk_tree_model_foreach(GTK_TREE_MODEL(balsa_app.mblist_tree_store),
+ (GtkTreeModelForeachFunc) find_url,
+ &bf);
+ g_object_unref(balsa_app.mblist_tree_store);
+ }
+
+ return bf.mbnode;
+}
diff --git a/src/mailbox-node.h b/src/mailbox-node.h
index a961f64..e97afea 100644
--- a/src/mailbox-node.h
+++ b/src/mailbox-node.h
@@ -101,4 +101,8 @@ void balsa_mailbox_node_clear_children_cache(BalsaMailboxNode *mbnode);
/* applicable to any mailbox node */
void balsa_mailbox_node_scan_children(BalsaMailboxNode *mbnode);
+BalsaMailboxNode *balsa_mailbox_node_find_from_mailbox(LibBalsaMailbox * mailbox);
+BalsaMailboxNode *balsa_mailbox_node_find_from_dir(LibBalsaServer *server, const gchar * path);
+BalsaMailboxNode *balsa_mailbox_node_find_from_url(const gchar * url);
+
#endif
diff --git a/src/save-restore.c b/src/save-restore.c
index d98340f..f1a9d0a 100644
--- a/src/save-restore.c
+++ b/src/save-restore.c
@@ -213,7 +213,7 @@ config_mailbox_set_as_special(LibBalsaMailbox * mailbox, specialType which)
g_object_weak_unref(G_OBJECT(old_mailbox),
(GWeakNotify) sr_special_notify, special);
- mbnode = balsa_find_mailbox(old_mailbox);
+ mbnode = balsa_mailbox_node_find_from_mailbox(old_mailbox);
balsa_mblist_mailbox_node_redraw(mbnode);
g_object_unref(mbnode);
}
@@ -225,7 +225,7 @@ config_mailbox_set_as_special(LibBalsaMailbox * mailbox, specialType which)
g_object_weak_ref(G_OBJECT(mailbox), (GWeakNotify) sr_special_notify,
special);
- mbnode = balsa_find_mailbox(mailbox);
+ mbnode = balsa_mailbox_node_find_from_mailbox(mailbox);
balsa_mblist_mailbox_node_redraw(mbnode);
g_object_unref(mbnode);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]