fix: statusbar race condition WIP

This commit is contained in:
aclist committed 2026-01-21 12:04:42 +09:00
1 parent 2f9000ee80
commit 9cc1ece0d7
9 files changed
+169 -125

No files matched your search

+10 -6
View File
@@ -4,19 +4,20 @@ from math import radians, cos, sin, asin, sqrt
from typing import TYPE_CHECKING
from dzgui.util.ip import GeolocationError, get_coords
from dzgui.util.localize import number
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk # noqa E402
if TYPE_CHECKING:
from dzgui.util.ip import Coords
from dzgui.const.enum import ServerTab
from dzgui.controllers.mc import Controller
logger = logging.getLogger(__name__)
class Haversine():
class Haversine:
def __init__(self, lat1: float, lon1: float, lat2: float, lon2: float) -> None:
R = 6371 * 1000
@@ -26,7 +27,7 @@ class Haversine():
lat1 = radians(lat1)
lat2 = radians(lat2)
a = sin(dLat/2) ** 2 + cos(lat1) * cos(lat2) * sin(dLon/2) ** 2
a = sin(dLat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dLon / 2) ** 2
c = 2 * asin(sqrt(a))
self.dist = R * c
@@ -37,15 +38,18 @@ class Haversine():
def as_miles(self) -> float:
return self.dist / 1609.344
class CalcDist(multiprocessing.Process):
def __init__(
self,
addr: str,
enum: "ServerTab",
result_queue: multiprocessing.Queue,
controller: "Controller",
) -> None:
super().__init__()
self.enum = enum
self.controller = controller
self.result_queue = result_queue
self.addr = addr
@@ -55,11 +59,11 @@ class CalcDist(multiprocessing.Process):
cache = self.controller.get_dist_cache()
if self.addr in cache:
logger.info(f"Address '{self.addr}' already in cache")
self.result_queue.put([self.addr, cache[self.addr]])
self.result_queue.put([self.addr, cache[self.addr], self.enum])
return
dist = self.compare(self.ip)
self.result_queue.put([self.addr, dist])
self.result_queue.put([self.addr, dist, self.enum])
def compare(self, remote: str) -> int | None:
prefs = self.controller.get_prefs()