# -*- coding: utf-8 -*-
-import threading
from .music_file import *
from .mapping import *
+from .lock import *
+from .font import *
+import yaml
-draw_lock = threading.RLock()
+def parse_config2():
+ stream = open("config.yml", "r")
+ config = yaml.load(stream)
+ stream.close()
+
+ aliases = config['aliases']
+ seen_files = {}
+
+ file_lock = Lock("file")
+
+ channel_id = 0
+
+ key_properties = {}
+
+ for key in config['key_properties']:
+ if key not in key_properties:
+ key_properties[key] = {
+ "actions": [],
+ "properties": config['key_properties'][key],
+ "files": []
+ }
+
+ for mapped_key in config['keys']:
+ if mapped_key not in key_properties:
+ key_properties[mapped_key] = {
+ "actions": [],
+ "properties": {},
+ "files": []
+ }
+ for action in config['keys'][mapped_key]:
+ action_name = list(action)[0]
+ action_args = {}
+ if action[action_name] is None:
+ action[action_name] = []
+
+ if 'include' in action[action_name]:
+ included = action[action_name]['include']
+ del(action[action_name]['include'])
+
+ if isinstance(included, str):
+ action[action_name].update(aliases[included], **action[action_name])
+ else:
+ for included_ in included:
+ action[action_name].update(aliases[included_], **action[action_name])
+
+ for argument in action[action_name]:
+ if argument == 'file':
+ filename = action[action_name]['file']
+ if filename not in seen_files:
+ if filename in config['music_properties']:
+ seen_files[filename] = MusicFile(
+ filename,
+ file_lock,
+ channel_id,
+ **config['music_properties'][filename])
+ else:
+ seen_files[filename] = MusicFile(
+ filename,
+ file_lock,
+ channel_id)
+ channel_id = channel_id + 1
+
+ if filename not in key_properties[mapped_key]['files']:
+ key_properties[mapped_key]['files'].append(seen_files[filename])
+
+ action_args['music'] = seen_files[filename]
+
+ else:
+ action_args[argument] = action[action_name][argument]
+
+ key_properties[mapped_key]['actions'].append([action_name, action_args])
+
+ return (key_properties, channel_id + 1, seen_files)
def parse_config(mapping):
- import yaml
stream = open("config.yml", "r")
config = yaml.load(stream)
stream.close()
aliases = config['aliases']
seen_files = {}
- file_lock = threading.RLock()
+ file_lock = Lock("file")
+
+ channel_id = 0
for mapped_key in config['keys']:
key = mapping.find_by_unicode(mapped_key)
if argument == 'file':
filename = action[action_name]['file']
if filename not in seen_files:
- seen_files[filename] = MusicFile(filename, file_lock)
+ if filename in config['music_properties']:
+ seen_files[filename] = MusicFile(
+ filename,
+ file_lock,
+ channel_id,
+ **config['music_properties'][filename])
+ else:
+ seen_files[filename] = MusicFile(
+ filename,
+ file_lock,
+ channel_id)
+ channel_id = channel_id + 1
action_args['music'] = seen_files[filename]
action_args[argument] = action[action_name][argument]
key.add_action(action_name, **action_args)
+
+ for key_property in config['key_properties']:
+ key = mapping.find_by_unicode(key_property)
+ if key is None:
+ continue
+
+ if 'description' in config['key_properties'][key_property]:
+ key.set_description(config['key_properties'][key_property]['description'])
+ if 'color' in config['key_properties'][key_property]:
+ key.set_color(config['key_properties'][key_property]['color'])
+
+ # Return the number of channels reserved
+ return (channel_id + 1, seen_files)