-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathOBSActionBase.py
More file actions
122 lines (95 loc) · 4.45 KB
/
OBSActionBase.py
File metadata and controls
122 lines (95 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from src.backend.PluginManager.ActionBase import ActionBase
from src.backend.PluginManager.PluginBase import PluginBase
from src.backend.DeckManagement.DeckController import DeckController
from src.backend.PageManagement.Page import Page
# Import gtk modules
import gi
gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw
import threading
from loguru import logger as log
class OBSActionBase(ActionBase):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.has_configuration = True
self.status_label = Gtk.Label(
label=self.plugin_base.lm.get("actions.base.status.no-connection"), css_classes=["bold", "red"]
)
if not self.plugin_base.backend.get_connected():
self.reconnect_obs()
def get_config_rows(self) -> list:
self.ip_entry = Adw.EntryRow(title=self.plugin_base.lm.get("actions.base.ip.label"))
self.port_spinner = Adw.SpinRow.new_with_range(0, 65535, 1)
self.port_spinner.set_title(self.plugin_base.lm.get("actions.base.port.label"))
self.password_entry = Adw.PasswordEntryRow(title=self.plugin_base.lm.get("actions.base.password.label"))
self.load_config_defaults()
# Connect signals
self.ip_entry.connect("notify::text", self.on_change_ip)
self.port_spinner.connect("notify::value", self.on_change_port)
self.password_entry.connect("notify::text", self.on_change_password)
return [self.ip_entry, self.port_spinner, self.password_entry]
def load_config_defaults(self):
settings = self.plugin_base.get_settings()
ip = settings.setdefault("ip", "localhost")
port = settings.setdefault("port", 4455)
password = settings.setdefault("password", "")
# Update ui
self.ip_entry.set_text(ip)
self.port_spinner.set_value(port)
self.password_entry.set_text(password)
self.update_ip_warning_status()
self.update_status_label()
def on_change_ip(self, entry, *args):
settings = self.plugin_base.get_settings()
settings["ip"] = self.ip_entry.get_text().strip()
self.plugin_base.set_settings(settings)
self.update_ip_warning_status()
self.reconnect_obs()
def update_ip_warning_status(self):
valid = self.plugin_base.backend.OBSController.validate_ip(self.ip_entry.get_text().strip())
if valid:
self.ip_entry.remove_css_class("error")
else:
self.ip_entry.add_css_class("error")
def on_change_port(self, spinner, *args):
settings = self.plugin_base.get_settings()
settings["port"] = int(spinner.get_value())
self.plugin_base.set_settings(settings)
self.reconnect_obs()
def on_change_password(self, entry, *args):
settings = self.plugin_base.get_settings()
settings["password"] = entry.get_text()
self.plugin_base.set_settings(settings)
self.reconnect_obs()
def reconnect_obs(self):
threading.Thread(target=self._reconnect_obs, daemon=True, name="reconnect_obs").start()
def _reconnect_obs(self):
try:
self.plugin_base.backend.connect_to(
host=self.plugin_base.get_settings().get("ip", "localhost"),
port=self.plugin_base.get_settings().get("port", 4455),
password=self.plugin_base.get_settings().get("password") or "",
timeout=3,
legacy=False,
)
except Exception as e:
log.error(e)
if hasattr(self, "status_label"):
self.update_status_label()
def update_status_label(self) -> None:
threading.Thread(target=self._update_status_label, daemon=True, name="update_status_label").start()
def _update_status_label(self):
if self.plugin_base.backend.get_connected():
print("connected - label")
self.status_label.set_label(self.plugin_base.lm.get("actions.base.status.connected"))
self.status_label.remove_css_class("red")
self.status_label.add_css_class("green")
else:
print("not connected - label")
self.status_label.set_label(self.plugin_base.lm.get("actions.base.status.no-connection"))
self.status_label.remove_css_class("green")
self.status_label.add_css_class("red")
def get_custom_config_area(self):
self.update_status_label()
return self.status_label