#include <tny-camel-stream.h>
#include <tny-simple-list.h>
#include <tny-send-queue.h>
+#include <tny-status.h>
#include <camel/camel-stream-mem.h>
#include <glib/gi18n.h>
#include <modest-tny-account.h>
struct _ModestMailOperationPrivate {
guint done;
guint total;
- ModestMailOperationStatus status;
+ ModestMailOperationStatus status;
+ ModestMailOperationId id;
GError *error;
};
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(obj);
priv->status = MODEST_MAIL_OPERATION_STATUS_INVALID;
+ priv->id = MODEST_MAIL_OPERATION_ID_UNKNOWN;
priv->error = NULL;
priv->done = 0;
priv->total = 0;
}
ModestMailOperation*
-modest_mail_operation_new (void)
+modest_mail_operation_new (ModestMailOperationId id)
{
- return MODEST_MAIL_OPERATION(g_object_new(MODEST_TYPE_MAIL_OPERATION, NULL));
+ ModestMailOperation *obj;
+ ModestMailOperationPrivate *priv;
+
+
+ obj = MODEST_MAIL_OPERATION(g_object_new(MODEST_TYPE_MAIL_OPERATION, NULL));
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(obj);
+
+ priv->id = id;
+
+ return obj;
}
+
+ModestMailOperationId
+modest_mail_operation_get_id (ModestMailOperation *self)
+{
+ ModestMailOperationPrivate *priv;
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+
+ return priv->id;
+}
+
void
modest_mail_operation_send_mail (ModestMailOperation *self,
TnyTransportAccount *transport_account,
g_object_unref (G_OBJECT (new_msg));
}
+void
+modest_mail_operation_save_to_drafts (ModestMailOperation *self,
+ TnyTransportAccount *transport_account,
+ const gchar *from, const gchar *to,
+ const gchar *cc, const gchar *bcc,
+ const gchar *subject, const gchar *plain_body,
+ const gchar *html_body,
+ const GList *attachments_list,
+ TnyHeaderFlags priority_flags)
+{
+ TnyMsg *msg = NULL;
+ TnyFolder *folder = NULL;
+ ModestMailOperationPrivate *priv = NULL;
+ GError *err = NULL;
+
+ /* GList *node = NULL; */
+
+ g_return_if_fail (MODEST_IS_MAIL_OPERATION (self));
+ g_return_if_fail (TNY_IS_TRANSPORT_ACCOUNT (transport_account));
+
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
+
+ if (html_body == NULL) {
+ msg = modest_tny_msg_new (to, from, cc, bcc, subject, plain_body, (GSList *) attachments_list); /* FIXME: attachments */
+ } else {
+ msg = modest_tny_msg_new_html_plain (to, from, cc, bcc, subject, html_body, plain_body, (GSList *) attachments_list);
+ }
+ if (!msg) {
+ g_printerr ("modest: failed to create a new msg\n");
+ goto cleanup;
+ }
+
+ folder = modest_tny_account_get_special_folder (TNY_ACCOUNT (transport_account), TNY_FOLDER_TYPE_DRAFTS);
+ if (!folder) {
+ g_printerr ("modest: failed to find Drafts folder\n");
+ goto cleanup;
+ }
+
+ tny_folder_add_msg (folder, msg, &err);
+ if (err) {
+ g_printerr ("modest: error adding msg to Drafts folder: %s",
+ err->message);
+ g_error_free (err);
+ goto cleanup;
+ }
+
+ modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (), self);
+
+ /* Free */
+cleanup:
+ if (msg)
+ g_object_unref (G_OBJECT(msg));
+ if (folder)
+ g_object_unref (G_OBJECT(folder));
+}
+
static void
recurse_folders (TnyFolderStore *store, TnyFolderStoreQuery *query, TnyList *all_folders)
{
modest_mail_operation_queue_remove (modest_runtime_get_mail_operation_queue (), self);
}
-/* static void */
-/* on_refresh_folder_status_update (TnyFolder *folder, const gchar *msg, */
-/* gint num, gint total, gpointer user_data) */
-/* { */
-/* ModestMailOperation *self; */
-/* ModestMailOperationPrivate *priv; */
+static void
+on_refresh_folder_status_update (GObject *obj,
+ TnyStatus *status,
+ gpointer user_data)
+{
+ ModestMailOperation *self;
+ ModestMailOperationPrivate *priv;
+
+ g_return_if_fail (status != NULL);
+ g_return_if_fail (status->code == TNY_FOLDER_STATUS_CODE_REFRESH);
-/* self = MODEST_MAIL_OPERATION (user_data); */
-/* priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self); */
+ self = MODEST_MAIL_OPERATION (user_data);
+ priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
-/* priv->done = num; */
-/* priv->total = total; */
+ priv->done = status->position;
+ priv->total = status->of_total;
-/* if (num == 1 && total == 100) */
-/* return; */
+ if (priv->done == 1 && priv->total == 100)
+ return;
-/* g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, NULL); */
-/* } */
+ g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, NULL);
+}
void
modest_mail_operation_refresh_folder (ModestMailOperation *self,
must review the design */
tny_folder_refresh_async (folder,
on_refresh_folder,
-/* on_refresh_folder_status_update, */
- NULL,
+ on_refresh_folder_status_update,
+/* NULL, */
self);
}