def __call__(self,hostName,displayName,portNumber,timeoutNumber,sendEvent,eventPortOpen,eventPortClosed): global prefix sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeoutNumber) print hostName try: result = sock.connect_ex((hostName,portNumber)) sock.close() if result == 0: hostStatus="port open" else: hostStatus="port closed" except: hostStatus="hostname unresolved" print "Error: can't resolve " + hostName if eventPortOpen=="": if displayName=="": eventPortOpen=hostName + "_PORT_OPEN" else: eventPortOpen=displayName + "_PORT_OPEN" if eventPortClosed=="": if displayName=="": eventPortClosed=hostName + "_PORT_CLOSED" else: eventPortClosed=displayName + "_PORT_CLOSED" if sendEvent: if hostStatus=="port open": eg.TriggerEvent(prefix=prefix,suffix=eventPortOpen) else: eg.TriggerEvent(prefix=prefix,suffix=eventPortClosed) return hostStatus
def __call__(self, hostName, hostFriendlyName, pingDelay, sendEvent, eventAlive, eventDead): global prefix pingCmd = os.popen( "ping " + hostName + " -w " + str(pingDelay) + " -n 1", "r") if pingCmd.read().find(self.plugin.pingString) > -1: hostStatus = "alive" else: hostStatus = "dead" if eventAlive == "": if hostFriendlyName == "": eventAlive = hostName + "_IS_ALIVE" else: eventAlive = hostFriendlyName + "_IS_ALIVE" if eventDead == "": if hostFriendlyName == "": eventDead = hostName + "_IS_DEAD" else: eventDead = hostFriendlyName + "_IS_DEAD" if sendEvent: if hostStatus == "alive": eg.TriggerEvent(prefix=prefix, suffix=eventAlive) else: eg.TriggerEvent(prefix=prefix, suffix=eventDead) return (hostStatus == "alive")
def Query(self, key1, key2, key3): if key2 != None and key2 != '' and key3 != None and key3 != '': try: eg.TriggerEvent('QueryResults.' + str(DBase[key1][key2][key3]), prefix='SystemDatabase', payload=DBase[key1][key2][key3]) return DBase[key1][key2][key3] except KeyError: eg.PrintError('Key Error') print key1, key2, key3 return 'KeyError' elif key2 != None and key2 != '': try: eg.TriggerEvent('QueryResults.' + str(DBase[key1][key2]), prefix='SystemDatabase', payload=DBase[key1][key2]) return DBase[key1][key2] except KeyError: eg.PrintError('Key Error') print key1, key2 return 'KeyError' else: try: eg.TriggerEvent('QueryResults.' + str(DBase[key1]), prefix='SystemDatabase', payload=DBase[key1]) return DBase[key1] except KeyError: eg.PrintError('Key Error') print key1 return 'KeyError'
def run(self): WaitForSingleObject(self.processInformation.hProcess, INFINITE) exitCode = DWORD() if not GetExitCodeProcess( self.processInformation.hProcess, byref(exitCode) ): raise self.Exception(FormatError()) CloseHandle(self.processInformation.hProcess) if hasattr(self.processInformation, "hThread"): CloseHandle(self.processInformation.hThread) if self.pld: try: data = code_open(self.filename, 'r', self.cp) lines = data.readlines() returnValue = "".join(lines) data.close() remove(self.filename) except: returnValue = "" eg.TriggerEvent( self.suffix, prefix = self.prefix, payload = returnValue.rstrip() ) else: eg.TriggerEvent(self.suffix, prefix = self.prefix)
def __call__(self, imagePath, evtID, cType, evtF, evtNF): script = "\nSysGet, VirtualWidth, 78\nSysGet, VirtualWidth, 79" script += "\nImageSearch, imageX, imageY, 0, 0" script += ", %A_ScreenWidth%, %A_ScreenHeight%, " + imagePath if cType != 0: script += "\nif ErrorLevel = 0" if cType == 1: script += "\n Click %imageX%, %imageY%, left" if cType == 2: script += "\n Click %imageX%, %imageY%, 2" if cType == 3: script += "\n Click %imageX%, %imageY%, right" script = replaceEgVars(script) ImgScript = ahk.Script() ImgScript.variable("imageX", int) ImgScript.variable("imageY", int) ahk.execute(str(script)) errorLevel = ImgScript.ErrorLevel if evtID: evtID += "." if errorLevel == 0 and evtF == True: eg.TriggerEvent(evtID + "ImageFound", prefix="AHK.ImageSearch", payload=[ImgScript.imageX, ImgScript.imageY]) if errorLevel == 1 and evtNF == True: eg.TriggerEvent(evtID + "ImageNotFound", prefix="AHK.ImageSearch") if errorLevel == 2: eg.PrintError("There was an error. Try another image format.")
def SendEvent(self,sendPayload): if sendPayload['variable_name'] == 'Status': if sendPayload['new_state'] == '0': eg.TriggerEvent( 'Switch.DeviceID-'+str(sendPayload['device_id'])+'.Off', prefix = 'Vera', payload = sendPayload ) if sendPayload['new_state'] == '1': eg.TriggerEvent( 'Switch.DeviceID-'+str(sendPayload['device_id'])+'.On', prefix = 'Vera', payload = sendPayload ) if sendPayload['variable_name'] == 'LoadLevelStatus': eg.TriggerEvent( 'Dimmer.DeviceID-'+str(sendPayload['device_id'])+'.DimLevel-'+str(sendPayload['new_state']), prefix = 'Vera', payload = sendPayload )
def PortCheckThread(self,stopPortCheckThreadEvent): print "PortCheck Plugin: Thread " + self.name + " is starting. Socket Timeout=" + str(self.timeoutNumber) + "s Check Interval=" + str(self.checkintervalNumber) + "s" eventsPortOpen=0 eventsPortClosed=0 repeatCounterOpen=0 repeatCounterClosed=0 while not stopPortCheckThreadEvent.isSet(): if self.printDebugMessages: print "Thread " + self.name + " is running. Last status: " + self.lastPortCheckResult + ". repeatCounterOpen=" + str(repeatCounterOpen) + "/" + str(self.repeatTriggerEvent) + " repeatCounterClosed=" + str(repeatCounterClosed) + "/" + str(self.repeatTriggerEvent) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(self.timeoutNumber) result = sock.connect_ex((self.hostName,self.portNumber)) sock.close() if result == 0: eventsPortOpen+=1 eventsPortClosed=0 repeatCounterClosed=0 self.lock.acquire() try: self.lastPortCheckResult="port open" if eventsPortOpen>=self.delayEventPortOpen: if self.status!="port open": self.status="port open" eg.TriggerEvent(prefix=prefix,suffix=self.eventPortOpen) repeatCounterOpen=0 if self.repeatTriggerEventOpen > 0 and repeatCounterOpen == self.repeatTriggerEventOpen: eg.TriggerEvent(prefix=prefix,suffix=self.eventPortOpen) repeatCounterOpen=0 finally: self.lock.release() repeatCounterOpen+=1 else: eventsPortOpen=0 eventsPortClosed+=1 repeatCounterOpen=0 self.lock.acquire() try: self.lastPortCheckResult="port closed" if eventsPortClosed>=self.delayEventPortClosed: if self.status!="port closed": self.status="port closed" eg.TriggerEvent(prefix=prefix,suffix=self.eventPortClosed) repeatCounterClosed=0 if self.repeatTriggerEventClosed > 0 and repeatCounterClosed == self.repeatTriggerEventClosed: eg.TriggerEvent(prefix=prefix,suffix=self.eventPortClosed) repeatCounterClosed=0 finally: self.lock.release() repeatCounterClosed+=1 stopPortCheckThreadEvent.wait(self.checkintervalNumber) print "PortCheck Plugin: Thread " + self.name + " is ending." self.stopPortCheckThreadEvent.clear()
def __call__(self): proc = subprocess.Popen([self.plugin.adbPath,'shell','dumpsys','power','|','grep', 'mScreenOn'],shell=True, stdout=subprocess.PIPE, creationflags=subprocess.SW_HIDE) status = proc.stdout.readline().strip() #eg.TriggerEvent("Status",prefix="AFTV",payload=status) if "true" in status: eg.TriggerEvent("PowerOn",prefix="AFTV") else: eg.TriggerEvent("PowerOff",prefix="AFTV")
def Delete(self, key1, key2, key3): if key2 != None and key2 != '' and key3 != None and key3 != '': try: oldval = self.DBase[key1][key2][key3] del self.DBase[key1][key2][key3] eg.TriggerEvent('Deleted', prefix='SystemDatabase', payload={key1: { key2: { key3: oldval } }}) return True except: try: oldval = self.DBase[key1][key2] self.Notice("Delete: Invalid Key: Key3 = ", key3) return False except: try: oldval = self.DBase[key1] self.Notice("Delete: Invalid Key: Key2 = ", key2) return False except: self.Notice("Delete: Invalid Key: Key1 = ", key1) return False elif key2 != None and key2 != '': try: oldval = self.DBase[key1][key2] del self.DBase[key1][key2] eg.TriggerEvent('Deleted', prefix='SystemDatabase', payload={key1: { key2: oldval }}) return True except: try: oldval = self.DBase[key1] self.Notice("Delete: Invalid Key: Key2 = ", key2) return False except: self.Notice("Delete: Invalid Key: Key1 = ", key1) return False else: try: oldval = self.DBase[key1] del self.DBase[key1] eg.TriggerEvent('Deleted', prefix='SystemDatabase', payload={key1: oldval}) return True except: self.Notice("Delete: Invalid Key: Key1 = ", key1) return False
def showMessageBox(self, title, body, alias, payload, options): if not alias: alias = title result = MessageBox(0, body, title, options) if result > 0 and result < 8: result = self.RESULTS[result] else: result = str(result) if payload: eg.TriggerEvent("%s.%s" % (alias, result), payload, "MessageBox") else: eg.TriggerEvent("%s.%s" % (alias, result), prefix="MessageBox") return result
def Connect(self): """ This function tries to connect to the named pipe from AlternateMceIrService. If it can't connect, it will periodically retry until the plugin is stopped or the connection is made. """ #eg.PrintNotice("MCE_Vista: Connect started") self.sentMessageOnce = False while self.file is None and self.keepRunning: try: self.file = win32file.CreateFile( r'\\.\pipe\MceIr', win32file.GENERIC_READ | win32file.GENERIC_WRITE, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL | win32file.FILE_FLAG_OVERLAPPED, None) except: if not self.sentMessageOnce: eg.PrintNotice( "MCE_Vista: MceIr pipe is not available, app doesn't seem to be running" ) eg.PrintNotice( " Will continue to try to connect to MceIr") eg.PrintNotice( " Message = %s" % win32api.FormatMessage(win32api.GetLastError())) self.sentMessageOnce = True eg.TriggerEvent('Pipe Not Available', prefix="MCE_Vista") time.sleep(.25) return
def ThreadLoop(self, stopThreadEvent): while not stopThreadEvent.isSet(): import time import codecs # KORD_INSTALL_PATH = "C:\\Users\\Piyush\\OneDrive - University of Florida\\Laboratory\\2. Electron\Kord\\" input = codecs.open(KORD_INSTALL_PATH + "eg", 'r', eg.systemEncoding, 'ignore') data = input.readlines() input.close() if len(data) > 0: for line in data: if len(line.strip()) > 0: trigger_id = line.strip().split(":-:")[0] chord_id = line.strip().split(":-:")[1] payload = line.strip().split(":-:")[2] if chord_id == "Notification": message = payload.replace("#>#", " | ") eg.plugins.EventGhost.ShowOSD( message, "0;-24;0;0;0;700;0;0;0;1;0;0;2;26;Arial", (255, 255, 255), (0, 0, 0), 4, (0, 0), 0, 3.0, True) else: eg.TriggerEvent(chord_id, prefix="Kord", payload=[payload, trigger_id]) stopThreadEvent.wait(1.0)
def TriggerEvent(self, eventString, payload=None, prefix=None): kwargs = {} if payload: kwargs['payload'] = payload if prefix: kwargs['prefix'] = prefix eg.TriggerEvent(eventString, **kwargs)
def PingThread(self, stopPingThreadEvent): print "Ping Plugin : Thread " + self.name + " is starting ! " eventsAlive = 0 eventsDead = 0 startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW pingCmd = subprocess.Popen( ["ping", self.name, "-4", "-t", "-w", str(self.pingDelay)], stdout=subprocess.PIPE, stderr=None, startupinfo=startupinfo) pingCmd.wShowWindow = 0 while not stopPingThreadEvent.isSet(): output = pingCmd.stdout.readline() #print output if output.find(self.pingString) > -1: #print " Thread " + self.name + " is pinging !" eventsAlive += 1 eventsDead = 0 self.lock.acquire() try: self.lastPingResult = "alive" if eventsAlive >= self.delayEventAlive: if self.status != "alive": self.status = "alive" eg.TriggerEvent(prefix=prefix, suffix=self.eventAlive) finally: self.lock.release() else: eventsAlive = 0 eventsDead += 1 self.lock.acquire() try: self.lastPingResult = "dead" if eventsDead >= self.delayEventDead: if self.status != "dead": self.status = "dead" eg.TriggerEvent(prefix=prefix, suffix=self.eventDead) finally: self.lock.release() print "Ping Plugin : Thread " + self.name + " is ending ! " pingCmd.terminate() self.stopPingThreadEvent.clear()
def run(self): WaitForSingleObject(self.processInformation.hProcess, INFINITE) exitCode = DWORD() if not GetExitCodeProcess(self.processInformation.hProcess, byref(exitCode)): raise self.Exception(FormatError()) CloseHandle(self.processInformation.hProcess) CloseHandle(self.processInformation.hThread) eg.TriggerEvent(self.suffix, prefix=self.prefix)
def Polling(self): self.sched = eg.scheduler.AddTask(self.poll, self.Polling) if not self.GetConnection(): return text = self.text keys = ("Player", "Repeat song", "Shuffle", "Volume", "Mute") for i in range(len(self.events)): if i == 0: if self.events[0]: song = self.MakeRequest("get_song_current", "json") if song: val = song[u'PlayingFileName'] if val != self.oldStat[0]: self.oldStat[0] = val eg.TriggerEvent(self.Cap(text.events[0]), prefix=self.prefix, payload=val) elif i == 1: if self.events[1]: if not self.events[0]: song = self.MakeRequest("get_song_current", "json") if song: val = song[u'PlayingList'] if val != self.oldStat[1]: self.oldStat[1] = val eg.TriggerEvent(self.Cap(text.events[1]), prefix=self.prefix, payload=self.GetName(val)) elif i == 2: if self.events[2]: val = int(self.GetCustomStatus(keys[i - 2])) if val is not None and val != self.oldStat[i]: self.oldStat[i] = val eg.TriggerEvent( "%s.%s" % (self.Cap(text.events[i]), text.status[val]), prefix=self.prefix) elif self.events[i]: val = int(self.GetCustomStatus(keys[i - 2])) if val is not None and val != self.oldStat[i]: self.oldStat[i] = val eg.TriggerEvent(self.Cap(text.events[i]), prefix=self.prefix, payload=val)
def OnCmdReplay(self, dummyEvent=None): item = self.GetFirstSelected() while item != -1: text, icon = self.GetItemData(item)[:2] if icon == eg.Icons.EVENT_ICON: parts = text.split(" ", 1) e = parts[0] prefix, suffix = e.split(".", 1) if "." in e else [e, ""] payload = literal_eval(parts[1]) if len(parts) == 2 else None eg.TriggerEvent(suffix, payload, prefix) item = self.GetNextSelected(item)
def ThreadLoop(self): while self.event.isSet(): pass oldProcesses = GetProcessDict() oldPids = set(oldProcesses.keys()) while not self.event.isSet(): newProcesses = GetProcessDict() newPids = set(newProcesses.keys()) for pid in newPids.difference(oldPids): name = splitext(newProcesses[pid])[0] eg.TriggerEvent("Created." + name, prefix="Process") for pid in oldPids.difference(newPids): name = splitext(oldProcesses[pid])[0] eg.TriggerEvent("Destroyed." + name, prefix="Process") oldProcesses = newProcesses oldPids = newPids self.event.wait(0.1) self.event.clear()
def process_message(self, peer, mailfrom, rcpttos, data): print 'SMTPd: Receiving message from:', peer print 'SMTPd: Message addressed from:', mailfrom print 'SMTPd: Message addressed to :', rcpttos print 'SMTPd: Message length :', len(data) headers = Parser().parsestr(data) print 'SMTPd: Subject :%s' % headers['subject'] #print 'SMTPd: Message :\n', data for recemail in rcpttos: eg.TriggerEvent(recemail, prefix=smtpdPrefix, payload=headers['subject'])
def onClose(self, evt): retCode = self.GetReturnCode() if retCode not in self.LABELS: return if self.timer: self.timer.Stop() del self.timer ix = 1 + self.action.RES_IDS.index( retCode) if retCode in self.action.RES_IDS else 1 result = self.action.RESULTS[ix] self.alias = self.alias if self.alias else self.title if self.payload: eg.TriggerEvent("%s.%s" % (self.alias, result), self.payload, "MessageBox") else: eg.TriggerEvent("%s.%s" % (self.alias, result), prefix="MessageBox") if self.event is not None: self.action.retCode = result SetEvent(self.event) self.Destroy()
def EvalFile(self, evalString): try: self.DBase = ast.literal_eval(evalString) eg.TriggerEvent('DatabaseLoaded.' + self.filesavename.replace('.', '--'), prefix='SystemDatabase', payload=self.filesavepath + self.filesavename) return True except: eg.PrintError("Database data is malformed") return False
def Query(self, key1, key2, key3): if key2 != None and key2 != '' and key3 != None and key3 != '': try: eg.TriggerEvent( 'QueryResults.'+key1+'--'+key2+'--'+key3, prefix = 'SystemDatabase', payload = self.DBase[key1][key2][key3] ) return self.DBase[key1][key2][key3] except: self.Notice('Query: Invalid Key: Key1 = ',str(key1)+', Key2 = '+str(key2)+', Key3 = '+str(key3)) return 'KeyError' elif key2 != None and key2 != '': try: eg.TriggerEvent( 'QueryResults.'+key1+'--'+key2, prefix = 'SystemDatabase', payload = self.DBase[key1][key2] ) return self.DBase[key1][key2] except: self.Notice('Query: Invalid Key: Key1 = ',str(key1)+', Key2 = '+str(key2)) return 'KeyError' else: try: eg.TriggerEvent( 'QueryResults.'+key1, prefix = 'SystemDatabase', payload = self.DBase[key1] ) return self.DBase[key1] except: self.Notice('Query: Invalid Key: Key1 = ',key1) return 'KeyError'
def __call__(self, eventString, waitTime=0, payload=None, queueEvent=True, restoreEvent=False, removeMain=False): def parse(value): if value is None: return None parsed_value = eg.ParseString(value) if value == parsed_value: try: value = eval(value) except (SyntaxError, NameError): pass else: value = parsed_value return value eventString = parse(eventString) payload = parse(payload) split_event = eventString.split('.', 1) if len(split_event) == 1: split_event.insert(0, 'Main') if not removeMain and split_event[0] != 'Main': split_event.insert(0, 'Main') split_event = [split_event[0], '.'.join(split_event[1:])] kwargs = dict(prefix=split_event[0], suffix=split_event[1], payload=payload) if not waitTime: if queueEvent: eg.TriggerEvent(**kwargs) else: event = eg.EventGhostEvent(**kwargs) if restoreEvent: old_event_string = eg.eventString old_event = eg.event event.Execute() eg.event = old_event eg.eventString = old_event_string else: event.Execute() else: eg.scheduler.AddShortTask(waitTime, eg.TriggerEvent, **kwargs)
def __call__(self, msgText, msgID, msgTitle, msgTO, bStyle, iStyle, selButton, onTop): opVal = bStyle + (iStyle * 16) + (selButton * 256) if onTop: opVal += 4096 msgText = replaceEgVars(msgText) msgText = msgText.replace('\n', '`n') script = ahk.Script() script.message(text=msgText, title=msgTitle, options=opVal, timeout=msgTO) buttons = [ "OK", "Cancel", "Yes", "No", "TryAgain", "Continue", "Abort", "Retry", "Ignore" ] for b in buttons: if script.msgResult(name=b): if msgID == "": eg.TriggerEvent(msgTitle + "." + b, prefix="AHK.MsgBox") else: eg.TriggerEvent(msgID + "." + b, prefix="AHK.MsgBox") break
def SaveFile(self, fpath='', fname=''): fpath = self.PathCheck(fpath) try: with open(fpath + fname, "w") as f: f.write(str(self.DBase)) eg.TriggerEvent('DatabaseSaved.' + fname.replace('.', '--'), prefix='SystemDatabase', payload=fpath + fname) return True except IOError: self.FileError(fpath, fname, 'Save') return False
def _key_callback(self, key, duration): str_key = lib.UserControlCodeToString(key).title() if duration == 0 and self._last_key != key: self._last_key = key self._key_event = eg.TriggerEnduringEvent(prefix=self._name, suffix='KeyPressed.' + str_key) elif duration > 0 and self._last_key == key: self._last_key = 255 self._key_event.SetShouldEnd() self._key_event = None elif self._last_key != key: self._last_key = 255 eg.TriggerEvent(prefix=self._name, suffix='KeyPressed.' + str_key) return 0
def __init__(self): eg.TriggerEvent( 'System-Startup', prefix='MountainHome.Control-Systems', payload=['System-Startup', ['LoadingPlugins', '.............']]) self.AddAction(TransferDB) self.AddAction(PrintDB) self.AddAction(ModifyItem) self.AddAction(AddItem) self.AddAction(DeleteItem) self.AddAction(QueryItem) self.AddAction(LoadFromFile) self.AddAction(SaveToFile) self.DBase = {}
def state3(self, line): line = line.decode(eg.systemEncoding) if line == "close": self.initiate_close() elif line[:8] == "payload ": self.payload.append(line[8:]) else: kwargs = dict( prefix=self.sourceIP.replace(".",",")+'.MediaPortal' \ if self.plugin.ipPrefix \ else self.plugin.prefix, suffix=line[12:], payload=self.payload ) eg.TriggerEvent(**kwargs) self.payload = [self.sourceIP]
def TriggerEvent(self, suffix, payload=None): """ Trigger an event. If the plugin wants to trigger an event in EventGhost, it should call self.TriggerEvent with the event name as *suffix* parameter. It can also post optional additional data through the *payload* parameter. Keep in mind, that an event generated through this method will also automatically be ended immediately. If the plugin wants to generate an event with a longer duration, it has to use :meth:`!TriggerEnduringEvent`. """ with gTriggerEventLock: info = self.info info.lastEvent.SetShouldEnd() event = eg.TriggerEvent(suffix, payload, info.eventPrefix, self) info.lastEvent = event return event
def __call__(self): if self.plugin.client is None: return result = self.plugin.client.GetDeviceInfo() if result is None: eg.PrintNotice("IR Service not running") eg.TriggerEvent('IR Service Not Running', prefix="MCE_Vista") return if result[1] == 0 and result[2] == 0: eg.PrintNotice("IR Receiver is unplugged") return nAttached = 0 i = 0 while (result[5] >> i) > 0: if result[5] & (1 << i): nAttached = nAttached + 1 i = i + 1 eg.PrintNotice( "%d Transmitters (%d attached), %s have learn capability" % (result[1], nAttached, "does" if result[2] == 2 else "does not"))