From 31d4fe9fa7053e3c03ee9e7b3f3ab088ed8c398a Mon Sep 17 00:00:00 2001 From: Cat Lady Date: Fri, 5 Dec 2025 05:58:02 +0100 Subject: [PATCH] Enabled ability to navigate waypoints with "next" and "previous" arrows even before plugin registers arriving in the starting system. Ensured we don't end up in negative waypoint scenario, and other edge cases like that. --- SpanshRouter/SpanshRouter.py | 74 ++++++++++++++++++++++++++++-------- SpanshRouter/__init__.py | 6 --- 2 files changed, 59 insertions(+), 21 deletions(-) delete mode 100644 SpanshRouter/__init__.py diff --git a/SpanshRouter/SpanshRouter.py b/SpanshRouter/SpanshRouter.py index e21ed41..ca2bd84 100644 --- a/SpanshRouter/SpanshRouter.py +++ b/SpanshRouter/SpanshRouter.py @@ -352,29 +352,72 @@ class SpanshRouter(): self.parent.update() def goto_next_waypoint(self): - if self.offset < self.route.__len__()-1: + # allow manual navigation even if offset wasn't set by journal events yet + if self.route.__len__() == 0: + return + + if not hasattr(self, "offset") or self.offset is None: + self.offset = 0 + + if self.offset < self.route.__len__() - 1: self.update_route(1) def goto_prev_waypoint(self): + # allow manual navigation even if offset wasn't set by journal events yet + if self.route.__len__() == 0: + return + + if not hasattr(self, "offset") or self.offset is None: + self.offset = 0 + if self.offset > 0: self.update_route(-1) def update_route(self, direction=1): - if direction > 0: - if self.route[self.offset][1] not in [None, "", []]: - if not self.galaxy: - self.jumps_left -= int(self.route[self.offset][1]) - else: - self.jumps_left -= 1 - self.offset += 1 - else: - self.offset -= 1 - if self.route[self.offset][1] not in [None, "", []]: - if not self.galaxy: - self.jumps_left += int(self.route[self.offset][1]) - else: - self.jumps_left += 1 + # Guard: no route -> nothing to do + if self.route.__len__() == 0: + self.next_stop = "No route planned" + self.update_gui() + return + # Ensure offset exists and is within bounds + if not hasattr(self, "offset") or self.offset is None: + self.offset = 0 + + # clamp offset into valid range before operating + if self.offset < 0: + self.offset = 0 + if self.offset >= self.route.__len__(): + self.offset = self.route.__len__() - 1 + + try: + if direction > 0: + # subtract jumps for current offset (if present) then advance + if self.route[self.offset][1] not in [None, "", []]: + if not self.galaxy: + self.jumps_left -= int(self.route[self.offset][1]) + else: + self.jumps_left -= 1 + # advance but clamp + if self.offset < self.route.__len__() - 1: + self.offset += 1 + else: + # move back, but avoid negative indexes + if self.offset > 0: + self.offset -= 1 + if self.route[self.offset][1] not in [None, "", []]: + if not self.galaxy: + self.jumps_left += int(self.route[self.offset][1]) + else: + self.jumps_left += 1 + except Exception: + # If something odd in route contents, try to recover by resetting offset to 0 + exc_type, exc_value, exc_traceback = sys.exc_info() + lines = traceback.format_exception(exc_type, exc_value, exc_traceback) + logger.warning(''.join('!! ' + line for line in lines)) + self.offset = max(0, min(self.offset, self.route.__len__()-1)) + + # Now update next_stop and GUI according to new offset if self.offset >= self.route.__len__(): self.next_stop = "End of the road!" self.update_gui() @@ -387,6 +430,7 @@ class SpanshRouter(): self.update_gui() self.copy_waypoint() + self.save_offset() def goto_changelog_page(self): diff --git a/SpanshRouter/__init__.py b/SpanshRouter/__init__.py deleted file mode 100644 index 938a1cb..0000000 --- a/SpanshRouter/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -import sys -import traceback -from SpanshRouter.updater import SpanshUpdater -from SpanshRouter.AutoCompleter import AutoCompleter -from SpanshRouter.PlaceHolder import PlaceHolder -from SpanshRouter import SpanshRouter \ No newline at end of file