Skip to content

Commit

Permalink
WIP new features #2
Browse files Browse the repository at this point in the history
  • Loading branch information
lcb01a committed Oct 8, 2024
1 parent f654109 commit b01c5bb
Show file tree
Hide file tree
Showing 3 changed files with 159 additions and 60 deletions.
41 changes: 30 additions & 11 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ def __init__(self):
"dialog": 1,
"window": 2,
"popup": 0,
"numbers": {
"row1": "callerid",
"row2": None
},
"choices": {
"yes_button": ["call_accept", None],
"no_button": ["call_hangup", None]
Expand All @@ -46,6 +50,10 @@ def __init__(self):
"dialog": 2,
"window": 2,
"popup": 0,
"numbers": {
"row1": "callerid",
"row2": None
},
"choices": {
"no_button": ["call_hangup", None]
}
Expand All @@ -54,6 +62,10 @@ def __init__(self):
"dialog": 3,
"window": 2,
"popup": 0,
"numbers": {
"row1": "phonebook",
"row2": None
},
"choices": {
"yes_button": ["phonebook_call_active_entry", None],
"no_button": ["exit_dialogs", None]
Expand All @@ -63,12 +75,20 @@ def __init__(self):
"dialog": 5,
"window": 2,
"popup": 0,
"numbers": {
"row1": "callerid",
"row2": "calltimer"
},
"choices": {}
},
"call_start":{
"dialog": 4,
"window": 2,
"popup": 0,
"numbers": {
"row1": "callerid",
"row2": "calltimer"
},
"choices": {
"no_button": ["call_hangup", None]
}
Expand All @@ -79,6 +99,10 @@ def __init__(self):
"screenid": 1,
"window": 0,
"popup": 0,
"numbers": {
"row1": None,
"row2": None
},
"selectors": {},
"choices": {
"yes_button": ["screen", "phonebook"]
Expand All @@ -88,21 +112,16 @@ def __init__(self):
"screenid": 2,
"window": 0,
"popup": 0,
"numbers": {
"row1": "phonebook",
"row2": "entry"
},
"selectors": {},
"choices": {
"yes_button": ["phonebook_call_confirm_dialog", None],
"no_button": ["screen", "main"],
"ok_button": ["phonebook_next", None],
"cancel_button": ["phonebook_prev", None]
}
},
"credits": {
"screenid": 1,
"window": 1,
"popup": 0,
"selectors": {},
"choices": {
"cancel_button": ["screen", "main"]
"ok_button": ["phonebook_switch", "next"],
"cancel_button": ["phonebook_switch", "prev"]
}
}
}
Expand Down
170 changes: 122 additions & 48 deletions menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def __init__(self, config: Config, gui: Gui, osc: Osc, microsip: MicroSIP, osc_
self.active_dialog: str = ""
self.active_mode: int = 0
self.active_phonebook_entry: int = 0
self.call_start_time: float = float()
self.call_start_time: float = 0
self.callerid: str = ""
self.osc_integer_parameters: dict[str, str] = {
"screen": params.active_screen,
"window": params.active_window,
Expand All @@ -31,7 +32,9 @@ def __init__(self, config: Config, gui: Gui, osc: Osc, microsip: MicroSIP, osc_
"numberRow2Slot1": params.show_numberRow2Slot1,
"numberRow2Slot2": params.show_numberRow2Slot2,
"numberRow2Slot3": params.show_numberRow2Slot3,
"numberRow2Slot4": params.show_numberRow2Slot4
"numberRow2Slot4": params.show_numberRow2Slot4,
"delimiterRow1": params.show_delimiterRow1,
"delimiterRow2": params.show_delimiterRow2
}
self.osc_bool_parameters: dict[str, str] = {
"selector1": params.show_selection1,
Expand Down Expand Up @@ -65,6 +68,7 @@ def _initmenu(self):

def _reset_dialogs(self):
self.active_mode = 0
self.active_dialog = ""
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), 0)
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), 0)
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["screens"][self.active_screen]["window"])
Expand All @@ -84,6 +88,8 @@ def _switch_screen(self, screen):
self.active_mode = 0
self.osc.client.send_message(self.osc_integer_parameters.get("screen"), self.config.get_by_key("phonemenu")["screens"][screen]["screenid"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["screens"][screen]["window"])
self._handle_numbers("row1", self.config.get_by_key("phonemenu")["screens"][screen]["numbers"]["row1"])
self._handle_numbers("row2", self.config.get_by_key("phonemenu")["screens"][screen]["numbers"]["row2"])
for selector in self.config.get_by_key("phonemenu")["screens"][screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
Expand All @@ -97,6 +103,8 @@ def _show_dialog(self, dialog):
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), self.config.get_by_key("phonemenu")["dialogs"][dialog]["dialog"])
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), self.config.get_by_key("phonemenu")["dialogs"][dialog]["popup"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["dialogs"][dialog]["window"])
self._handle_numbers("row1", self.config.get_by_key("phonemenu")["dialogs"][dialog]["numbers"]["row1"])
self._handle_numbers("row2", self.config.get_by_key("phonemenu")["dialogs"][dialog]["numbers"]["row2"])
for selector in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
Expand All @@ -106,20 +114,22 @@ def _show_dialog(self, dialog):
def _redraw(self):
self.gui.print_terminal("log_verbose: Redrawing screen") if self.config.get_by_key("log_verbose") else None
self.osc.client.send_message(self.osc_integer_parameters.get("screen"), self.config.get_by_key("phonemenu")["screens"][self.active_screen]["screenid"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["screens"][self.active_screen]["window"]) if self.active_mode == 0 else None
for selector in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"][selector]
)
if self.active_mode == 1:
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["dialog"])
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["popup"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["window"])
if self.active_mode == 2:
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["dialog"])
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), self.config.get_by_key("phonemenu")["transition_popup"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["window"])
match self.active_mode:
case 0:
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["screens"][self.active_screen]["window"])
self._handle_numbers("row1", self.config.get_by_key("phonemenu")["screens"][self.active_screen]["numbers"]["row1"])
self._handle_numbers("row2", self.config.get_by_key("phonemenu")["screens"][self.active_screen]["numbers"]["row2"])
for selector in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"]:
self.osc.client.send_message(
self.osc_bool_parameters.get(selector),
self.config.get_by_key("phonemenu")["screens"][self.active_screen]["selectors"][selector]
)
case 1:
self.osc.client.send_message(self.osc_integer_parameters.get("dialog"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["dialog"])
self.osc.client.send_message(self.osc_integer_parameters.get("popup"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["popup"])
self.osc.client.send_message(self.osc_integer_parameters.get("window"), self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["window"])
self._handle_numbers("row1", self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["numbers"]["row1"])
self._handle_numbers("row2", self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["numbers"]["row2"])

def _handle_choices(self, choice):
match choice[0]:
Expand All @@ -131,12 +141,8 @@ def _handle_choices(self, choice):
self.microsip.run_phone_command("hangup")
case "call_phonebook":
self.microsip.run_phone_command("phonebook", choice[1])
case "phonebook_next":
self._phonebook_switch_entry("next")
case "phonebook_prev":
self._phonebook_switch_entry("prev")
case "phonebook_call_confirm_dialog":
self._phonebook_call_confirm_dialog()
case "phonebook_switch":
self._phonebook_switch_entry(choice[1])
case "phonebook_call_active_entry":
self.microsip.run_phone_command("phonebook", self.active_phonebook_entry)
case "exit_dialogs":
Expand All @@ -150,39 +156,39 @@ def _handle_avatar_change(self):

def _handle_button_input(self, button):
self.gui.print_terminal("log_verbose: Handle button input: {} active_mode: {}".format(button, self.active_mode)) if self.config.get_by_key("log_verbose") else None
if self.active_mode == 0:
if button in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["choices"]:
choice = self.config.get_by_key("phonemenu")["screens"][self.active_screen]["choices"][button]
self._handle_choices(choice)
else:
return
elif self.active_mode == 1:
if button in self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["choices"]:
choice = self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["choices"][button]
self._handle_choices(choice)
else:
return
elif self.active_mode == 2:
#Loading transition mode, we don't accept input here
return
match self.active_mode:
case 0:
if button in self.config.get_by_key("phonemenu")["screens"][self.active_screen]["choices"]:
choice = self.config.get_by_key("phonemenu")["screens"][self.active_screen]["choices"][button]
self._handle_choices(choice)
else:
return
case 1:
if button in self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["choices"]:
choice = self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["choices"][button]
self._handle_choices(choice)
else:
return

def _handle_callback_input(self, command, caller):
self.gui.print_terminal("log_verbose: Handle callback command: {}, caller: {} active_mode: {}".format(command, caller, self.active_mode)) if self.config.get_by_key("log_verbose") else None
self.callerid = caller
match command:
case "call_end" | "call_busy":
self.gui.print_terminal("Call with {} ended after {} seconds".format(caller,int(time.time() - self.call_start_time)))
self._show_dialog("call_end")
time.sleep(self.config.get_by_key("interaction_timeout"))
self._reset_dialogs()
self.call_start_time = float(0)
self.callerid = ""
case "call_outgoing":
self.call_start_time = time.time()
self.gui.print_terminal("Outgoing call to {}".format(caller))
self._show_dialog("call_outgoing")
case "call_incoming":
self.call_start_time = time.time()
self.gui.print_terminal("Incoming call from {}".format(caller))
self._show_dialog("call_incoming")
case "call_start":
self.call_start_time = time.time()
self.gui.print_terminal("Call with {} started".format(caller))
self._show_dialog("call_start")
case _:
Expand All @@ -200,22 +206,89 @@ def _phonebook_switch_entry(self, direction):
else:
self.active_phonebook_entry += 1
else:
pass
return
case "prev":
if len_entries > 1:
if active_entry == 0:
self.active_phonebook_entry = len_entries - 1
else:
self.active_phonebook_entry -= 1
else:
pass
return
case _:
return
self._redraw()
self.gui.print_terminal("log_verbose: Switched phonebook in direction: {} new entry: {}".format(direction, self.active_phonebook_entry)) if self.config.get_by_key("log_verbose") else None

def _handle_numbers(self, row, number_type):
match number_type:
case "phonebook":
self._show_number_field(row, self.config.get_by_key("phonebook")[self.active_phonebook_entry][1])
case "entry":
self._show_number_field(row, str(self.active_phonebook_entry + 1))
case "callerid":
self._show_number_field(row, self.callerid)
case "calltimer":
self._show_number_field(row, str(int(time.time() - self.call_start_time)))
case "systemtime":
self._show_number_field(row, "1337")
case _:
self._hide_number_field(row)
self.gui.print_terminal("log_verbose: Handled number type: {} for row: {}".format(number_type, row)) if self.config.get_by_key("log_verbose") else None

def _show_number_field(self, row, number):
digitlist = list()
for digit in "{s:{c}^{n}}".format(s = number, n = 4, c = "X"):
match digit:
case "*":
digitlist.append(11)
case "#":
digitlist.append(12)
case "X":
digitlist.append(255)
case _:
digitlist.append(int(digit))
match row:
case "row1":
self.osc.client.send_message(params.show_numberRow1Slot1, digitlist[0])
self.osc.client.send_message(params.show_numberRow1Slot2, digitlist[1])
self.osc.client.send_message(params.show_numberRow1Slot3, digitlist[2])
self.osc.client.send_message(params.show_numberRow1Slot4, digitlist[3])
case "row2":
self.osc.client.send_message(params.show_numberRow2Slot1, digitlist[0])
self.osc.client.send_message(params.show_numberRow2Slot2, digitlist[1])
self.osc.client.send_message(params.show_numberRow2Slot3, digitlist[2])
self.osc.client.send_message(params.show_numberRow2Slot4, digitlist[3])

def _hide_number_field(self, row):
match row:
case "row1":
self.osc.client.send_message(params.show_numberRow1Slot1, 255)
self.osc.client.send_message(params.show_numberRow1Slot2, 255)
self.osc.client.send_message(params.show_numberRow1Slot3, 255)
self.osc.client.send_message(params.show_numberRow1Slot4, 255)
case "row2":
self.osc.client.send_message(params.show_numberRow2Slot1, 255)
self.osc.client.send_message(params.show_numberRow2Slot2, 255)
self.osc.client.send_message(params.show_numberRow2Slot3, 255)
self.osc.client.send_message(params.show_numberRow2Slot4, 255)

def _phonebook_call_confirm_dialog(self):
self._show_dialog("call_confirm")
#phonebook_call_confirm_menu
pass
def _update_timers(self):
match self.active_mode:
case 0:
row1 = self.config.get_by_key("phonemenu")["screens"][self.active_screen]["numbers"]["row1"]
row2 = self.config.get_by_key("phonemenu")["screens"][self.active_screen]["numbers"]["row2"]
case 1:
row1 = self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["numbers"]["row1"]
row2 = self.config.get_by_key("phonemenu")["dialogs"][self.active_dialog]["numbers"]["row2"]
case _:
return
if row1 == "calltimer" or row1 == "systemtime":
self._handle_numbers("row1", row1)
if row2 == "calltimer" or row2 == "systemtime":
self._handle_numbers("row2", row2)

def _input_worker(self):
def _worker_thread(self):
while True:
try:
#Handle VRC queue
Expand All @@ -230,11 +303,12 @@ def _input_worker(self):
self._handle_callback_input(self.microsip_dialog_mapping.get(address), caller)
self.osc_microsip_queue.discard((address, caller))
#Handle call timer
#self._handle_calltimer()
if self.call_start_time is not float(0):
self._update_timers()
except RuntimeError:
pass
time.sleep(.025)

def run(self):
self._initmenu()
threading.Thread(target=self._input_worker, daemon=True).start()
threading.Thread(target=self._worker_thread, daemon=True).start()
Loading

0 comments on commit b01c5bb

Please sign in to comment.