def on_timer(self, event): self.checkForErrors() # Beendet ggf. nach Popup-Meldung das Programm if self.notification_queue.empty()==True: # wenn nix anliegt...fertig return self.timer.Stop() msgtxt=self.notification_queue.get() #NOTIFY,07.12.14 16:03:21;RING;0;0171xxxxxx9;0463xxxxxx7;SIP1; #NOTIFY,07.12.14 16:03:23;DISCONNECT;0;0; rs=msgtxt.split(";") if len(rs)>3: # die conid aus der Meldung herausdröseln, um anhand dieser den zugehörigen Satz... conid=rs[2] # ...in self.itemDataMap finden zu können. else: conid=None job=0 # 0=nix, 1="msg" anzeigen, 2=offene Verbindungen neu laden, 4=alle Verbindungen neu laden, 8="txt" anzeigen txt=u"" if msgtxt.find(";RING;")>0: job=3 txt=u"meldet einen ankommenden Telefonanruf!" elif msgtxt.find(";CALL;")>0: job=3 txt=u"meldet einen ausgehenden Telefonanruf!" elif msgtxt.find(";CONNECT;")>0: job=3 txt=u"meldet das Zustandekommen eines Gespräches!" elif msgtxt.find(";DISCONNECT;")>0: job=5 txt=u"meldet eine beendete Verbindung!" elif msgtxt.find("NOTIFY,REFRESH")>=0: job=4 elif msgtxt.find("NOTIFY,CONNECTION_LOST")>=0: job=8 txt=self.errMsg+u"hat die Verbindung zur Fritzbox verloren!" else: print "Illegale Nachricht vom CallMonitor der Fritzbox empfangen" itemDataMapOpenBefore=self.getConidData(conid) # offener Satz zur conid vor ListCtrl-Update if (job&2)==2: self.removeUnfinishedFromListCtrl() # alle derzeit angezeigten unbeendeten Verbindungen löschen self.updateListCtrlFromLog() # alle unbeendeten Verbindungen vom CallMon-Server holen und anzeigen self.SortListItems(0, 0) if (job&4)==4: self.fillListCtrl() # komplett neu laden if (job&1)==1: #self.showTipWindow(self.errMsg+txt) itemDataMapOpenAfter=self.getConidData(conid) # offener Satz zur conid nach ListCtrl-Update msg=None if itemDataMapOpenBefore==None and itemDataMapOpenAfter!=None: # vorher nix, nachher da -> CALL oder RING msg=CallMonitorMessage() msg.fromItemDataMap(itemDataMapOpenAfter) # den nachher-Satz laden elif itemDataMapOpenBefore!=None and itemDataMapOpenAfter!=None: # vorher da, nachher da -> CONNECT msg=CallMonitorMessage() msg.fromItemDataMap(itemDataMapOpenAfter) # den nachher-Satz laden elif itemDataMapOpenBefore!=None and itemDataMapOpenAfter==None: # vorher da, nachher nicht mehr -> DISCONNECT itemDataMapOpenAfter=self.getConidData(conid, itemDataMapOpenBefore[0]) # Satz zu conid + tmstmp(vorher) holen if itemDataMapOpenAfter==None: msg=None else: msg=CallMonitorMessage() msg.fromItemDataMap(itemDataMapOpenAfter) # den beendeten Satz laden if msg!=None: self.popup.showNew(msg) # Satz zur Anzeige an Popup übergeben if (job&8)==8: self.popup.showNew(None, txt) # den String "txt" direkt bzw. in Rohform als Popup anzeigen self.timer.Start(self.updateIntervall)
def __fillCallMonitorMessage(self, c): msg=CallMonitorMessage() msg.tmstmp=c[1] if c[2]=="RING": msg.typ+=self.msgtyp.ring elif c[2]=="CALL": msg.typ+=self.msgtyp.call else: print "__fillCallMonitorMessage: illegaler Aufruf!", c[2] msg.conid=c[3] msg.tel=c[4] msg.tel_pb=c[5] if c[6]==None: # NULL ... msg.tel_name=u"" # ... nach "" else: msg.tel_name=c[6] msg.num_int=c[7] msg.num_ext=c[8] if c[9]==None: # wenn join zum Fritzbox-Telefonbuch nix geliefert hat n, e=self.getName11880FromNumber(msg.num_ext) # im 11880-Telefonbuch nachsehen... if n!=None: msg.num_ext_name=n # ...und einsetzen else: msg.num_ext_name=u"" # ...bzw. auf <leer> setzen, wenn dort auch kein Name drin ist else: msg.num_ext_name=c[9] # Namen aus dem Fritzbox-Telefonbuch einsetzen msg.dur=c[10] msg.sip=c[11] msg.finished=c[12] return(msg)
def __parseMessage(self, msgstr): msg=None rs=msgstr.split(";") if len(rs)>3: msg=CallMonitorMessage() msg.tmstmp=self.__convertTimestamp(rs[0]) msg.typ=rs[1] msg.conid=rs[2] if msg.typ=="CALL": msg.tel=rs[3] msg.tel_pb=self.__numIntToName(rs[3]) msg.num_int=rs[4] msg.num_ext=self.__stripFollowingHash(rs[5]) if len(rs)>=7: msg.sip=rs[6] elif msg.typ=="RING": msg.num_ext=rs[3] msg.num_int=rs[4] if len(rs)>=6: msg.sip=rs[5] elif msg.typ=="CONNECT": msg.tel=rs[3] msg.tel_pb=self.__numIntToName(rs[3]) msg.num_ext=rs[4] elif msg.typ=="DISCONNECT": msg.dur=rs[3] else: msg=None print "Error: unknown type" return(msg)
def onShowPopup(self, event=0): self.cnt+=1 msg=CallMonitorMessage() msg.tmstmp=u"2014-12-07 08:42:18" msg.typ=u"<-" msg.conid=u"1" msg.tel=u"0" msg.tel_pb=u"**1" msg.tel_name=u"Büro" msg.num_ext=u"04xxxxxxx1" msg.num_int=u"04xxxxxxxx6" msg.sip=u"SIP0" msg.num_ext_name=u"O&O xxxxxx" msg.dur=u"64" if self.cnt==1: self.popup.showNew(msg) msg.typ=u"<- bla" if self.cnt==2: self.popup.showNew(msg) #self.popup.showNew(msg) msg.typ=u"<- bla -X" if self.cnt==3: self.popup.showNew(msg) msg.typ=u"<- -X" msg.dur="" if self.cnt==4: self.popup.showNew(msg) msg.dur=u"64" msg.typ=u"->" if self.cnt==5: self.popup.showNew(msg) msg.typ=u"-> bla" if self.cnt==6: self.popup.showNew(msg) msg.typ=u"-> bla -X" if self.cnt==7: self.popup.showNew(msg) msg.typ=u"-> -X" msg.dur=u"" if self.cnt==8: self.popup.showNew(msg) errMsg=u"Der CallMonServer auf 11w:26260 " txt=errMsg+u"hat die Verbindung zur Fritzbox verloren!" if self.cnt==9: self.popup.showNew(None, txt) self.cnt=0