diff --git a/python/PiFinder/pos_server.py b/python/PiFinder/pos_server.py index 4aa274ce..8049be20 100644 --- a/python/PiFinder/pos_server.py +++ b/python/PiFinder/pos_server.py @@ -170,6 +170,7 @@ def handle_goto_command(shared_state, ra_parsed, dec_parsed): ) logger.debug("handle_goto_command: Pushing object: %s", obj) shared_state.ui_state().add_recent(obj) + shared_state.ui_state().set_new_pushto(True) ui_queue.put("push_object") return "1" @@ -239,7 +240,7 @@ def run_server(shared_state, p_ui_queue, log_queue): logger.info("SkySafari server started and listening") while True: client_socket, address = server_socket.accept() - logger.info("New connection from %s", address) + logger.debug("New connection from %s", address) handle_client(client_socket, shared_state) except Exception: logger.exception("Unexpected server error") diff --git a/python/PiFinder/state.py b/python/PiFinder/state.py index 343aa951..ef2174b2 100644 --- a/python/PiFinder/state.py +++ b/python/PiFinder/state.py @@ -52,6 +52,11 @@ def __init__(self): self.__message_timeout = 0 self.__hint_timeout = 0 self.__show_fps = False + # Set to true when an object is pushed + # to the recent list from the pos_server + # proccess (i.e. skysafari goto). Used + # to jump from object list to object details + self.__new_pushto = False def observing_list(self): return self.__observing_list @@ -65,6 +70,12 @@ def recent_list(self) -> List[CompositeObject]: def add_recent(self, v: CompositeObject): self.__recent.append(v) + def set_new_pushto(self, v: bool): + self.__new_pushto = v + + def new_pushto(self) -> bool: + return self.__new_pushto + def target(self): return self.__target diff --git a/python/PiFinder/ui/menu_manager.py b/python/PiFinder/ui/menu_manager.py index 69bbabf3..e4b52694 100644 --- a/python/PiFinder/ui/menu_manager.py +++ b/python/PiFinder/ui/menu_manager.py @@ -170,6 +170,19 @@ def message(self, message: str, timeout: float) -> None: self.stack[-1].message(message, timeout) # type: ignore[arg-type] def jump_to_label(self, label: str) -> None: + # to prevent many recent/object UI modules + # being added to the list upon repeated object + # pushes, check for existing 'recent' in the + # stack and jump to that, rather than adding + # a new one + if label in ["recent"]: + for stack_index, ui_module in enumerate(self.stack): + if ui_module.item_definition.get("label", "") == label: + self.stack = self.stack[: stack_index + 1] + self.stack[-1].active() # type: ignore[call-arg] + return + # either this is not a special case, or we didn't find + # the label already in the stack menu_to_jump = find_menu_by_label(label) if menu_to_jump is not None: self.add_to_stack(menu_to_jump) diff --git a/python/PiFinder/ui/object_details.py b/python/PiFinder/ui/object_details.py index 9c3dc52e..0b2d23d1 100644 --- a/python/PiFinder/ui/object_details.py +++ b/python/PiFinder/ui/object_details.py @@ -232,6 +232,9 @@ def active(self): def _check_catalog_initialised(self): code = self.object.catalog_code + if code == "PUSH": + # Special code for objects pushed from sky-safari + return True catalog = self.catalogs.get_catalog_by_code(code) return catalog and catalog.initialised diff --git a/python/PiFinder/ui/object_list.py b/python/PiFinder/ui/object_list.py index fff48f01..8e8b4d29 100644 --- a/python/PiFinder/ui/object_list.py +++ b/python/PiFinder/ui/object_list.py @@ -368,7 +368,14 @@ def line_position(self, line_number, title_offset=20): def active(self): # trigger refilter super().active() - self.refresh_object_list() + + # check for new push_to + if self.ui_state.new_pushto(): + self.refresh_object_list(force_update=True) + self.ui_state.set_new_pushto(False) + self.show_object_details(0) + else: + self.refresh_object_list() def update(self, force: bool = False) -> None: self.clear_screen() @@ -585,6 +592,22 @@ def marking_menu_right(self): self._marking_menu_items[3].selected = False self.sort() + def show_object_details(self, object_index): + """ + Adds the object details UI module for the object + at object_index to the top of the stack. + """ + _menu_item = self._menu_items_sorted[object_index] + + object_item_definition = { + "name": _menu_item.display_name, + "class": UIObjectDetails, + "object": _menu_item, + "object_list": self._menu_items_sorted, + "label": "object_details", + } + self.add_to_stack(object_item_definition) + def key_right(self): """ When right is pressed, move to @@ -599,16 +622,7 @@ def key_right(self): self.jump_input_display = False self.jump_to_number.reset_number() - _menu_item = self._menu_items_sorted[self._current_item_index] - - object_item_definition = { - "name": _menu_item.display_name, - "class": UIObjectDetails, - "object": _menu_item, - "object_list": self._menu_items_sorted, - "label": "object_details", - } - self.add_to_stack(object_item_definition) + self.show_object_details(self._current_item_index) def key_number(self, number): self.jump_to_number.append_number(number) diff --git a/python/tests/test_sys_utils.py b/python/tests/test_sys_utils.py index 33541a74..6115dc88 100644 --- a/python/tests/test_sys_utils.py +++ b/python/tests/test_sys_utils.py @@ -69,4 +69,4 @@ def test_wpa_supplicant_parsing(): except ImportError: - pass \ No newline at end of file + pass