2
* This program is free software; you can redistribute it and/or
3
* modify it under the terms of the GNU Lesser General Public
4
* License as published by the Free Software Foundation; either
5
* version 2 of the License, or (at your option) version 3.
7
* This program is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
* Lesser General Public License for more details.
12
* You should have received a copy of the GNU Lesser General Public
13
* License along with the program; if not, see <http://www.gnu.org/licenses/>
17
* Chenthill Palanisamy <pchenthill@novell.com>
18
* Parthasarathi Susarla <sparthasarathi@novell.com>
19
* Sankar P <psankar@novell.com>
21
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
29
#include <glib/gi18n-lib.h>
35
#include <mail/e-mail-reader.h>
36
#include <mail/em-utils.h>
37
#include <mail/message-list.h>
39
#include <e-gw-connection.h>
42
#include "share-folder.h"
45
format_date (const gchar * value)
50
time = e_gw_connection_get_date_from_string (value);
53
str[strlen (str)-1] = '\0';
57
static CamelMimeMessage *
58
get_selected_message (EShellView *shell_view,
62
CamelMimeMessage *msg = NULL;
63
EShellContent *shell_content;
67
shell_content = e_shell_view_get_shell_content (shell_view);
69
reader = E_MAIL_READER (shell_content);
70
uids = e_mail_reader_get_selected_uids (reader);
72
if (uids && uids->len == 1) {
73
*folder = e_mail_reader_get_folder (reader);
74
*selected_uid = g_strdup (g_ptr_array_index (uids, 0));
76
/* FIXME Not passing a GCancellable or GError here. */
77
msg = camel_folder_get_message_sync (
78
*folder, *selected_uid, NULL, NULL);
81
em_utils_uids_free (uids);
87
gw_track_message_status_cb (GtkAction *action,
88
EShellView *shell_view)
90
CamelMimeMessage *msg = NULL;
91
CamelFolder *folder = NULL;
92
gchar *selected_uid = NULL;
93
CamelInternetAddress *from;
94
const gchar *namep, *addp;
99
GtkWidget *content_area;
100
GtkScrolledWindow *win;
114
msg = get_selected_message (shell_view, &folder, &selected_uid);
116
g_print ("Error!! No message\n");
117
g_free (selected_uid);
121
/* Create the dialog */
122
d = (GtkDialog *) gtk_dialog_new ();
123
content_area = gtk_dialog_get_content_area (d);
124
gtk_dialog_add_button (d, GTK_STOCK_OK, GTK_RESPONSE_OK);
125
gtk_window_set_title (GTK_WINDOW (d), _("Message Status"));
127
table = (GtkTable *) gtk_table_new (1, 2, FALSE);
128
win = (GtkScrolledWindow *) gtk_scrolled_window_new (NULL, NULL);
129
gtk_container_add (GTK_CONTAINER (content_area), GTK_WIDGET (win));
130
vbox = (GtkVBox *) gtk_vbox_new (FALSE, 12);
131
gtk_scrolled_window_add_with_viewport (win, GTK_WIDGET (vbox));
132
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (table), FALSE, TRUE, 0);
133
gtk_scrolled_window_set_policy (win, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
135
gtk_table_set_col_spacings (table ,12);
136
gtk_table_set_row_spacings (table, 6);
139
boldmsg = g_strdup_printf ("<b>%s</b>", _("Subject:"));
140
widget = gtk_label_new (boldmsg);
142
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
143
gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
144
gtk_table_attach (table, widget , 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
145
widget = gtk_label_new (camel_mime_message_get_subject (msg));
146
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
147
gtk_table_attach (table, widget , 1, 2, row, row + 1, GTK_FILL, 0, 0, 0);
151
from = camel_mime_message_get_from (msg);
152
camel_internet_address_get (from, 0, &namep, &addp);
153
boldmsg = g_strdup_printf ("<b>%s</b>", _("From:"));
154
widget = gtk_label_new (boldmsg);
156
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
157
gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
158
gtk_table_attach (table, widget , 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
159
widget = gtk_label_new (namep);
160
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
161
gtk_table_attach (table, widget , 1, 2, row, row + 1, GTK_FILL, 0, 0, 0);
165
time = camel_mime_message_get_date (msg, NULL);
166
time_str = ctime (&time);
167
time_str[strlen (time_str)-1] = '\0' ;
168
boldmsg = g_strdup_printf ("<b>%s</b>", _("Creation date:"));
169
widget = gtk_label_new (boldmsg);
171
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
172
gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
173
gtk_table_attach (table, widget , 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
174
widget = gtk_label_new (time_str);
175
gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
176
gtk_table_attach (table, widget , 1, 2, row, row + 1, GTK_FILL, 0, 0, 0);
180
widget = gtk_label_new ("");
181
gtk_table_attach (table, widget, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
185
table = (GtkTable *) gtk_table_new (1, 3, FALSE);
186
gtk_table_set_col_spacings (table ,12);
187
gtk_table_set_row_spacings (table, 6);
188
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (table), FALSE, TRUE, 0);
189
cnc = get_cnc (camel_folder_get_parent_store (folder));
191
if (E_IS_GW_CONNECTION (cnc)) {
192
GSList *recipient_list;
193
e_gw_connection_get_item (
194
cnc, get_container_id (cnc, "Sent Items"),
195
selected_uid, "distribution recipientStatus", &gwitem);
196
recipient_list = e_gw_item_get_recipient_list (gwitem);
197
for (;recipient_list != NULL; recipient_list = recipient_list->next)
199
EGwItemRecipient *recipient;
200
GString *label = NULL;
203
label = g_string_new("");
204
recipient = recipient_list->data;
206
if (recipient->display_name) {
207
label = g_string_append (label, "<b>");
208
label = g_string_append (label, _("Recipient: "));
209
label = g_string_append (label, recipient->display_name);
210
label = g_string_append (label, "</b>");
211
label = g_string_append_c (label, '\n');
214
if (recipient->delivered_date) {
215
label = g_string_append (label, _("Delivered: "));
216
label = g_string_append (label, format_date (recipient->delivered_date));
217
label = g_string_append_c (label, '\n');
220
if (recipient->opened_date) {
221
label = g_string_append (label, _("Opened: "));
222
label = g_string_append (label, format_date (recipient->opened_date));
223
label = g_string_append_c (label, '\n');
225
if (recipient->accepted_date) {
226
label = g_string_append (label, _("Accepted: "));
227
label = g_string_append (label, format_date (recipient->accepted_date));
228
label = g_string_append_c (label, '\n');
230
if (recipient->deleted_date) {
231
label = g_string_append (label, _("Deleted: "));
232
label = g_string_append (label, format_date (recipient->deleted_date));
233
label = g_string_append_c (label, '\n');
235
if (recipient->declined_date) {
236
label = g_string_append (label, _("Declined: "));
237
label = g_string_append (label, format_date (recipient->declined_date));
238
label = g_string_append_c (label, '\n');
240
if (recipient->completed_date) {
241
label = g_string_append (label, _("Completed: "));
242
label = g_string_append (label, format_date (recipient->completed_date));
243
label = g_string_append_c (label, '\n');
245
if (recipient->undelivered_date) {
246
label = g_string_append (label, _("Undelivered: "));
247
label = g_string_append (label, format_date (recipient->undelivered_date));
248
label = g_string_append_c (label, '\n');
251
detail = GTK_LABEL (gtk_label_new (label->str));
252
g_string_free (label, TRUE);
253
gtk_label_set_selectable (detail, TRUE);
254
gtk_label_set_use_markup (detail, TRUE);
256
table, GTK_WIDGET (detail),
257
1, 2, row, row + 1, GTK_FILL, 0, 0, 0);
262
/* set size and display the dialog */
263
gtk_widget_set_size_request (GTK_WIDGET (win), 400, 300);
264
gtk_widget_show_all (GTK_WIDGET (d));
265
if (gtk_dialog_run (d) == GTK_RESPONSE_OK)
266
gtk_widget_destroy (GTK_WIDGET (d));
268
gtk_widget_destroy (GTK_WIDGET (d));
270
g_free (selected_uid);