Source code for jdxi_editor.ui.editors.helpers.preset

import re
from typing import Any, Dict, List, Optional, Union

from jdxi_editor.midi.data.programs.digital import DIGITAL_PRESET_LIST


[docs] def get_preset_list_number_by_name( preset_name: str, preset_list: List[Dict[str, str]] ) -> Optional[int]: """ Retrieve a program's number (without bank letter) by its name using regex search :param preset_name: str :param preset_list: list :return: int preset id """ preset = next( ( p for p in preset_list if re.search(re.escape(preset_name), p["name"], re.IGNORECASE) ), None, ) return int(preset["id"]) if preset else 0
[docs] def get_preset_parameter_value( parameter: str, id: Union[str, int], preset_list: List[dict] = DIGITAL_PRESET_LIST ) -> Union[Optional[int], Any]: """ Retrieve a specific parameter value from a preset by its ID. :param parameter: Name of the parameter to retrieve. :param id: Preset ID (e.g., "001" or integer 1). :param preset_list: List of preset dictionaries. :return: The parameter value, or None if not found. """ # Normalize ID to string, padded to 3 characters (e.g., "001") if isinstance(id, int): id = f"{id:03d}" preset = next((p for p in preset_list if str(p.get("id")) == id), None) if not preset: return None value = preset.get(parameter) if value is None: return None # Convert string values to int if expected if parameter in ["msb", "lsb", "pc"]: try: return int(value) except ValueError: return None return value