pass the raw header in instead of name and value. (efh_format_headers): if

2004-03-11  Not Zed  <NotZed@Ximian.com>

        * em-format-html.c (efh_format_header): pass the raw header in
        instead of name and value.
        (efh_format_headers): if we have specific headers to show, iterate
        over all headers and print out all matching ones, so duplicate
        headers are properly displayed.  Related to #55298.

        * em-folder-selector.c (em_folder_selector_construct): dont set
        this to be modal.  otherwise you can't click on error popups. duh.

2004-03-08  Not Zed  <NotZed@Ximian.com>

        * em-folder-selection-button.c
        (em_folder_selection_button_clicked): don't let the user select
        virtual/vtrash folders or non-selectable folders.

        * mail-component.c (impl_createControls): disable selection of
        non-select rows.

        * em-folder-selector.c (em_folder_selector_create_new): exclude
        folders with noinferiors set.

        * em-folder-tree.c (folder_tree_new): add folder tree arg, hook
        onto the selection funciton for the tree selection.
        (emft_select_func): selection override function.  allow certain
        things to be excluded.
        (em_folder_tree_set_excluded): api to set what is excluded from
        the selectability.
        (emft_tree_row_activated): call emft_select_func check to see if
        this row is excluded before emitting an activated signal.

        * em-folder-tree-model.c (em_folder_tree_model_set_folder_info):
        save folder info->flags in the tree store.

        * mail-folder-cache.c (create_folders): use tail recursion.
        (get_folders): tail recurse.

        * (*): Fixed for api changes in camel.

svn path=/trunk/; revision=25020
This commit is contained in:
Not Zed
2004-03-11 03:05:43 +00:00
committed by Michael Zucci
parent 6071a963e8
commit 88b02e9cf4
12 changed files with 156 additions and 71 deletions

View File

@ -1,3 +1,43 @@
2004-03-11 Not Zed <NotZed@Ximian.com>
* em-format-html.c (efh_format_header): pass the raw header in
instead of name and value.
(efh_format_headers): if we have specific headers to show, iterate
over all headers and print out all matching ones, so duplicate
headers are properly displayed. Related to #55298.
* em-folder-selector.c (em_folder_selector_construct): dont set
this to be modal. otherwise you can't click on error popups. duh.
2004-03-08 Not Zed <NotZed@Ximian.com>
* em-folder-selection-button.c
(em_folder_selection_button_clicked): don't let the user select
virtual/vtrash folders or non-selectable folders.
* mail-component.c (impl_createControls): disable selection of
non-select rows.
* em-folder-selector.c (em_folder_selector_create_new): exclude
folders with noinferiors set.
* em-folder-tree.c (folder_tree_new): add folder tree arg, hook
onto the selection funciton for the tree selection.
(emft_select_func): selection override function. allow certain
things to be excluded.
(em_folder_tree_set_excluded): api to set what is excluded from
the selectability.
(emft_tree_row_activated): call emft_select_func check to see if
this row is excluded before emitting an activated signal.
* em-folder-tree-model.c (em_folder_tree_model_set_folder_info):
save folder info->flags in the tree store.
* mail-folder-cache.c (create_folders): use tail recursion.
(get_folders): tail recurse.
* (*): Fixed for api changes in camel.
2004-03-10 Jeffrey Stedfast <fejj@ximian.com>
Fix for bug #55298.

View File

@ -220,7 +220,7 @@ em_folder_selection_button_clicked (GtkButton *button)
model = mail_component_peek_tree_model (mail_component_peek ());
emft = (EMFolderTree *) em_folder_tree_new_with_model (model);
em_folder_tree_set_multiselect (emft, priv->multiple_select);
em_folder_tree_set_excluded(emft, EMFT_EXCLUDE_NOSELECT|EMFT_EXCLUDE_VIRTUAL|EMFT_EXCLUDE_VTRASH);
dialog = em_folder_selector_new (emft, EM_FOLDER_SELECTOR_CAN_CREATE, priv->title, priv->caption);
if (priv->multiple_select)
em_folder_selector_set_selected_list ((EMFolderSelector *) dialog, priv->uris);

View File

