X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-header-view-render.c;h=6cc8e9aaf676318a59ec404bee837a2dddea5310;hb=6cfc86073c3ad33565a50c70fce034e9b3fb0a96;hp=0dd04c9937e1602b73431a911d04a3b073d87868;hpb=6e4dc5c482a9d152b2d3cf6ccd8837875a966240;p=modest diff --git a/src/widgets/modest-header-view-render.c b/src/widgets/modest-header-view-render.c index 0dd04c9..6cc8e9a 100644 --- a/src/widgets/modest-header-view-render.c +++ b/src/widgets/modest-header-view-render.c @@ -42,75 +42,6 @@ #include -static void -fill_list_of_caches (gpointer key, gpointer value, gpointer userdata) -{ - GSList **send_queues = (GSList **) userdata; - *send_queues = g_slist_prepend (*send_queues, value); -} - -static ModestTnySendQueueStatus -get_status_of_uid (TnyHeader *header) -{ - ModestCacheMgr *cache_mgr = NULL; - GHashTable *send_queue_cache = NULL; - ModestTnyAccountStore *accounts_store = NULL; - TnyList *accounts = NULL; - TnyIterator *iter = NULL; - TnyTransportAccount *account = NULL; - GSList *send_queues = NULL, *node; - /* get_msg_status returns suspended by default, so we want to detect changes */ - ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_UNKNONW; - ModestTnySendQueueStatus queue_status = MODEST_TNY_SEND_QUEUE_UNKNONW; - gchar *msg_uid = NULL; - ModestTnySendQueue *send_queue = NULL; - - msg_uid = modest_tny_send_queue_get_msg_id (header); - cache_mgr = modest_runtime_get_cache_mgr (); - send_queue_cache = modest_cache_mgr_get_cache (cache_mgr, - MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE); - - g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues); - if (send_queues == NULL) { - accounts = tny_simple_list_new (); - accounts_store = modest_runtime_get_account_store (); - tny_account_store_get_accounts (TNY_ACCOUNT_STORE(accounts_store), - accounts, - TNY_ACCOUNT_STORE_TRANSPORT_ACCOUNTS); - - iter = tny_list_create_iterator (accounts); - while (!tny_iterator_is_done (iter)) { - account = TNY_TRANSPORT_ACCOUNT(tny_iterator_get_current (iter)); - send_queue = modest_runtime_get_send_queue(TNY_TRANSPORT_ACCOUNT(account)); - g_object_unref(account); - - queue_status = modest_tny_send_queue_get_msg_status (send_queue, msg_uid); - if (queue_status != MODEST_TNY_SEND_QUEUE_UNKNONW) { - status = queue_status; - break; - } - tny_iterator_next (iter); - } - g_object_unref (iter); - g_object_unref (accounts); - } - else { - for (node = send_queues; node != NULL; node = g_slist_next (node)) { - send_queue = MODEST_TNY_SEND_QUEUE (node->data); - - queue_status = modest_tny_send_queue_get_msg_status (send_queue, msg_uid); - if (queue_status != MODEST_TNY_SEND_QUEUE_UNKNONW) { - status = queue_status; - break; - } - } - } - - g_free(msg_uid); - g_slist_free (send_queues); - return status; -} - static const gchar * get_status_string (ModestTnySendQueueStatus status) { @@ -147,27 +78,35 @@ get_pixbuf_for_flag (TnyHeaderFlags flag) switch (flag) { case TNY_HEADER_FLAG_DELETED: if (G_UNLIKELY(!deleted_pixbuf)) - deleted_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_DELETED); + deleted_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_DELETED, + MODEST_ICON_SIZE_SMALL); return deleted_pixbuf; case TNY_HEADER_FLAG_SEEN: if (G_UNLIKELY(!seen_pixbuf)) - seen_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_READ); + seen_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_READ, + MODEST_ICON_SIZE_SMALL); return seen_pixbuf; case TNY_HEADER_FLAG_ATTACHMENTS: if (G_UNLIKELY(!attachments_pixbuf)) - attachments_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_ATTACH); + attachments_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_ATTACH, + MODEST_ICON_SIZE_SMALL); return attachments_pixbuf; case TNY_HEADER_FLAG_HIGH_PRIORITY: if (G_UNLIKELY(!high_pixbuf)) - high_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_HIGH); + high_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_HIGH, + MODEST_ICON_SIZE_SMALL); return high_pixbuf; case TNY_HEADER_FLAG_LOW_PRIORITY: if (G_UNLIKELY(!low_pixbuf)) - low_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_LOW); + low_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_LOW, + MODEST_ICON_SIZE_SMALL); return low_pixbuf; + case TNY_HEADER_FLAG_NORMAL_PRIORITY: + return NULL; default: if (G_UNLIKELY(!unread_pixbuf)) - unread_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_UNREAD); + unread_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_UNREAD, + MODEST_ICON_SIZE_SMALL); return unread_pixbuf; } } @@ -236,7 +175,6 @@ _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer { TnyHeaderFlags flags; guint date, date_col; - gchar *display_date = NULL; gboolean received = GPOINTER_TO_INT(user_data); if (received) @@ -249,16 +187,18 @@ _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer date_col, &date, -1); - display_date = modest_text_utils_get_display_date (date); - g_object_set (G_OBJECT(renderer), "text", display_date, NULL); + g_object_set (G_OBJECT(renderer), "text", modest_text_utils_get_display_date (date), + NULL); set_common_flags (renderer, flags); - g_free (display_date); } void -_modest_header_view_sender_receiver_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, - GtkTreeModel *tree_model, GtkTreeIter *iter, gboolean is_sender) +_modest_header_view_sender_receiver_cell_data (GtkTreeViewColumn *column, + GtkCellRenderer *renderer, + GtkTreeModel *tree_model, + GtkTreeIter *iter, + gboolean is_sender) { TnyHeaderFlags flags; gchar *address; @@ -274,11 +214,13 @@ _modest_header_view_sender_receiver_cell_data (GtkTreeViewColumn *column, GtkC TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, -1); + modest_text_utils_get_display_address (address); /* string is changed in-place */ g_object_set (G_OBJECT(renderer), "text", - modest_text_utils_get_display_address (address), + address, NULL); g_free (address); + set_common_flags (renderer, flags); } /* @@ -290,27 +232,28 @@ void _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data) { - g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column)); - g_return_if_fail (GTK_IS_CELL_RENDERER (renderer)); - g_return_if_fail (GTK_IS_TREE_MODEL (tree_model)); - /* Note that GtkTreeModel is a GtkTreeModelFilter. */ /* printf ("DEBUG: %s: tree_model gtype=%s\n", __FUNCTION__, G_OBJECT_TYPE_NAME (tree_model)); */ TnyHeaderFlags flags = 0; - TnyHeaderFlags prior_flags = 0; gchar *address = NULL; gchar *subject = NULL; gchar *header = NULL; - time_t date = 0; + time_t date; GtkCellRenderer *recipient_cell, *date_or_status_cell, *subject_cell, *attach_cell, *priority_cell, *recipient_box, *subject_box = NULL; TnyHeader *msg_header = NULL; gchar *display_date = NULL, *tmp_date = NULL; + TnyHeaderFlags prio = 0; + + g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column)); + g_return_if_fail (GTK_IS_CELL_RENDERER (renderer)); + g_return_if_fail (GTK_IS_TREE_MODEL (tree_model)); + recipient_box = GTK_CELL_RENDERER (g_object_get_data (G_OBJECT (renderer), "recpt-box-renderer")); subject_box = GTK_CELL_RENDERER (g_object_get_data (G_OBJECT (renderer), "subject-box-renderer")); priority_cell = GTK_CELL_RENDERER (g_object_get_data (G_OBJECT (subject_box), "priority-renderer")); @@ -326,7 +269,8 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN, &address, TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN, &subject, - TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN, &date, + TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN, &date, + TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, &msg_header, -1); else gtk_tree_model_get (tree_model, iter, @@ -338,7 +282,6 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe -1); /* flags */ /* FIXME: we might gain something by doing all the g_object_set's at once */ - prior_flags = flags & TNY_HEADER_FLAG_PRIORITY; if (flags & TNY_HEADER_FLAG_ATTACHMENTS) g_object_set (G_OBJECT (attach_cell), "pixbuf", get_pixbuf_for_flag (TNY_HEADER_FLAG_ATTACHMENTS), @@ -346,22 +289,18 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe else g_object_set (G_OBJECT (attach_cell), "pixbuf", NULL, NULL); - if (flags & TNY_HEADER_FLAG_PRIORITY) - g_object_set (G_OBJECT (priority_cell), "pixbuf", - get_pixbuf_for_flag (prior_flags), -/* get_pixbuf_for_flag (flags & TNY_HEADER_FLAG_PRIORITY), */ - NULL); - else - g_object_set (G_OBJECT (priority_cell), "pixbuf", - NULL, NULL); + if (msg_header) + prio = tny_header_get_priority (msg_header); + g_object_set (G_OBJECT (priority_cell), "pixbuf", + get_pixbuf_for_flag (prio), + NULL); if (subject && strlen (subject)) { - gchar * escaped_subject = NULL; - - escaped_subject = g_markup_escape_text (subject, -1); + gchar* escaped_subject = g_markup_escape_text (subject, -1); g_object_set (G_OBJECT (subject_cell), "markup", escaped_subject, NULL); + g_free (escaped_subject); } else { g_object_set (G_OBJECT (subject_cell), "markup", _("mail_va_no_subject"), NULL); @@ -372,25 +311,24 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe /* FIXME: we hardcode the color to #666666; instead we should use SecondaryTextColour from the * theme (gtkrc file) */ + modest_text_utils_get_display_address (address); /* changed in-place */ header = g_markup_printf_escaped ("%s", - modest_text_utils_get_display_address (address)); + address); g_free (address); - address = NULL; g_object_set (G_OBJECT (recipient_cell), "markup", header, NULL); g_free (header); header = NULL; set_common_flags (recipient_cell, flags); - + if (header_mode == MODEST_HEADER_VIEW_COMPACT_HEADER_MODE_OUTBOX) { - ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_UNKNONW; + ModestTnySendQueueStatus status = MODEST_TNY_SEND_QUEUE_UNKNOWN; const gchar *status_str = ""; if (msg_header != NULL) { - status = get_status_of_uid (msg_header); + status = modest_tny_all_send_queues_get_msg_status (msg_header); if (status == MODEST_TNY_SEND_QUEUE_SUSPENDED) { - tny_header_unset_flags (msg_header, TNY_HEADER_FLAG_PRIORITY); - tny_header_set_flags (msg_header, TNY_HEADER_FLAG_SUSPENDED_PRIORITY); + tny_header_set_flag (msg_header, TNY_HEADER_FLAG_SUSPENDED); } } @@ -401,16 +339,9 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe NULL); g_free (display_date); display_date = NULL; - } else { - /* in some rare cases, mail might have no Date: field. it case, - * don't show the date, instead of bogus 1/1/1970 - */ - if (date) - tmp_date = modest_text_utils_get_display_date (date); - else - tmp_date = g_strdup (""); - - display_date = g_strdup_printf ("%s", tmp_date); + } else { + display_date = g_strdup_printf ("%s", + date ? modest_text_utils_get_display_date (date) : ""); g_object_set (G_OBJECT (date_or_status_cell), "markup", display_date, NULL); @@ -454,16 +385,15 @@ _modest_header_view_status_cell_data (GtkTreeViewColumn *column, GtkCellRender GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data) { - TnyHeaderFlags flags, prior_flags; + TnyHeaderFlags flags; //guint status; gchar *status_str; gtk_tree_model_get (tree_model, iter, TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, -1); - - prior_flags = flags & TNY_HEADER_FLAG_PRIORITY; - if (prior_flags == TNY_HEADER_FLAG_SUSPENDED_PRIORITY) + + if (flags & TNY_HEADER_FLAG_SUSPENDED) status_str = g_strdup(_("mcen_li_outbox_suspended")); else status_str = g_strdup(_("mcen_li_outbox_waiting"));