2022-08-13 03:54:16 +00:00
|
|
|
# Python imports
|
2022-11-29 04:34:13 +00:00
|
|
|
import os
|
|
|
|
import json
|
2022-08-13 03:54:16 +00:00
|
|
|
from os.path import join
|
|
|
|
|
|
|
|
# Lib imports
|
|
|
|
|
|
|
|
# Application imports
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-09-06 02:21:04 +00:00
|
|
|
class ManifestProcessorException(Exception):
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
class PluginInfo:
|
2022-08-13 03:54:16 +00:00
|
|
|
path: str = None
|
|
|
|
name: str = None
|
|
|
|
author: str = None
|
|
|
|
version: str = None
|
|
|
|
support: str = None
|
|
|
|
requests:{} = None
|
|
|
|
reference: type = None
|
|
|
|
|
|
|
|
|
|
|
|
class ManifestProcessor:
|
|
|
|
def __init__(self, path, builder):
|
|
|
|
manifest = join(path, "manifest.json")
|
|
|
|
if not os.path.exists(manifest):
|
2022-09-06 02:21:04 +00:00
|
|
|
raise ManifestProcessorException("Invalid Plugin Structure: Plugin doesn't have 'manifest.json'. Aboarting load...")
|
2022-08-13 03:54:16 +00:00
|
|
|
|
|
|
|
self._path = path
|
|
|
|
self._builder = builder
|
|
|
|
with open(manifest) as f:
|
|
|
|
data = json.load(f)
|
|
|
|
self._manifest = data["manifest"]
|
|
|
|
self._plugin = self.collect_info()
|
|
|
|
|
2022-09-06 02:21:04 +00:00
|
|
|
def collect_info(self) -> PluginInfo:
|
|
|
|
plugin = PluginInfo()
|
2022-08-13 03:54:16 +00:00
|
|
|
plugin.path = self._path
|
|
|
|
plugin.name = self._manifest["name"]
|
|
|
|
plugin.author = self._manifest["author"]
|
|
|
|
plugin.version = self._manifest["version"]
|
|
|
|
plugin.support = self._manifest["support"]
|
|
|
|
plugin.requests = self._manifest["requests"]
|
|
|
|
|
|
|
|
return plugin
|
|
|
|
|
|
|
|
def get_loading_data(self):
|
|
|
|
loading_data = {}
|
|
|
|
requests = self._plugin.requests
|
|
|
|
keys = requests.keys()
|
|
|
|
|
|
|
|
if "ui_target" in keys:
|
|
|
|
if requests["ui_target"] in [
|
2022-09-05 03:35:30 +00:00
|
|
|
"none", "other", "main_Window", "main_menu_bar",
|
|
|
|
"main_menu_bttn_box_bar", "path_menu_bar", "plugin_control_list",
|
2022-10-26 04:27:21 +00:00
|
|
|
"context_menu", "context_menu_plugins", "window_1",
|
|
|
|
"window_2", "window_3", "window_4"
|
2022-08-13 03:54:16 +00:00
|
|
|
]:
|
|
|
|
if requests["ui_target"] == "other":
|
|
|
|
if "ui_target_id" in keys:
|
|
|
|
loading_data["ui_target"] = self._builder.get_object(requests["ui_target_id"])
|
|
|
|
if loading_data["ui_target"] == None:
|
2022-09-06 02:21:04 +00:00
|
|
|
raise ManifestProcessorException('Invalid "ui_target_id" given in requests. Must have one if setting "ui_target" to "other"...')
|
2022-08-13 03:54:16 +00:00
|
|
|
else:
|
2022-09-06 02:21:04 +00:00
|
|
|
raise ManifestProcessorException('Invalid "ui_target_id" given in requests. Must have one if setting "ui_target" to "other"...')
|
2022-08-13 03:54:16 +00:00
|
|
|
else:
|
|
|
|
loading_data["ui_target"] = self._builder.get_object(requests["ui_target"])
|
|
|
|
else:
|
2022-09-06 02:21:04 +00:00
|
|
|
raise ManifestProcessorException('Unknown "ui_target" given in requests.')
|
2022-08-13 03:54:16 +00:00
|
|
|
|
|
|
|
if "pass_fm_events" in keys:
|
|
|
|
if requests["pass_fm_events"] in ["true"]:
|
|
|
|
loading_data["pass_fm_events"] = True
|
|
|
|
|
2022-09-03 05:43:25 +00:00
|
|
|
if "pass_ui_objects" in keys:
|
|
|
|
if len(requests["pass_ui_objects"]) > 0:
|
|
|
|
loading_data["pass_ui_objects"] = []
|
|
|
|
for ui_id in requests["pass_ui_objects"]:
|
|
|
|
try:
|
|
|
|
loading_data["pass_ui_objects"].append( self._builder.get_object(ui_id) )
|
2023-02-24 05:03:29 +00:00
|
|
|
except ManifestProcessorException as e:
|
|
|
|
logger.error(repr(e))
|
2022-09-03 05:43:25 +00:00
|
|
|
|
2022-08-13 03:54:16 +00:00
|
|
|
if "bind_keys" in keys:
|
|
|
|
if isinstance(requests["bind_keys"], list):
|
|
|
|
loading_data["bind_keys"] = requests["bind_keys"]
|
|
|
|
|
|
|
|
return self._plugin, loading_data
|