From 6ab3981fa4f995038ebfe934b441372c761b7df9 Mon Sep 17 00:00:00 2001
From: j1nx
Date: Wed, 9 Nov 2022 19:25:16 +0100
Subject: [PATCH] Testing of examples skill info patch
---
.../0001-drop-examples-skill.patch | 267 ++++++++++++++++++
1 file changed, 267 insertions(+)
create mode 100644 buildroot-external/package/skill-ovos-homescreen/0001-drop-examples-skill.patch
diff --git a/buildroot-external/package/skill-ovos-homescreen/0001-drop-examples-skill.patch b/buildroot-external/package/skill-ovos-homescreen/0001-drop-examples-skill.patch
new file mode 100644
index 00000000..82a24974
--- /dev/null
+++ b/buildroot-external/package/skill-ovos-homescreen/0001-drop-examples-skill.patch
@@ -0,0 +1,267 @@
+From ba22850b5b3e6941c3792ff1eabca8060b189ba6 Mon Sep 17 00:00:00 2001
+From: Aditya Mehra
+Date: Fri, 4 Nov 2022 11:11:22 +1030
+Subject: [PATCH 1/4] drop examples skill and use util from osm
+
+---
+ __init__.py | 43 ++++++++++---------------------------------
+ 1 file changed, 10 insertions(+), 33 deletions(-)
+
+diff --git a/__init__.py b/__init__.py
+index e8ed826..47c19d3 100644
+--- a/__init__.py
++++ b/__init__.py
+@@ -26,7 +26,7 @@
+ from ovos_utils.xdg_utils import xdg_config_home
+ from .skill import (DashboardHandler,
+ CardGenerator)
+-
++from ovos_skills_manager.utils import get_skills_examples
+
+ class OVOSHomescreenSkill(MycroftSkill):
+ # The constructor of the skill, which calls MycroftSkill's constructor
+@@ -38,10 +38,9 @@ def __init__(self):
+ self.selected_wallpaper = None # Get from config after __init__ is done
+ self.wallpaper_collection = []
+ self.rtlMode = None # Get from config after __init__ is done
+-
++
+ # Populate skill IDs to use for data sources
+ self.datetime_skill = None # Get from config after __init__ is done
+- self.skill_info_skill = None # Get from config after __init__ is done
+ self.datetime_api = None
+ self.skill_info_api = None
+
+@@ -51,7 +50,7 @@ def __init__(self):
+ # Display Configuration Variables
+ self.wallpaper_rotation_enabled = False
+ self.dashboard_handler = None
+-
++
+ # Media State Tracking For Widget
+ # Needed for setting qml button state
+ self.media_widget_player_state = None
+@@ -62,7 +61,6 @@ def initialize(self):
+ self.card_generator = CardGenerator(self.file_system.path, self.bus,
+ path.dirname(__file__))
+ self.datetime_api = None
+- self.skill_info_api = None
+ self.loc_wallpaper_folder = self.file_system.path + '/wallpapers/'
+ self.selected_wallpaper = self.settings.get(
+ "wallpaper") or "default.jpg"
+@@ -72,9 +70,6 @@ def initialize(self):
+ "datetime_skill") or "skill-ovos-date-time.openvoiceos"
+ self.examples_enabled = 1 if self.settings.get(
+ "examples_enabled", True) else 0
+- if self.examples_enabled:
+- self.skill_info_skill = self.settings.get(
+- "examples_skill") or "ovos-skills-info.openvoiceos"
+
+ now = datetime.datetime.now()
+ callback_time = datetime.datetime(
+@@ -124,7 +119,7 @@ def initialize(self):
+
+ if not self.file_system.exists("wallpapers"):
+ os.mkdir(path.join(self.file_system.path, "wallpapers"))
+-
++
+ # Handler For Weather Response
+ self.bus.on("skill-ovos-weather.openvoiceos.weather.response", self.update_weather_response)
+
+@@ -176,17 +171,8 @@ def update_examples(self):
+ """
+ Loads or updates skill examples via the skill_info_api.
+ """
+- if not self.skill_info_api:
+- if not self.examples_enabled:
+- LOG.warning("Examples are disabled in settings")
+- else:
+- LOG.warning("Requested update before skill_info API loaded")
+- self._load_skill_apis()
+- if self.skill_info_api:
+- self.gui['skill_examples'] = {
+- "examples": self.skill_info_api.skill_info_examples()}
+- else:
+- LOG.warning("No skill_info_api, skipping update")
++ skill_examples = get_skills_examples(randomize=True)
++ self.gui['skill_examples'] = {"examples": skill_examples}
+ self.gui['skill_info_enabled'] = self.examples_enabled
+
+ def update_dt(self):
+@@ -290,7 +276,7 @@ def check_wallpaper_path(self, wallpaper):
+ return self.def_wallpaper_folder
+ elif path.exists(file_loc_check):
+ return self.loc_wallpaper_folder
+-
++
+ def check_wallpaper_rotation_config(self, message=None):
+ display_config_path_local = path.join(xdg_config_home(), "OvosDisplay.conf")
+ if path.exists(display_config_path_local):
+@@ -329,13 +315,6 @@ def _load_skill_apis(self):
+ """
+ Loads weather, date/time, and examples skill APIs
+ """
+-
+- try:
+- if not self.skill_info_api:
+- self.skill_info_api = SkillApi.get(self.skill_info_skill) or None
+- except Exception as e:
+- LOG.error(f"Failed To Import OVOS Info Skill: {e}")
+-
+ # Import Date Time Skill As Date Time Provider
+ try:
+ if not self.datetime_api:
+@@ -361,7 +340,7 @@ def _split_month_string(self, month_date: str) -> list:
+
+ #####################################################################
+ # Build Voice Applications Model
+-
++
+ def find_icon_full_path(self, icon_name):
+ localuser = environ.get('USER')
+ folder_search_paths = ["/usr/share/icons/", "/usr/local/share/icons/",
+@@ -387,7 +366,7 @@ def parse_desktop_file(self, file_path):
+
+ with open(file_path, "r") as f:
+ file_contents = f.read()
+-
++
+ name_start = file_contents.find("Name=")
+ name_end = file_contents.find("\n", name_start)
+ name = file_contents[name_start + 5:name_end]
+@@ -415,7 +394,7 @@ def parse_desktop_file(self, file_path):
+ 11:categories_end]
+
+ categories_list = categories.split(";")
+-
++
+ if "VoiceApp" in categories_list:
+ app_entry = {
+ "name": name,
+@@ -542,8 +521,6 @@ def get_dashboard_cards(self, message=None):
+ cards = self.dashboard_handler.get_collection()
+ collection = {"collection": cards}
+ return collection
+-
+-
+
+
+ def create_skill():
+
+From 06e23d0a7c7085025e06b036b722e7a4d3a492ad Mon Sep 17 00:00:00 2001
+From: Aditya Mehra
+Date: Fri, 4 Nov 2022 11:56:00 +1030
+Subject: [PATCH 2/4] restore examples skill api optionally
+
+---
+ __init__.py | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/__init__.py b/__init__.py
+index 47c19d3..bd24d29 100644
+--- a/__init__.py
++++ b/__init__.py
+@@ -41,6 +41,7 @@ def __init__(self):
+
+ # Populate skill IDs to use for data sources
+ self.datetime_skill = None # Get from config after __init__ is done
++ self.skill_info_skill = None # Get from config after __init__ is done
+ self.datetime_api = None
+ self.skill_info_api = None
+
+@@ -70,6 +71,9 @@ def initialize(self):
+ "datetime_skill") or "skill-ovos-date-time.openvoiceos"
+ self.examples_enabled = 1 if self.settings.get(
+ "examples_enabled", True) else 0
++ if self.examples_enabled:
++ self.skill_info_skill = self.settings.get(
++ "examples_skill") or "ovos-skills-info.openvoiceos"
+
+ now = datetime.datetime.now()
+ callback_time = datetime.datetime(
+@@ -171,8 +175,13 @@ def update_examples(self):
+ """
+ Loads or updates skill examples via the skill_info_api.
+ """
+- skill_examples = get_skills_examples(randomize=True)
+- self.gui['skill_examples'] = {"examples": skill_examples}
++ if self.skill_info_api:
++ self.gui['skill_examples'] = {
++ "examples": self.skill_info_api.skill_info_examples()}
++ else:
++ skill_examples = get_skills_examples(randomize=True)
++ self.gui['skill_examples'] = {"examples": skill_examples}
++
+ self.gui['skill_info_enabled'] = self.examples_enabled
+
+ def update_dt(self):
+
+From bbe52c7bc3bae4e47e4ace2eaa810572c34cba8e Mon Sep 17 00:00:00 2001
+From: Aditya Mehra
+Date: Sat, 5 Nov 2022 11:03:37 +1030
+Subject: [PATCH 3/4] remove examples skill and depend on settings to get it
+
+---
+ __init__.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/__init__.py b/__init__.py
+index bd24d29..2dd2f4f 100644
+--- a/__init__.py
++++ b/__init__.py
+@@ -73,7 +73,7 @@ def initialize(self):
+ "examples_enabled", True) else 0
+ if self.examples_enabled:
+ self.skill_info_skill = self.settings.get(
+- "examples_skill") or "ovos-skills-info.openvoiceos"
++ "examples_skill")
+
+ now = datetime.datetime.now()
+ callback_time = datetime.datetime(
+
+From 9decdde074d790e11433a3fc54a166a415c6b236 Mon Sep 17 00:00:00 2001
+From: builderjer <34875857+builderjer@users.noreply.github.com>
+Date: Mon, 7 Nov 2022 17:52:53 -0700
+Subject: [PATCH 4/4] Feat/random examples (#54)
+
+* Fix skill examples not rotating
+
+* added setting to randomize examples
+---
+ __init__.py | 2 +-
+ settingsmeta.yml | 7 +++++++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/__init__.py b/__init__.py
+index 2dd2f4f..d546d35 100644
+--- a/__init__.py
++++ b/__init__.py
+@@ -179,7 +179,7 @@ def update_examples(self):
+ self.gui['skill_examples'] = {
+ "examples": self.skill_info_api.skill_info_examples()}
+ else:
+- skill_examples = get_skills_examples(randomize=True)
++ skill_examples = get_skills_examples(randomize=self.settings.get("randomize_examples", True))
+ self.gui['skill_examples'] = {"examples": skill_examples}
+
+ self.gui['skill_info_enabled'] = self.examples_enabled
+diff --git a/settingsmeta.yml b/settingsmeta.yml
+index 88ee52f..f8eab4c 100644
+--- a/settingsmeta.yml
++++ b/settingsmeta.yml
+@@ -20,8 +20,15 @@ skillMetadata:
+ type: text
+ label: Wallpaper
+ value: default.jpg
++ - name: Examples
++ fields:
+ - name: examples_enabled
+ type: bool
+ label: Enable Examples
+ value: true
++ - name: randomize_examples
++ type: bool
++ label: Randomize Example Entries
++ value: true
++
+