diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | camel/camel-folder.c | 15 | ||||
-rw-r--r-- | camel/camel-folder.h | 5 | ||||
-rw-r--r-- | camel/providers/MH/camel-mh-folder.c | 66 | ||||
-rw-r--r-- | configure.in | 20 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/ui-tests/Makefile.am | 16 | ||||
-rw-r--r-- | tests/ui-tests/store_listing.c | 54 | ||||
-rw-r--r-- | tests/ui-tests/store_listing.glade | 289 |
9 files changed, 469 insertions, 4 deletions
@@ -1,3 +1,8 @@ +1999-08-10 root <guiheneu@jean.joudboeuf.fr> + + * camel/camel-folder.c (camel_folder_append_message): + new method. + 1999-08-09 bertrand <Bertrand.Guiheneuf@aful.org> * devel-docs/misc/ref_and_id_proposition.txt: @@ -90,7 +95,7 @@ * camel/providers/MH/camel-mh-store.c: parent class is CamelStorClass not GtkObjectClass -1999-08-05 +1999-08-05 bertrand <Bertrand.Guiheneuf@aful.org> * tests/test4.c: test mh provider. diff --git a/camel/camel-folder.c b/camel/camel-folder.c index 5fa22a5b72..2d0a29faab 100644 --- a/camel/camel-folder.c +++ b/camel/camel-folder.c @@ -51,6 +51,8 @@ static GList *_list_subfolders (CamelFolder *folder); static GList *_expunge (CamelFolder *folder); static CamelMimeMessage *_get_message (CamelFolder *folder, gint number); static gint _get_message_count (CamelFolder *folder); +static gint _append_message (CamelFolder *folder, CamelMimeMessage *message); + static void camel_folder_class_init (CamelFolderClass *camel_folder_class) @@ -78,6 +80,7 @@ camel_folder_class_init (CamelFolderClass *camel_folder_class) camel_folder_class->expunge = _expunge; camel_folder_class->get_message = _get_message; camel_folder_class->get_message_count = _get_message_count; + camel_folder_class->append_message = _append_message; /* virtual method overload */ } @@ -784,3 +787,15 @@ camel_folder_get_message_count (CamelFolder *folder) return CF_CLASS (folder)->get_message_count (folder); } + +static gint +_append_message (CamelFolder *folder, CamelMimeMessage *message) +{ + return -1; +} + + +gint camel_folder_append_message (CamelFolder *folder, CamelMimeMessage *message) +{ + return CF_CLASS (folder)->append_message (folder, message); +} diff --git a/camel/camel-folder.h b/camel/camel-folder.h index b678631eea..e980e39e15 100644 --- a/camel/camel-folder.h +++ b/camel/camel-folder.h @@ -100,7 +100,7 @@ typedef struct { GList * (*expunge) (CamelFolder *folder); CamelMimeMessage * (*get_message) (CamelFolder *folder, gint number); gint (*get_message_count) (CamelFolder *folder); - + gint (*append_message) (CamelFolder *folder, CamelMimeMessage *message); } CamelFolderClass; @@ -125,7 +125,8 @@ const gchar *camel_folder_get_name (CamelFolder *folder); const gchar *camel_folder_get_full_name (CamelFolder *folder); CamelMimeMessage *camel_folder_get_message (CamelFolder *folder, gint number); gboolean camel_folder_exists (CamelFolder *folder); -gint camel_get_message_count (CamelFolder *folder); +gint camel_folder_get_message_count (CamelFolder *folder); +gint camel_folder_append_message (CamelFolder *folder, CamelMimeMessage *message); diff --git a/camel/providers/MH/camel-mh-folder.c b/camel/providers/MH/camel-mh-folder.c index 2e19349e67..a1c78fd309 100644 --- a/camel/providers/MH/camel-mh-folder.c +++ b/camel/providers/MH/camel-mh-folder.c @@ -51,6 +51,8 @@ static gboolean _delete_messages (CamelFolder *folder); static GList *_list_subfolders (CamelFolder *folder); static CamelMimeMessage *_get_message (CamelFolder *folder, gint number); static gint _get_message_count (CamelFolder *folder); +static gint _append_message (CamelFolder *folder, CamelMimeMessage *message); + static void camel_mh_folder_class_init (CamelMhFolderClass *camel_mh_folder_class) @@ -69,6 +71,7 @@ camel_mh_folder_class_init (CamelMhFolderClass *camel_mh_folder_class) camel_folder_class->list_subfolders = _list_subfolders; camel_folder_class->get_message = _get_message; camel_folder_class->get_message_count = _get_message_count; + camel_folder_class->append_message = _append_message; } @@ -480,3 +483,66 @@ _get_message_count (CamelFolder *folder) closedir (dir_handle); return message_count; } + + + + +static gint +_append_message (CamelFolder *folder, CamelMimeMessage *message) +{ + CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder); + const gchar *directory_path; + struct dirent *dir_entry; + DIR *dir_handle; + guint last_max_message_number = 0; + guint current_message_number; + guint new_message_number; + gchar *new_message_filename; + CamelStream *output_stream; + gboolean error; + + CAMEL_LOG_FULL_DEBUG ("Entering CamelMhFolder::append_message\n"); + + g_assert(folder); + + directory_path = mh_folder->directory_path; + if (!directory_path) return -1; + + if (!camel_folder_exists (folder)) return 0; + + dir_handle = opendir (directory_path); + + /* read first entry in the directory */ + dir_entry = readdir (dir_handle); + while (dir_entry != NULL) { + /* tests if the entry correspond to a message file */ + if (_is_a_message_file (dir_entry->d_name, directory_path)) { + /* see if the message number is the biggest found */ + current_message_number = atoi (dir_entry->d_name); + if (current_message_number > last_max_message_number) + last_max_message_number = current_message_number; + } + /* read next entry */ + dir_entry = readdir (dir_handle); + } + closedir (dir_handle); + + new_message_number = last_max_message_number + 1; + new_message_filename = g_strdup_printf ("%s/%d", directory_path, new_message_number); + CAMEL_LOG_FULL_DEBUG ("CamelMhFolder::append_message new message path is %s\n", new_message_filename); + + output_stream = camel_stream_fs_new_with_name (new_message_filename, CAMEL_STREAM_FS_WRITE); + if (output_stream != NULL) { + camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream); + camel_stream_close (output_stream); + } else { + CAMEL_LOG_WARNING ("CamelMhFolder::append_message could not open %s for writing\n", new_message_filename); + CAMEL_LOG_FULL_DEBUG (" Full error text is : %s\n", strerror(errno)); + error = TRUE; + } + + g_free (new_message_filename); + CAMEL_LOG_FULL_DEBUG ("Leaving CamelMhFolder::append_message\n"); + if (error) return -1; + else return new_message_number; +} diff --git a/configure.in b/configure.in index 975e83f867..93f6553fac 100644 --- a/configure.in +++ b/configure.in @@ -58,6 +58,25 @@ dnl have_bonobo=false dnl ]) dnl AM_CONDITIONAL(BONOBO, $have_bonobo) + + + +dnl ****************************** +dnl LibGlade checking +dnl ****************************** +AC_MSG_CHECKING(For Glade libraries) +if gnome-config --libs libglade > /dev/null 2>&1; then + AC_MSG_RESULT(found) +else + AC_MSG_ERROR(Did not find libGlade installed) +fi + +EXTRA_GNOME_LIBS=`gnome-config --libs gnomeui libglade ` +EXTRA_GNOME_CFLAGS=`gnome-config --cflags gnomeui libglade ` +AC_SUBST(EXTRA_GNOME_LIBS) +AC_SUBST(EXTRA_GNOME_CFLAGS) + + AC_ARG_WITH(camel-hard-log-level, [ --with-camel-hard-log-level=level value of log level in camel (0-10)], camel_hard_log_level="$withval", camel_hard_log_level="0") AC_DEFINE_UNQUOTED(CAMEL_HARD_LOG_LEVEL, $camel_hard_log_level) @@ -72,4 +91,5 @@ camel/providers/MH/Makefile devel-docs/Makefile devel-docs/camel/Makefile tests/Makefile +tests/ui-tests/Makefile ]) diff --git a/tests/Makefile.am b/tests/Makefile.am index 3e8f4de850..55ef5048dd 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -2,7 +2,6 @@ INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/camel \ -I$(includedir) -I$(top_srcdir)/camel/providers/MH - LDADD = \ $(top_builddir)/camel/libcamel.la \ $(GNOME_LIBDIR) \ diff --git a/tests/ui-tests/Makefile.am b/tests/ui-tests/Makefile.am new file mode 100644 index 0000000000..19bbb6c8d4 --- /dev/null +++ b/tests/ui-tests/Makefile.am @@ -0,0 +1,16 @@ +# process this file with automake to create Makefile.in + +INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/camel \ + -I$(includedir) -I$(top_srcdir)/camel/providers/MH \ + $(EXTRA_GNOME_CFLAGS) + +LDADD = \ + $(top_builddir)/camel/libcamel.la \ + $(INTLLIBS) $(EXTRA_GNOME_LIBS) + + + + + +noinst_PROGRAMS = \ + store_listing
\ No newline at end of file diff --git a/tests/ui-tests/store_listing.c b/tests/ui-tests/store_listing.c new file mode 100644 index 0000000000..1eee741286 --- /dev/null +++ b/tests/ui-tests/store_listing.c @@ -0,0 +1,54 @@ +/* Bertrand.Guiheneuf@aful.org */ + + + +/* + gcc -o store_listing `gnome-config --cflags gnomeui libglade` \ + store_listing.c `gnome-config --libs gnomeui libglade` +*/ +/******************************************************************************/ + + +#include <gnome.h> +#include <glade/glade.h> + + +static GladeXML *xml; + + +void +on_exit1_activate (GtkWidget *widget, void *data) +{ + gtk_main_quit (); +} + + +void +on_about1_activate (GtkWidget *widget, void *data) +{ + GtkWidget *about_widget; + + about_widget = glade_xml_get_widget (xml, "about_widget"); + gtk_widget_show (about_widget); +} + + + + +int +main(int argc, char *argv[]) +{ + + gnome_init ("store_listing", "1.0", argc, argv); + + glade_gnome_init(); + + xml = glade_xml_new ("store_listing.glade", NULL); + if (xml) glade_xml_signal_autoconnect (xml); + + + gtk_main (); + + return 0; +} + diff --git a/tests/ui-tests/store_listing.glade b/tests/ui-tests/store_listing.glade new file mode 100644 index 0000000000..32516494aa --- /dev/null +++ b/tests/ui-tests/store_listing.glade @@ -0,0 +1,289 @@ +<?xml version="1.0"?> +<GTK-Interface> + +<project> + <name>store_listing</name> + <program_name>store_listing</program_name> + <directory></directory> + <source_directory>src</source_directory> + <pixmaps_directory>pixmaps</pixmaps_directory> + <language>C</language> + <gnome_support>True</gnome_support> + <gettext_support>True</gettext_support> + <use_widget_names>False</use_widget_names> + <output_main_file>True</output_main_file> + <output_support_files>True</output_support_files> + <output_build_files>True</output_build_files> + <backup_source_files>True</backup_source_files> + <main_source_file>interface.c</main_source_file> + <main_header_file>interface.h</main_header_file> + <handler_source_file>callbacks.c</handler_source_file> + <handler_header_file>callbacks.h</handler_header_file> + <support_source_file>support.c</support_source_file> + <support_header_file>support.h</support_header_file> + <translatable_strings_file></translatable_strings_file> +</project> + +<widget> + <class>GnomeApp</class> + <name>app1</name> + <width>600</width> + <height>400</height> + <title>store_listing</title> + <type>GTK_WINDOW_TOPLEVEL</type> + <position>GTK_WIN_POS_NONE</position> + <modal>False</modal> + <allow_shrink>False</allow_shrink> + <allow_grow>True</allow_grow> + <auto_shrink>False</auto_shrink> + <enable_layout_config>True</enable_layout_config> + + <widget> + <class>GnomeDock</class> + <child_name>GnomeApp:dock</child_name> + <name>dock1</name> + <allow_floating>True</allow_floating> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + + <widget> + <class>GnomeDockItem</class> + <name>dockitem1</name> + <border_width>2</border_width> + <placement>GNOME_DOCK_TOP</placement> + <band>0</band> + <position>0</position> + <offset>0</offset> + <locked>False</locked> + <exclusive>True</exclusive> + <never_floating>False</never_floating> + <never_vertical>True</never_vertical> + <never_horizontal>False</never_horizontal> + <shadow_type>GTK_SHADOW_OUT</shadow_type> + + <widget> + <class>GtkMenuBar</class> + <name>menubar1</name> + <shadow_type>GTK_SHADOW_NONE</shadow_type> + + <widget> + <class>GtkMenuItem</class> + <name>file1</name> + <stock_item>GNOMEUIINFO_MENU_FILE_TREE</stock_item> + + <widget> + <class>GtkMenu</class> + <name>file1_menu</name> + + <widget> + <class>GtkPixmapMenuItem</class> + <name>new_store</name> + <signal> + <name>activate</name> + <handler>on_new_store_activate</handler> + <last_modification_time>Tue, 10 Aug 1999 10:29:12 GMT</last_modification_time> + </signal> + <stock_item>GNOMEUIINFO_MENU_NEW_ITEM</stock_item> + <label>_New store</label> + </widget> + + <widget> + <class>GtkMenuItem</class> + <name>separator1</name> + <right_justify>False</right_justify> + </widget> + + <widget> + <class>GtkPixmapMenuItem</class> + <name>exit1</name> + <signal> + <name>activate</name> + <handler>on_exit1_activate</handler> + <last_modification_time>Tue, 10 Aug 1999 10:25:52 GMT</last_modification_time> + </signal> + <stock_item>GNOMEUIINFO_MENU_EXIT_ITEM</stock_item> + </widget> + </widget> + </widget> + + <widget> + <class>GtkMenuItem</class> + <name>help1</name> + <stock_item>GNOMEUIINFO_MENU_HELP_TREE</stock_item> + + <widget> + <class>GtkMenu</class> + <name>help1_menu</name> + + <widget> + <class>GtkPixmapMenuItem</class> + <name>about1</name> + <signal> + <name>activate</name> + <handler>on_about1_activate</handler> + <last_modification_time>Tue, 10 Aug 1999 10:25:52 GMT</last_modification_time> + </signal> + <stock_item>GNOMEUIINFO_MENU_ABOUT_ITEM</stock_item> + </widget> + </widget> + </widget> + </widget> + </widget> + + <widget> + <class>GnomeDockItem</class> + <name>dockitem2</name> + <border_width>1</border_width> + <placement>GNOME_DOCK_TOP</placement> + <band>1</band> + <position>0</position> + <offset>0</offset> + <locked>False</locked> + <exclusive>True</exclusive> + <never_floating>False</never_floating> + <never_vertical>False</never_vertical> + <never_horizontal>False</never_horizontal> + <shadow_type>GTK_SHADOW_OUT</shadow_type> + + <widget> + <class>GtkToolbar</class> + <name>toolbar1</name> + <border_width>1</border_width> + <orientation>GTK_ORIENTATION_HORIZONTAL</orientation> + <type>GTK_TOOLBAR_BOTH</type> + <space_size>16</space_size> + <space_style>GTK_TOOLBAR_SPACE_LINE</space_style> + <relief>GTK_RELIEF_NONE</relief> + <tooltips>True</tooltips> + + <widget> + <class>GtkButton</class> + <child_name>Toolbar:button</child_name> + <name>new_store_button</name> + <label>new store</label> + <stock_pixmap>GNOME_STOCK_PIXMAP_NEW</stock_pixmap> + </widget> + </widget> + </widget> + + <widget> + <class>GtkHPaned</class> + <child_name>GnomeDock:contents</child_name> + <name>hpaned1</name> + <handle_size>10</handle_size> + <gutter_size>6</gutter_size> + <position>0</position> + + <widget> + <class>GtkCTree</class> + <name>ctree1</name> + <can_focus>True</can_focus> + <columns>1</columns> + <column_widths>80</column_widths> + <selection_mode>GTK_SELECTION_SINGLE</selection_mode> + <show_titles>True</show_titles> + <shadow_type>GTK_SHADOW_IN</shadow_type> + <child> + <shrink>True</shrink> + <resize>False</resize> + </child> + + <widget> + <class>GtkLabel</class> + <child_name>CTree:title</child_name> + <name>store_and_inbox_name</name> + <label>name</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + </widget> + + <widget> + <class>GtkCList</class> + <name>clist1</name> + <can_focus>True</can_focus> + <columns>3</columns> + <column_widths>80,80,80</column_widths> + <selection_mode>GTK_SELECTION_SINGLE</selection_mode> + <show_titles>True</show_titles> + <shadow_type>GTK_SHADOW_IN</shadow_type> + <child> + <shrink>True</shrink> + <resize>True</resize> + </child> + + <widget> + <class>GtkLabel</class> + <child_name>CList:title</child_name> + <name>message_date_label</name> + <label>Date</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + <widget> + <class>GtkLabel</class> + <child_name>CList:title</child_name> + <name>message_sender_label</name> + <label>Sender</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + + <widget> + <class>GtkLabel</class> + <child_name>CList:title</child_name> + <name>message_subject_label</name> + <label>Subject</label> + <justify>GTK_JUSTIFY_CENTER</justify> + <wrap>False</wrap> + <xalign>0.5</xalign> + <yalign>0.5</yalign> + <xpad>0</xpad> + <ypad>0</ypad> + </widget> + </widget> + </widget> + </widget> + + <widget> + <class>GnomeAppBar</class> + <child_name>GnomeApp:appbar</child_name> + <name>appbar1</name> + <has_progress>True</has_progress> + <has_status>True</has_status> + <child> + <padding>0</padding> + <expand>True</expand> + <fill>True</fill> + </child> + </widget> +</widget> + +<widget> + <class>GnomeAbout</class> + <name>about_widget</name> + <visible>False</visible> + <modal>True</modal> + <copyright></copyright> + <authors>Bertrand Guiheneuf <Bertrand.Guiheneuf@aful.org> +</authors> + <comments>This is a very simple program to test Camel</comments> +</widget> + +</GTK-Interface> |