Skip to content

Commit 3c10f46

Browse files
committed
Migrate all actions to ActionCore
This patch migrates each of the 13 action classes to derive from either `OBSLiveSplitOneCore` or `TimerSourceActionCore` rather than the older `ActionBase` base classes.
1 parent 7aa8d62 commit 3c10f46

13 files changed

Lines changed: 231 additions & 246 deletions

actions/Interact.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
1-
from .TimerSourceActionBase import TimerSourceActionBase
1+
from .TimerSourceActionCore import TimerSourceActionCore
2+
from src.backend.PluginManager.EventAssigner import EventAssigner
3+
from src.backend.DeckManagement.InputIdentifier import Input
24

35
from loguru import logger as log
4-
import os
56
from uuid import UUID
67

7-
class Interact(TimerSourceActionBase):
8+
9+
class Interact(TimerSourceActionCore):
810
def __init__(self, *args, **kwargs):
911
super().__init__(*args, **kwargs)
1012

11-
def on_ready(self):
12-
if self.plugin_base.backend is None:
13-
return
14-
15-
# Connect to obs if not connected
16-
if not self.plugin_base.get_connected():
17-
self.reconnect_obs()
13+
def get_icon_name(self) -> str:
14+
return "interact.png"
1815

19-
image = "interact.png"
20-
self.set_media(
21-
media_path=os.path.join(self.plugin_base.PATH, "assets", image)
16+
def create_event_assigners(self):
17+
self.add_event_assigner(
18+
EventAssigner(
19+
id="interact",
20+
ui_label="Interact",
21+
default_event=Input.Key.Events.DOWN,
22+
callback=self._on_interact,
23+
)
2224
)
2325

24-
def on_key_down(self):
25-
if not self.plugin_base.backend.get_connected():
26-
# Try to reconnect once.
27-
self._reconnect_obs()
28-
if not self.plugin_base.backend.get_connected():
29-
return
26+
def _on_interact(self, data):
27+
if not self.ensure_connection():
28+
return
3029

31-
uuid_str = self.get_settings().get("source-uuid")
30+
uuid_str = self.get_source_uuid()
3231
if uuid_str:
3332
self.plugin_base.backend.interact_with_livesplit_one_source(
3433
UUID(uuid_str)

actions/NextComparison.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
1-
from .OBSLiveSplitOneActionBase import OBSLiveSplitOneActionBase
1+
from .OBSLiveSplitOneCore import OBSLiveSplitOneCore
2+
from src.backend.PluginManager.EventAssigner import EventAssigner
3+
from src.backend.DeckManagement.InputIdentifier import Input
24

3-
import os
45

5-
class NextComparison(OBSLiveSplitOneActionBase):
6+
class NextComparison(OBSLiveSplitOneCore):
67
def __init__(self, *args, **kwargs):
78
super().__init__(*args, **kwargs)
89

9-
def on_ready(self):
10-
# Connect to obs if not connected
11-
if self.plugin_base.backend is not None:
12-
if not self.plugin_base.get_connected():
13-
self.reconnect_obs()
10+
def get_icon_name(self) -> str:
11+
return "next-comparison.png"
1412

15-
image = "next-comparison.png"
16-
self.set_media(
17-
media_path=os.path.join(self.plugin_base.PATH, "assets", image)
13+
def create_event_assigners(self):
14+
self.add_event_assigner(
15+
EventAssigner(
16+
id="next_comparison",
17+
ui_label="Next Comparison",
18+
default_event=Input.Key.Events.DOWN,
19+
callback=self._on_next_comparison,
20+
)
1821
)
1922

20-
def on_key_down(self):
21-
if not self.plugin_base.backend.get_connected():
22-
# Try to reconnect once.
23-
self._reconnect_obs()
24-
if not self.plugin_base.backend.get_connected():
25-
return
26-
23+
def _on_next_comparison(self, data):
24+
if not self.ensure_connection():
25+
return
2726
self.plugin_base.backend.next_comparison()

actions/Pause.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
1-
from .OBSLiveSplitOneActionBase import OBSLiveSplitOneActionBase
1+
from .OBSLiveSplitOneCore import OBSLiveSplitOneCore
2+
from src.backend.PluginManager.EventAssigner import EventAssigner
3+
from src.backend.DeckManagement.InputIdentifier import Input
24

3-
import os
45

5-
class Pause(OBSLiveSplitOneActionBase):
6+
class Pause(OBSLiveSplitOneCore):
67
def __init__(self, *args, **kwargs):
78
super().__init__(*args, **kwargs)
89

9-
def on_ready(self):
10-
# Connect to obs if not connected
11-
if self.plugin_base.backend is not None:
12-
if not self.plugin_base.get_connected():
13-
self.reconnect_obs()
10+
def get_icon_name(self) -> str:
11+
return "pause.png"
1412

15-
image = "pause.png"
16-
self.set_media(
17-
media_path=os.path.join(self.plugin_base.PATH, "assets", image)
13+
def create_event_assigners(self):
14+
self.add_event_assigner(
15+
EventAssigner(
16+
id="pause",
17+
ui_label="Pause",
18+
default_event=Input.Key.Events.DOWN,
19+
callback=self._on_pause,
20+
)
1821
)
1922

20-
def on_key_down(self):
21-
if not self.plugin_base.backend.get_connected():
22-
# Try to reconnect once.
23-
self._reconnect_obs()
24-
if not self.plugin_base.backend.get_connected():
25-
return
26-
23+
def _on_pause(self, data):
24+
if not self.ensure_connection():
25+
return
2726
self.plugin_base.backend.pause()

actions/PrevComparison.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
1-
from .OBSLiveSplitOneActionBase import OBSLiveSplitOneActionBase
1+
from .OBSLiveSplitOneCore import OBSLiveSplitOneCore
2+
from src.backend.PluginManager.EventAssigner import EventAssigner
3+
from src.backend.DeckManagement.InputIdentifier import Input
24

3-
import os
45

5-
class PrevComparison(OBSLiveSplitOneActionBase):
6+
class PrevComparison(OBSLiveSplitOneCore):
67
def __init__(self, *args, **kwargs):
78
super().__init__(*args, **kwargs)
89

9-
def on_ready(self):
10-
# Connect to obs if not connected
11-
if self.plugin_base.backend is not None:
12-
if not self.plugin_base.get_connected():
13-
self.reconnect_obs()
10+
def get_icon_name(self) -> str:
11+
return "prev-comparison.png"
1412

15-
image = "prev-comparison.png"
16-
self.set_media(
17-
media_path=os.path.join(self.plugin_base.PATH, "assets", image)
13+
def create_event_assigners(self):
14+
self.add_event_assigner(
15+
EventAssigner(
16+
id="prev_comparison",
17+
ui_label="Previous Comparison",
18+
default_event=Input.Key.Events.DOWN,
19+
callback=self._on_prev_comparison,
20+
)
1821
)
1922

20-
def on_key_down(self):
21-
if not self.plugin_base.backend.get_connected():
22-
# Try to reconnect once.
23-
self._reconnect_obs()
24-
if not self.plugin_base.backend.get_connected():
25-
return
26-
23+
def _on_prev_comparison(self, data):
24+
if not self.ensure_connection():
25+
return
2726
self.plugin_base.backend.prev_comparison()

actions/Reset.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
1-
from .OBSLiveSplitOneActionBase import OBSLiveSplitOneActionBase
1+
from .OBSLiveSplitOneCore import OBSLiveSplitOneCore
2+
from src.backend.PluginManager.EventAssigner import EventAssigner
3+
from src.backend.DeckManagement.InputIdentifier import Input
24

3-
import os
45

5-
class Reset(OBSLiveSplitOneActionBase):
6+
class Reset(OBSLiveSplitOneCore):
67
def __init__(self, *args, **kwargs):
78
super().__init__(*args, **kwargs)
89

9-
def on_ready(self):
10-
# Connect to obs if not connected
11-
if self.plugin_base.backend is not None:
12-
if not self.plugin_base.get_connected():
13-
self.reconnect_obs()
10+
def get_icon_name(self) -> str:
11+
return "reset.png"
1412

15-
image = "reset.png"
16-
self.set_media(
17-
media_path=os.path.join(self.plugin_base.PATH, "assets", image)
13+
def create_event_assigners(self):
14+
self.add_event_assigner(
15+
EventAssigner(
16+
id="reset",
17+
ui_label="Reset",
18+
default_event=Input.Key.Events.DOWN,
19+
callback=self._on_reset,
20+
)
1821
)
1922

20-
def on_key_down(self):
21-
if not self.plugin_base.backend.get_connected():
22-
# Try to reconnect once.
23-
self._reconnect_obs()
24-
if not self.plugin_base.backend.get_connected():
25-
return
26-
23+
def _on_reset(self, data):
24+
if not self.ensure_connection():
25+
return
2726
self.plugin_base.backend.reset()

actions/SaveSplits.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
1-
from .TimerSourceActionBase import TimerSourceActionBase
1+
from .TimerSourceActionCore import TimerSourceActionCore
2+
from src.backend.PluginManager.EventAssigner import EventAssigner
3+
from src.backend.DeckManagement.InputIdentifier import Input
24

35
from loguru import logger as log
4-
import os
56
from uuid import UUID
67

7-
class SaveSplits(TimerSourceActionBase):
8+
9+
class SaveSplits(TimerSourceActionCore):
810
def __init__(self, *args, **kwargs):
911
super().__init__(*args, **kwargs)
1012

11-
def on_ready(self):
12-
if self.plugin_base.backend is None:
13-
return
14-
15-
# Connect to obs if not connected
16-
if not self.plugin_base.get_connected():
17-
self.reconnect_obs()
13+
def get_icon_name(self) -> str:
14+
return "save-splits.png"
1815

19-
image = "save-splits.png"
20-
self.set_media(
21-
media_path=os.path.join(self.plugin_base.PATH, "assets", image)
16+
def create_event_assigners(self):
17+
self.add_event_assigner(
18+
EventAssigner(
19+
id="save_splits",
20+
ui_label="Save Splits",
21+
default_event=Input.Key.Events.DOWN,
22+
callback=self._on_save_splits,
23+
)
2224
)
2325

24-
def on_key_down(self):
25-
if not self.plugin_base.backend.get_connected():
26-
# Try to reconnect once.
27-
self._reconnect_obs()
28-
if not self.plugin_base.backend.get_connected():
29-
return
26+
def _on_save_splits(self, data):
27+
if not self.ensure_connection():
28+
return
3029

31-
uuid_str = self.get_settings().get("source-uuid")
30+
uuid_str = self.get_source_uuid()
3231
if uuid_str:
3332
self.plugin_base.backend.save_splits(UUID(uuid_str))
3433
else:

actions/SetLayoutPath.py

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
1-
from .TimerSourceActionBase import TimerSourceActionBase
1+
from .TimerSourceActionCore import TimerSourceActionCore
2+
from src.backend.PluginManager.EventAssigner import EventAssigner
3+
from src.backend.DeckManagement.InputIdentifier import Input
24

35
from loguru import logger as log
4-
import os
56
from uuid import UUID
67

7-
# Import gtk modules
88
import gi
99
gi.require_version("Gtk", "4.0")
1010
gi.require_version("Adw", "1")
1111
from gi.repository import Gtk, Adw, Gio
1212

13-
class SetLayoutPath(TimerSourceActionBase):
13+
14+
class SetLayoutPath(TimerSourceActionCore):
1415
def __init__(self, *args, **kwargs):
1516
super().__init__(*args, **kwargs)
1617

18+
def get_icon_name(self) -> str:
19+
return "set-layout-path.png"
20+
1721
def get_config_rows(self) -> list:
1822
self.layout_path_settings = Adw.PreferencesGroup()
1923
self.layout_path_settings.set_title(
@@ -101,27 +105,21 @@ def on_layout_path_dialog_response(self, dialog, async_result):
101105
return
102106
self.layout_path_entry.set_text(path.get_path())
103107

104-
def on_ready(self):
105-
if self.plugin_base.backend is None:
106-
return
107-
108-
# Connect to obs if not connected
109-
if not self.plugin_base.get_connected():
110-
self.reconnect_obs()
111-
112-
image = "set-layout-path.png"
113-
self.set_media(
114-
media_path=os.path.join(self.plugin_base.PATH, "assets", image)
108+
def create_event_assigners(self):
109+
self.add_event_assigner(
110+
EventAssigner(
111+
id="set_layout_path",
112+
ui_label="Set Layout Path",
113+
default_event=Input.Key.Events.DOWN,
114+
callback=self._on_set_layout_path,
115+
)
115116
)
116117

117-
def on_key_down(self):
118-
if not self.plugin_base.backend.get_connected():
119-
# Try to reconnect once.
120-
self._reconnect_obs()
121-
if not self.plugin_base.backend.get_connected():
122-
return
118+
def _on_set_layout_path(self, data):
119+
if not self.ensure_connection():
120+
return
123121

124-
uuid_str = self.get_settings().get("source-uuid")
122+
uuid_str = self.get_source_uuid()
125123
if not uuid_str:
126124
log.debug("No source UUID set")
127125
return

0 commit comments

Comments
 (0)