X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-transport-account-decorator.c;h=d3a8ec5733a8557eac6265c074b2b86920ae865e;hp=e0024c82b3c043d00ab047b68803a74a62b7b7d5;hb=12a672c559d983c4e49a7e4054ee14c0177ecb1c;hpb=5b20214853dcf7416c0e9b2590fed93af2c635e0 diff --git a/src/modest-transport-account-decorator.c b/src/modest-transport-account-decorator.c index e0024c8..d3a8ec5 100644 --- a/src/modest-transport-account-decorator.c +++ b/src/modest-transport-account-decorator.c @@ -43,6 +43,7 @@ static void modest_transport_account_decorator_class_init (ModestTransportAccoun static void modest_transport_account_decorator_finalize (GObject *obj); static void modest_transport_account_decorator_instance_init (GTypeInstance *instance, gpointer g_class); static void modest_transport_account_decorator_send (TnyTransportAccount *self, TnyMsg *msg, GError **err); +static void modest_transport_account_decorator_cancel (TnyAccount *self); /* list my signals */ /* enum { */ @@ -82,28 +83,58 @@ modest_transport_account_decorator_send (TnyTransportAccount *self, TnyMsg *msg, connection_specific_account = TNY_TRANSPORT_ACCOUNT (modest_tny_account_store_get_smtp_specific_transport_account_for_open_connection (store, account_name)); } - + if (connection_specific_account) { tny_transport_account_send (connection_specific_account, msg, err); + g_object_unref (connection_specific_account); } else { - TNY_CAMEL_TRANSPORT_ACCOUNT_CLASS(parent_class)->send_func (self, msg, err); + TNY_CAMEL_TRANSPORT_ACCOUNT_CLASS(parent_class)->send (self, msg, err); } } +static void +modest_transport_account_decorator_cancel (TnyAccount *self) +{ + TnyTransportAccount *conn_specific_account = NULL; + ModestTnyAccountStore *store = modest_runtime_get_account_store (); + const gchar *account_name; + + g_return_if_fail (TNY_IS_TRANSPORT_ACCOUNT (self)); + + account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (self); + if (account_name) { + conn_specific_account = (TnyTransportAccount *) + modest_tny_account_store_get_smtp_specific_transport_account_for_open_connection (store, account_name); + } + + /* Cancel sending in the connection specific transport account */ + if (conn_specific_account) { + tny_account_cancel (TNY_ACCOUNT (conn_specific_account)); + g_object_unref (conn_specific_account); + } + + /* Also cancel the transport account, we could not be sure + which one was used to send each email */ + TNY_CAMEL_ACCOUNT_CLASS(parent_class)->cancel (self); +} + static void modest_transport_account_decorator_class_init (ModestTransportAccountDecoratorClass *klass) { GObjectClass *gobject_class; TnyCamelTransportAccountClass *transport_class; + TnyCamelAccountClass *account_class; gobject_class = (GObjectClass*) klass; transport_class = (TnyCamelTransportAccountClass *) klass; + account_class = (TnyCamelAccountClass *) klass; parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = modest_transport_account_decorator_finalize; - transport_class->send_func = modest_transport_account_decorator_send; + transport_class->send = modest_transport_account_decorator_send; + account_class->cancel = modest_transport_account_decorator_cancel; /* g_type_class_add_private (gobject_class, sizeof(ModestTransportAccountDecoratorPrivate)); */ } @@ -128,13 +159,7 @@ modest_transport_account_decorator_finalize (GObject *obj) ModestTransportAccountDecorator* modest_transport_account_decorator_new (void) { - ModestTransportAccountDecorator *self; -/* ModestTransportAccountDecoratorPrivate *priv; */ - - self = MODEST_TRANSPORT_ACCOUNT_DECORATOR(g_object_new(MODEST_TYPE_TRANSPORT_ACCOUNT_DECORATOR, NULL)); -/* priv = MODEST_TRANSPORT_ACCOUNT_DECORATOR_GET_PRIVATE (self); */ - - return self; + return g_object_new (MODEST_TYPE_TRANSPORT_ACCOUNT_DECORATOR, NULL); } GType