diff --git a/preload/apps/ecg/settings.py b/preload/apps/ecg/settings.py index 34fa9f60e37bce36a068248588cdc07ab2d37c14..ca49bbd109a0b7d372b7320ea5b89c4444fd396b 100644 --- a/preload/apps/ecg/settings.py +++ b/preload/apps/ecg/settings.py @@ -7,30 +7,72 @@ class Settings(simple_menu.Menu): color_1 = color.CAMPGREEN color_2 = color.CAMPGREEN_DARK - options = {} + selected_options = {} def __init__(self): super().__init__([("return", False)]) - self.config_path = "/".join(__file__.split("/")[0:-1]) def on_select(self, value, index): if index == 0: self.exit() else: - self.options[value[0]] = next(value[1]) + self.selected_options[value[0]] = next(value[1]) + self.write_to_file() def entry2name(self, value): if value[0] == "return": return value[0] else: - return "{}: {}".format(value[0], self.options[value[0]][0]) + return "{}: {}".format(value[0], self.selected_options[value[0]][0]) def add_option(self, option): self.entries.append(option) - self.options[option[0]] = next(option[1]) + self.selected_options[option[0]] = next(option[1]) def get_option(self, name): - return self.options[name][1] + return self.selected_options[name][1] + + def load_from_file(self): + config_path = "/".join(__file__.split("/")[0:-1]) + try: + f = open("{}/config.cfg".format(config_path), "r") + for line in f: + parts = [x.strip() for x in line.split(":")] + if parts[0] in self.selected_options: + # find corresponding entry from menu to get access to the corresponding itertools.cycle + option_cycle = next(x for x in self.entries if x[0] == parts[0])[1] + if self.selected_options[parts[0]][0] != parts[1]: + previous = self.selected_options[parts[0]][0] + self.selected_options[parts[0]] = next(option_cycle) + while self.selected_options[parts[0]][0] not in { + parts[1], + previous, + }: + self.selected_options[parts[0]] = next(option_cycle) + + if self.selected_options[parts[0]][0] == previous: + print( + "Settings: unknown option '{}' for key '{}'".format( + parts[1], parts[0] + ) + ) + else: + print("Settings: unknown key '{}'".format(parts[0])) + f.close() + except OSError: + print("Settings could not be loaded from file. Maybe it did not exist yet?") + + def write_to_file(self): + config_path = "/".join(__file__.split("/")[0:-1]) + try: + f = open("{}/config.cfg".format(config_path), "w") + for option_name in self.selected_options: + f.write( + "{}:{}\n".format(option_name, self.selected_options[option_name][0]) + ) + f.close() + except OSError as e: + print("Settings could not be written to file! Error: {}".format(e)) def ecg_settings(): @@ -66,4 +108,6 @@ def ecg_settings(): ) ) + config.load_from_file() + return config