[tuxdroid-svn] r99 - in software/email_alert: . trunk
Status: Beta
Brought to you by:
ks156
From: remi <c2m...@c2...> - 2007-02-27 15:04:03
|
Author: remi Date: 2007-02-27 16:03:43 +0100 (Tue, 27 Feb 2007) New Revision: 99 Added: software/email_alert/branches/ software/email_alert/tags/ software/email_alert/trunk/ software/email_alert/trunk/SimpleGladeApp.py software/email_alert/trunk/sample_behavior_script.py software/email_alert/trunk/tdema.glade software/email_alert/trunk/tdema.py software/email_alert/trunk/version.txt Removed: software/email_alert/SimpleGladeApp.py software/email_alert/sample_behavior_script.py software/email_alert/tdema.glade software/email_alert/tdema.py software/email_alert/version.txt Log: ADD : "trunk" "tags" and "branches" directories added MOV : All files are moved in the trunk directory Deleted: software/email_alert/SimpleGladeApp.py =================================================================== --- software/email_alert/SimpleGladeApp.py 2007-02-27 15:02:00 UTC (rev 98) +++ software/email_alert/SimpleGladeApp.py 2007-02-27 15:03:43 UTC (rev 99) @@ -1,341 +0,0 @@ -""" - SimpleGladeApp.py - Module that provides an object oriented abstraction to pygtk and libglade. - Copyright (C) 2004 Sandino Flores Moreno -""" - -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import os -import sys -import re - -import tokenize -import gtk -import gtk.glade -import weakref -import inspect - -__version__ = "1.0" -__author__ = 'Sandino "tigrux" Flores-Moreno' - -def bindtextdomain(app_name, locale_dir=None): - """ - Bind the domain represented by app_name to the locale directory locale_dir. - It has the effect of loading translations, enabling applications for different - languages. - - app_name: - a domain to look for translations, tipically the name of an application. - - locale_dir: - a directory with locales like locale_dir/lang_isocode/LC_MESSAGES/app_name.mo - If omitted or None, then the current binding for app_name is used. - """ - try: - import locale - import gettext - locale.setlocale(locale.LC_ALL, "") - gtk.glade.bindtextdomain(app_name, locale_dir) - gettext.install(app_name, locale_dir, unicode=1) - except (IOError,locale.Error), e: - print "Warning", app_name, e - __builtins__.__dict__["_"] = lambda x : x - - -class SimpleGladeApp: - - def __init__(self, path, root=None, domain=None, **kwargs): - """ - Load a glade file specified by glade_filename, using root as - root widget and domain as the domain for translations. - - If it receives extra named arguments (argname=value), then they are used - as attributes of the instance. - - path: - path to a glade filename. - If glade_filename cannot be found, then it will be searched in the - same directory of the program (sys.argv[0]) - - root: - the name of the widget that is the root of the user interface, - usually a window or dialog (a top level widget). - If None or ommited, the full user interface is loaded. - - domain: - A domain to use for loading translations. - If None or ommited, no translation is loaded. - - **kwargs: - a dictionary representing the named extra arguments. - It is useful to set attributes of new instances, for example: - glade_app = SimpleGladeApp("ui.glade", foo="some value", bar="another value") - sets two attributes (foo and bar) to glade_app. - """ - if os.path.isfile(path): - self.glade_path = path - else: - glade_dir = os.path.dirname( sys.argv[0] ) - self.glade_path = os.path.join(glade_dir, path) - for key, value in kwargs.items(): - try: - setattr(self, key, weakref.proxy(value) ) - except TypeError: - setattr(self, key, value) - self.glade = None - self.install_custom_handler(self.custom_handler) - self.glade = self.create_glade(self.glade_path, root, domain) - if root: - self.main_widget = self.get_widget(root) - else: - self.main_widget = None - self.normalize_names() - self.add_callbacks(self) - self.new() - - def __repr__(self): - class_name = self.__class__.__name__ - if self.main_widget: - root = gtk.Widget.get_name(self.main_widget) - repr = '%s(path="%s", root="%s")' % (class_name, self.glade_path, root) - else: - repr = '%s(path="%s")' % (class_name, self.glade_path) - return repr - - def new(self): - """ - Method called when the user interface is loaded and ready to be used. - At this moment, the widgets are loaded and can be refered as self.widget_name - """ - pass - - def add_callbacks(self, callbacks_proxy): - """ - It uses the methods of callbacks_proxy as callbacks. - The callbacks are specified by using: - Properties window -> Signals tab - in glade-2 (or any other gui designer like gazpacho). - - Methods of classes inheriting from SimpleGladeApp are used as - callbacks automatically. - - callbacks_proxy: - an instance with methods as code of callbacks. - It means it has methods like on_button1_clicked, on_entry1_activate, etc. - """ - self.glade.signal_autoconnect(callbacks_proxy) - - def normalize_names(self): - """ - It is internally used to normalize the name of the widgets. - It means a widget named foo:vbox-dialog in glade - is refered self.vbox_dialog in the code. - - It also sets a data "prefixes" with the list of - prefixes a widget has for each widget. - """ - for widget in self.get_widgets(): - widget_name = gtk.Widget.get_name(widget) - prefixes_name_l = widget_name.split(":") - prefixes = prefixes_name_l[ : -1] - widget_api_name = prefixes_name_l[-1] - widget_api_name = "_".join( re.findall(tokenize.Name, widget_api_name) ) - gtk.Widget.set_name(widget, widget_api_name) - if hasattr(self, widget_api_name): - raise AttributeError("instance %s already has an attribute %s" % (self,widget_api_name)) - else: - setattr(self, widget_api_name, widget) - if prefixes: - gtk.Widget.set_data(widget, "prefixes", prefixes) - - def add_prefix_actions(self, prefix_actions_proxy): - """ - By using a gui designer (glade-2, gazpacho, etc) - widgets can have a prefix in theirs names - like foo:entry1 or foo:label3 - It means entry1 and label3 has a prefix action named foo. - - Then, prefix_actions_proxy must have a method named prefix_foo which - is called everytime a widget with prefix foo is found, using the found widget - as argument. - - prefix_actions_proxy: - An instance with methods as prefix actions. - It means it has methods like prefix_foo, prefix_bar, etc. - """ - prefix_s = "prefix_" - prefix_pos = len(prefix_s) - - is_method = lambda t : callable( t[1] ) - is_prefix_action = lambda t : t[0].startswith(prefix_s) - drop_prefix = lambda (k,w): (k[prefix_pos:],w) - - members_t = inspect.getmembers(prefix_actions_proxy) - methods_t = filter(is_method, members_t) - prefix_actions_t = filter(is_prefix_action, methods_t) - prefix_actions_d = dict( map(drop_prefix, prefix_actions_t) ) - - for widget in self.get_widgets(): - prefixes = gtk.Widget.get_data(widget, "prefixes") - if prefixes: - for prefix in prefixes: - if prefix in prefix_actions_d: - prefix_action = prefix_actions_d[prefix] - prefix_action(widget) - - def custom_handler(self, - glade, function_name, widget_name, - str1, str2, int1, int2): - """ - Generic handler for creating custom widgets, internally used to - enable custom widgets (custom widgets of glade). - - The custom widgets have a creation function specified in design time. - Those creation functions are always called with str1,str2,int1,int2 as - arguments, that are values specified in design time. - - Methods of classes inheriting from SimpleGladeApp are used as - creation functions automatically. - - If a custom widget has create_foo as creation function, then the - method named create_foo is called with str1,str2,int1,int2 as arguments. - """ - try: - handler = getattr(self, function_name) - return handler(str1, str2, int1, int2) - except AttributeError: - return None - - def gtk_widget_show(self, widget, *args): - """ - Predefined callback. - The widget is showed. - Equivalent to widget.show() - """ - widget.show() - - def gtk_widget_hide(self, widget, *args): - """ - Predefined callback. - The widget is hidden. - Equivalent to widget.hide() - """ - widget.hide() - - def gtk_widget_grab_focus(self, widget, *args): - """ - Predefined callback. - The widget grabs the focus. - Equivalent to widget.grab_focus() - """ - widget.grab_focus() - - def gtk_widget_destroy(self, widget, *args): - """ - Predefined callback. - The widget is destroyed. - Equivalent to widget.destroy() - """ - widget.destroy() - - def gtk_window_activate_default(self, window, *args): - """ - Predefined callback. - The default widget of the window is activated. - Equivalent to window.activate_default() - """ - widget.activate_default() - - def gtk_true(self, *args): - """ - Predefined callback. - Equivalent to return True in a callback. - Useful for stopping propagation of signals. - """ - return True - - def gtk_false(self, *args): - """ - Predefined callback. - Equivalent to return False in a callback. - """ - return False - - def gtk_main_quit(self, *args): - """ - Predefined callback. - Equivalent to self.quit() - """ - self.quit() - - def main(self): - """ - Starts the main loop of processing events. - The default implementation calls gtk.main() - - Useful for applications that needs a non gtk main loop. - For example, applications based on gstreamer needs to override - this method with gst.main() - - Do not directly call this method in your programs. - Use the method run() instead. - """ - gtk.main() - - def quit(self): - """ - Quit processing events. - The default implementation calls gtk.main_quit() - - Useful for applications that needs a non gtk main loop. - For example, applications based on gstreamer needs to override - this method with gst.main_quit() - """ - gtk.main_quit() - - def run(self): - """ - Starts the main loop of processing events checking for Control-C. - - The default implementation checks wheter a Control-C is pressed, - then calls on_keyboard_interrupt(). - - Use this method for starting programs. - """ - try: - self.main() - except KeyboardInterrupt: - self.on_keyboard_interrupt() - - def on_keyboard_interrupt(self): - """ - This method is called by the default implementation of run() - after a program is finished by pressing Control-C. - """ - pass - - def install_custom_handler(self, custom_handler): - gtk.glade.set_custom_handler(custom_handler) - - def create_glade(self, glade_path, root, domain): - return gtk.glade.XML(self.glade_path, root, domain) - - def get_widget(self, widget_name): - return self.glade.get_widget(widget_name) - - def get_widgets(self): - return self.glade.get_widget_prefix("") Deleted: software/email_alert/sample_behavior_script.py =================================================================== --- software/email_alert/sample_behavior_script.py 2007-02-27 15:02:00 UTC (rev 98) +++ software/email_alert/sample_behavior_script.py 2007-02-27 15:03:43 UTC (rev 99) @@ -1,22 +0,0 @@ -#!/usr/bin/python -# -*- coding: latin-1 -*- -# ----------------------------------------------- -# Initalization of modules -# uses objects "tux" and "tss" -# ----------------------------------------------- -import sys -sys.path.append('/opt/kysoh/tuxdroid/pythonlibs') -from tux import * -# ----------------------------------------------- -# Your script -# ----------------------------------------------- - -tux.cmd.wings_on(4) -tux.cmd.eyes_on(4) - - -# ----------------------------------------------- -# End of script -# ----------------------------------------------- -tux.sys.wait(1) -tux.disconnect_from_daemon() Deleted: software/email_alert/tdema.glade =================================================================== --- software/email_alert/tdema.glade 2007-02-27 15:02:00 UTC (rev 98) +++ software/email_alert/tdema.glade 2007-02-27 15:03:43 UTC (rev 99) @@ -1,951 +0,0 @@ -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - -<glade-interface> -<requires lib="gnome"/> - -<widget class="GtkWindow" id="window1"> - <property name="height_request">472</property> - <property name="visible">True</property> - <property name="title" translatable="yes">Tux Droid E-Mail Alert</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">False</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - <signal name="destroy" handler="on_window1_destroy" last_modification_time="Sun, 18 Feb 2007 01:31:20 GMT"/> - - <child> - <widget class="GtkVBox" id="vbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkFrame" id="frame1"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - - <child> - <widget class="GtkAlignment" id="alignment1"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">12</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkVBox" id="vbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkFixed" id="fixed1"> - <property name="visible">True</property> - - <child> - <widget class="GtkEntry" id="e_server"> - <property name="width_request">160</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="x">72</property> - <property name="y">0</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label5"> - <property name="width_request">40</property> - <property name="height_request">16</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Server:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">4</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed2"> - <property name="visible">True</property> - - <child> - <widget class="GtkEntry" id="e_port"> - <property name="width_request">86</property> - <property name="height_request">24</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes">110</property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="x">40</property> - <property name="y">0</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label6"> - <property name="width_request">34</property> - <property name="height_request">17</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Port:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">4</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed3"> - <property name="visible">True</property> - - <child> - <widget class="GtkEntry" id="e_login"> - <property name="width_request">160</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="x">72</property> - <property name="y">0</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label7"> - <property name="width_request">35</property> - <property name="height_request">16</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Login:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">4</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed4"> - <property name="visible">True</property> - - <child> - <widget class="GtkEntry" id="e_password"> - <property name="width_request">160</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="x">72</property> - <property name="y">0</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label8"> - <property name="width_request">63</property> - <property name="height_request">17</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Password:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">4</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed5"> - <property name="visible">True</property> - - <child> - <widget class="GtkSpinButton" id="sb_check"> - <property name="width_request">56</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">0</property> - <property name="numeric">False</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">1 1 100 1 10 10</property> - </widget> - <packing> - <property name="x">152</property> - <property name="y">0</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label9"> - <property name="width_request">152</property> - <property name="height_request">16</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Check for new mail every</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">4</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label10"> - <property name="width_request">51</property> - <property name="height_request">17</property> - <property name="visible">True</property> - <property name="label" translatable="yes">minutes.</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">211</property> - <property name="y">4</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>POP3 Account</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFrame" id="frame2"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - - <child> - <widget class="GtkAlignment" id="alignment2"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">12</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkFixed" id="fixed6"> - <property name="visible">True</property> - - <child> - <widget class="GtkRadioButton" id="rb_wav"> - <property name="width_request">95</property> - <property name="height_request">22</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">.wav file</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">2</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="cb_behavior"> - <property name="width_request">102</property> - <property name="height_request">22</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Behavior</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">66</property> - </packing> - </child> - - <child> - <widget class="GtkRadioButton" id="rb_tts"> - <property name="width_request">95</property> - <property name="height_request">22</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">TTS</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">rb_wav</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">34</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed7"> - <property name="visible">True</property> - - <child> - <widget class="GtkEntry" id="e_tts"> - <property name="width_request">256</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes">Enter text here.</property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">32</property> - </packing> - </child> - - <child> - <widget class="GtkFileChooserButton" id="fcb_wav"> - <property name="width_request">256</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="title" translatable="yes">Sélectionner un fichier</property> - <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property> - <property name="local_only">True</property> - <property name="show_hidden">False</property> - <property name="do_overwrite_confirmation">False</property> - <property name="width_chars">-1</property> - <signal name="selection_changed" handler="on_fcb_wav_selection_changed" last_modification_time="Sun, 18 Feb 2007 01:29:35 GMT"/> - </widget> - <packing> - <property name="x">0</property> - <property name="y">0</property> - </packing> - </child> - - <child> - <widget class="GtkFileChooserButton" id="fcb_behavior"> - <property name="width_request">256</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="title" translatable="yes">Sélectionner un fichier</property> - <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property> - <property name="local_only">True</property> - <property name="show_hidden">False</property> - <property name="do_overwrite_confirmation">False</property> - <property name="width_chars">-1</property> - <signal name="selection_changed" handler="on_fcb_behavior_selection_changed" last_modification_time="Sun, 18 Feb 2007 01:29:48 GMT"/> - </widget> - <packing> - <property name="x">0</property> - <property name="y">64</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="bt_test"> - <property name="width_request">120</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Test</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_bt_test_clicked" last_modification_time="Sun, 18 Feb 2007 01:30:14 GMT"/> - </widget> - <packing> - <property name="x">9</property> - <property name="y">96</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Notification</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFrame" id="frame3"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - - <child> - <widget class="GtkAlignment" id="alignment3"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">12</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkFixed" id="fixed8"> - <property name="visible">True</property> - - <child> - <widget class="GtkCheckButton" id="cb_body"> - <property name="width_request">125</property> - <property name="height_request">22</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Body message</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">24</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="cb_subject"> - <property name="width_request">164</property> - <property name="height_request">22</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Subject & sender</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">True</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">0</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Read E-mail</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFrame" id="frame4"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - - <child> - <widget class="GtkAlignment" id="alignment4"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">12</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox3"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkFixed" id="fixed9"> - <property name="visible">True</property> - - <child> - <widget class="GtkLabel" id="label11"> - <property name="width_request">77</property> - <property name="height_request">17</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Select voice:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">4</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label12"> - <property name="width_request">104</property> - <property name="height_request">17</property> - <property name="visible">True</property> - <property name="label" translatable="yes">Select pitch level:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">36</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed10"> - <property name="visible">True</property> - - <child> - <widget class="GtkSpinButton" id="sb_pitch"> - <property name="width_request">72</property> - <property name="height_request">24</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">0</property> - <property name="numeric">False</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">100 100 250 1 10 10</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">32</property> - </packing> - </child> - - <child> - <widget class="GtkComboBoxEntry" id="cbbe_voice"> - <property name="width_request">248</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="items" translatable="yes">FR male -FR female -US male -US female</property> - <property name="add_tearoffs">False</property> - <property name="has_frame">True</property> - <property name="focus_on_click">True</property> - </widget> - <packing> - <property name="x">0</property> - <property name="y">0</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="label4"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>TTS configuration</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkFixed" id="fixed11"> - <property name="visible">True</property> - - <child> - <widget class="GtkButton" id="bt_cancel"> - <property name="width_request">100</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Cancel</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_bt_cancel_clicked" last_modification_time="Sun, 18 Feb 2007 01:30:51 GMT"/> - </widget> - <packing> - <property name="x">168</property> - <property name="y">8</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="bt_accept"> - <property name="width_request">100</property> - <property name="height_request">27</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Accept</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_bt_accept_clicked" last_modification_time="Sun, 18 Feb 2007 01:30:57 GMT"/> - </widget> - <packing> - <property name="x">272</property> - <property name="y">8</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface> Deleted: software/email_alert/tdema.py =================================================================== --- software/email_alert/tdema.py 2007-02-27 15:02:00 UTC (rev 98) +++ software/email_alert/tdema.py 2007-02-27 15:03:43 UTC (rev 99) @@ -1,248 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF8 -*- - -# -------------------------------------------------------------------- -# Tux Droid - E-Mail Alert -# Copyright (C) 2007 C2ME Sa <rem...@c2...> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. -# -------------------------------------------------------------------- -# $Id: $ -# -------------------------------------------------------------------- - -# ----------------------------------------------- -# Initalization of modules -# use object "tux" -# ----------------------------------------------- -import sys -sys.path.append('/opt/kysoh/tuxdroid/pythonlibs') -from tux import * -# ----------------------------------------------- -# Your script -# ----------------------------------------------- - -import os - -import gtk -import gnome - -from poplib import * -import thread -import email -import string -import email.Parser -from email.Header import decode_header - -from SimpleGladeApp import SimpleGladeApp -from SimpleGladeApp import bindtextdomain - -app_name = "tdema" -f = open('version.txt', 'r') -app_version = f.readline()[0:-1] # strip the \n at the EOL -f.close() - -print "Email Alert version " + app_version - -glade_dir = "" -locale_dir = "" - -bindtextdomain(app_name, locale_dir) - -#------------------------------------------------------------------------------ -# Window class -#------------------------------------------------------------------------------ -class Window1(SimpleGladeApp): - - #-------------------------------------------------------------------------- - # Class init - #-------------------------------------------------------------------------- - def __init__(self, path="tdema.glade", - root="window1", - domain=app_name, **kwargs): - path = os.path.join(glade_dir, path) - SimpleGladeApp.__init__(self, path, root, domain, **kwargs) - self.wav_filename="None" - self.py_filename="None" - self.viewed_mail_list=[] - self.check_enabled=False - - #-------------------------------------------------------------------------- - # On new window - #-------------------------------------------------------------------------- - def new(self): - self.get_widget("cbbe_voice").set_active(2) - self.get_widget("e_password").set_visibility(False) - - #-------------------------------------------------------------------------- - # On close windows - #-------------------------------------------------------------------------- - def on_window1_destroy(self, widget, *args): - self.check_enabled=False - tux.sys.wait(1) - tux.disconnect_from_daemon() - sys.exit(0) - - #-------------------------------------------------------------------------- - # On wav file selected - #-------------------------------------------------------------------------- - def on_fcb_wav_selection_changed(self, widget, *args): - filename=widget.get_filename() - ext=len(filename)-filename.find(".wav") - if ext == 4 : - self.wav_filename=filename - else: - self.wav_filename="None" - widget.unselect_filename(filename) - - #-------------------------------------------------------------------------- - # On behavior file selected - #-------------------------------------------------------------------------- - def on_fcb_behavior_selection_changed(self, widget, *args): - filename=widget.get_filename() - ext=len(filename)-filename.find(".py") - if ext == 3 : - self.py_filename=filename - else: - self.py_filename="None" - widget.unselect_filename(filename) - - #-------------------------------------------------------------------------- - # On test notification button clicked - #-------------------------------------------------------------------------- - def on_bt_test_clicked(self, widget, *args): - self.on_alert() - - #-------------------------------------------------------------------------- - # On cancel button clicked - #-------------------------------------------------------------------------- - def on_bt_cancel_clicked(self, widget, *args): - self.check_enabled=False - tux.sys.wait(1) - tux.disconnect_from_daemon() - sys.exit(0) - - #-------------------------------------------------------------------------- - # On accept button clicked - #-------------------------------------------------------------------------- - def on_bt_accept_clicked(self, widget, *args): - if self.check_enabled: return - self.check_enabled=True - thread.start_new_thread(self.check_email,()) - - #-------------------------------------------------------------------------- - # On alert event - #-------------------------------------------------------------------------- - def on_alert(self): - if self.get_widget("cb_behavior").get_active(): - if self.py_filename!="None": - tux.sys.shell_free("python "+self.py_filename) - if self.get_widget("rb_wav").get_active(): - if self.wav_filename!="None": - tux.sys.shell_free("aplay -D hw:1 "+self.wav_filename) - else: - voice_cb=self.get_widget("cbbe_voice") - pitch_sb=self.get_widget("sb_pitch") - text_e=self.get_widget("e_tts") - tux.tts.select_voice(voice_cb.get_active()+1,pitch_sb.get_value()) - tux.tts.speak(text_e.get_text()) - - #-------------------------------------------------------------------------- - # Check mail thread - #-------------------------------------------------------------------------- - def check_email(self): - # Select voice and pitch - voice_cb=self.get_widget("cbbe_voice") - pitch_sb=self.get_widget("sb_pitch") - tux.tts.select_voice(voice_cb.get_active()+1,pitch_sb.get_value()) - while self.check_enabled: - # Connect to pop server - conn=POP3(self.get_widget("e_server").get_text()) - conn.user(self.get_widget("e_login").get_text()) - conn.pass_(self.get_widget("e_password").get_text()) - liste=conn.list()[1:2] - if len(liste[0])>0: - for k in range(len(liste[0])): - # Check if mail is old - old_mail=False - if len(self.viewed_mail_list)>0: - for uidl in self.viewed_mail_list: - if uidl==conn.uidl(k+1): - old_mail=True - if old_mail: continue - # Make a single string with mail - strraw = "" - for z in conn.top(k+1,1)[1]: strraw=strraw+z+"\n" - # Mark the mail as read - self.viewed_mail_list.append(conn.uidl(k+1)) - # Parse the email - p = email.Parser.Parser() - msg=p.parsestr(strraw) - # Get subject - subjecttxt=get_header_info(msg,"Subject") - # Get sender - tmptext=get_header_info(msg,"From") - idx=tmptext.find("<") - if idx>0: - fromtxt=tmptext[0:idx-1] - else: - fromtxt=tmptext - # Play the notification - self.on_alert() - if self.get_widget("cb_subject").get_active(): - tux.tts.speak("Envoyé par. "+fromtxt+".") - tux.tts.speak("Le sujet est. "+subjecttxt+".") - if self.get_widget("cb_body").get_active(): - tux.tts.speak("Voici le contenu de l'email. "+get_body(msg)) - conn.quit() - tux.sys.wait(self.get_widget("sb_check").get_value()) - -#------------------------------------------------------------------------------ -# get_header_info -#------------------------------------------------------------------------------ -def get_header_info(msg,entry): - tmp1=decode_header(msg[entry]) - if str(tmp1[0][1])=="None": - return tmp1[0][0] - else: - tmp2=unicode(tmp1[0][0],tmp1[0][1]) - return tmp2.encode('utf-8','replace') - -#------------------------------------------------------------------------------ -# get_body -#------------------------------------------------------------------------------ -def get_body(mail): - if mail.is_multipart(): - for part in mail.get_payload(): - showmessage(part) - else: - if str(mail.get_content_charset())!='None': - tmp=unicode(mail.get_payload(),mail.get_content_charset()) - ... [truncated message content] |