From bb8b6086392b7e9c720ccd46145aad41a9c820c4 Mon Sep 17 00:00:00 2001 From: l0drex Date: Wed, 17 May 2023 12:10:19 +0200 Subject: [PATCH] Use old positioning method via ipinfo.io as a fallback --- yin_yang/config.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/yin_yang/config.py b/yin_yang/config.py index 14049785..3c39502e 100755 --- a/yin_yang/config.py +++ b/yin_yang/config.py @@ -8,6 +8,7 @@ from time import sleep from typing import Union, Optional +import requests from PySide6.QtCore import QObject from PySide6.QtPositioning import QGeoPositionInfoSource, QGeoPositionInfo, QGeoCoordinate from psutil import process_iter, NoSuchProcess @@ -119,6 +120,7 @@ def get_sun_time(latitude, longitude) -> tuple[time, time]: locationSource = QGeoPositionInfoSource.createDefaultSource(parent) +@cache def get_current_location() -> QGeoCoordinate: if locationSource is None: logger.error("No location source is available") @@ -134,8 +136,13 @@ def get_current_location() -> QGeoCoordinate: sleep(1) coordinate = pos.coordinate() if not coordinate.isValid(): - logger.error('Location could not be determined') - return QGeoCoordinate(0, 0) + logger.warning('Location could not be determined. Using ipinfo.io to get location') + # use the old method as a fallback + loc_response = requests.get('https://www.ipinfo.io/loc').text.split(',') + loc: [float] = [float(coordinate) for coordinate in loc_response] + assert len(loc) == 2, 'The returned location should have exactly 2 values.' + coordinate = QGeoCoordinate(loc[0], loc[1]) + assert coordinate.isValid() return coordinate