#include "modest-account-mgr-helpers.h"
#include "widgets/modest-default-account-settings-dialog.h"
#include "modest-runtime.h"
+#include "modest-marshal.h"
enum {
PROP_0,
const gchar *account_id,
const gchar *mailbox,
guint icon_size);
+static void modest_account_protocol_save_remote_draft_default (ModestAccountProtocol *self,
+ const gchar *account_id,
+ TnyMsg *new_msg,
+ TnyMsg *old_msg,
+ ModestAccountProtocolSaveRemoteDraftCallback callback,
+ gpointer userdata);
/* globals */
static GObjectClass *parent_class = NULL;
modest_account_protocol_get_service_name_default;
account_class->get_service_icon =
modest_account_protocol_get_service_icon_default;
+ account_class->save_remote_draft =
+ modest_account_protocol_save_remote_draft_default;
+
}
static void
const gchar *account_id,
const gchar *mailbox)
{
- g_return_val_if_fail (MODEST_ACCOUNT_PROTOCOL (self), NULL);
+ g_return_val_if_fail (MODEST_IS_ACCOUNT_PROTOCOL (self), NULL);
return NULL;
}
modest_account_protocol_get_from_list_default (ModestAccountProtocol *self,
const gchar *account_id)
{
- g_return_val_if_fail (MODEST_ACCOUNT_PROTOCOL (self), NULL);
+ g_return_val_if_fail (MODEST_IS_ACCOUNT_PROTOCOL (self), NULL);
return NULL;
}
const gchar *mailbox,
gboolean *has_signature)
{
- g_return_val_if_fail (MODEST_ACCOUNT_PROTOCOL (self), NULL);
+ g_return_val_if_fail (MODEST_IS_ACCOUNT_PROTOCOL (self), NULL);
if (has_signature)
*has_signature = FALSE;
modest_account_protocol_get_icon_default (ModestAccountProtocol *self, ModestAccountProtocolIconType icon_type,
GObject *object, guint icon_size)
{
- g_return_val_if_fail (MODEST_ACCOUNT_PROTOCOL (self), NULL);
+ g_return_val_if_fail (MODEST_IS_ACCOUNT_PROTOCOL (self), NULL);
return NULL;
}
const gchar *account_id,
const gchar *mailbox)
{
- g_return_val_if_fail (MODEST_ACCOUNT_PROTOCOL (self), NULL);
+ g_return_val_if_fail (MODEST_IS_ACCOUNT_PROTOCOL (self), NULL);
return NULL;
}
const gchar *mailbox,
guint icon_size)
{
- g_return_val_if_fail (MODEST_ACCOUNT_PROTOCOL (self), NULL);
+ g_return_val_if_fail (MODEST_IS_ACCOUNT_PROTOCOL (self), NULL);
return NULL;
}
+void
+modest_account_protocol_save_remote_draft (ModestAccountProtocol *self,
+ const gchar *account_id,
+ TnyMsg *new_msg,
+ TnyMsg *old_msg,
+ ModestAccountProtocolSaveRemoteDraftCallback callback,
+ gpointer userdata)
+{
+ MODEST_ACCOUNT_PROTOCOL_GET_CLASS (self)->save_remote_draft (self, account_id,
+ new_msg, old_msg,
+ callback, userdata);
+}
+
+static void
+modest_account_protocol_save_remote_draft_default (ModestAccountProtocol *self,
+ const gchar *account_id,
+ TnyMsg *new_msg,
+ TnyMsg *old_msg,
+ ModestAccountProtocolSaveRemoteDraftCallback callback,
+ gpointer userdata)
+{
+ if (callback) {
+ callback (self, NULL, account_id, NULL, new_msg, old_msg, userdata);
+ }
+}
+
typedef void (*ModestAccountProtocolCheckSupportFunc) (ModestAccountProtocol *self,
gboolean supported, gpointer userdata);
+typedef void (*ModestAccountProtocolSaveRemoteDraftCallback) (ModestAccountProtocol *self,
+ GError *error,
+ const gchar *account_id,
+ TnyMsg *new_remote_msg,
+ TnyMsg *new_msg,
+ TnyMsg *old_msg,
+ gpointer userdata);
struct _ModestAccountProtocol {
GObject *object, guint icon_size);
gchar * (*get_service_name) (ModestAccountProtocol *self, const gchar *account_id, const gchar *mailbox);
const GdkPixbuf * (*get_service_icon) (ModestAccountProtocol *self, const gchar *account_id, const gchar *mailbox, guint icon_size);
+ void (*save_remote_draft) (ModestAccountProtocol *self,
+ const gchar *account_id, TnyMsg *new_msg, TnyMsg *old_msg,
+ ModestAccountProtocolSaveRemoteDraftCallback callback,
+ gpointer userdata);
/* Padding for future expansions */
- void (*_reserved3) (void);
void (*_reserved4) (void);
void (*_reserved5) (void);
void (*_reserved6) (void);
const gchar *mailbox,
guint icon_size);
+/**
+ * modest_account_protocol_save_remote_draft:
+ * @self: a #ModestAccountProtocol
+ * @account_id: a transport account_name
+ * @new_msg: the newly created message in local storage.
+ * @old_msg: the old message
+ * @callback: the code that should be executed on finishing the remote message saving
+ * @userdata: a #gpointer
+ *
+ * Saves the just-saved to local draft, into a remote storage.
+ */
+void modest_account_protocol_save_remote_draft (ModestAccountProtocol *self,
+ const gchar *account_id,
+ TnyMsg *new_msg,
+ TnyMsg *old_msg,
+ ModestAccountProtocolSaveRemoteDraftCallback callback,
+ gpointer userdata);
+
G_END_DECLS
#ifdef MODEST_USE_LIBTIME
#include <clockd/libtime.h>
#endif
+#include "modest-account-protocol.h"
#define KB 1024
typedef struct
{
+ ModestMailOperation *mailop;
+ TnyMsg *msg;
+ SaveToDraftstCallback callback;
+ gpointer userdata;
+} FinishSaveRemoteDraftInfo;
+
+static void
+finish_save_remote_draft (ModestAccountProtocol *protocol,
+ GError *err,
+ const gchar *account_id,
+ TnyMsg *new_remote_msg,
+ TnyMsg *new_msg,
+ TnyMsg *old_msg,
+ gpointer userdata)
+{
+ FinishSaveRemoteDraftInfo *info = (FinishSaveRemoteDraftInfo *) userdata;
+ ModestMailOperationPrivate *priv = NULL;
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(info->mailop);
+
+ if (!priv->error && err != NULL) {
+ /* Priority for errors in save to local stage */
+ priv->error = g_error_copy (err);
+ priv->status = MODEST_MAIL_OPERATION_STATUS_FAILED;
+ }
+
+ if (info->callback)
+ info->callback (info->mailop, info->msg, info->userdata);
+
+ if (info->msg)
+ g_object_unref (info->msg);
+
+ modest_mail_operation_notify_end (info->mailop);
+ g_object_unref (info->mailop);
+
+ g_slice_free (FinishSaveRemoteDraftInfo, info);
+}
+
+typedef struct
+{
TnyTransportAccount *transport_account;
TnyMsg *draft_msg;
SaveToDraftstCallback callback;
ModestMailOperationPrivate *priv = NULL;
SaveToDraftsAddMsgInfo *info = (SaveToDraftsAddMsgInfo *) userdata;
GError *io_error = NULL;
+ gboolean callback_called = FALSE;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(info->mailop);
priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
}
+ if (info->transport_account) {
+ ModestProtocolType transport_protocol_type;
+ ModestProtocol *transport_protocol;
+
+ transport_protocol_type = modest_tny_account_get_protocol_type (TNY_ACCOUNT (info->transport_account));
+
+ transport_protocol = modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (),
+ transport_protocol_type);
+ if (transport_protocol && MODEST_IS_ACCOUNT_PROTOCOL (transport_protocol)) {
+ FinishSaveRemoteDraftInfo *srd_info = g_slice_new (FinishSaveRemoteDraftInfo);
+ srd_info->mailop = info->mailop?g_object_ref (info->mailop):NULL;
+ srd_info->msg = info->msg?g_object_ref (info->msg):NULL;
+ srd_info->callback = info->callback;
+ srd_info->userdata = info->user_data;
+ modest_account_protocol_save_remote_draft (MODEST_ACCOUNT_PROTOCOL (transport_protocol),
+ tny_account_get_id (TNY_ACCOUNT (info->transport_account)),
+ info->msg, info->draft_msg,
+ finish_save_remote_draft,
+ srd_info);
+
+ callback_called = TRUE;
+ }
+ }
+
/* Call the user callback */
- if (info->callback)
+ if (!callback_called && info->callback)
info->callback (info->mailop, info->msg, info->user_data);
if (info->transport_account)
if (info->msg)
g_object_unref (G_OBJECT (info->msg));
- modest_mail_operation_notify_end (info->mailop);
+ if (!callback_called)
+ modest_mail_operation_notify_end (info->mailop);
g_object_unref(info->mailop);
g_slice_free (SaveToDraftsAddMsgInfo, info);
}
BOOL:STRING,OBJECT
BOOL:ENUM,BOOL
BOOL:ENUM
+VOID:OBJECT,OBJECT