~ubuntu-branches/ubuntu/maverick/awn-extras-applets/maverick

« back to all changes in this revision

Viewing changes to applets/maintained/mail/mail.py

  • Committer: Bazaar Package Importer
  • Author(s): Julien Lavergne
  • Date: 2010-08-29 14:29:52 UTC
  • mto: This revision was merged to the branch mainline in revision 21.
  • Revision ID: james.westby@ubuntu.com-20100829142952-rhvuetyms9bv5uu7
Tags: upstream-0.4.0+bzr1372
ImportĀ upstreamĀ versionĀ 0.4.0+bzr1372

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
pygtk.require("2.0")
26
26
import gtk
27
27
 
28
 
from awn import extras
29
 
from awn.extras import _, awnlib
30
 
 
 
28
from awn.extras import _, awnlib, __version__
 
29
 
 
30
system_theme_name = "System theme"
 
31
 
 
32
theme_dir = "/usr/share/icons"
31
33
icon_dir = os.path.join(os.path.dirname(__file__), "icons")
32
 
theme_dir = os.path.join(os.path.dirname(__file__), "themes")
 
34
mail_theme_dir = os.path.join(os.path.dirname(__file__), "themes")
33
35
ui_file = os.path.join(os.path.dirname(__file__), "mail.ui")
34
36
 
35
37
 
66
68
 
67
69
        self.setup_context_menu()
68
70
 
69
 
        self.back = getattr(Backends(), self.settings["backend"])
 
71
        self.back = getattr(Backends(), self.awn.settings["backend"])
70
72
 
71
73
        self.setup_themes()
72
74
 
141
143
                self.awn.settings["login-token"] = key.token
142
144
 
143
145
                self.timer = self.awn.timing.register(self.refresh,
144
 
                                                     self.settings["timeout"] * 60)
 
146
                                                     self.awn.settings["timeout"] * 60)
145
147
                self.refresh(show=False)
146
148
 
147
149
    def refresh(self, show=True):
152
154
        except RuntimeError, e:
153
155
            self.awn.theme.icon("error")
154
156
 
155
 
            if self.settings["show-network-errors"]:
 
157
            if self.awn.settings["show-network-errors"]:
156
158
                self.awn.notify.send(_("Network error - Mail Applet"), str(e), "")
157
159
            return
158
160
 
163
165
                                                        "\n".join(diffSubjects)
164
166
 
165
167
            self.awn.notify.send(_("New Mail - Mail Applet"), msg,
166
 
                                 self.__getIconPath("unread"))
 
168
                                 self.__getIconPath("mail-unread"))
167
169
 
168
170
        self.awn.tooltip.set(strMessages(len(self.mail.subjects)))
169
171
 
170
172
        self.awn.theme.icon("unread" if len(self.mail.subjects) > 0 else "read")
171
173
 
172
 
        if self.settings["hide"] and len(self.mail.subjects) == 0:
 
174
        if self.awn.settings["hide"] and len(self.mail.subjects) == 0:
173
175
            self.awn.icon.hide()
174
176
            self.awn.dialog.hide()
175
177
        elif show:
178
180
        self.__dialog.update_email_list()
179
181
 
180
182
    def __getIconPath(self, name):
181
 
        path = os.path.join(theme_dir, self.settings["theme"], "scalable",
182
 
                            name + ".svg")
 
183
        path = os.path.join(mail_theme_dir, self.awn.settings["theme"], "scalable", name + ".svg")
183
184
        if os.path.isfile(path):
184
185
            return path
185
186
        else:
186
 
            return os.path.join(icon_dir, name + ".svg")
 
187
            path = os.path.join(theme_dir, self.awn.settings["theme"], "scalable/status", name + ".svg")
 
188
            if os.path.isfile(path):
 
189
                return path
 
190
            else:
 
191
                return os.path.join(icon_dir, name + ".svg")
187
192
 
188
193
    def showWeb(self):
189
194
        if hasattr(self.mail, "showWeb"):
197
202
        else:
198
203
            # Now if xdg-open had an option to just open the email client,
199
204
            # not start composing a message, that would be just wonderful.
200
 
            if " " in self.settings["email-client"]:
201
 
                subprocess.Popen(self.settings["email-client"], shell=True)
202
 
            else:
203
 
                subprocess.Popen(self.settings["email-client"])
 
205
            use_shell = " " in self.awn.settings["email-client"]
 
206
            subprocess.Popen(self.awn.settings["email-client"], shell=use_shell)
204
207
 
205
208
    def setup_themes(self):
206
 
        """Loads themes and states"""
207
 
        states = {}
208
 
        for state in ["error", "login", "read", "unread"]:
209
 
            states[state] = state
 
209
        """Loads themes and states.
 
210
 
 
211
        """
 
212
        states = {
 
213
            "error" : "error",
 
214
            "login" : "login",
 
215
            "read"  : "mail-read",
 
216
            "unread": "mail-unread"
 
217
        }
210
218
        self.awn.theme.set_states(states)
211
 
        self.awn.theme.theme(self.settings["theme"])
 
219
        theme = self.awn.settings["theme"] if self.awn.settings["theme"] != system_theme_name else None
 
220
        self.awn.theme.theme(theme)
212
221
 
213
222
    def setup_context_menu(self):
214
223
        prefs = gtk.Builder()
220
229
        self.setup_preferences(prefs)
221
230
 
222
231
    def setup_preferences(self, prefs):
