~ubuntu-branches/ubuntu/precise/evolution/precise

« back to all changes in this revision

Viewing changes to plugins/groupwise-features/status-track.c

  • Committer: Bazaar Package Importer
  • Author(s): Mathieu Trudel-Lapierre
  • Date: 2011-06-24 00:27:53 UTC
  • mfrom: (1.1.80 upstream)
  • Revision ID: james.westby@ubuntu.com-20110624002753-2vh1vjavlya7r103
Tags: 3.1.2-0ubuntu1
* New upstream release 3.1.2.
* debian/control: adjust Build-Depends to match new upstream requirements for
  the new release.
* debian/control: update evolution and evolution-dev Depends to require the
  right versions of e-d-s (>= 3.1, << 3.2), and drop libunique-3.0-dev.
* debian/control,
  debian/evolution.install: remove groupwise-features from the plugin list,
  it's now split out into a separate module.
* debian/patches/03_lpi.patch: refreshed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
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.
6
 
 *
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.
11
 
 *
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/>
14
 
 *
15
 
 *
16
 
 * Authors:
17
 
 *              Chenthill Palanisamy <pchenthill@novell.com>
18
 
 *          Parthasarathi Susarla <sparthasarathi@novell.com>
19
 
 *          Sankar P <psankar@novell.com>
20
 
 *
21
 
 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
22
 
 *
23
 
 */
24
 
 
25
 
#ifdef HAVE_CONFIG_H
26
 
#include "config.h"
27
 
#endif
28
 
 
29
 
#include <glib/gi18n-lib.h>
30
 
#include <string.h>
31
 
#include <stdio.h>
32
 
#include <time.h>
33
 
#include <gtk/gtk.h>
34
 
 
35
 
#include <mail/e-mail-reader.h>
36
 
#include <mail/em-utils.h>
37
 
#include <mail/message-list.h>
38
 
 
39
 
#include <e-gw-connection.h>
40
 
 
41
 
#include "gw-ui.h"
42
 
#include "share-folder.h"
43
 
 
44
 
static gchar *
45
 
format_date (const gchar * value)
46
 
{
47
 
        time_t time;
48
 
        gchar *str;
49
 
 
50
 
        time = e_gw_connection_get_date_from_string (value);
51
 
        str = ctime (&time);
52
 
 
53
 
        str[strlen (str)-1] = '\0';
54
 
        return str;
55
 
}
56
 
 
57
 
static CamelMimeMessage *
58
 
get_selected_message (EShellView *shell_view,
59
 
                      CamelFolder **folder,
60
 
                      gchar **selected_uid)
61
 
{
62
 
        CamelMimeMessage *msg = NULL;
63
 
        EShellContent *shell_content;
64
 
        EMailReader *reader;
65
 
        GPtrArray *uids;
66
 
 
67
 
        shell_content = e_shell_view_get_shell_content (shell_view);
68
 
 
69
 
        reader = E_MAIL_READER (shell_content);
70
 
        uids = e_mail_reader_get_selected_uids (reader);
71
 
 
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));
75
 
 
76
 
                /* FIXME Not passing a GCancellable or GError here. */
77
 
                msg = camel_folder_get_message_sync (
78
 
                        *folder, *selected_uid, NULL, NULL);
79
 
        }
80
 
 
81
 
        em_utils_uids_free (uids);
82
 
 
83
 
        return msg;
84
 
}
85
 
 
86
 
void
87
 
gw_track_message_status_cb (GtkAction *action,
88
 
                            EShellView *shell_view)
89
 
{
90
 
        CamelMimeMessage *msg = NULL;
91
 
        CamelFolder *folder = NULL;
92
 
        gchar *selected_uid = NULL;
93
 
        CamelInternetAddress *from;
94
 
        const gchar *namep, *addp;
95
 
 
96
 
        GtkDialog *d;
97
 
        GtkTable *table;
98
 
        GtkWidget *widget;
99
 
        GtkWidget *content_area;
100
 
        GtkScrolledWindow *win;
101
 
        GtkVBox *vbox;
102
 
 
103
 
        time_t time;
104
 
        gchar *time_str;
105
 
 
106
 
        gchar *boldmsg;
107
 
 
108
 
        gint row = 0;
109
 
 
110
 
        EGwConnection *cnc;
111
 
        EGwItem *gwitem;
112
 
 
113
 
        /* Get message */
114
 
        msg = get_selected_message (shell_view, &folder, &selected_uid);
115
 
        if (!msg) {
116
 
                g_print ("Error!! No message\n");
117
 
                g_free (selected_uid);
118
 
                return;
119
 
        }
120
 
 
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"));
126
 
 
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);
134
 
 
135
 
        gtk_table_set_col_spacings (table ,12);
136
 
        gtk_table_set_row_spacings (table, 6);
137
 
 
138
 
        /* Subject */
139
 
        boldmsg = g_strdup_printf ("<b>%s</b>", _("Subject:"));
140
 
        widget = gtk_label_new (boldmsg);
141
 
        g_free (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);
148
 
        row++;
149
 
 
150
 
        /* From */
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);
155
 
        g_free (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);
162
 
        row++;
163
 
 
164
 
        /* creation date */
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);
170
 
        g_free (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);
177
 
        row++;
178
 
 
179
 
        /* spacing */
180
 
        widget = gtk_label_new ("");
181
 
        gtk_table_attach (table, widget, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0);
182
 
 
183
 
        /* Table headers */
184
 
        row = 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));
190
 
 
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)
198
 
                {
199
 
                        EGwItemRecipient *recipient;
200
 
                        GString *label = NULL;
201
 
                        GtkLabel *detail;
202
 
 
203
 
                        label = g_string_new("");
204
 
                        recipient = recipient_list->data;
205
 
 
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');
212
 
                        }
213
 
 
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');
218
 
                        }
219
 
 
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');
224
 
                        }
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');
229
 
                        }
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');
234
 
                        }
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');
239
 
                        }
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');
244
 
                        }
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');
249
 
                        }
250
 
 
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);
255
 
                        gtk_table_attach (
256
 
                                table, GTK_WIDGET (detail),
257
 
                                1, 2, row, row + 1, GTK_FILL, 0, 0, 0);
258
 
                        row++;
259
 
                }
260
 
        }
261
 
 
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));
267
 
        else
268
 
                gtk_widget_destroy (GTK_WIDGET (d));
269
 
 
270
 
        g_free (selected_uid);
271
 
}