New Action -> ToggleStream (#1)
Added Icons stream_active, stream_inactive and stream_reconnecting Added functionality to backend to use OBSController for functions needed for Toggling of Stream Added Translations for German and English. Updated main.py to implement new Actions.
This commit is contained in:
parent
f700d7793a
commit
c35499cbe6
|
@ -0,0 +1,94 @@
|
|||
# from ...OBSActionbase import OBSActionBase
|
||||
import threading
|
||||
from plugins.com_core447_OBSPlugin.OBSActionBase import OBSActionBase
|
||||
from src.backend.DeckManagement.DeckController import DeckController
|
||||
from src.backend.PageManagement.Page import Page
|
||||
from src.backend.PluginManager.PluginBase import PluginBase
|
||||
|
||||
import os
|
||||
class ToggleStream(OBSActionBase):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.current_state = -1
|
||||
|
||||
def on_ready(self):
|
||||
self.current_state = -1
|
||||
if self.plugin_base.backend is None:
|
||||
if not self.plugin_base.get_connected():
|
||||
self.reconnect_obs()
|
||||
|
||||
threading.Thread(target=self.show_current_stream_status, daemon=True, name="show_current_stream_status").start()
|
||||
|
||||
def show_current_stream_status(self, new_paused = False):
|
||||
if self.plugin_base.backend is None:
|
||||
self.current_state = -1
|
||||
self.show_error()
|
||||
return
|
||||
if not self.plugin_base.backend.get_connected():
|
||||
self.current_state = -1
|
||||
self.show_error()
|
||||
return
|
||||
status = self.plugin_base.backend.get_stream_status()
|
||||
if status is None:
|
||||
self.current_state = -1
|
||||
self.show_error()
|
||||
return
|
||||
if status["active"]:
|
||||
if status["reconnecting"]:
|
||||
self.show_for_state(2)
|
||||
else:
|
||||
self.show_for_state(1)
|
||||
else:
|
||||
self.show_for_state(0)
|
||||
|
||||
def show_for_state(self, state: int):
|
||||
"""
|
||||
0: Not Streaming
|
||||
1: Streaming Connected
|
||||
2: Streaming Reconnecting
|
||||
"""
|
||||
if state in [1, 2]:
|
||||
self.show_stream_time()
|
||||
|
||||
if state == self.current_state:
|
||||
return
|
||||
|
||||
self.current_state = state
|
||||
image = "stream_inactive.png"
|
||||
if state == 0:
|
||||
self.set_bottom_label(None)
|
||||
elif state == 1:
|
||||
image = "stream_active.png"
|
||||
elif state == 2:
|
||||
image = "stream_reconnecting.png"
|
||||
|
||||
self.set_media(media_path=os.path.join(self.plugin_base.PATH, "assets", image))
|
||||
|
||||
def on_key_down(self):
|
||||
if self.plugin_base.backend is None:
|
||||
self.current_state = -1
|
||||
self.show_error()
|
||||
return
|
||||
if not self.plugin_base.backend.get_connected():
|
||||
self.current_state = -1
|
||||
self.show_error()
|
||||
return
|
||||
self.plugin_base.backend.toggle_stream()
|
||||
self.on_tick()
|
||||
|
||||
def on_tick(self):
|
||||
self.show_current_stream_status()
|
||||
|
||||
def show_stream_time(self):
|
||||
if not self.plugin_base.backend.get_connected():
|
||||
self.set_media(media_path=os.path.join(self.plugin_base.PATH, "assets", "error.png"))
|
||||
return
|
||||
status = self.plugin_base.backend.get_stream_status()
|
||||
if status is None:
|
||||
self.set_media(media_path=os.path.join(self.plugin_base.PATH, "assets", "error.png"))
|
||||
return
|
||||
|
||||
if not status["active"]:
|
||||
self.set_bottom_label(None)
|
||||
return
|
||||
self.set_bottom_label(status["timecode"][:-4])
|
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
|
@ -32,9 +32,30 @@ class Backend(BackendBase):
|
|||
"bytes": status.datain["outputBytes"]
|
||||
}
|
||||
|
||||
def get_stream_status(self) -> dict:
|
||||
status = self.OBSController.get_stream_status()
|
||||
if status is None:
|
||||
return
|
||||
return {
|
||||
"active": status.datain["outputActive"],
|
||||
"reconnecting": status.datain["outputReconnecting"],
|
||||
"timecode": status.datain["outputTimecode"],
|
||||
"duration": status.datain["outputDuration"],
|
||||
"congestion": status.datain["outputCongestion"],
|
||||
"bytes": status.datain["outputBytes"],
|
||||
"skipped_frames": status.datain["outputSkippedFrames"],
|
||||
"total_frames": status.datain["outputTotalFrames"]
|
||||
}
|
||||
|
||||
def get_connected(self) -> bool:
|
||||
return self.OBSController.connected
|
||||
|
||||
def toggle_stream(self):
|
||||
status = self.OBSController.toggle_stream()
|
||||
if status is None:
|
||||
return False
|
||||
return status.datain["outputActive"]
|
||||
|
||||
def toggle_record(self):
|
||||
self.OBSController.toggle_record()
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"plugin.name": "OBS",
|
||||
"actions.toggle-record.name": "Aufnahme pausieren",
|
||||
"actions.toggle-stream.name": "Streaming umschalten",
|
||||
"actions.rec-play-pause.name": "Play/Pause Aufnahme",
|
||||
"actions.base.status.no-connection": "Es konnte keine Verbindung zu OBS hergestellt werden.",
|
||||
"actions.base.ip.label": "IP:",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"plugin.name": "OBS",
|
||||
"actions.toggle-record.name": "Toggle Recording",
|
||||
"actions.toggle-stream.name": "Toggle Steaming",
|
||||
"actions.rec-play-pause.name": "Play/Pause Recording",
|
||||
"actions.base.status.no-connection": "Could not connect to OBS.",
|
||||
"actions.base.status.connected": "Successfully connected to OBS.",
|
||||
|
|
9
main.py
9
main.py
|
@ -20,6 +20,7 @@ sys.path.append(os.path.dirname(__file__))
|
|||
from OBSActionBase import OBSActionBase
|
||||
|
||||
from actions.ToggleRecord.ToggleRecord import ToggleRecord
|
||||
from actions.ToggleStream.ToggleStream import ToggleStream
|
||||
from actions.RecPlayPause.RecPlayPause import RecPlayPause
|
||||
from actions.SwitchScene.SwitchScene import SwitchScene
|
||||
|
||||
|
@ -51,6 +52,14 @@ class OBS(PluginBase):
|
|||
)
|
||||
self.add_action_holder(toggle_record_action_holder)
|
||||
|
||||
toggle_stream_action_holder = ActionHolder(
|
||||
plugin_base=self,
|
||||
action_base=ToggleStream,
|
||||
action_id="com_core447_OBSPlugin::ToggleStream",
|
||||
action_name=self.lm.get("actions.toggle-stream.name")
|
||||
)
|
||||
self.add_action_holder(toggle_stream_action_holder)
|
||||
|
||||
rec_play_pause_action_holder = ActionHolder(
|
||||
plugin_base=self,
|
||||
action_base=RecPlayPause,
|
||||
|
|
Loading…
Reference in New Issue