223
 
        def change_timeout(timeout):
 
232
        def change_timeout(value):
224
233
            if hasattr(self, "timer"):
225
 
                self.timer.change_interval(timeout * 60)
226
 
 
227
 
        default_values = {
228
 
            "backend": "GMail",
229
 
            "theme": ("Tango", self.awn.theme.theme),
230
 
            "email-client": "evolution -c mail",
231
 
            "hide": (False, self.refresh_hide_applet,
232
 
                     prefs.get_object("checkbutton-hide-applet")),
233
 
            "show-network-errors": (True, None,
234
 
                                 prefs.get_object("checkbutton-alert-errors")),
235
 
            "timeout": (2, change_timeout,
236
 
                        prefs.get_object("spinbutton-timeout"))
237
 
        }
238
 
 
239
 
        for key, value in default_values.iteritems():
240
 
            if not key in self.awn.settings:
241
 
                self.awn.settings[key] = value
242
 
        self.settings = self.awn.settings
243
 
 
244
 
        entry_client = prefs.get_object("entry-client")
245
 
        entry_client.set_text(self.settings["email-client"])
246
 
        entry_client.connect("changed", self.changed_client_cb)
247
 
 
248
 
 
249
 
        # Get a list of themes
250
 
        def is_dir(path):
251
 
            return os.path.isdir(os.path.join(theme_dir, path))
252
 
        themes = filter(is_dir, os.listdir(theme_dir))
253
 
        themes.append("Tango")
254
 
        themes.sort()
 
234
                self.timer.change_interval(value * 60)
 
235
 
 
236
        # Only use themes that are likely to provide all the files
 
237
        def filter_theme(theme):
 
238
            return os.path.isfile(os.path.join(theme_dir, theme, "scalable/status/mail-read.svg")) \
 
239
                or os.path.isfile(os.path.join(theme_dir, theme, "48x48/status/mail-read.png"))
 
240
        themes = filter(filter_theme, os.listdir(theme_dir))
 
241
        themes = [system_theme_name] + sorted(themes) + sorted(os.listdir(mail_theme_dir))
255
242
 
256
243
        combobox_theme = prefs.get_object("combobox-theme")
257
244
        awnlib.add_cell_renderer_text(combobox_theme)
258
245
        for theme in themes:
259
 
            combobox_theme.append_text(theme.replace('_', ' '))
260
 
        combobox_theme.set_active(themes.index(self.settings["theme"]))
261
 
        combobox_theme.connect("changed", self.changed_theme_cb)
 
246
            combobox_theme.append_text(theme)
 
247
        if self.awn.settings["theme"] not in themes:
 
248
            self.awn.settings["theme"] = system_theme_name
262
249
 
263
 
    def changed_theme_cb(self, combobox):
264
 
        self.awn.settings["theme"] = \
265
 
                                   combobox.get_active_text().replace(' ', '_')
 
250
        binder = self.awn.settings.get_binder(prefs)
 
251
        binder.bind("theme", "combobox-theme", key_callback=self.awn.theme.theme)
 
252
        binder.bind("email-client", "entry-client")
 
253
        binder.bind("hide", "checkbutton-hide-applet", key_callback=self.refresh_hide_applet)
 
254
        binder.bind("show-network-errors", "checkbutton-alert-errors")
 
255
        binder.bind("timeout", "spinbutton-timeout", key_callback=change_timeout)
 
256
        self.awn.settings.load_bindings(binder)
266
257
 
267
258
    def refresh_hide_applet(self, value):
268
 
        if hasattr(self, "mail") and self.settings["hide"] and \
269
 
                                                  len(self.mail.subjects) == 0:
 
259
        if hasattr(self, "mail") and value and len(self.mail.subjects) == 0:
270
260
            self.awn.icon.hide()
271
261
            self.awn.dialog.hide()
272
262
        else:
273
263
            self.awn.show()
274
264
 
275
 
    def changed_client_cb(self, entry):
276
 
        self.awn.settings["email-client"] = entry.get_text()
277
 
 
278
265
 
279
266
class MainDialog:
280
267
 
470
457
        for i in backends:
471
458
            combobox_backend.append_text(getattr(Backends(), i).title)
472
459
        combobox_backend.set_active(
473
 
                             backends.index(self.__parent.settings["backend"]))
 
460
                             backends.index(self.__parent.awn.settings["backend"]))
474
461
        combobox_backend.connect("changed", changed_backend_cb, label_group)
475
462
 
476
463
        hbox_backend = gtk.HBox(False, 12)
916
903
    awnlib.init_start(MailApplet, {
917
904
        "name": _("Mail Applet"),
918
905
        "short": "mail",
919
 
        "version": extras.__version__,
 
906
        "version": __version__,
920
907
        "description": _("An applet to check one's email"),
921
 
        "logo": os.path.join(icon_dir, "read.svg"),
 
908
        "logo": os.path.join(icon_dir, "mail-read.svg"),
922
909
        "author": "Pavel Panchekha",
923
910
        "copyright-year": "2008",
924
911
        "email": "pavpanchekha@gmail.com",
925
 
        "type": ["Network", "Email"],
926
912
        "authors": ["onox <denkpadje@gmail.com>",
927
913
                    "sharkbaitbobby <sharkbaitbobby+awn@gmail.com>",
928
 
                    "Pavel Panchekha"]},
929
 
        ["settings-per-instance", "detach"])
 
914
                    "Pavel Panchekha"]})