2000-02-09 bertrand <Bertrand.Guiheneuf@aful.org> * tests/ui-tests/message-browser.c (handle_tree_item): show the containers and the containees (get_message_tree_ctrl): call handle_tree_item on the message itself svn path=/trunk/; revision=1714
175 lines
4.5 KiB
C
175 lines
4.5 KiB
C
/*--------------------------------*-C-*---------------------------------*
|
|
*
|
|
* Copyright 2000, Matt Loper <matt@helixcode.com>.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
|
|
*
|
|
*----------------------------------------------------------------------*/
|
|
|
|
#include <gnome.h>
|
|
#include <camel/camel.h>
|
|
#include <camel/camel-mime-message.h>
|
|
#include <camel/camel-stream.h>
|
|
#include <camel/camel-stream-fs.h>
|
|
#include <camel/gmime-utils.h>
|
|
|
|
static void
|
|
handle_tree_item (CamelDataWrapper* object, GtkWidget* tree_ctrl)
|
|
{
|
|
GtkWidget* tree_item;
|
|
gchar* label = gmime_content_field_get_mime_type (object->mime_type);
|
|
|
|
CamelDataWrapper* containee;
|
|
GtkWidget* containee_tree_item;
|
|
gchar* containee_label;
|
|
|
|
GtkWidget* subtree = NULL;
|
|
|
|
|
|
tree_item = gtk_tree_item_new_with_label (label);
|
|
gtk_tree_append (GTK_TREE (tree_ctrl), tree_item);
|
|
|
|
gtk_widget_show(tree_item);
|
|
|
|
containee =
|
|
camel_medium_get_content_object (CAMEL_MEDIUM (object));
|
|
|
|
if (containee) {
|
|
containee_label = camel_data_wrapper_get_mime_type (containee);
|
|
|
|
subtree = gtk_tree_new();
|
|
containee_tree_item = gtk_tree_item_new_with_label (containee_label);
|
|
gtk_tree_append (GTK_TREE (subtree), containee_tree_item);
|
|
|
|
gtk_tree_item_set_subtree (GTK_TREE_ITEM(tree_item),
|
|
GTK_WIDGET (subtree));
|
|
gtk_widget_show(containee_tree_item);
|
|
|
|
if (CAMEL_IS_MULTIPART (containee))
|
|
{
|
|
CamelMultipart* multipart = CAMEL_MULTIPART (containee);
|
|
int max_multiparts = camel_multipart_get_number (multipart);
|
|
int i;
|
|
|
|
g_print ("found a multipart w/ %d parts\n", max_multiparts);
|
|
|
|
if (max_multiparts > 0) {
|
|
subtree = gtk_tree_new();
|
|
gtk_tree_item_set_subtree (GTK_TREE_ITEM(containee_tree_item),
|
|
GTK_WIDGET (subtree));
|
|
}
|
|
|
|
for (i = 0; i < max_multiparts; i++) {
|
|
CamelMimeBodyPart* body_part =
|
|
camel_multipart_get_part (multipart, i);
|
|
|
|
g_print ("handling part %d\n", i);
|
|
handle_tree_item (CAMEL_DATA_WRAPPER (body_part),
|
|
GTK_WIDGET (subtree));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
static GtkWidget*
|
|
get_message_tree_ctrl (CamelMimeMessage* message)
|
|
{
|
|
GtkWidget* tree_ctrl = gtk_tree_new ();
|
|
CamelDataWrapper* message_contents =
|
|
camel_medium_get_content_object (CAMEL_MEDIUM (message));
|
|
|
|
/*
|
|
* Set up the scroll window
|
|
*/
|
|
GtkWidget* scroll_wnd = gtk_scrolled_window_new (NULL,NULL);
|
|
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scroll_wnd),
|
|
tree_ctrl);
|
|
gtk_widget_set_usize (scroll_wnd, 150, 200);
|
|
|
|
/*
|
|
* Recursively insert tree items in the tree
|
|
*/
|
|
handle_tree_item (CAMEL_DATA_WRAPPER (message), tree_ctrl);
|
|
|
|
return scroll_wnd;
|
|
}
|
|
|
|
static CamelMimeMessage*
|
|
filename_to_camel_msg (gchar* filename)
|
|
{
|
|
CamelMimeMessage* message;
|
|
CamelStream* input_stream;
|
|
|
|
camel_init();
|
|
|
|
message = camel_mime_message_new_with_session (
|
|
(CamelSession *)NULL);
|
|
input_stream = camel_stream_fs_new_with_name (
|
|
filename, CAMEL_STREAM_FS_READ);
|
|
camel_data_wrapper_construct_from_stream (
|
|
CAMEL_DATA_WRAPPER (message), input_stream);
|
|
|
|
camel_stream_close (input_stream);
|
|
|
|
return message;
|
|
}
|
|
|
|
|
|
static void
|
|
print_usage_and_quit()
|
|
{
|
|
g_print ("Usage: message-browser [FILENAME]\n");
|
|
g_print ("Where FILENAME is the filename of a mime message ");
|
|
g_print ("in \"message/rfc822\" format.\n");
|
|
exit (0);
|
|
}
|
|
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
GtkWidget* app;
|
|
CamelMimeMessage* message;
|
|
|
|
if (argc != 2)
|
|
print_usage_and_quit();
|
|
|
|
gnome_init ("MessageBrowser", "1.0", argc, argv);
|
|
|
|
app = gnome_app_new ("Message Browser Test", NULL);
|
|
|
|
message = filename_to_camel_msg (argv[1]);
|
|
|
|
#if 0
|
|
if (!message) {
|
|
g_print ("Couldn't open message \"%s\", bailing...\n",
|
|
argv[1]);
|
|
exit (0);
|
|
}
|
|
#endif
|
|
gnome_app_set_contents (GNOME_APP (app),
|
|
get_message_tree_ctrl (message));
|
|
|
|
gtk_widget_show_all (app);
|
|
gtk_signal_connect (GTK_OBJECT (app), "destroy",
|
|
GTK_SIGNAL_FUNC(gtk_main_quit),
|
|
&app);
|
|
gtk_main();
|
|
|
|
return 1;
|
|
}
|