Skip to content

Instantly share code, notes, and snippets.

@ctgPi
Last active July 31, 2023 17:48
Show Gist options
  • Select an option

  • Save ctgPi/6e39650d7f64dce5f8822fb34de9ca67 to your computer and use it in GitHub Desktop.

Select an option

Save ctgPi/6e39650d7f64dce5f8822fb34de9ca67 to your computer and use it in GitHub Desktop.

Revisions

  1. ctgPi revised this gist Jun 1, 2022. 2 changed files with 166 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions README.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2 @@
    Command: amixer -D pulse sset Capture 100%
    Release: amixer -D pulse sset Capture 0%
    164 changes: 164 additions & 0 deletions stream_deck_pedal.patch
    Original file line number Diff line number Diff line change
    @@ -22,3 +22,167 @@
    frame_cache[hashcode] = image
    else:
    image = frame_cache[hashcode]
    --- api.py
    +++ .local/lib/python3.8/site-packages/streamdeck_ui/api.py
    @@ -373,6 +373,16 @@
    """Returns the command set for the specified button"""
    return self._button_state(deck_id, page, button).get("command", "")

    + def set_button_command_release(self, deck_id: str, page: int, button: int, command_release: str) -> None:
    + """Sets the command_release associated with the button"""
    + if self.get_button_command_release(deck_id, page, button) != command_release:
    + self._button_state(deck_id, page, button)["command_release"] = command_release
    + self._save_state()
    +
    + def get_button_command_release(self, deck_id: str, page: int, button: int) -> str:
    + """Returns the command_release set for the specified button"""
    + return self._button_state(deck_id, page, button).get("command_release", "")
    +
    def set_button_switch_page(self, deck_id: str, page: int, button: int, switch_page: int) -> None:
    """Sets the page switch associated with the button"""
    if self.get_button_switch_page(deck_id, page, button) != switch_page:
    --- gui.py
    +++ .local/lib/python3.8/site-packages/streamdeck_ui/gui.py
    @@ -219,6 +219,16 @@
    api.set_page(deck_id, switch_page - 1)
    if _deck_id(ui) == deck_id:
    ui.pages.setCurrentIndex(switch_page - 1)
    + else:
    + kb = Controller()
    + page = api.get_page(deck_id)
    +
    + command_release = api.get_button_command_release(deck_id, page, key)
    + if command_release:
    + try:
    + Popen(shlex.split(command_release))
    + except Exception as error:
    + print(f"The command '{command_release}' failed: {error}")


    def _deck_id(ui) -> str:
    @@ -253,6 +263,12 @@
    api.set_button_command(deck_id, _page(ui), selected_button.index, command)


    +def update_button_command_release(ui, command_release: str) -> None:
    + if selected_button:
    + deck_id = _deck_id(ui)
    + api.set_button_command_release(deck_id, _page(ui), selected_button.index, command_release)
    +
    +
    def update_button_keys(ui, keys: str) -> None:
    if selected_button:
    deck_id = _deck_id(ui)
    @@ -393,6 +409,7 @@
    enable_button_configuration(ui, True)
    ui.text.setText(api.get_button_text(deck_id, _page(ui), button_id))
    ui.command.setText(api.get_button_command(deck_id, _page(ui), button_id))
    + ui.command_release.setText(api.get_button_command_release(deck_id, _page(ui), button_id))
    ui.keys.setCurrentText(api.get_button_keys(deck_id, _page(ui), button_id))
    ui.write.setPlainText(api.get_button_write(deck_id, _page(ui), button_id))
    ui.change_brightness.setValue(api.get_button_change_brightness(deck_id, _page(ui), button_id))
    @@ -406,6 +423,7 @@
    def enable_button_configuration(ui, enabled: bool):
    ui.text.setEnabled(enabled)
    ui.command.setEnabled(enabled)
    + ui.command_release.setEnabled(enabled)
    ui.keys.setEnabled(enabled)
    ui.write.setEnabled(enabled)
    ui.change_brightness.setEnabled(enabled)
    @@ -421,6 +439,7 @@
    """
    ui.text.clear()
    ui.command.clear()
    + ui.command_release.clear()
    ui.keys.clearEditText()
    ui.write.clear()
    ui.change_brightness.setValue(0)
    @@ -713,6 +732,7 @@
    ui = main_window.ui
    ui.text.textChanged.connect(partial(queue_update_button_text, ui))
    ui.command.textChanged.connect(partial(update_button_command, ui))
    + ui.command_release.textChanged.connect(partial(update_button_command_release, ui))
    ui.keys.currentTextChanged.connect(partial(update_button_keys, ui))
    ui.write.textChanged.connect(partial(update_button_write, ui))
    ui.change_brightness.valueChanged.connect(partial(update_change_brightness, ui))
    --- ui_main.py
    +++ .local/lib/python3.8/site-packages/streamdeck_ui/ui_main.py
    @@ -208,10 +208,20 @@

    self.formLayout.setWidget(2, QFormLayout.FieldRole, self.command)

    + self.label_4 = QLabel(self.groupBox)
    + self.label_4.setObjectName(u"label_4")
    +
    + self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_4)
    +
    + self.command_release = QLineEdit(self.groupBox)
    + self.command.setObjectName(u"command_release")
    +
    + self.formLayout.setWidget(3, QFormLayout.FieldRole, self.command_release)
    +
    self.label_5 = QLabel(self.groupBox)
    self.label_5.setObjectName(u"label_5")

    - self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_5)
    + self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_5)

    self.keys = QComboBox(self.groupBox)
    self.keys.addItem(u"")
    @@ -233,12 +243,12 @@
    self.keys.setObjectName(u"keys")
    self.keys.setEditable(True)

    - self.formLayout.setWidget(3, QFormLayout.FieldRole, self.keys)
    + self.formLayout.setWidget(4, QFormLayout.FieldRole, self.keys)

    self.label_8 = QLabel(self.groupBox)
    self.label_8.setObjectName(u"label_8")

    - self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_8)
    + self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_8)

    self.switch_page = QSpinBox(self.groupBox)
    self.switch_page.setObjectName(u"switch_page")
    @@ -246,28 +256,28 @@
    self.switch_page.setMaximum(10)
    self.switch_page.setValue(0)

    - self.formLayout.setWidget(4, QFormLayout.FieldRole, self.switch_page)
    + self.formLayout.setWidget(5, QFormLayout.FieldRole, self.switch_page)

    self.label_7 = QLabel(self.groupBox)
    self.label_7.setObjectName(u"label_7")

    - self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_7)
    + self.formLayout.setWidget(6, QFormLayout.LabelRole, self.label_7)

    self.change_brightness = QSpinBox(self.groupBox)
    self.change_brightness.setObjectName(u"change_brightness")
    self.change_brightness.setMinimum(-99)

    - self.formLayout.setWidget(5, QFormLayout.FieldRole, self.change_brightness)
    + self.formLayout.setWidget(6, QFormLayout.FieldRole, self.change_brightness)

    self.label_6 = QLabel(self.groupBox)
    self.label_6.setObjectName(u"label_6")

    - self.formLayout.setWidget(6, QFormLayout.LabelRole, self.label_6)
    + self.formLayout.setWidget(7, QFormLayout.LabelRole, self.label_6)

    self.write = QPlainTextEdit(self.groupBox)
    self.write.setObjectName(u"write")

    - self.formLayout.setWidget(6, QFormLayout.FieldRole, self.write)
    + self.formLayout.setWidget(7, QFormLayout.FieldRole, self.write)

    self.horizontalLayout_3 = QHBoxLayout()
    self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
    @@ -373,6 +383,7 @@
    self.removeButton.setText("")
    self.label_2.setText(QCoreApplication.translate("MainWindow", u"Label:", None))
    self.label_3.setText(QCoreApplication.translate("MainWindow", u"Command:", None))
    + self.label_4.setText(QCoreApplication.translate("MainWindow", u"Release:", None))
    self.label_5.setText(QCoreApplication.translate("MainWindow", u"Press Keys:", None))

    self.label_8.setText(QCoreApplication.translate("MainWindow", u"Switch Page:", None))
  2. ctgPi created this gist Jun 1, 2022.
    24 changes: 24 additions & 0 deletions stream_deck_pedal.patch
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    --- display_grid.py
    +++ .local/lib/python3.8/site-packages/streamdeck_ui/display/display_grid.py
    @@ -41,7 +41,10 @@
    self.streamdeck = streamdeck
    # Reference to the actual device, used to update icons

    - self.size = streamdeck.key_image_format()["size"]
    + if streamdeck.is_visual():
    + self.size = streamdeck.key_image_format()["size"]
    + else:
    + self.size = (72, 72)
    self.serial_number = streamdeck.get_serial_number()

    self.pages: Dict[int, Dict[int, Pipeline]] = {}
    @@ -158,7 +161,8 @@

    # FIXME: This will be unbounded, old frames will need to be evicted
    if hashcode not in frame_cache:
    - image = PILHelper.to_native_format(self.streamdeck, image)
    + if self.streamdeck.is_visual():
    + image = PILHelper.to_native_format(self.streamdeck, image)
    frame_cache[hashcode] = image
    else:
    image = frame_cache[hashcode]