コード例 #1
0
ファイル: CallMonClient.py プロジェクト: andyhirsch/callmon
  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)