@ -223,7 +223,6 @@ em_folder_selector_construct (EMFolderSelector *emfs, EMFolderTree *emft, guint3
GtkWidget *label;
gtk_window_set_default_size (GTK_WINDOW (emfs), 350, 300);
gtk_window_set_modal (GTK_WINDOW (emfs), TRUE);
gtk_window_set_title (GTK_WINDOW (emfs), title);
gtk_container_set_border_width (GTK_CONTAINER (emfs), 6);
@ -298,6 +297,7 @@ em_folder_selector_create_new (EMFolderTree *emft, guint32 flags, const char *ti
emfs = g_object_new (em_folder_selector_get_type (), NULL);
em_folder_selector_construct (emfs, emft, flags, title, text);
em_folder_tree_set_excluded(emft, EMFT_EXCLUDE_NOINFERIORS);
hbox = gtk_hbox_new (FALSE, 0);
w = gtk_label_new_with_mnemonic (_("Folder _name:"));

View File

@ -59,6 +59,7 @@ static GType col_types[] = {
G_TYPE_STRING, /* path */
G_TYPE_STRING, /* uri */
G_TYPE_UINT, /* unread count */
G_TYPE_UINT, /* flags */
G_TYPE_BOOLEAN, /* is a store node */
G_TYPE_BOOLEAN, /* has not-yet-loaded subfolders */
};
@ -433,13 +434,13 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite
path_row = gtk_tree_row_reference_copy (uri_row);
gtk_tree_path_free (path);
g_hash_table_insert (model->uri_hash, g_strdup (fi->url), uri_row);
g_hash_table_insert (model->uri_hash, g_strdup (fi->uri), uri_row);
g_hash_table_insert (si->path_hash, g_strdup (fi->path), path_row);
/* HACK: if we have the folder, and its the outbox folder, we need the total count, not unread */
/* This is duplicated in mail-folder-cache too, should perhaps be functionised */
unread = fi->unread_message_count == -1 ? 0 : fi->unread_message_count;
if (mail_note_get_folder_from_uri(fi->url, &folder) && folder) {
unread = fi->unread == -1 ? 0 : fi->unread;
if (mail_note_get_folder_from_uri(fi->uri, &folder) && folder) {
if (folder == mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_OUTBOX))
unread = camel_folder_get_message_count(folder);
camel_object_unref(folder);
@ -449,8 +450,9 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite
COL_STRING_DISPLAY_NAME, fi->name,
COL_POINTER_CAMEL_STORE, si->store,
COL_STRING_FOLDER_PATH, fi->path,
COL_STRING_URI, fi->url,
COL_STRING_URI, fi->uri,
COL_UINT_UNREAD, unread,
COL_UINT_FLAGS, fi->flags,
COL_BOOL_IS_STORE, FALSE,
COL_BOOL_LOAD_SUBDIRS, load,
-1);
@ -461,7 +463,7 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model, GtkTreeIter *ite
do {
gtk_tree_store_append ((GtkTreeStore *) model, &sub, iter);
em_folder_tree_model_set_folder_info (model, &sub, si, fi);
fi = fi->sibling;
fi = fi->next;
} while (fi);
} else if (load) {
/* create a placeholder node for our subfolders... */
@ -537,7 +539,7 @@ folder_subscribed (CamelStore *store, CamelFolderInfo *fi, EMFolderTreeModel *mo
em_folder_tree_model_set_folder_info (model, &iter, si, fi);
g_signal_emit (model, signals[FOLDER_ADDED], 0, fi->path, fi->url);
g_signal_emit (model, signals[FOLDER_ADDED], 0, fi->path, fi->uri);
done:

View File

@ -51,10 +51,10 @@ enum {
COL_STRING_DISPLAY_NAME, /* string that appears in the tree */
COL_POINTER_CAMEL_STORE, /* CamelStore object */
COL_STRING_FOLDER_PATH, /* if node is a folder, the full path of the folder */
COL_STRING_URI, /* the uri to get the store or
* folder object */
COL_STRING_URI, /* the uri to get the store or folder object */
COL_UINT_UNREAD, /* unread count */
COL_UINT_FLAGS, /* FolderInfo.flags */
COL_BOOL_IS_STORE, /* toplevel store node? */
COL_BOOL_LOAD_SUBDIRS, /* %TRUE only if the store/folder
* has subfolders which have not yet

View File

@ -71,6 +71,8 @@ struct _EMFolderTreePrivate {
char *selected_uri;
char *selected_path;
guint32 excluded;
gboolean do_multiselect;
/* when doing a multiselect, folders that we didn't find */
GList *lost_folders;
@ -303,6 +305,29 @@ render_display_name (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
g_free (display);
}
static gboolean
emft_select_func(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean selected, gpointer data)
{
EMFolderTree *emft = data;
gboolean is_store;
guint32 flags;
GtkTreeIter iter;
/* NB: This will be called with selection==NULL from tree_row_activated */
if (emft->priv->excluded == 0)
return TRUE;
if (!gtk_tree_model_get_iter(model, &iter, path))
return TRUE;
gtk_tree_model_get(model, &iter, COL_UINT_FLAGS, &flags, COL_BOOL_IS_STORE, &is_store, -1);
if (is_store)
flags |= CAMEL_FOLDER_NOSELECT;
return (flags & emft->priv->excluded) == 0;
}
static void
em_folder_tree_init (EMFolderTree *emft)
{
@ -361,7 +386,7 @@ em_folder_tree_destroy (GtkObject *obj)
}
static GtkTreeView *
folder_tree_new (EMFolderTreeModel *model)
folder_tree_new (EMFolderTree *emft, EMFolderTreeModel *model)
{
GtkTreeSelection *selection;
GtkTreeViewColumn *column;
@ -384,7 +409,7 @@ folder_tree_new (EMFolderTreeModel *model)
selection = gtk_tree_view_get_selection ((GtkTreeView *) tree);
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
gtk_tree_selection_set_select_function(selection, emft_select_func, emft, NULL);
gtk_tree_view_set_headers_visible ((GtkTreeView *) tree, FALSE);
return (GtkTreeView *) tree;
@ -403,7 +428,7 @@ em_folder_tree_construct (EMFolderTree *emft, EMFolderTreeModel *model)
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN);
priv->model = model;
priv->treeview = folder_tree_new (model);
priv->treeview = folder_tree_new (emft, model);
gtk_widget_show ((GtkWidget *) priv->treeview);
g_signal_connect (priv->treeview, "row-expanded", G_CALLBACK (emft_tree_row_expanded), emft);
@ -1280,6 +1305,11 @@ em_folder_tree_set_multiselect (EMFolderTree *tree, gboolean mode)
gtk_tree_selection_set_mode (sel, mode ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE);
}
void em_folder_tree_set_excluded(EMFolderTree *emft, guint32 flags)
{
emft->priv->excluded = flags;
}
static void
get_selected_uris_iterate (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
{
@ -1447,7 +1477,7 @@ emft_get_folder_info__got (struct _mail_msg *mm)
* want to fill our tree with... *sigh* */
if (m->top && m->fi && !strcmp (m->fi->full_name, m->top)) {
if (!(fi = m->fi->child))
fi = m->fi->sibling;
fi = m->fi->next;
} else
fi = m->fi;
@ -1458,7 +1488,7 @@ emft_get_folder_info__got (struct _mail_msg *mm)
do {
em_folder_tree_model_set_folder_info (priv->model, &iter, si, fi);
if ((fi = fi->sibling) != NULL)
if ((fi = fi->next) != NULL)
gtk_tree_store_append (model, &iter, &root);
} while (fi != NULL);
}
@ -1572,13 +1602,16 @@ emft_tree_row_activated (GtkTreeView *treeview, GtkTreePath *tree_path, GtkTreeV
GtkTreeModel *model = (GtkTreeModel *) priv->model;
GtkTreeIter iter;
char *path, *uri;
if (!emft_select_func(NULL, model, tree_path, FALSE, emft))
return;
if (!gtk_tree_model_get_iter (model, &iter, tree_path))
return;
gtk_tree_model_get (model, &iter, COL_STRING_FOLDER_PATH, &path,
COL_STRING_URI, &uri, -1);
g_free (priv->selected_uri);
priv->selected_uri = g_strdup (uri);
@ -1696,7 +1729,7 @@ emft_copy_folders__copy (struct _mail_msg *mm)
else if (m->delete)
deleting = g_list_prepend (deleting, info);
info = info->sibling;
info = info->next;
}
}
@ -2112,7 +2145,7 @@ emft_popup_delete_rec (CamelStore *store, CamelFolderInfo *fi, CamelException *e
if (camel_exception_is_set (ex))
return;
fi = fi->sibling;
fi = fi->next;
}
}

View File

@ -44,9 +44,16 @@ extern "C" {
typedef struct _EMFolderTree EMFolderTree;
typedef struct _EMFolderTreeClass EMFolderTreeClass;
/* not sure this api is the best, but its the easiest to implement and will cover what we need */
#define EMFT_EXCLUDE_NOSELECT CAMEL_FOLDER_NOSELECT
#define EMFT_EXCLUDE_NOINFERIORS CAMEL_FOLDER_NOINFERIORS
#define EMFT_EXCLUDE_VIRTUAL CAMEL_FOLDER_VIRTUAL
#define EMFT_EXCLUDE_SYSTEM CAMEL_FOLDER_SYSTEM
#define EMFT_EXCLUDE_VTRASH CAMEL_FOLDER_VTRASH
struct _EMFolderTree {
GtkVBox parent_object;
struct _EMFolderTreePrivate *priv;
};
@ -58,7 +65,6 @@ struct _EMFolderTreeClass {
void (* folder_selected) (EMFolderTree *emft, const char *path, const char *uri);
};
GType em_folder_tree_get_type (void);
GtkWidget *em_folder_tree_new (void);
@ -67,6 +73,7 @@ GtkWidget *em_folder_tree_new_with_model (EMFolderTreeModel *model);
void em_folder_tree_enable_drag_and_drop (EMFolderTree *emft);
void em_folder_tree_set_multiselect (EMFolderTree *emft, gboolean mode);
void em_folder_tree_set_excluded(EMFolderTree *emft, guint32 flags);
void em_folder_tree_set_selected_list (EMFolderTree *emft, GList *list);
GList *em_folder_tree_get_selected_uris (EMFolderTree *emft);

View File

@ -1430,16 +1430,16 @@ efh_format_address (GString *out, struct _camel_header_address *a)
}
static void
efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const char *namein, const char *txt, guint32 flags, const char *charset)
efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, struct _camel_header_raw *header, guint32 flags, const char *charset)
{
CamelMimeMessage *msg = (CamelMimeMessage *) part;
EMFormatHTML *efh = (EMFormatHTML *) emf;
char *name, *value = NULL, *p;
const char *label;
const char *label, *txt;
int addrspec = 0, i;
name = alloca(strlen(namein)+1);
strcpy(name, namein);
name = alloca(strlen(header->name)+1);
strcpy(name, header->name);
camel_strdown(name);
for (i = 0; addrspec_hdrs[i]; i++) {
@ -1453,10 +1453,7 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c
struct _camel_header_address *addrs;
GString *html;
if (!txt && !(txt = camel_medium_get_header (part, name)))
return;
if (!(addrs = camel_header_address_decode (txt, emf->charset ? emf->charset : emf->default_charset)))
if (!(addrs = camel_header_address_decode (header->value, emf->charset ? emf->charset : emf->default_charset)))
return;
/* canonicalise the header name... first letter is
@ -1495,11 +1492,8 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c
time_t msg_date;
struct tm local;
if (!txt && !(txt = camel_medium_get_header (part, name)))
return;
/* Show the local timezone equivalent in brackets if the sender is remote */
msg_date = camel_header_decode_date (txt, &msg_offset);
msg_date = camel_header_decode_date (header->value, &msg_offset);
e_localtime_with_offset (msg_date, &local, &local_tz);
/* Convert message offset to minutes (e.g. -0400 --> -240) */
@ -1519,7 +1513,7 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c
e_utf8_strftime (buf, sizeof (buf), _("<I> (%R %Z)</I>"), &local);
}
html = camel_text_to_html (txt, efh->text_html_flags, 0);
html = camel_text_to_html (header->value, efh->text_html_flags, 0);
txt = value = g_strdup_printf ("%s %s", html, buf);
g_free (html);
flags |= EM_FORMAT_HTML_HEADER_HTML;
@ -1532,8 +1526,8 @@ efh_format_header(EMFormat *emf, CamelStream *stream, CamelMedium *part, const c
flags |= EM_FORMAT_HEADER_BOLD;
} else {
txt = value = camel_header_decode_string (txt, charset);
label = namein;
txt = value = camel_header_decode_string (header->value, charset);
label = header->name;
}
efh_format_text_header (efh, stream, label, txt, flags);
@ -1548,6 +1542,7 @@ efh_format_headers(EMFormatHTML *efh, CamelStream *stream, CamelMedium *part)
EMFormatHeader *h;
const char *charset;
CamelContentType *ct;
struct _camel_header_raw *header;
ct = camel_mime_part_get_content_type((CamelMimePart *)part);
charset = camel_content_type_param (ct, "charset");
@ -1562,16 +1557,19 @@ efh_format_headers(EMFormatHTML *efh, CamelStream *stream, CamelMedium *part)
/* dump selected headers */
h = (EMFormatHeader *)emf->header_list.head;
if (h->next == NULL || emf->mode == EM_FORMAT_ALLHEADERS) {
struct _camel_header_raw *header;
header = ((CamelMimePart *)part)->headers;
while (header) {
efh_format_header(emf, stream, part, header->name, header->value, EM_FORMAT_HTML_HEADER_NOCOLUMNS, charset);
efh_format_header(emf, stream, part, header, EM_FORMAT_HTML_HEADER_NOCOLUMNS, charset);
header = header->next;
}
} else {
while (h->next) {
efh_format_header(emf, stream, part, h->name, NULL, h->flags, charset);
header = ((CamelMimePart *)part)->headers;
while (header) {
if (!g_ascii_strcasecmp(header->name, h->name))
efh_format_header(emf, stream, part, header, h->flags, charset);
header = header->next;
}
h = h->next;
}
}

View File

@ -319,7 +319,7 @@ sub_fill_level(EMSubscribe *sub, CamelFolderInfo *info, GtkTreeIter *parent, in
}
g_hash_table_insert(sub->folders, fi->full_name, node);
}
fi = fi->sibling;
fi = fi->next;
}
}

