save settings in pickle for future sessions

This commit is contained in:
rgarcia-herrera 2020-08-30 16:21:28 -05:00
parent e40f5776c4
commit 3069e37d28
3 changed files with 39 additions and 7 deletions

View File

@ -85,7 +85,7 @@ fullscreen = 0
#android.presplash_color = #FFFFFF
# (list) Permissions
android.permissions = INTERNET,ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION,WAKE_LOCK
android.permissions = INTERNET,ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION,WAKE_LOCK,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE
# (int) Target Android API, should be as high as possible.
#android.api = 27

View File

@ -166,7 +166,7 @@
max: 0.99
step: 0.05
orientation: 'horizontal'
value: 0.88
value: app.session_data['settings_smoothing']
on_value: app.set_smoothing()
BackgroundLabel:
@ -182,7 +182,7 @@
max: 0.9
step: 0.05
orientation: 'horizontal'
value: 0.777
value: app.session_data['settings_compass_update']
on_value: app.set_compass_update()
BackgroundLabel:

40
main.py
View File

@ -15,6 +15,8 @@ from math import atan2, sin, cos, degrees, floor
from geopy.distance import geodesic
from os import path
import pickle
class IconButton(ButtonBehavior, Image):
pass
@ -63,13 +65,42 @@ class FlockompassApp(App):
def dump(self, dt):
print(dt, self.gps_data, self.session_data)
def read_settings(self):
app_folder = os.path.dirname(os.path.abspath(__file__))
pickle_path = path.join(app_folder, 'settings.pickle')
if path.isfile(pickle_path):
with open(pickle_path, 'rb') as f:
settings = pickle.load(f)
else:
settings = {'settings_smoothing': 0.88,
'settings_compass_update': 0.777
}
with open(pickle_path, 'wb') as f:
pickle.dump(settings, f)
self.session_data.update(settings)
def save_settings(self):
app_folder = os.path.dirname(os.path.abspath(__file__))
pickle_path = path.join(app_folder, 'settings.pickle')
settings = {k: self.session_data[k]
for k in self.session_data
if k.startswith('settings_')}
with open(pickle_path, 'wb') as f:
pickle.dump(settings, f)
def set_smoothing(self):
self.session_data['smoothing'] = self.ss.ids.slider_smoothing.value
self.session_data['settings_smoothing'] = self.ss.ids.slider_smoothing.value
self.save_settings()
def set_compass_update(self):
self.session_data['compass_update'] = self.ss.ids.slider_compass_update.value
self.session_data['settings_compass_update'] = self.ss.ids.slider_compass_update.value
self.compass_disable()
self.compass_enable()
self.save_settings()
def set_destination(self):
self.compass_enable()
@ -139,7 +170,7 @@ class FlockompassApp(App):
if self.cs.facade.field != (None, None, None):
x, y, z = self.cs.facade.field
smoothingFactor = self.session_data.get('smoothing', 0.88)
smoothingFactor = self.session_data.get('settings_smoothing', 0.88)
angle = atan2(y, x)
self.last_angle = smoothingFactor * self.last_angle + (1 - smoothingFactor) * angle
@ -182,7 +213,7 @@ class FlockompassApp(App):
def compass_enable(self):
self.cs.facade.enable()
Clock.schedule_interval(self.get_field,
1.0 - self.session_data.get('compass_update', 0.777))
1.0 - self.session_data.get('settings_compass_update', 0.777))
def compass_disable(self):
self.cs.facade.disable()
@ -239,4 +270,5 @@ class FlockompassApp(App):
if __name__ == '__main__':
app = FlockompassApp()
app.read_settings()
app.run()