if (priv->current == mail_op) {
gchar *msg = NULL;
- determined = (state->done > 0 && state->total > 0) &
+ determined = (state->done > 0 && state->total > 0) &&
!(state->done == 1 && state->total == 100);
switch (state->op_type) {
msg = g_strdup("");
}
- modest_progress_bar_widget_set_progress (self, msg, state->done, state->total);
+ /* If we have byte information use it */
+ if ((state->bytes_done == 0) && (state->bytes_total == 0))
+ modest_progress_bar_widget_set_progress (self, msg,
+ state->bytes_done,
+ state->bytes_total);
+ else
+ modest_progress_bar_widget_set_progress (self, msg,
+ state->done,
+ state->total);
g_free (msg);
}
}
void
-modest_progress_bar_widget_set_progress (ModestProgressBarWidget *self,
- const gchar *message,
- guint done,
- guint total)
+modest_progress_bar_widget_set_progress (ModestProgressBarWidget *self,
+ const gchar *message,
+ gint done,
+ gint total)
{
ModestProgressBarWidgetPrivate *priv;
GtkWidget* modest_progress_bar_widget_new (void);
void modest_progress_bar_widget_set_progress (ModestProgressBarWidget *self,
- const gchar *msg, guint done, guint total);
+ const gchar *msg,
+ gint done,
+ gint total);
typedef struct _GetMsgAsyncHelper {
ModestMailOperation *mail_op;
+ TnyHeader *header;
GetMsgAsyncUserCallback user_callback;
gpointer user_data;
} GetMsgAsyncHelper;
state->done = priv->done;
state->total = priv->total;
state->finished = modest_mail_operation_is_finished (self);
+ state->bytes_done = 0;
+ state->bytes_total = 0;
return state;
}
helper->mail_op = self;
helper->user_callback = user_callback;
helper->user_data = user_data;
+ helper->header = g_object_ref (header);
tny_folder_get_msg_async (folder, header, get_msg_cb, get_msg_status_cb, helper);
/* If user defined callback function was defined, call it */
if (helper->user_callback) {
- helper->user_callback (self, NULL, msg, helper->user_data);
+ helper->user_callback (self, helper->header, msg, helper->user_data);
}
out:
/* Free */
+ g_object_unref (helper->header);
g_slice_free (GetMsgAsyncHelper, helper);
/* Notify about operation end */
priv->total = 1;
state = modest_mail_operation_clone_state (self);
+ state->bytes_done = status->position;
+ state->bytes_total = status->of_total;
g_signal_emit (G_OBJECT (self), signals[PROGRESS_CHANGED_SIGNAL], 0, state, NULL);
g_slice_free (ModestMailOperationState, state);
}
typedef struct {
guint done;
guint total;
+ gdouble bytes_done;
+ gdouble bytes_total;
gboolean finished;
ModestMailOperationStatus status;
ModestMailOperationTypeOperation op_type;
modest_ui_actions_get_msgs_full_error_handler,
NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
- modest_mail_operation_get_msgs_full (mail_op,
- not_opened_headers,
- open_msg_cb,
- NULL,
- NULL);
+ if (tny_list_get_length (not_opened_headers) > 1) {
+ modest_mail_operation_get_msgs_full (mail_op,
+ not_opened_headers,
+ open_msg_cb,
+ NULL,
+ NULL);
+ } else {
+ TnyIterator *iter = tny_list_create_iterator (not_opened_headers);
+ TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+ modest_mail_operation_get_msg (mail_op, header, open_msg_cb, NULL);
+ g_object_unref (header);
+ g_object_unref (iter);
+ }
+
/* Clean */
g_object_unref (not_opened_headers);
g_object_unref (iter);