On Wed, 2002-05-15 at 16:21, JP Rosevear wrote: > On Sun, 2002-05-05 at 16:49, Daniel Thompson wrote: > > Hi folks > > > > I had a quick look over the mailing list archives recently. After seeing > > some questions about the mail conduit I thought I'd chuck out the patch > > I have been working on for people to play with/break. I haven't quite > > finished it yet but what programmer ever does? > > > > It is a bit of a monster, I can split if people really want me to. > > Basically it: > > > > * fixes a trivial bug with the mailbox copy > > * removes the pasting operator in the LOG macro to reduce warnings > > * examines the existing Palm inbox and eliminate duplicate e-mails > > * adds GUI configuration of all functionality (except mh mailboxes). > > Good patch. The only things I would suggest are a Changelog and to make Thank you. Its the first thing I have ever written in GTK! > sure the option menus in the config gui are sized properly. Resubmit > with those and I'll stick it in for 0.10. I have now added a ChangeLog entry and fixed the option menus (anyone know *why* gtk_widget_show() on the menu items fixes the problem?). > > > Over the next few days I intend to add support for: > > > > * mh GUI config > > * use a file selector to pick mailboxes > > * {MAYBE] add tooltips > > Bonus as far as I'm concerned, you can add these after the above patch > goes in. Well since I have already done them between this patch and the last they are actually in this patch already ... Cheers Daniel --xx-- -- Daniel Thompson (Merlin) <d thompson gmx net> If at first you don't succeed then sky diving is probably not for you.
Index: gnome-pilot-conduits/ChangeLog =================================================================== RCS file: /cvs/gnome/gnome-pilot-conduits/ChangeLog,v retrieving revision 1.18 diff -u -r1.18 ChangeLog --- gnome-pilot-conduits/ChangeLog 25 Apr 2002 16:49:45 -0000 1.18 +++ gnome-pilot-conduits/ChangeLog 15 May 2002 20:45:48 -0000 @@ -1,3 +1,15 @@ +2002-05-15 Daniel Thompson <d thompson gmx net> + + * email_conduit.c: + Removing stringize operator from LOG (warning suppression). + Added missing config management code (copy, dup, save). + Introduced new copy to Palm Inbox modes (mirror removes old + mails from the Palm automatically, copy does not make duplicate + copies of mails in the Palm Inbox. + Wrote GUI to manage all current config options. + * email_conduit.h: + Minor changes to faciliate above. + 2002-04-25 JP Rosevear <jpr ximian com> * configure.in: check signal type for malsync Index: gnome-pilot-conduits/email/email_conduit.c =================================================================== RCS file: /cvs/gnome/gnome-pilot-conduits/email/email_conduit.c,v retrieving revision 1.16 diff -u -r1.16 email_conduit.c --- gnome-pilot-conduits/email/email_conduit.c 25 Apr 2002 16:42:37 -0000 1.16 +++ gnome-pilot-conduits/email/email_conduit.c 15 May 2002 20:45:54 -0000 @@ -27,7 +27,7 @@ #ifdef EC_DEBUG #define LOG(format,args...) g_log (G_LOG_DOMAIN, \ G_LOG_LEVEL_MESSAGE, \ - "email: "##format, ##args) + "email: " format, ##args) #else #define LOG(format,args...) #endif @@ -52,13 +52,70 @@ (*c)->sendAction = gnome_config_get_string( "send_action=file"); (*c)->mhDirectory = gnome_config_get_string( "mh_directory" ); (*c)->mboxFile = gnome_config_get_string ( "mbox_file" ); - (*c)->receiveAction = gnome_config_get_string( "receive_action=file" ); + (*c)->receiveAction = gnome_config_get_string( "receive_action=copy" ); gnome_config_pop_prefix(); (*c)->pilotId = pilotId; g_free(prefix); } +static void +save_configuration(ConduitCfg *c) +{ + gchar *prefix; + + g_assert(c!=NULL); + + prefix = g_strdup_printf("/gnome-pilot.d/email-conduit/Pilot_%u/",c->pilotId); + + gnome_config_push_prefix(prefix); + gnome_config_set_string("sendmail", c->sendmail); + gnome_config_set_string("from_address", c->fromAddr); + gnome_config_set_string("send_action", c->sendAction); + gnome_config_set_string("mh_directory", c->mhDirectory); + gnome_config_set_string("mbox_file", c->mboxFile); + gnome_config_set_string("receive_action", c->receiveAction); + gnome_config_pop_prefix(); + gnome_config_sync(); + gnome_config_drop_all(); + + g_free(prefix); +} + +static void +copy_configuration(ConduitCfg *d, ConduitCfg *c) +{ + g_return_if_fail(c!=NULL); + g_return_if_fail(d!=NULL); + + /* it is always safe to free NULL pointers with [g_]free */ + g_free(d->sendmail); + g_free(d->fromAddr); + g_free(d->sendAction); + g_free(d->mhDirectory); + g_free(d->mboxFile); + g_free(d->receiveAction); + + d->sendmail = g_strdup(c->sendmail); + d->fromAddr = g_strdup(c->fromAddr); + d->sendAction = g_strdup(c->sendAction); + d->mhDirectory = g_strdup(c->mhDirectory); + d->mboxFile = g_strdup(c->mboxFile); + d->receiveAction = g_strdup(c->receiveAction); + + d->pilotId = c->pilotId; +} + +static ConduitCfg* +dupe_configuration(ConduitCfg *c) +{ + ConduitCfg *d; + g_return_val_if_fail(c!=NULL,NULL); + d = g_new0(ConduitCfg,1); + copy_configuration(d,c); + return d; +} + /** this method frees all data from the conduit config */ static void destroy_configuration(ConduitCfg **c) @@ -75,7 +132,6 @@ *c = NULL; } - void markline( char *msg ) { while( (*msg) != '\n' && (*msg) != 0 ) { @@ -149,6 +205,20 @@ } } +/* helper function to identify identical e-mails */ +static gint match_mail(gconstpointer a, gconstpointer b) +{ + MailDBRecord *c = (MailDBRecord *) a; + MailDBRecord *d = (MailDBRecord *) b; + + LOG("matching records [%d vs. %d]", c->size, d->size); + if (c->size != d->size) { + return 1; + } + + return memcmp(c->buffer, d->buffer, c->size); +} + static gboolean write_message_to_pilot (GnomePilotConduit *c, GnomePilotDBInfo *dbi, int dbHandle, char *buffer, int msg_num) @@ -157,6 +227,9 @@ int h; struct Mail t; int len; + GList *inbox_list; + GList *field; + MailDBRecord needle; t.to = NULL; t.from = NULL; @@ -200,6 +273,21 @@ t.body = strdup( msg ); len = pack_Mail( &t, buffer, 0xffff ); + + /* if this mail already exists in the Palms inbox then skip this mail */ + needle.size = len; + needle.buffer = buffer; + inbox_list = (GList*) gtk_object_get_data(GTK_OBJECT(c), "inbox_list"); + field = g_list_find_custom(inbox_list, &needle, match_mail); + if (field) { + /* remove the mail from the list as we've already seen it */ + inbox_list = g_list_remove_link(inbox_list, field); + gtk_object_set_data(GTK_OBJECT(c),"inbox_list",(gpointer)inbox_list); + free(field->data); + g_list_free_1(field); + LOG("Skipping message (already on Palm device)"); + return TRUE; + } if ( dlp_WriteRecord( dbi->pilot_socket, dbHandle, 0, 0, 0, buffer, len, 0 ) > 0 ) { @@ -220,6 +308,7 @@ int i; int rec; int dupe; + GList *inbox_list; g_message ("SendMail Conduit v %s",CONDUIT_VERSION); @@ -367,6 +456,42 @@ free_Mail( &t ); } + /* read in all the existing records on the Palm so that we can + * spot duplicate mails + */ + inbox_list = (GList*) gtk_object_get_data(GTK_OBJECT(c), "inbox_list"); + if ( strcmp( GET_CONFIG(c)->receiveAction, "copy" ) == 0 || + strcmp( GET_CONFIG(c)->receiveAction, "mirror" ) == 0 ) { + for ( i = 0; ; i++ ) { + int attr, length, size; + recordid_t recID; + MailDBRecord *record; + + /* iterate through records in category 0 (Inbox) ... */ + length = dlp_ReadNextRecInCategory( dbi->pilot_socket, dbHandle, 0, + buffer, &recID, 0, &size, &attr); + if ( length < 0 ) { + break; + } + + /* ... and store them in the inbox_list */ + record = (MailDBRecord *) malloc(sizeof(*record) + length); + record->recID = recID; + record->size = length; + record->buffer = ((guchar *) record) + sizeof(*record); + memcpy(record->buffer, buffer, length); + inbox_list = g_list_append(inbox_list, record); + LOG("storing record %d", recID); + } + } + + /* the above loop is likely to change the value of inbox_list so we + * must put it back + */ + gtk_object_set_data(GTK_OBJECT(c),"inbox_list",(gpointer)inbox_list); + + + if ( GET_CONFIG(c)->mhDirectory ) { #ifdef EC_DEBUG fprintf( stderr, "Reading inbound mail from %s\n", @@ -433,10 +558,7 @@ if ( GET_CONFIG(c)->mboxFile ) { FILE *f; -#ifdef EC_DEBUG - fprintf( stderr, "Reading inbound mail from %s\n", - GET_CONFIG(c)->mboxFile ); -#endif + LOG( "Reading inbound mail from %s", GET_CONFIG(c)->mboxFile ); f = fopen (GET_CONFIG (c)->mboxFile, "r"); @@ -447,12 +569,9 @@ } for( i = 1; !feof (f); i++ ) { int len; - int l; char *p; -#ifdef EC_DEBUG - fprintf( stderr, "Processing message %d", i ); -#endif + LOG( "Processing message %d", i ); len = 0; while ( ( len < sizeof(buffer) ) && ( ( p = fgets ( (char *)(buffer+len), @@ -467,7 +586,7 @@ buffer[len] = 0; len = 0; - if ( l < 0 ) { + if ( len < 0 ) { fprintf( stderr, "Error processing message %d\n", i ); break; } @@ -484,6 +603,19 @@ } } + /* in mirror mode the Palm inbox is a literal copy of the + * host's mbox, in this case we must remove any items + * remaining on the inbox_list + */ + if ( strcmp( GET_CONFIG(c)->receiveAction, "mirror" ) == 0 ) { + GList *elem = (GList*) gtk_object_get_data(GTK_OBJECT(c), "inbox_list"); + for (; elem != NULL; elem = elem->next) { + MailDBRecord *record = (MailDBRecord *) elem->data; + LOG("purging out of date record %d", record->recID); + dlp_DeleteRecord( dbi->pilot_socket, dbHandle, 0, record->recID ); + } + } + free_MailAppInfo( &tai ); dlp_ResetLastSyncPC( dbi->pilot_socket ); @@ -496,34 +628,314 @@ return( synchronize( c, dbi ) ); } +void +handleFileSelector (GtkWidget *widget, gpointer data) +{ + GtkWidget *fs = data; + GtkWidget *entry = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(fs), "entry")); + gchar *fname; + + fname = gtk_file_selection_get_filename (GTK_FILE_SELECTION(fs)); + gtk_entry_set_text(GTK_ENTRY(entry), fname); +} + + +void +createFileSelector (GtkWidget *widget, gpointer data) +{ + GtkWidget *fs; + + fs = gtk_file_selection_new(_("Select an mbox file or an MH directory")); + gtk_object_set_data(GTK_OBJECT(fs), "entry", (gpointer) data); + gtk_signal_connect (GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button), + "clicked", GTK_SIGNAL_FUNC(handleFileSelector), fs); + + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->ok_button), + "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) fs); + gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(fs)->cancel_button), + "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) fs); + + gtk_widget_show (fs); + gtk_grab_add (fs); /* take focus from the settings dialog */ +} + +static GtkWidget +*createCfgWindow (GnomePilotConduit* conduit) +{ + GtkWidget *vbox, *table; + GtkWidget *label, *widget; + GtkWidget *menu, *menuItem; + GtkWidget *box, *button; + + vbox = gtk_vbox_new(FALSE, GNOME_PAD); + + table = gtk_table_new(2, 5, FALSE); + gtk_table_set_row_spacings(GTK_TABLE(table), 4); + gtk_table_set_col_spacings(GTK_TABLE(table), 10); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); + + /* send_action option menu */ + label = gtk_label_new(_("Send Action")); + widget = gtk_option_menu_new (); + menu = gtk_menu_new(); + menuItem = gtk_menu_item_new_with_label (_("Delete from PDA")); + gtk_widget_show(menuItem); + gtk_object_set_data(GTK_OBJECT(menuItem), "short", "delete"); + gtk_object_set_data(GTK_OBJECT(widget), "delete", (gpointer) 0); + gtk_menu_append (GTK_MENU (menu), GTK_WIDGET (menuItem)); + menuItem = gtk_menu_item_new_with_label (_("File on PDA")); + gtk_widget_show(menuItem); + gtk_object_set_data(GTK_OBJECT(menuItem), "short", "file"); + gtk_object_set_data(GTK_OBJECT(widget), "file", (gpointer) 1); + gtk_menu_append (GTK_MENU (menu), GTK_WIDGET (menuItem)); + gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), GTK_WIDGET (menu)); + gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), widget, 1, 2, 0, 1); + gtk_object_set_data(GTK_OBJECT(vbox), "send_action", widget); + + /* from_address entry */ + label = gtk_label_new(_("From:")); + widget = gtk_entry_new_with_max_length(128); + gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); + gtk_table_attach_defaults(GTK_TABLE(table), widget, 1, 2, 1, 2); + gtk_object_set_data(GTK_OBJECT(vbox), "from_address", widget); + + /* sendmail entry */ + label = gtk_label_new(_("Sendmail command")); + widget = gtk_entry_new_with_max_length(128); + gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); + gtk_table_attach_defaults(GTK_TABLE(table), widget, 1, 2, 2, 3); + gtk_object_set_data(GTK_OBJECT(vbox), "sendmail", widget); + + /* receive_action option menu */ + label = gtk_label_new (_("Receive Action")); + widget = gtk_option_menu_new (); + menu = gtk_menu_new (); + menuItem = gtk_menu_item_new_with_label (_("Copy from Inbox")); + gtk_widget_show(menuItem); + gtk_object_set_data(GTK_OBJECT(menuItem), "short", "copy"); + gtk_object_set_data(GTK_OBJECT(widget), "copy", (gpointer) 0); + gtk_menu_append (GTK_MENU (menu), GTK_WIDGET (menuItem)); + menuItem = gtk_menu_item_new_with_label (_("Delete from Inbox")); + gtk_widget_show(menuItem); + gtk_object_set_data(GTK_OBJECT(menuItem), "short", "delete"); + gtk_object_set_data(GTK_OBJECT(widget), "delete", (gpointer) 1); + gtk_menu_append (GTK_MENU (menu), GTK_WIDGET (menuItem)); + menuItem = gtk_menu_item_new_with_label (_("Mirror Inbox")); + gtk_widget_show(menuItem); + gtk_object_set_data(GTK_OBJECT(menuItem), "short", "mirror"); + gtk_object_set_data(GTK_OBJECT(widget), "mirror", (gpointer) 2); + gtk_menu_append (GTK_MENU (menu), GTK_WIDGET (menuItem)); + gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), GTK_WIDGET (menu)); + gtk_table_attach_defaults (GTK_TABLE(table), label, 0, 1, 3, 4); + gtk_table_attach_defaults(GTK_TABLE(table), widget, 1, 2, 3, 4); + gtk_object_set_data(GTK_OBJECT(vbox), "receive_action", widget); + + /* mbox_file entry */ + label = gtk_label_new(_("Copy mail from")); + widget = gtk_entry_new_with_max_length(128); + button = gtk_button_new_with_label("..."); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(createFileSelector), widget); + box = gtk_hbox_new(FALSE, 0); + gtk_box_pack_end(GTK_BOX(box), button, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(box), widget, TRUE, TRUE, 0); + gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 4, 5); + gtk_table_attach_defaults(GTK_TABLE(table), box, 1, 2, 4, 5); + gtk_object_set_data(GTK_OBJECT(vbox), "mbox_file", widget); + + return vbox; +} + +static void +setOptionsCfg(GtkWidget *cfg, ConduitCfg *c) +{ + GtkWidget *send_action, *from_address, *sendmail, *receive_action, *mbox_file; + GtkWidget *menuItem; + guint id; + + /* fetch all the controls from the cfg window */ + send_action = gtk_object_get_data(GTK_OBJECT(cfg), "send_action"); + from_address = gtk_object_get_data(GTK_OBJECT(cfg), "from_address"); + sendmail = gtk_object_get_data(GTK_OBJECT(cfg), "sendmail"); + receive_action = gtk_object_get_data(GTK_OBJECT(cfg), "receive_action"); + mbox_file = gtk_object_get_data(GTK_OBJECT(cfg), "mbox_file"); + + id = (guint) gtk_object_get_data(GTK_OBJECT(send_action), c->sendAction); + gtk_option_menu_set_history(GTK_OPTION_MENU(send_action), id); + + gtk_entry_set_text(GTK_ENTRY(from_address), (c->fromAddr ? c->fromAddr : "")); + gtk_entry_set_text(GTK_ENTRY(sendmail), (c->sendmail ? c->sendmail : "")); + + id = (guint) gtk_object_get_data(GTK_OBJECT(receive_action), c->receiveAction); + gtk_option_menu_set_history(GTK_OPTION_MENU(receive_action), id); + + if (c->mboxFile && 0 != strcmp(c->mboxFile, "")) { + gtk_entry_set_text(GTK_ENTRY(mbox_file), c->mboxFile); + } else if (c->mhDirectory) { + gtk_entry_set_text(GTK_ENTRY(mbox_file), c->mhDirectory); + } else { + gtk_entry_set_text(GTK_ENTRY(mbox_file), ""); + } +} + +static void +readOptionsCfg(GtkWidget *cfg, ConduitCfg *c) +{ + GtkWidget *send_action, *from_address, *sendmail, *receive_action, *mbox_file; + GtkWidget *menu, *menuItem; + gchar *str; + struct stat mboxStat; + + /* fetch all the controls from the cfg window */ + send_action = gtk_object_get_data(GTK_OBJECT(cfg), "send_action"); + from_address = gtk_object_get_data(GTK_OBJECT(cfg), "from_address"); + sendmail = gtk_object_get_data(GTK_OBJECT(cfg), "sendmail"); + receive_action = gtk_object_get_data(GTK_OBJECT(cfg), "receive_action"); + mbox_file = gtk_object_get_data(GTK_OBJECT(cfg), "mbox_file"); + + menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(send_action)); + menuItem = gtk_menu_get_active(GTK_MENU(menu)); + str = g_strdup(gtk_object_get_data(GTK_OBJECT(menuItem), "short")); + g_free(c->sendAction); + c->sendAction = str; + + str = gtk_editable_get_chars(GTK_EDITABLE(from_address), 0, -1); + if (0 == strcmp(str, "")) { + g_free(str); + str = NULL; + } + g_free(c->fromAddr); + c->fromAddr = str; + + str = gtk_editable_get_chars(GTK_EDITABLE(sendmail), 0, -1); + if (0 == strcmp(str, "")) { + g_free(str); + str = NULL; + } + g_free(c->sendmail); + c->sendmail = str; + + menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(receive_action)); + menuItem = gtk_menu_get_active(GTK_MENU(menu)); + str = g_strdup(gtk_object_get_data(GTK_OBJECT(menuItem), "short")); + g_free(c->receiveAction); + c->receiveAction = str; + + str = gtk_editable_get_chars(GTK_EDITABLE(mbox_file), 0, -1); + if (0 == strcmp(str, "")) { + g_free(str); + str = NULL; + } + g_free(c->mboxFile); + c->mboxFile = NULL; + g_free(c->mhDirectory); + c->mhDirectory = NULL; + if (str) { + if (0 == stat(str, &mboxStat) && S_ISDIR(mboxStat.st_mode)) { + c->mhDirectory = str; + } else { + c->mboxFile = str; + } + } +} + +static gint +create_settings_window (GnomePilotConduit *conduit, GtkWidget *parent, gpointer data) +{ + GtkWidget *cfgWindow; + cfgWindow = createCfgWindow(conduit); + gtk_container_add(GTK_CONTAINER(parent),cfgWindow); + gtk_widget_show_all(cfgWindow); + + gtk_object_set_data(GTK_OBJECT(conduit),OBJ_DATA_CONFIG_WINDOW,cfgWindow); + setOptionsCfg(GET_CONDUIT_WINDOW(conduit),GET_CONFIG(conduit)); + + return 0; +} + +static void +display_settings (GnomePilotConduit *conduit, gpointer data) +{ + setOptionsCfg(GET_CONDUIT_WINDOW(conduit),GET_CONFIG(conduit)); +} + +static void +save_settings (GnomePilotConduit *conduit, gpointer data) +{ + readOptionsCfg(GET_CONDUIT_WINDOW(conduit),GET_CONFIG(conduit)); + save_configuration(GET_CONFIG(conduit)); +} + +static void +revert_settings (GnomePilotConduit *conduit, gpointer data) +{ + ConduitCfg *cfg,*cfg2; + + cfg2= GET_OLDCONFIG(conduit); + cfg = GET_CONFIG(conduit); + save_configuration(cfg2); + copy_configuration(cfg,cfg2); + setOptionsCfg(GET_CONDUIT_WINDOW(conduit),cfg); +} + GnomePilotConduit *conduit_get_gpilot_conduit( guint32 pilotId ) { GtkObject *retval; - ConduitCfg *cc; + ConduitCfg *cfg1, *cfg2; retval = gnome_pilot_conduit_standard_new("MailDB",0x6d61696c, NULL); g_assert(retval != NULL); + + /* conduit signals */ /* gtk_signal_connect(retval, "copy_from_pilot", (GtkSignalFunc)copy_from_pilot ,NULL); - gtk_signal_connect(retval, "copy_to_pilot", (GtkSignalFunc) ,NULL); - gtk_signal_connect(retval, "merge_to_pilot", (GtkSignalFunc) ,NULL); + gtk_signal_connect(retval, "copy_to_pilot", (GtkSignalFunc) ,NULL); + gtk_signal_connect(retval, "merge_to_pilot", (GtkSignalFunc) ,NULL); gtk_signal_connect(retval, "merge_from_pilot", (GtkSignalFunc)synchronize ,NULL); */ gtk_signal_connect(retval, "synchronize", (GtkSignalFunc)synchronize ,NULL); - load_configuration(&cc, pilotId ); - gtk_object_set_data(retval,"conduit_config",(gpointer)cc); + /* GUI signals */ + gtk_signal_connect (retval, + GNOME_PILOT_CONDUIT_SIGNAL_CREATE_SETTINGS_WINDOW (create_settings_window), + NULL); + gtk_signal_connect (retval, + GNOME_PILOT_CONDUIT_SIGNAL_DISPLAY_SETTINGS (display_settings), + NULL); + gtk_signal_connect (retval, + GNOME_PILOT_CONDUIT_SIGNAL_SAVE_SETTINGS (save_settings), + NULL); + gtk_signal_connect (retval, + GNOME_PILOT_CONDUIT_SIGNAL_REVERT_SETTINGS (revert_settings), + NULL); + + load_configuration(&cfg1, pilotId ); + cfg2 = dupe_configuration(cfg1); + gtk_object_set_data(retval,OBJ_DATA_CONFIG,(gpointer)cfg1); + gtk_object_set_data(retval,OBJ_DATA_OLDCONFIG,(gpointer)cfg2); + return GNOME_PILOT_CONDUIT(retval); } - void conduit_destroy_gpilot_conduit( GnomePilotConduit *c ) { - ConduitCfg *cc; + ConduitCfg *cfg1, *cfg2; + GList *inbox_list, *list; - cc = GET_CONFIG(c); - destroy_configuration( &cc ); + cfg1 = GET_CONFIG(c); + cfg2 = GET_OLDCONFIG(c); + destroy_configuration( &cfg1 ); + destroy_configuration( &cfg2 ); + + inbox_list = (GList*) gtk_object_get_data(GTK_OBJECT(c), "inbox_list"); + for (list = inbox_list; list != NULL; list = list->next) { + free(list->data); + } + g_list_free(inbox_list); + inbox_list = NULL; + gtk_object_destroy(GTK_OBJECT(c)); } Index: gnome-pilot-conduits/email/email_conduit.h =================================================================== RCS file: /cvs/gnome/gnome-pilot-conduits/email/email_conduit.h,v retrieving revision 1.11 diff -u -r1.11 email_conduit.h --- gnome-pilot-conduits/email/email_conduit.h 5 Aug 2000 02:02:23 -0000 1.11 +++ gnome-pilot-conduits/email/email_conduit.h 15 May 2002 20:45:54 -0000 @@ -3,6 +3,10 @@ #ifndef __EMAIL_CONDUIT_H__ #define __EMAIL_CONDUIT_H__ +#define OBJ_DATA_CONFIG "conduit_config" +#define OBJ_DATA_OLDCONFIG "conduit_oldconfig" +#define OBJ_DATA_CONFIG_WINDOW "config_window" + typedef struct ConduitCfg { gchar *sendmail; gchar *fromAddr; @@ -14,6 +18,14 @@ pid_t child; } ConduitCfg; -#define GET_CONFIG(c) ((ConduitCfg*)(gtk_object_get_data(GTK_OBJECT(c),"conduit_config"))) +typedef struct MailDBRecord { + int recID; + int size; + guchar *buffer; +} MailDBRecord; + +#define GET_CONFIG(c) ((ConduitCfg*)(gtk_object_get_data(GTK_OBJECT(c),OBJ_DATA_CONFIG))) +#define GET_OLDCONFIG(c) ((ConduitCfg*)(gtk_object_get_data(GTK_OBJECT(c),OBJ_DATA_OLDCONFIG))) +#define GET_CONDUIT_WINDOW(s) ((GtkWidget*)gtk_object_get_data(GTK_OBJECT(s),OBJ_DATA_CONFIG_WINDOW)) #endif
Attachment:
signature.asc
Description: This is a digitally signed message part