~cairo-dock-team/ubuntu/precise/cairo-dock-plug-ins/3.0.0.0rc1

« back to all changes in this revision

Viewing changes to mail/src/cd-mail-applet-notifications.c

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne, Matthieu Baerts (matttbe), Julien Lavergne
  • Date: 2009-10-05 19:27:17 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20091005192717-mvqvb395guktr401
Tags: 2.0.9-0ubuntu1
[ Matthieu Baerts (matttbe) ]
* New upstream release (LP: #435590)
* debian/control: 
 - Remove ${shlibs:Depends} for integration plug-ins to avoid
   pulling shared libraries which are detected automatically.
 - Added curl as depends for cairo-dock-plug-ins
* debian/rules:
 - Add --enable-dnd2share and --enable-musicplayer to enable new applets.
 - Remove --enable-rhythmbox and --enable-nvidia to remove those applets,
   not maintained upstream.
* Update *.install to take all generated applets.

[ Julien Lavergne ]
* Adjust changelog with Daniel Holbach suggestions.
* cairo-dock-plug-ins.changelogs:  Install specific changelog for 2.0.9
* Build-depends on cairo-dock-dev (>= 2.0.9)

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
18
*/
19
19
 
20
 
/******************************************************************************
21
 
 
22
 
This file is a part of the cairo-dock program,
23
 
released under the terms of the GNU General Public License.
24
 
 
25
 
Written by Fabrice Rey (for any bug report, please mail me to fabounet@users.berlios.de)
26
 
 
27
 
******************************************************************************/
28
 
 
29
20
#include <stdlib.h>
30
21
#include <string.h>
31
22
#include <glib/gi18n.h>
126
117
 
127
118
CD_APPLET_ON_BUILD_MENU_END
128
119
 
 
120
void _cd_mail_show_current_mail(CDMailAccount *pMailAccount)
 
121
{
 
122
        CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
 
123
        GList *l = pMailAccount->pUnseenMessageList;
 
124
        gchar *cMessage = "";
 
125
        gint i = myData.iCurrentlyShownMail;
 
126
 
 
127
        if( myData.iCurrentlyShownMail < 0 )
 
128
                myData.iCurrentlyShownMail = 0;
 
129
        
 
130
        for( ; i > 0 && l != NULL; i-- )
 
131
        {
 
132
                if( l->next == NULL ) break;
 
133
                l = l->next;
 
134
        }
 
135
        if( i > 0 ) // just in case, to stay inside boundaries
 
136
        {
 
137
                myData.iCurrentlyShownMail -= i;
 
138
        }
 
139
        if( l )
 
140
                cMessage = l->data;
 
141
  gtk_text_buffer_set_text(myData.pTextBuffer, cMessage, -1);
 
142
 
 
143
        if( myData.iCurrentlyShownMail == 0 )
 
144
        {
 
145
                gtk_widget_set_sensitive( myData.pPrevButton, FALSE );          
 
146
        }
 
147
        else
 
148
        {
 
149
                gtk_widget_set_sensitive( myData.pPrevButton, TRUE );           
 
150
        }
 
151
        if( l->next == NULL )
 
152
        {
 
153
                gtk_widget_set_sensitive( myData.pNextButton, FALSE );
 
154
        }
 
155
        else
 
156
        {
 
157
                gtk_widget_set_sensitive( myData.pNextButton, TRUE );           
 
158
        }
 
159
}
 
160
 
 
161
void _cd_mail_show_prev_mail_cb(GtkWidget *widget, CDMailAccount *pMailAccount)
 
162
{
 
163
        CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
 
164
 
 
165
        myData.iCurrentlyShownMail--;
 
166
        _cd_mail_show_current_mail(pMailAccount);
 
167
}
 
168
 
 
169
void _cd_mail_show_next_mail_cb(GtkWidget *widget, CDMailAccount *pMailAccount)
 
170
{
 
171
        CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
 
172
 
 
173
        myData.iCurrentlyShownMail++;
 
174
        _cd_mail_show_current_mail(pMailAccount);
 
175
}
 
176
 
 
177
void _cd_mail_close_preview_cb(GtkWidget *widget, CDMailAccount *pMailAccount)
 
178
{
 
179
        CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
 
180
 
 
181
        if( myData.pMessagesDialog != NULL )
 
182
        {
 
183
                cairo_dock_dialog_unreference (myData.pMessagesDialog);
 
184
                myData.pMessagesDialog = NULL;
 
185
        }
 
186
}
 
187
 
 
188
GtkWidget *cd_mail_messages_container_new(CDMailAccount *pMailAccount)
 
189
{
 
190
        CairoDockModuleInstance *myApplet = pMailAccount->pAppletInstance;
 
191
 
 
192
        /*
 
193
         * Appearance of the container:
 
194
         * ____________________________
 
195
         * | Subject: xxxxxx           |    <---- simple text area
 
196
         * | From:    xxxxxx           |    <---- simple text area
 
197
         * | bla bla blablabla bla .. ^|
 
198
         * | .. blla blablabla bla .. ||    <---- this is a multi-line, scrollable text
 
199
         * | bla ... abl  abla.       v|
 
200
         * | <--       CLOSE       --> |    <---- 3 buttons, attached Left,Center,Right
 
201
         * -----------------------------
 
202
         */
 
203
        GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
 
204
 
 
205
        GtkWidget *pTextView = gtk_text_view_new();
 
206
        gtk_text_view_set_editable(GTK_TEXT_VIEW(pTextView), FALSE);
 
207
        gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(pTextView), FALSE);
 
208
        gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(pTextView), GTK_WRAP_WORD );
 
