~jroose/cairo-dock-plug-ins/Messaging-Menu-alaric-devel

« back to all changes in this revision

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

  • Committer: jroose at gmail
  • Date: 2010-11-18 14:43:40 UTC
  • Revision ID: jroose@gmail.com-20101118144340-qvrs0rmanr5lr1mj
Messaging-Menu

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
* This file is a part of the Cairo-Dock project
 
3
*
 
4
* Copyright : (C) see the 'copyright' file.
 
5
* E-mail    : see the 'copyright' file.
 
6
*
 
7
* This program is free software; you can redistribute it and/or
 
8
* modify it under the terms of the GNU General Public License
 
9
* as published by the Free Software Foundation; either version 3
 
10
* of the License, or (at your option) any later version.
 
11
*
 
12
* This program is distributed in the hope that it will be useful,
 
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
* GNU General Public License for more details.
 
16
* You should have received a copy of the GNU General Public License
 
17
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
18
*/
 
19
 
 
20
#include <stdlib.h>
 
21
#include <math.h>
 
22
#include <glib.h>
 
23
#include <glib/gstdio.h>
 
24
 
 
25
#include "cd-mail-applet-config.h"
 
26
#include "cd-mail-applet-notifications.h"
 
27
#include "cd-mail-applet-struct.h"
 
28
#include "cd-mail-applet-accounts.h"
 
29
#include "cd-mail-applet-etpan.h"
 
30
#include "cd-mail-applet-init.h"
 
31
 
 
32
 
 
33
CD_APPLET_DEFINE_BEGIN (N_("mail"),
 
34
        2, 0, 0,
 
35
        CAIRO_DOCK_CATEGORY_APPLET_INTERNET,
 
36
        N_("This applet is very useful to warn you when you get new e-mails\n"
 
37
        "It can check in any kind of mailbox (yahoo, gmail, etc)\n"
 
38
        "Left-click to launch the prefered mail application,\n"
 
39
        "Middle-click to refresh all the mailboxes."),
 
40
        "Tofe (Christophe Chapuis) &amp; Fabounet (Fabrice Rey)")
 
41
        CD_APPLET_DEFINE_COMMON_APPLET_INTERFACE
 
42
        pInterface->load_custom_widget = cd_mail_load_custom_widget;
 
43
        pInterface->save_custom_widget = cd_mail_save_custom_widget;
 
44
CD_APPLET_DEFINE_END
 
45
 
 
46
 
 
47
GLuint cd_mail_load_cube_calllist (void)
 
