1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
| #!/usr/bin/env python
#coding=utf-8
# EMAINFO Version 30 :
# Config par XML, rajout d'un timer au démarrage, gestion par try des connections
# Création d'un fichier de errorlog.txt
# EMAINFO version 40
# Démarre outlook avec le profil si appuie si clic droit ou gauche sur l'icone
# EMAINFO version 70 08/2009
# Suppression du timer quand dclick sur icone
import os
import wx
import poplib
import xml.etree.ElementTree as ET
import subprocess
import time
class FrameEmainfo(wx.Frame):
"""FrameEmainfo"""
def __init__(self, *args, **kwds):
"""Création de la frame"""
kwds["style"] = wx.DEFAULT_FRAME_STYLE^wx.MINIMIZE
wx.Frame.__init__(self, *args, **kwds)
self.__do_init()
self.__create_wx()
self.__set_properties()
self.timer.Start(self.tempsmaj)
self.on_timer(None)
def __do_init(self):
"""Initialisation des variables"""
self.path="c:"+os.sep+"emainfo"
elementDocument=ET.parse(self.path+os.sep+"emainfoIni.xml")
self.comptesXML=elementDocument.findall('COMPTE') #Récupération des comptes
self.tempsmaj=int(elementDocument.find("PARAMETRES").get("TEMPSMAJ")) #Récupération de temps MAJ
def __create_wx(self):
"""Création des objet wx"""
self.tbicon=[] #Création d'une liste vide pour la remplir des tbicon
for n,compte in enumerate(self.comptesXML):
self.tbicon.append(wx.TaskBarIcon())
self.tbiconprog = wx.TaskBarIcon() #Icone si il n'y a pas d'icone
self.timer = wx.Timer(self, 1)
def __set_properties(self):
"""Changement des propriété des objetx wx"""
self.SetIcon(wx.Icon(self.path+os.sep+"emainfo.ico", wx.BITMAP_TYPE_ICO))
self.SetTitle("emainfo")
self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
def on_icone_select(self, event):
if str( event.GetEventObject() )==str( self.tbiconprog ):
#Si le taskbaricon est celui de emainfo pas de mails
self.on_timer(None)
else:
# Sinon recherche du taskbaricon concerné
resteIcone=False # Pour le test des icones restantes
for n,compte in enumerate(self.comptesXML):
if str( event.GetEventObject() )==str( self.tbicon[n] ):
#Si l'objet taskbaricon est celui de l'event
commandLine=r'C:\Program Files\Mozilla Thunderbird\thunderbird.exe'
if compte.get("PROFIL")!=None:
argline= ["-P",compte.get("PROFIL")] # Profil existant
else:
argline= [] # Profil non existant
self.tbicon[n].RemoveIcon()
pid = subprocess.Popen([commandLine]+argline).pid # Lancement de Firefox
if self.tbicon[n].IsIconInstalled(): resteIcone=True # Si il y a une icone
if resteIcone!=True: # Si il y a plus d'icone on affiche emainfo.ico
icone=wx.Icon(self.path+os.sep+'emainfo.ico', wx.BITMAP_TYPE_ICO)
self.tbiconprog.SetIcon(icone,"Pas d'email")
self.tbiconprog.Bind(wx.EVT_TASKBAR_LEFT_DCLICK,self.on_icone_select)
wx.EVT_TASKBAR_RIGHT_DCLICK(self.tbiconprog, self.onclose)
event.Destroy()
def on_timer(self, event):
"""Mise à jour des email et affichage des icones"""
self.maj_emails()
nbicone=0
self.tbiconprog.RemoveIcon()
for n,compte in enumerate(self.comptesXML):
self.tbicon[n].RemoveIcon() #Suppression de l'icone
if int( compte.get("NBEMAILS") )>0: # Si supérieur à un email
icone=wx.Icon(self.path+os.sep+compte.get("ICONE"), wx.BITMAP_TYPE_ICO)
texte=compte.get("USER")+' : ' + compte.get("NBEMAILS") + ' email'
self.tbicon[n].SetIcon(icone,texte) # On affiche l'icone
self.tbicon[n].Bind(wx.EVT_TASKBAR_LEFT_DCLICK,self.on_icone_select)
wx.EVT_TASKBAR_RIGHT_DCLICK(self.tbicon[n], self.onclose) # Si double clic droit => quit
nbicone+=1
if nbicone==0 : #Si pas d'email on affiche qd meme l'icone "emainfo"
icone=wx.Icon(self.path+os.sep+'emainfo.ico', wx.BITMAP_TYPE_ICO)
self.tbiconprog.SetIcon(icone,"Pas d'email")
self.tbiconprog.Bind(wx.EVT_TASKBAR_LEFT_DCLICK,self.on_icone_select)
wx.EVT_TASKBAR_RIGHT_DCLICK(self.tbiconprog, self.onclose)
def onclose(self,event):
"""Quit le programme"""
self.timer.Stop()
for n,compte in enumerate(self.comptesXML): # Recherche des icones affichées
if self.tbicon[n].IsIconInstalled() :
self.tbicon[n].RemoveIcon()
if self.tbiconprog.IsIconInstalled() :
self.tbiconprog.RemoveIcon()
self.Destroy()
def maj_emails(self):
"""Met à jour le nombre d'emails dans un élément NBEMAILS"""
if os.path.exists(self.path+os.sep+"errorlog.txt") : os.remove(self.path+os.sep+"errorlog.txt")
for compte in self.comptesXML:
try : # Récup des paramètres email
Mailbox = poplib.POP3(compte.get("POP"))
Mailbox.user(compte.get("USER"))
Mailbox.pass_(compte.get("PASSWORD"))
nbEmail=str(Mailbox.stat()[0])
except : # Si Pb de lecture
fo=open(self.path+os.sep+"errorlog.txt","a")
fo.write("pb de lecture d'email avec : USER=["+compte.get("USER")+"]")
fo.close()
nbEmail="0" # => Pas d'email
if compte.get("NBEMAILS")==None: # Si pas d'element NBEMAILS
compte.attrib["NBEMAILS"]=0 # Rajout de l'élément
compte.attrib["NBEMAILS"]=nbEmail # Mise à jour
if __name__ == "__main__":
time.sleep(2)
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = FrameEmainfo(None, -1, "")
app.SetTopWindow(frame_1)
app.MainLoop() |
Partager