use clock schedule to avoid mapview crash

This commit is contained in:
rgarcia-herrera 2023-11-20 16:09:19 -06:00
parent 7c9ecf2ed4
commit eb5b91d83b
3 changed files with 20 additions and 9 deletions

View File

@ -28,7 +28,7 @@ source.include_exts = py,png,jpg,kv,atlas
#source.exclude_patterns = license,images/*/*.jpg #source.exclude_patterns = license,images/*/*.jpg
# (str) Application versioning (method 1) # (str) Application versioning (method 1)
version = 0.1 version = 0.2
# (str) Application versioning (method 2) # (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)['"] # version.regex = __version__ = ['"](.*)['"]

View File

@ -157,7 +157,7 @@
TextInput: TextInput:
id: flock_server id: flock_server
font_size: '15sp' font_size: '15sp'
text: 'http://132.247.90.102' text: 'http://flocker.mooo.com'
multiline: False multiline: False
BackgroundLabel: BackgroundLabel:
text: "Dark theme" text: "Dark theme"

23
main.py
View File

@ -79,16 +79,19 @@ class FlockompassApp(App):
if path.isfile(pickle_path): if path.isfile(pickle_path):
with open(pickle_path, 'rb') as f: with open(pickle_path, 'rb') as f:
settings = pickle.load(f) settings = pickle.load(f)
Logger.info('Loaded settings')
else: else:
settings = {'settings_smoothing': 0.88, settings = {'settings_smoothing': 0.88,
'settings_compass_update': 0.88, 'settings_compass_update': 0.88,
'settings_theme': "dark", 'settings_theme': "dark",
'settings_flock_server': 'http://132.247.90.102' 'settings_flock_server': 'http://flocker.mooo.com'
} }
with open(pickle_path, 'wb') as f: with open(pickle_path, 'wb') as f:
pickle.dump(settings, f) pickle.dump(settings, f)
Logger.info('Wrote default settings')
self.session_data.update(settings) self.session_data.update(settings)
if self.session_data['settings_theme'] == "dark": if self.session_data['settings_theme'] == "dark":
@ -134,8 +137,7 @@ class FlockompassApp(App):
self.compass_enable() self.compass_enable()
self.session_data['dest_lat'] = self.ms.ids.centermark.lat self.session_data['dest_lat'] = self.ms.ids.centermark.lat
self.session_data['dest_lon'] = self.ms.ids.centermark.lon self.session_data['dest_lon'] = self.ms.ids.centermark.lon
self.ms.ids.mapview.center_on(self.session_data['dest_lat'], Clock.schedule_once(self.center_map_on_session, 0)
self.session_data['dest_lon'])
self.flock_server_register() self.flock_server_register()
Clock.schedule_interval(self.flock, Clock.schedule_interval(self.flock,
self.session_data.get('settings_update_freq', 10.0)) self.session_data.get('settings_update_freq', 10.0))
@ -187,8 +189,10 @@ class FlockompassApp(App):
self.session_data['dest_lat'] = self.gps_data['lat'] self.session_data['dest_lat'] = self.gps_data['lat']
self.session_data['dest_lon'] = self.gps_data['lon'] self.session_data['dest_lon'] = self.gps_data['lon']
self.ms.ids.mapview.center_on(self.session_data['dest_lat'], Clock.schedule_once(self.center_map_on_session, 0)
self.session_data['dest_lon'])
# self.ms.ids.mapview.center_on(self.session_data['dest_lat'],
# self.session_data['dest_lon'])
else: else:
dest_distance = geodesic( dest_distance = geodesic(
(self.gps_data['lat'], self.gps_data['lon']), (self.gps_data['lat'], self.gps_data['lon']),
@ -231,6 +235,11 @@ class FlockompassApp(App):
self.gps_data['lon']) self.gps_data['lon'])
def center_map_on_session(self, *args):
self.ms.ids.mapview.center_on(self.session_data['dest_lat'],
self.session_data['dest_lon'])
def get_field(self, dt): def get_field(self, dt):
""" """
get magnetic field for compass get magnetic field for compass
@ -335,11 +344,13 @@ class FlockompassApp(App):
'dest_lat': self.session_data['dest_lat'], 'dest_lat': self.session_data['dest_lat'],
'client_id': client_id}, 'client_id': client_id},
timeout=0.5) timeout=0.5)
# TODO: check for response code, only proceed if 200
self.session_data['bike_id'] = r.json()['bike_id'] self.session_data['bike_id'] = r.json()['bike_id']
self.session_data['client_id'] = client_id self.session_data['client_id'] = client_id
Logger.info('registered! got bike_id: %s' % self.session_data['bike_id']) Logger.info('registered! got bike_id: %s' % self.session_data['bike_id'])
self.flock_server_update() self.flock_server_update()
except requests.exceptions.HTTPError as e:
status_code = e.response.status_code
Logger.info('http error', status_code)
except requests.exceptions.Timeout: except requests.exceptions.Timeout:
Logger.info('comm timeout while registering with flock server') Logger.info('comm timeout while registering with flock server')
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError: