diff --git a/gui/sky_tab.py b/gui/sky_tab.py index af22764..a1d3741 100644 --- a/gui/sky_tab.py +++ b/gui/sky_tab.py @@ -246,8 +246,10 @@ class SkyTab(QWidget): def _on_sat_update(self, rid: str, sats: list): selected = self._selected_rids() + current_keys = set() for sat in sats: key = (rid, sat.gnss_id, sat.sv_id) + current_keys.add(key) self._store[key] = sat if key not in self._trail: self._trail[key] = deque(maxlen=_TRAIL_MAXLEN) @@ -255,6 +257,16 @@ class SkyTab(QWidget): if rid in selected: self._highlight_row(key) + # Drop satellites no longer reported for this receiver so ghost + # entries (set below horizon, lost signal) don't accumulate forever. + stale = [k for k in self._store if k[0] == rid and k not in current_keys] + for k in stale: + del self._store[k] + self._trail.pop(k, None) + t = self._hi_timers.pop(k, None) + if t: + t.stop() + self._sky.update_data(self._visible_sats(), self._active_trails()) self._update_info() if not self._table_timer.isActive():