209
 
 
210
        myData.pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
 
211
 
 
212
        GtkWidget* pScrolledWindow = gtk_scrolled_window_new(NULL, NULL);
 
213
        gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(pScrolledWindow), pTextView );
 
214
        gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(pScrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
 
215
        
 
216
        gtk_box_pack_start(GTK_BOX(vbox), pScrolledWindow, TRUE, TRUE, 0);
 
217
        
 
218
        GtkWidget *hbox = gtk_hbox_new(TRUE, 0);
 
219
        myData.pPrevButton = gtk_button_new_from_stock( GTK_STOCK_GO_BACK );
 
220
        GtkWidget *pCloseButton = gtk_button_new_from_stock( GTK_STOCK_CLOSE );
 
221
        myData.pNextButton = gtk_button_new_from_stock( GTK_STOCK_GO_FORWARD );
 
222
 
 
223
        gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(myData.pPrevButton), FALSE, FALSE, 0);
 
224
        gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(pCloseButton), TRUE, FALSE, 0);
 
225
        gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(myData.pNextButton), FALSE, FALSE, 0);
 
226
 
 
227
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
 
228
        
 
229
        // then we need to put the callbacks
 
230
        gtk_signal_connect( GTK_OBJECT(myData.pPrevButton), "clicked", G_CALLBACK(_cd_mail_show_prev_mail_cb), (gpointer)pMailAccount );
 
231
        gtk_signal_connect( GTK_OBJECT(myData.pNextButton), "clicked", G_CALLBACK(_cd_mail_show_next_mail_cb), (gpointer)pMailAccount );
 
232
        gtk_signal_connect( GTK_OBJECT(pCloseButton),       "clicked", G_CALLBACK(_cd_mail_close_preview_cb), (gpointer)pMailAccount );
 
233
 
 
234
        GList *l = pMailAccount->pUnseenMessageList;
 
235
        gchar *cMessage = "";
 
236
        if( l )
 
237
                cMessage = l->data;
 
238
 
 
239
  gtk_text_buffer_set_text(myData.pTextBuffer, cMessage, -1);
 
240
        myData.iCurrentlyShownMail = 0;
 
241
 
 
242
        gtk_widget_set_sensitive( myData.pPrevButton, FALSE );
 
243
        if( l->next == NULL )
 
244
        {
 
245
                gtk_widget_set_sensitive( myData.pNextButton, FALSE );
 
246
        }
 
247
 
 
248
        return vbox;
 
249
}
129
250
 
130
251
CD_APPLET_ON_SCROLL_BEGIN
131
252
        if (myData.pMailAccounts == NULL)
133
254
 
134
255
        CDMailAccount *pMailAccount;
135
256
        guint i;
 
257
        int r;
136
258
        for (i = 0; i < myData.pMailAccounts->len; i++)
137
259
        {
138
260
                pMailAccount = g_ptr_array_index (myData.pMailAccounts, i);
139
 
                if (pMailAccount->name && (myData.pMailAccounts->len == 1 || strcmp (pMailAccount->name, CD_APPLET_CLICKED_ICON->acName) == 0))
 
261
                if (pMailAccount->name && (myData.pMailAccounts->len == 1 || strcmp (pMailAccount->name, CD_APPLET_CLICKED_ICON->cName) == 0))
140
262
                        break ;
141
263
        }