48
{
 
49
        GLuint iCallList = glGenLists (1);
 
50
        glNewList(iCallList, GL_COMPILE); // Go pour la compilation de la display list
 
51
        glPolygonMode (GL_FRONT, GL_FILL);
 
52
        
 
53
        double a = .5 / sqrt (2);
 
54
        glBegin(GL_QUADS);
 
55
        // Front Face (note that the texture's corners have to match the quad's corners)
 
56
  //glColor3f(1.0f,0.5f,0.0f);
 
57
        glNormal3f(0,0,1);
 
58
        glTexCoord2d(0., 0.); glVertex3f(-a,  a,  a);  // Bottom Left Of The Texture and Quad
 
59
        glTexCoord2d(1., 0.); glVertex3f( a,  a,  a);  // Bottom Right Of The Texture and Quad
 
60
        glTexCoord2d(1., 1.); glVertex3f( a, -a,  a);  // Top Right Of The Texture and Quad
 
61
        glTexCoord2d(0., 1.); glVertex3f(-a, -a,  a);  // Top Left Of The Texture and Quad
 
62
        // Back Face
 
63
        glNormal3f(0,0,-1);
 
64
        glTexCoord2d(1., 0.); glVertex3f( -a, a, -a);  // Bottom Right Of The Texture and Quad
 
65
        glTexCoord2d(1., 1.); glVertex3f( -a, -a, -a);  // Top Right Of The Texture and Quad
 
66
        glTexCoord2d(0., 1.); glVertex3f(a, -a, -a);  // Top Left Of The Texture and Quad
 
67
        glTexCoord2d(0., 0.); glVertex3f(a, a, -a);  // Bottom Left Of The Texture and Quad
 
68
        // Top Face
 
69
  //glColor3f(1.0f,0.f,1.0f);
 
70
        glNormal3f(0,1,0);
 
71
        glTexCoord2d(0., 1.); glVertex3f(-a,  a,  a);  // Top Left Of The Texture and Quad
 
72
        glTexCoord2d(0., 0.); glVertex3f(-a,  a, -a);  // Bottom Left Of The Texture and Quad
 
73
        glTexCoord2d(1., 0.); glVertex3f( a,  a, -a);  // Bottom Right Of The Texture and Quad
 
74
        glTexCoord2d(1., 1.); glVertex3f( a,  a,  a);  // Top Right Of The Texture and Quad
 
75
        // Bottom Face
 
76
        glNormal3f(0,-1,0);
 
77
        glTexCoord2d(1., 1.); glVertex3f( a, -a, -a);  // Top Right Of The Texture and Quad
 
78
        glTexCoord2d(0., 1.); glVertex3f(-a, -a, -a);  // Top Left Of The Texture and Quad
 
79
        glTexCoord2d(0., 0.); glVertex3f(-a, -a,  a);  // Bottom Left Of The Texture and Quad
 
80
        glTexCoord2d(1., 0.); glVertex3f( a, -a,  a);  // Bottom Right Of The Texture and Quad
 
81
        // Right face
 
82
  //glColor3f(0.f,0.5f,1.0f);
 
83
        glNormal3f(1,0,0);
 
84
        glTexCoord2d(1., 0.);  glVertex3f( a,  a, -a);  // Bottom Right Of The Texture and Quad
 
85
        glTexCoord2d(1., 1.);  glVertex3f( a, -a, -a);  // Top Right Of The Texture and Quad
 
86
        glTexCoord2d(0., 1.);  glVertex3f( a, -a,  a);  // Top Left Of The Texture and Quad
 
87
        glTexCoord2d(0., 0.);  glVertex3f( a,  a,  a);  // Bottom Left Of The Texture and Quad
 
88
        // Left Face
 
89
        glNormal3f(-1,0,0);
 
90
        glTexCoord2d(0., 0.);  glVertex3f(-a,  a, -a);  // Bottom Left Of The Texture and Quad
 
91
        glTexCoord2d(1., 0.);  glVertex3f(-a,  a,  a);  // Bottom Right Of The Texture and Quad
 
92
        glTexCoord2d(1., 1.);  glVertex3f(-a, -a,  a);  // Top Right Of The Texture and Quad
 
93
        glTexCoord2d(0., 1.);  glVertex3f(-a, -a, -a);  // Top Left Of The Texture and Quad
 
94
        glEnd();
 
95
        
 
96
        glEndList(); // Fini la display list
 
97
        return iCallList;
 
98
}
 
99
 
 
100
 
 
101
static void _load_theme (CairoDockModuleInstance *myApplet, GError **erreur)
 
