from __future__ import print_function
from Components.Console import Console
from os import listdir as os_listdir, path as os_path
from re import compile as re_compile
from enigma import eEnv

class Keyboard:
	def __init__(self):
		self.keyboardmaps = []
		self.readKeyboardMapFiles()

	def readKeyboardMapFiles(self):
		for keymapfile in os_listdir(eEnv.resolve('${datadir}/keymaps/')):
			if (keymapfile.endswith(".info")):
				f = open(eEnv.resolve('${datadir}/keymaps/') + keymapfile)
				mapfile = None
				mapname = None
				for line in f:
					m = re_compile('^\s*(\w+)\s*=\s*(.*)\s*$').match(line)
					if m:
						key, val = m.groups()
						if key == 'kmap':
						    mapfile = val
						if key == 'name':
						    mapname = val
						if (mapfile is not None) and (mapname is not None):
						    self.keyboardmaps.append(( mapfile,mapname))
				f.close()

		if len(self.keyboardmaps) == 0:
			self.keyboardmaps = [('dream-de.kmap', 'Dreambox Keyboard Deutsch'), ('eng.kmap', 'Keyboard English')]

	def activateKeyboardMap(self, index):
		try:
			keymap = self.keyboardmaps[index]
			print("Activating keymap:",keymap[1])
			keymappath = eEnv.resolve('${datadir}/keymaps/') + keymap[0]
			if os_path.exists(keymappath):
				Console().ePopen(("loadkmap < " + str(keymappath)))
		except:
			print("Selected keymap does not exist!")

	def getKeyboardMaplist(self):
		return self.keyboardmaps

	def getDefaultKeyboardMap(self):
		return 'eng.kmap'

keyboard = Keyboard()