View File

@ -440,6 +440,7 @@ impl_createControls (PortableServer_Servant servant,
view_widget = em_folder_browser_new ();
tree_widget = (GtkWidget *) em_folder_tree_new_with_model (priv->model);
em_folder_tree_set_excluded((EMFolderTree *)tree_widget, EMFT_EXCLUDE_NOSELECT);
em_folder_tree_enable_drag_and_drop ((EMFolderTree *) tree_widget);
em_format_set_session ((EMFormat *) ((EMFolderView *) view_widget)->preview, session);

View File

@ -343,12 +343,12 @@ update_1folder(struct _folder_info *mfi, int new, CamelFolderInfo *info)
} else {
d(printf(" unread count\n"));
if (info)
unread = info->unread_message_count;
unread = info->unread;
else
unread = camel_folder_get_unread_message_count (folder);
}
} else if (info)
unread = info->unread_message_count;
unread = info->unread;
d(printf("folder updated: unread %d: '%s'\n", unread, mfi->full_name));
@ -380,7 +380,7 @@ setup_folder(CamelFolderInfo *fi, struct _store_info *si)
mfi = g_malloc0(sizeof(*mfi));
mfi->path = g_strdup(fi->path);
mfi->full_name = g_strdup(fi->full_name);
mfi->uri = g_strdup(fi->url);
mfi->uri = g_strdup(fi->uri);
mfi->store_info = si;
mfi->flags = fi->flags;
@ -390,8 +390,8 @@ setup_folder(CamelFolderInfo *fi, struct _store_info *si)
up = g_malloc0(sizeof(*up));
up->path = g_strdup(mfi->path);
up->name = g_strdup(fi->name);
up->uri = g_strdup(fi->url);
up->unread = (fi->unread_message_count==-1)?0:fi->unread_message_count;
up->uri = g_strdup(fi->uri);
up->unread = (fi->unread==-1)?0:fi->unread;
up->store = si->store;
camel_object_ref(up->store);
@ -408,12 +408,14 @@ create_folders(CamelFolderInfo *fi, struct _store_info *si)
{
d(printf("Setup new folder: %s\n %s\n", fi->url, fi->full_name));
setup_folder(fi, si);
while (fi) {
setup_folder(fi, si);
if (fi->child)
create_folders(fi->child, si);
if (fi->sibling)
create_folders(fi->sibling, si);
if (fi->child)
create_folders(fi->child, si);
fi = fi->next;
}
}
static void
@ -595,7 +597,7 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase,
g_free(mfi->full_name);
mfi->path = g_strdup(fi->path);
mfi->full_name = g_strdup(fi->full_name);
mfi->uri = g_strdup(fi->url);
mfi->uri = g_strdup(fi->uri);
mfi->flags = fi->flags;
g_hash_table_insert(si->folders, mfi->full_name, mfi);
@ -606,7 +608,7 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase,
mfi = g_malloc0(sizeof(*mfi));
mfi->path = g_strdup(fi->path);
mfi->full_name = g_strdup(fi->full_name);
mfi->uri = g_strdup(fi->url);
mfi->uri = g_strdup(fi->uri);
mfi->store_info = si;
mfi->flags = fi->flags;
@ -619,7 +621,7 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase,
up->path = g_strdup(mfi->path);
up->name = g_strdup(fi->name);
up->uri = g_strdup(mfi->uri);
up->unread = fi->unread_message_count==-1?0:fi->unread_message_count;
up->unread = fi->unread==-1?0:fi->unread;
up->store = si->store;
camel_object_ref(up->store);
@ -639,12 +641,14 @@ rename_folders(struct _store_info *si, const char *oldbase, const char *newbase,
static void
get_folders(CamelFolderInfo *fi, GPtrArray *folders)
{
g_ptr_array_add(folders, fi);
while (fi) {
g_ptr_array_add(folders, fi);
if (fi->child)
get_folders(fi->child, folders);
if (fi->sibling)
get_folders(fi->sibling, folders);
if (fi->child)
get_folders(fi->child, folders);
fi = fi->next;
}
}
static int

View File

@ -1053,14 +1053,14 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful
g_return_val_if_fail (info != NULL, NULL);
parent = NULL;
for (fi = info; fi; fi = fi->sibling) {
for (fi = info; fi; fi = fi->next) {
if (!strcmp (fi->name, name))
break;
parent = fi;
}
/* create our vTrash/vJunk URL */
url = camel_url_new (info->url, NULL);
url = camel_url_new (info->uri, NULL);
path = g_strdup_printf ("/%s", name);
if (url->fragment)
camel_url_set_fragment (url, path);
@ -1075,7 +1075,7 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful
vinfo = fi;
g_free (vinfo->full_name);
g_free (vinfo->name);
g_free (vinfo->url);
g_free (vinfo->uri);
} else {
/* There wasn't a Trash/Junk folder so create a new folder entry */
vinfo = g_new0 (CamelFolderInfo, 1);
@ -1083,14 +1083,14 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful
g_assert(parent != NULL);
/* link it into the right spot */
vinfo->sibling = parent->sibling;
parent->sibling = vinfo;
vinfo->next = parent->next;
parent->next = vinfo;
}
/* Fill in the new fields */
vinfo->full_name = g_strdup (full_name);
vinfo->name = g_strdup(vinfo->full_name);
vinfo->url = g_strdup_printf ("%s:%s", url_base, uri);
vinfo->uri = g_strdup_printf ("%s:%s", url_base, uri);
vinfo->path = g_strdup_printf("/%s", vinfo->name);
g_free (uri);
@ -1100,7 +1100,7 @@ add_special_info(CamelStore *store, CamelFolderInfo *info, char *name, char *ful
static void
add_unmatched_info(CamelFolderInfo *fi)
{
for (; fi; fi = fi->sibling) {
for (; fi; fi = fi->next) {
if (!strcmp(fi->full_name, CAMEL_UNMATCHED_NAME)) {
g_free(fi->name);
fi->name = g_strdup(_("Unmatched"));
@ -1122,13 +1122,13 @@ get_folderinfo_get (struct _mail_msg *mm)
m->info = camel_store_get_folder_info (m->store, NULL, flags, &mm->ex);
if (m->info) {
if (m->info->url && (m->store->flags & CAMEL_STORE_VTRASH))
if (m->info->uri && (m->store->flags & CAMEL_STORE_VTRASH))
add_special_info(m->store, m->info, CAMEL_VTRASH_NAME, _("Trash"), "vtrash");
if (m->info->url && (m->store->flags & CAMEL_STORE_VJUNK)) {
if (m->info->uri && (m->store->flags & CAMEL_STORE_VJUNK)) {
CamelFolderInfo *info;
info = add_special_info(m->store, m->info, CAMEL_VJUNK_NAME, _("Junk"), "vjunk");
info->unread_message_count = -1;
info->unread = -1;
}
if (CAMEL_IS_VEE_STORE(m->store))