102
{
 
103
        //\_______________ On charge le theme si necessaire, avec en priorite les images utilisateur.
 
104
        if (myConfig.cNoMailUserImage != NULL)
 
105
        {
 
106
                gchar *cPath = cairo_dock_search_icon_s_path (myConfig.cNoMailUserImage);
 
107
                if (! g_file_test (cPath, G_FILE_TEST_EXISTS))
 
108
                {
 
109
                        g_free (myConfig.cNoMailUserImage);
 
110
                        myConfig.cNoMailUserImage = NULL;
 
111
                }
 
112
                g_free (cPath);
 
113
        }
 
114
        if (myConfig.cHasMailUserImage != NULL)
 
115
        {
 
116
                gchar *cPath = cairo_dock_search_icon_s_path (myConfig.cHasMailUserImage);
 
117
                if (! g_file_test (cPath, G_FILE_TEST_EXISTS))
 
118
                {
 
119
                        g_free (myConfig.cHasMailUserImage);
 
120
                        myConfig.cHasMailUserImage = NULL;
 
121
                }
 
122
                g_free (cPath);
 
123
        }
 
124
        if (myConfig.cThemePath != NULL && (myConfig.cNoMailUserImage == NULL || myConfig.cHasMailUserImage == NULL))
 
125
        {
 
126
                GError *tmp_erreur = NULL;
 
127
                GDir *dir = g_dir_open (myConfig.cThemePath, 0, &tmp_erreur);
 
128
                if (tmp_erreur != NULL)
 
129
                {
 
130
                        g_propagate_error (erreur, tmp_erreur);
 
131
                        return ;
 
132
                }
 
133
                
 
134
                const gchar *cElementName;
 
135
                gchar *cElementPath;
 
136
                while ((cElementName = g_dir_read_name (dir)) != NULL)
 
137
                {
 
138
                        cElementPath = g_strdup_printf ("%s/%s", myConfig.cThemePath, cElementName);
 
139
                        cd_debug ("  Mail theme item: %s", cElementPath);
 
140
                        if (strncmp (cElementName, "no_mail", 7) == 0 && myConfig.cNoMailUserImage == NULL)
 
141
                        {
 
142
                                myConfig.cNoMailUserImage = cElementPath;
 
143
                        }
 
144
                        else if (strncmp (cElementName, "has_mail", 8) == 0 && myConfig.cHasMailUserImage == NULL)
 
145
                        {
 
146
                                myConfig.cHasMailUserImage = cElementPath;
 
147
                        }
 
148
                        else if (strncmp (cElementName, "new_mail_sound", 14) == 0 && myConfig.cNewMailUserSound == NULL)
 
149
                        {
 
150
                                myConfig.cNewMailUserSound = cElementPath;
 
151
                        }
 
152
                        else
 
153
                        {
 
154
                                g_free (cElementPath);
 
155
                        }
 
156
                }
 
157
                g_dir_close (dir);
 
158
        }
 
159
        if (myConfig.cNoMailUserImage == NULL || myConfig.cHasMailUserImage == NULL || myConfig.cNewMailUserSound == NULL)
 
160
        {
 
161
                cd_warning ("mail : couldn't find images, this theme is not valid");
 
162
        }
 
163
        
 
164
        // textures et calllist.
 
165
        if (myData.iNoMailTexture != 0)
 
166
        {
 
167
                _cairo_dock_delete_texture (myData.iNoMailTexture);
 
168
                myData.iNoMailTexture = 0;
 
169
        }
 
170
        if (myData.iHasMailTexture != 0)
 
171
        {
 
172
                _cairo_dock_delete_texture (myData.iHasMailTexture);
 
173
                myData.iHasMailTexture = 0;
 
174
        }
 
175
        if (CD_APPLET_MY_CONTAINER_IS_OPENGL && myDesklet)
 
176
        {
 
177
                if (myConfig.cNoMailUserImage != NULL)
 
178
                        myData.iNoMailTexture = cairo_dock_create_texture_from_image(myConfig.cNoMailUserImage);
 
179
                if (myConfig.cHasMailUserImage != NULL)
 
180
                        myData.iHasMailTexture = cairo_dock_create_texture_from_image(myConfig.cHasMailUserImage);
 
181
 
 
182
                if (myData.iCubeCallList == 0)
 
183
                        myData.iCubeCallList = cd_mail_load_cube_calllist();
 
184
        }
 
185
 
 
186
        // on cree le repertoire de l'historique si necessaire.
 
187
        myData.cWorkingDirPath = g_strdup_printf ("%s/mail", g_cCairoDockDataDir);
 
188
        if (! g_file_test (myData.cWorkingDirPath, G_FILE_TEST_EXISTS))
 
189
        {
 
190
                cd_debug ("Plugin Mail : le dossier '%s' n'existe pas encore -> On le cree", myData.cWorkingDirPath);
 
191
                if (g_mkdir (myData.cWorkingDirPath, 7*8*8+7*8+0) != 0)
 
192
                {
 
193
                        cd_warning ("couldn't create directory '%s' !\nNo read history will be available.", myData.cWorkingDirPath);
 
194
                }
 
195
        }
 
196
}
 
