def __init__(self): self._dev = None self._foobar = None self._verbose = verbosity['Manager'] scriptdir = os.path.dirname(os.path.realpath(__file__)) self._config = demjson.decode(open(os.path.join(scriptdir,"config.js")).read()) self._profiles = scanProfiles(os.path.join(scriptdir,"profiles")) self._wm = WMIMonitor(self._config['deviceId'],callback=self._connect,verbose=verbosity['WMI']) self.profile = None
class Manager: def __init__(self): self._dev = None self._foobar = None self._verbose = verbosity['Manager'] scriptdir = os.path.dirname(os.path.realpath(__file__)) self._config = demjson.decode(open(os.path.join(scriptdir,"config.js")).read()) self._profiles = scanProfiles(os.path.join(scriptdir,"profiles")) self._wm = WMIMonitor(self._config['deviceId'],callback=self._connect,verbose=verbosity['WMI']) self.profile = None def _button(self,button,state): if (button == 1) and (state == 1): self._foobar.playpause() elif (button == 0) and (state == 1): self._foobar.next() elif (button == 4) and (state == 1): self._foobar.prev() # TODO: can be much better def printButtonState(self): for k,v in self._dev.buttonState.iteritems(): print(" %d: %d" % (k,v)) def printLightState(self): for k,v in self._dev.lightState.iteritems(): print(" %d: (%d,%d,%d)" % (k,v[0],v[1],v[2])) def keymode(self,value): if self._dev is not None: self._dev.setKeymode(value) def _internalstop(self): if self._dev is not None: self._dev.stop() self._dev = None if self._foobar is not None: self._foobar.stop() self._foobar = None def _player(self,state): try: if state["playing"] == "playing": percent = 0 try: percent = int(self._foobar.state("percent")) except: pass self._dev.setLight(0,(3,3,int(percent / 5.0))) else: self._dev.setLight(0,(15,0,0)) except: if self._verbose: traceback.print_exc() def _songchange(self): rating = 0 if self._verbose: print("Song change") try: rating = 5+int(self._foobar.state("rating"))*2 self._dev.setLight(1,(rating-2,5,5)) except: self._dev.setLight(1,(0,0,0)) def stop(self): self._wm.stop() self._internalstop() def loadProfile(self,profile): if profile not in self._profiles: print("Not a profile") return prof = self._profiles[profile] if self._dev is not None: self._dev.progKeymode(prof) self._profile = profile def connect(self): self._connect(True,self._config['defaultPort']) self._wm.assumeConnected() def _connect(self,state,data): if state: # we connected self._dev = Device(data,self._config['baudRate'],retries=4,callback=self._button) self._foobar = PlayerFoobar(self._config['playerExe'], self._config['playingFile'], self._config['fileFormat'], callback=self._player, verbose=verbosity['Player'],verboseFile=verbosity['FM']) self._foobar.setSongChangeCallback(self._songchange) else: # we lost connection self._internalstop() if self._verbose: print("Manager: Lost connection")