X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=helpers%2F__init__.py;h=eb948f25ae5aa86b01f8b666624bcf39b4787d1c;hb=8612c5f8bb0fc9529bc489a6719654d4474db6d5;hp=6935342cc34a74f0304f4bd83bb42a335a7a1cb2;hpb=be27763f8be0f647cbe17ecee8c782901ce2cede;p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git diff --git a/helpers/__init__.py b/helpers/__init__.py index 6935342..eb948f2 100644 --- a/helpers/__init__.py +++ b/helpers/__init__.py @@ -1,12 +1,85 @@ # -*- 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() @@ -14,7 +87,9 @@ def parse_config(mapping): 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) @@ -41,7 +116,18 @@ def parse_config(mapping): 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] @@ -49,3 +135,16 @@ def parse_config(mapping): 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)