-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathirwatch.py
86 lines (78 loc) · 2.63 KB
/
irwatch.py
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
import os, subprocess, threading, gobject
#-*- coding: utf-8 -*-
class IRwatch:
def __init__(self):
try:
self.irw = subprocess.Popen(['irw'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
except:
self.irw = None
self.callbacks = []#{}
def listen(self):
if self.irw:
while self.irw:
try:
line = self.irw.stdout.readline()
cols = line.split()
keycode = cols[0]
for x in self.callbacks:
if type(x) == list:
cb = x[0]
params = x[1]
cb(keycode, *params)
else:
x(keycode)
except Exception, e:
pass
if self.irw.poll():
return
def quit(self):
try:
self.irw.terminate()
except:
pass
class Main:
def __init__(self, cb_dict):
self.infrared = IRwatch()
self.cb_dict = cb_dict
self.quit = self.infrared.quit
self.settingsManager = None
def initRemote(self, settingsManager):
self.settingsManager = settingsManager
self.infrared.callbacks.append(self.receiveIR)
threading.Thread(target=self.infrared.listen).start()
def receiveIR(self, code):
if self.settingsManager:
if code == self.settingsManager.remote_playpause:
gobject.idle_add(self.cb_dict['playpause'], None)
if code == self.settingsManager.remote_switch_fullscreen:
gobject.idle_add(self.cb_dict['fullscreen'], None)
if code == self.settingsManager.remote_stop:
gobject.idle_add(self.cb_dict['stop'], None)
if code == self.settingsManager.remote_volumeup:
gobject.idle_add(self.cb_dict['setVolume'], None, None, 0.1)
if code == self.settingsManager.remote_volumedown:
gobject.idle_add(self.cb_dict['setVolume'], None, None, -0.1)
if code == self.settingsManager.remote_mute:
gobject.idle_add(self.cb_dict['mute'])
if code == self.settingsManager.remote_quit:
gobject.idle_add(self.cb_dict['quit'], None)
if code == self.settingsManager.remote_nextchannel:
gobject.idle_add(self.cb_dict['nextChannel'])
if code == self.settingsManager.remote_prevchannel:
gobject.idle_add(self.cb_dict['prevChannel'])
if code == self.settingsManager.remote_info:
gobject.idle_add(self.cb_dict['showEPG'])
if code == self.settingsManager.remote_up:
gobject.idle_add(self.cb_dict['remoteUP'])
if code == self.settingsManager.remote_down:
gobject.idle_add(self.cb_dict['remoteDOWN'])
if code == self.settingsManager.remote_ok:
gobject.idle_add(self.cb_dict['remoteOK'])
if code == self.settingsManager.remote_sleep:
gobject.idle_add(self.cb_dict['remoteSLEEP'])
def stopRemote(self):
try:
self.infrared.callbacks.pop(self.infrared.callbacks.index(self.receiveIR))
except:
pass
self.infrared.quit()