197
 
 
198
CD_APPLET_INIT_BEGIN
 
199
        if (myDesklet)
 
200
        {
 
201
                CD_APPLET_SET_DESKLET_RENDERER ("Simple");
 
202
        }
 
203
 
 
204
        //\_______________ On charge surfaces et textures.
 
205
        GError *erreur = NULL;
 
206
        _load_theme (myApplet, &erreur);
 
207
        if (erreur != NULL)
 
208
        {
 
209
                cd_warning ("mail : %s", erreur->message);
 
210
                g_error_free (erreur);
 
211
                return;
 
212
        }
 
213
        /**
 
214
        //\_______________ On gere l'appli 'mail'
 
215
        if (myConfig.bStealTaskBarIcon)
 
216
                CD_APPLET_MANAGE_APPLICATION (myConfig.cMailClass ? myConfig.cMailClass : myConfig.cMailApplication);*/
 
217
        
 
218
        //\_______________ On initialise tous les comptes et on lance un timer pour chacun.
 
219
        cd_mail_init_accounts(myApplet);
 
220
        
 
221
        //\_______________ On s'abonne aux notifications.
 
222
        CD_APPLET_REGISTER_FOR_CLICK_EVENT;
 
223
        CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT;
 
224
        CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT;
 
225
        CD_APPLET_REGISTER_FOR_SCROLL_EVENT;
 
226
        if (CD_APPLET_MY_CONTAINER_IS_OPENGL && myDesklet)
 
227
        {
 
228
                CD_APPLET_REGISTER_FOR_UPDATE_ICON_EVENT;
 
229
        }
 
230
CD_APPLET_INIT_END
 
231
 
 
232
 
 
233
CD_APPLET_STOP_BEGIN
 
234
 
 
235
        //\_______________ On se desabonne de nos notifications.
 
236
        CD_APPLET_UNREGISTER_FOR_CLICK_EVENT;
 
237
        CD_APPLET_UNREGISTER_FOR_BUILD_MENU_EVENT;
 
238
        CD_APPLET_UNREGISTER_FOR_MIDDLE_CLICK_EVENT;
 
239
        CD_APPLET_UNREGISTER_FOR_SCROLL_EVENT;
 
240
        CD_APPLET_UNREGISTER_FOR_UPDATE_ICON_EVENT;
 
241
        
 
242
        ///CD_APPLET_MANAGE_APPLICATION (NULL);
 
243
CD_APPLET_STOP_END
 
244
 
 
245
 
 
246
CD_APPLET_RELOAD_BEGIN
 
247
 
 
248
        //\_______________ On recharge les donnees qui ont pu changer.
 
249
        if (CD_APPLET_MY_CONFIG_CHANGED )
 
250
        {
 
251
                CD_APPLET_UNREGISTER_FOR_UPDATE_ICON_EVENT;
 
252
                
 
253
                /**if (myConfig.bStealTaskBarIcon)
 
254
                        CD_APPLET_MANAGE_APPLICATION (myConfig.cMailClass ? myConfig.cMailClass : myConfig.cMailApplication);
 
255
                else
 
256
                        CD_APPLET_MANAGE_APPLICATION (NULL);*/
 
257
                
 
258
                GError *erreur = NULL;
 
259
                _load_theme (myApplet, &erreur);
 
260
                if (erreur != NULL)
 
261
                {
 
262
                        cd_warning ("mail : when trying to load theme : %s", erreur->message);
 
263
                        g_error_free (erreur);
 
264
                        erreur = NULL;
 
265
                }
 
266
                
 
267
                if (CD_APPLET_MY_CONTAINER_IS_OPENGL && myDesklet)
 
268
                {
 
269
                        CD_APPLET_REGISTER_FOR_UPDATE_ICON_EVENT;
 
270
                }
 
271
                
 
272
                cd_mail_init_accounts(myApplet);  // la config vient d'etre rechargee, donc les comptes sont tout neufs.
 
273
        }
 
274
        
 
275
CD_APPLET_RELOAD_END