def load_md_buttons(page: Optional[int] = None) -> None: """ Reads the buttons configured for use with MaterialDeck and sends willAppear events. """ if _deck_id not in deck_api.state: return if page is None: page = deck_api.get_page(_deck_id) button_states = deck_api.state[_deck_id]['buttons'] for button_index, button_info in button_states.get(page, {}).items(): if 'material_deck' in button_info: deck_info = button_info['material_deck'] if 'init_data' in deck_info: init_data = _create_will_display_payload( deck_info, button_index, page) command = _create_command_payload(init_data['action'], 'keyDown', button_index, page) deck_api.set_button_command( _deck_id, page, button_index, f"{CONFIG_PATH}/pipe_writer.sh '{_bridge_file}' '{json.dumps(command)}'" ) _write_message(json.dumps(init_data))
def md_action_changed(button_index: int, action: str) -> None: """ Handles changing the type of action Material Deck listens for. """ global _ui # pylint: disable=global-statement,invalid-name button_state = deck_api._button_state( # pylint: disable=protected-access _deck_id, deck_api.get_page(_deck_id), button_index) page = deck_api.get_page(_deck_id) if action: deck_info: dict = button_state.setdefault('material_deck', {}) init_data = deck_info.setdefault( 'init_data', { 'event': 'willAppear', 'payload': { 'settings': { 'displayName': True, 'displayIcon': True, 'displaySceneIcon': True, 'displaySceneName': True, }, }, }) init_data['action'] = action command = _create_command_payload(action, 'keyDown', button_index, page) deck_api.set_button_command( _deck_id, page, button_index, f"{CONFIG_PATH}/pipe_writer.sh '{_bridge_file}' '{json.dumps(command)}'" ) _write_message( json.dumps( _create_will_display_payload(deck_info, button_index, page))) elif 'material_deck' in button_state: previous_action = button_state['material_deck'].get('init_data', {}).get( 'action', '') del button_state['material_deck'] _reset_button(button_index, '', page) _write_message( json.dumps({ 'event': 'willDisappear', 'action': previous_action, 'payload': { 'coordinates': { 'column': button_index % DECK_COLUMNS, 'row': math.floor(button_index / DECK_COLUMNS), }, }, 'context': _to_context(button_index, page), 'device': _deck_id, })) deck_api.export_config(DECK_CONFIG_FILE) deck_gui.redraw_buttons(_ui)
def update_button_command(ui, command: str) -> None: deck_id = _deck_id(ui) api.set_button_command(deck_id, _page(ui), selected_button.index, command)
def _reset_button(button_index: int, image_path: str, page: int) -> None: deck_api.set_button_text(_deck_id, page, button_index, '') deck_api.set_button_command(_deck_id, page, button_index, '') deck_api.set_button_icon(_deck_id, page, button_index, image_path)