X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git;a=blobdiff_plain;f=music_sampler%2Fmapping.py;h=193f5e5d034a7a797076d3a68ca21c80627092cf;hp=a526ad2244485174fb03a97a1a3491dc5d184cd3;hb=b798117bb79038ae7495ea4fdb5254d15c7e4b63;hpb=d028768179d4fd1555831e26daaa9aae9ac94e85 diff --git a/music_sampler/mapping.py b/music_sampler/mapping.py index a526ad2..193f5e5 100644 --- a/music_sampler/mapping.py +++ b/music_sampler/mapping.py @@ -320,13 +320,60 @@ class Mapping(RelativeLayout): else: return {} - def check_mapped_key(mapped_keys, key): - if not isinstance(mapped_keys[key], list): + def check_mapped_key(actions, key): + if not isinstance(actions, list): warn_print("key config '{}' is not an array, ignored" .format(key)) return [] else: - return mapped_keys[key] + return actions + + def append_actions_to_key(mapped_key, actions, aliases, seen_files, music_properties, key_properties): + for index, action in enumerate(check_mapped_key(actions, mapped_key)): + if not isinstance(action, dict) or\ + not len(action) == 1 or\ + not isinstance(list(action.values())[0] or {}, dict): + warn_print("action number {} of key '{}' is invalid, " + "ignored".format(index + 1, mapped_key)) + continue + append_action_to_key(action, mapped_key, aliases, seen_files, music_properties, key_properties) + + def append_action_to_key(action, mapped_key, aliases, seen_files, music_properties, key_properties): + action_name = list(action)[0] + action_args = {} + if action[action_name] is None: + action[action_name] = {} + + include_aliases(action[action_name], aliases) + + for argument in action[action_name]: + if argument == 'file': + filename = str(action[action_name]['file']) + if filename not in seen_files: + music_property = check_music_property( + music_properties[filename], + filename) + + if filename in self.open_files: + self.open_files[filename]\ + .reload_properties(**music_property) + + seen_files[filename] =\ + self.open_files[filename] + else: + seen_files[filename] = MusicFile( + filename, self, **music_property) + + 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]) def check_music_property(music_property, filename): if not isinstance(music_property, dict): @@ -400,52 +447,11 @@ class Mapping(RelativeLayout): check_key_property(key_prop, key) key_properties[key]["properties"].update(key_prop) + if 'actions' in key_prop: + append_actions_to_key(key, key_prop['actions'], aliases, seen_files, music_properties, key_properties) for mapped_key in check_mapped_keys(config): - for index, action in enumerate(check_mapped_key( - config['keys'], mapped_key)): - if not isinstance(action, dict) or\ - not len(action) == 1 or\ - not isinstance(list(action.values())[0] or {}, dict): - warn_print("action number {} of key '{}' is invalid, " - "ignored".format(index + 1, mapped_key)) - continue - - action_name = list(action)[0] - action_args = {} - if action[action_name] is None: - action[action_name] = {} - - include_aliases(action[action_name], aliases) - - for argument in action[action_name]: - if argument == 'file': - filename = str(action[action_name]['file']) - if filename not in seen_files: - music_property = check_music_property( - music_properties[filename], - filename) - - if filename in self.open_files: - self.open_files[filename]\ - .reload_properties(**music_property) - - seen_files[filename] =\ - self.open_files[filename] - else: - seen_files[filename] = MusicFile( - filename, self, **music_property) - - 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]) + append_actions_to_key(mapped_key, config['keys'][mapped_key], aliases, seen_files, music_properties, key_properties) return (key_properties, seen_files)