142
264
        if (i == myData.pMailAccounts->len || pMailAccount == NULL)
148
270
                return CAIRO_DOCK_LET_PASS_NOTIFICATION;
149
271
        }
150
272
        
151
 
        struct mail_flags *pFlags = NULL;
152
 
        mailmessage *pMessage = NULL;
153
 
        int r;
154
 
        GList *l;
 
273
        /* Ensure the connection is alive */
 
274
        r = mailfolder_connect(pMailAccount->folder);
 
275
        if (r != MAIL_NO_ERROR)  // no connexion, we keep the previous satus.
 
276
        {
 
277
                cd_warning ("mail : couldn't connect to '%s'", pMailAccount->name);
 
278
                pMailAccount->bError = TRUE;
 
279
        }
 
280
        
 
281
        {
 
282
                if( myData.pMessagesDialog == NULL )
 
283
                {
 
284
                        g_print( "Displaying messages\n" );
 
285
                        if( pMailAccount->pUnseenMessageList != NULL )
 
286
                        {
 
287
                                myData.pMessagesDialog = cairo_dock_show_dialog_full (_("Mail"),
 
288
                                        myIcon, myContainer,
 
289
                                        0,
 
290
                                        "same icon",
 
291
                                        cd_mail_messages_container_new(pMailAccount),
 
292
                                        NULL, NULL, NULL);
 
293
                        }
 
294
                }
 
295
                else
 
296
                {
 
297
                        // scroll one message
 
298
                        if (CD_APPLET_SCROLL_DOWN)
 
299
                        {
 
300
                                _cd_mail_show_prev_mail_cb(NULL, pMailAccount);
 
301
                        }
 
302
                        else if (CD_APPLET_SCROLL_UP)
 
303
                        {
 
304
                                _cd_mail_show_next_mail_cb(NULL, pMailAccount);
 
305
                        }
 
306
                }
 
307
        }
 
308
        
 
309
        GList *l, *l_Uid;
155
310
        gchar *cMessage;
156
 
        for (l = pMailAccount->pUnseenMessageList; l != NULL; l = l->next)
 
311
        gchar *cMessageUid;
 
312
        mailmessage *pMessage;
 
313
        for (i = 1, l = pMailAccount->pUnseenMessageList, l_Uid = pMailAccount->pUnseenMessageUid; l != NULL && l_Uid != NULL; l = l->next, l_Uid = l_Uid->next, i++)
157
314
        {
158
315
                cMessage = l->data;
159
 
                cairo_dock_remove_dialog_if_any (CD_APPLET_CLICKED_ICON);
160
 
                cairo_dock_show_temporary_dialog_with_icon (cMessage, CD_APPLET_CLICKED_ICON, CD_APPLET_CLICKED_CONTAINER, 10e3, "same icon");
 
316
                cMessageUid = l_Uid->data;
 
317
                pMessage = NULL;
161
318
                
162
 
                // on marque le message comme lu.
163
 
                ///r = mailmessage_get_flags (pMessage, &pFlags);
 
319
                // on marque le compte comme lu.
 
320
                if( !pMailAccount->bError )
 
321
                {
 
322
                        struct mail_flags *pFlags = NULL;
 
323
 
 
324
                        // on marque le message comme lu.
 
325
                        cd_message ("Fetching message number %d...\n", i);
 
326
                        
 
327
                        r = mailfolder_get_message_by_uid (pMailAccount->folder, cMessageUid, &pMessage);  /// or result_messages - i ?...
 
328
                        if (r != MAIL_NO_ERROR || pMessage == NULL)
 
329
                        {
 
330
                                cd_warning ("couldn't get the message number %d", i);
 
331
                                continue;
 
332
                        }
 
333
                        r = mailmessage_get_flags (pMessage, &pFlags);
 
334
                        if (r != MAIL_NO_ERROR || pFlags == NULL)
 
335
                        {
 
336
                                cd_warning ("couldn't get the message flags !", i);
 
337
                                mailmessage_free (pMessage);
 
338
                                continue;
 
339
                        }
 
340
                        
 
341
                        pFlags->fl_flags &= ~MAIL_FLAG_NEW;
 
342
                        pFlags->fl_flags |= MAIL_FLAG_SEEN;
 
343
                        
 
344
                        r = mailmessage_check( pMessage );
 
345
                        mailmessage_free (pMessage);
 
346
                }
164
347
        }
165
348
        
166
349
CD_APPLET_ON_SCROLL_END