From f95aed1ad373f22f79aeca3bd5843f790d974795 Mon Sep 17 00:00:00 2001 From: Michael Nguyen Date: Thu, 7 Dec 2017 12:36:01 -0600 Subject: [PATCH] added ability to change settings from device that created the skill settings --- mycroft/skills/settings.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/mycroft/skills/settings.py b/mycroft/skills/settings.py index 5971b20b6c..b3118cc618 100644 --- a/mycroft/skills/settings.py +++ b/mycroft/skills/settings.py @@ -208,7 +208,7 @@ class SkillSettings(dict): if 'name' in field: if field["name"] in self: sections[i]['fields'][j]["value"] = \ - self.__getitem__(field["name"]) + str(self.__getitem__(field["name"])) meta['skillMetadata']['sections'] = sections return meta @@ -420,13 +420,38 @@ class SkillSettings(dict): "cannot delete metadata because this" "device is not original uploader of skill") + @property + def _should_upload_from_change(self): + changed = False + if hasattr(self, '_remote_settings'): + sections = self._remote_settings['skillMetadata']['sections'] + for i, section in enumerate(sections): + for j, field in enumerate(section['fields']): + if 'name' in field: + if field["name"] in self: + remote_val = sections[i]['fields'][j]["value"] + self_val = self.__getitem__(field["name"]) + if str(remote_val) != str(self_val): + changed = True + return changed + def store(self, force=False): """ Store dictionary to file if a change has occured. Args: force: Force write despite no change """ + if force or not self._is_stored: with open(self._settings_path, 'w') as f: json.dump(self, f) self.loaded_hash = hash(str(self)) + + if self._should_upload_from_change: + settings_meta = self._load_settings_meta() + hashed_meta = self._get_meta_hash(settings_meta) + uuid = self._load_uuid() + if uuid is not None: + LOG.info("deleting meata data for {}".format(self.name)) + self._delete_metadata(uuid) + self._upload_meta(settings_meta, hashed_meta)