From 36a6c34910833f2b702073c0abcccd748d03ba64 Mon Sep 17 00:00:00 2001 From: Francisco Sahli Date: Sun, 7 Feb 2016 00:16:54 +0000 Subject: [PATCH] Multiple improvements --- CardList.py | 39 +++++++++++++++++++++++++++++++++++++ Reader.py | 38 ++++++++++++++++++++++++++++++++++++ box.py | 56 +++++++++++++++++++++++++++++++++++++++-------------- config.py | 18 +++++++++++++++++ 4 files changed, 136 insertions(+), 15 deletions(-) create mode 100644 CardList.py create mode 100644 Reader.py create mode 100644 config.py diff --git a/CardList.py b/CardList.py new file mode 100644 index 0000000..5afc172 --- /dev/null +++ b/CardList.py @@ -0,0 +1,39 @@ +import csv +import os.path +import sys + +class CardList: + def __init__(self): + self.path = os.path.dirname(os.path.realpath(__file__)) + self.cardList = self.readList() + + def readList(self): + with open(self.path + '/cardList.csv', mode='r') as infile: + reader = csv.reader(infile) + cardList = {rows[0]:rows[1] for rows in reader} + infile.close() + return cardList + + def getPlaylist(self,card): + self.cardList = self.readList() + try: + return self.cardList[card] + except: + print 'Card %s is not card list' % card + return '' + + def addPlaylist(self, card, plist): + try: + if card not in self.cardList.keys(): + f = open(self.path + '/cardList.csv', 'a') + f.write(card + ',' + plist + '\n') + self.cardList[card] = plist + else: + print 'Card %s is already used' % card + except: + print 'Could not write file' + if not os.path.isfile(self.path + '/cardList.csv'): + print 'File cardList.csv does not exist' + + + diff --git a/Reader.py b/Reader.py new file mode 100644 index 0000000..5a1c5c0 --- /dev/null +++ b/Reader.py @@ -0,0 +1,38 @@ +import string +import csv +import os.path +import sys + +from evdev import InputDevice, categorize, ecodes, list_devices +from select import select +class Reader: + def __init__(self): + path = os.path.dirname(os.path.realpath(__file__)) + self.keys = "X^1234567890XXXXqwertzuiopXXXXasdfghjklXXXXXyxcvbnmXXXXXXXXXXXXXXXXXXXXXXX" + if not os.path.isfile(path + '/deviceName.txt'): + sys.exit('Please run config.py first') + else: + with open(path + '/deviceName.txt','r') as f: + deviceName = f.read() + devices = [InputDevice(fn) for fn in list_devices()] + for device in devices: + if device.name == deviceName: + self.dev = device + break + try: + self.dev + except: + sys.exit('Could not find the device %s\n. Make sure is connected' % deviceName) + + def readCard(self): + stri='' + key = '' + while key != 'KEY_ENTER': + r,w,x = select([self.dev], [], []) + for event in self.dev.read(): + if event.type==1 and event.value==1: + stri+=self.keys[ event.code ] + #print( keys[ event.code ] ) + key = ecodes.KEY[ event.code ] + return stri[:-1] + diff --git a/box.py b/box.py index 64dcccc..45513d9 100755 --- a/box.py +++ b/box.py @@ -2,27 +2,53 @@ from mpd import MPDClient from readtest import * import re +from CardList import CardList +from Reader import Reader +import sys -while True: + +def connectMPD(): try: - card = readCard() - cardList = readList() - plist=cardList[card] client = MPDClient() # create client object - client.timeout = 10 # network timeout in seconds (floats allowed), default: None + client.timeout = 200 # network timeout in seconds (floats allowed), default: None client.idletimeout = None print "Connecting..." client.connect("localhost", 6600) print "Connected!" - if plist=='pause': - client.pause() - else: - client.stop() - client.clear() - client.add(plist) - if re.search('playlist',plist): - client.shuffle() - client.play() - client.close() + return client + except: + print 'Could not connect to MPD server' + +def play(client, plist): + try: + client.stop() + client.clear() + client.add(plist) + if re.search('playlist',plist): + client.shuffle() + client.play() + except: + print 'Could not play playlist %s' % plist + +reader = Reader() +cardList = CardList() + +print 'Ready: place a card on top of the reader' + +while True: + try: + card = reader.readCard() + print 'Read card', card + plist = cardList.getPlaylist(card) + print 'Playlist', plist + if plist != '': + client = connectMPD() + if plist=='pause': + client.pause() + else: + play(client, plist) + client.close() + except KeyboardInterrupt: + sys.exit(0) except: pass diff --git a/config.py b/config.py new file mode 100644 index 0000000..f7f26d5 --- /dev/null +++ b/config.py @@ -0,0 +1,18 @@ +import os.path +from evdev import InputDevice, list_devices + +devices = [InputDevice(fn) for fn in list_devices()] +path = os.path.dirname(os.path.realpath(__file__)) +i = 0 +print "Choose the reader from list" +for dev in devices: + print i, dev.name + i += 1 + +dev_id = int(raw_input('Device Number: ')) + +with open(path + '/deviceName.txt','w') as f: + f.write(devices[dev_id].name) + f.close() + +