Skip to content

Commit

Permalink
Merge pull request #2110 from HullSeals/enhancement/broken-plugin-popup
Browse files Browse the repository at this point in the history
Broken Plugins Popup
  • Loading branch information
Rixxan authored Dec 15, 2023
2 parents 9a297fb + 49ca678 commit a38cf5a
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 12 deletions.
35 changes: 33 additions & 2 deletions EDMarketConnector.py
Original file line number Diff line number Diff line change
Expand Up @@ -2259,6 +2259,34 @@ def test_prop(self):

app = AppWindow(root)

def messagebox_broken_plugins():
"""Display message about plugins not updated for Python 3.x."""
if plug.PLUGINS_broken:
# LANG: Popup-text about 'broken' plugins that failed to load
popup_text = _(
"One or more of your enabled plugins failed to load. Please see the list on the '{PLUGINS}' "
"tab of '{FILE}' > '{SETTINGS}'. This could be caused by a wrong folder structure. The load.py "
r"file should be located under plugins/PLUGIN_NAME/load.py.\r\n\r\nYou can disable a plugin by "
"renaming its folder to have '{DISABLED}' on the end of the name."
)

# Substitute in the other words.
popup_text = popup_text.format(
PLUGINS=_('Plugins'), # LANG: Settings > Plugins tab
FILE=_('File'), # LANG: 'File' menu
SETTINGS=_('Settings'), # LANG: File > Settings
DISABLED='.disabled'
)
# And now we do need these to be actual \r\n
popup_text = popup_text.replace('\\n', '\n')
popup_text = popup_text.replace('\\r', '\r')

tk.messagebox.showinfo(
# LANG: Popup window title for list of 'broken' plugins that failed to load
_('EDMC: Broken Plugins'),
popup_text
)

def messagebox_not_py3():
"""Display message about plugins not updated for Python 3.x."""
plugins_not_py3_last = config.get_int('plugins_not_py3_last', default=0)
Expand Down Expand Up @@ -2297,9 +2325,12 @@ def messagebox_not_py3():

root.wm_attributes('-alpha', ui_transparency / 100)
# Display message box about plugins without Python 3.x support
root.after(0, messagebox_not_py3)
# Display message box about plugins that failed to load
root.after(0, messagebox_broken_plugins)
# Display message box about plugins without Python 3.x support
root.after(1, messagebox_not_py3)
# Show warning popup for killswitches matching current version
root.after(1, show_killswitch_poppup, root)
root.after(2, show_killswitch_poppup, root)
# Start the main event loop
root.mainloop()

Expand Down
19 changes: 11 additions & 8 deletions L10n/en.template
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,12 @@
/* EDMarketConnector.py: Popup window title for list of 'enabled' plugins that don't work with Python 3.x; In files: EDMarketConnector.py:2274; */
"EDMC: Plugins Without Python 3.x Support" = "EDMC: Plugins Without Python 3.x Support";

/* EDMarketConnector.py: Popup window title for list of 'broken' plugins that failed to load; In files: EDMarketConnector.py:2285; */
"EDMC: Broken Plugins" = "EDMC: Broken Plugins";

/* EDMarketConnector.py: Popup-text about 'broken' plugins that failed to load; In files: EDMarketConnector.py:2266; */
"One or more of your enabled plugins failed to load. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. This could be caused by a wrong folder structure. The load.py file should be located under plugins/PLUGIN_NAME/load.py.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name." = "One or more of your enabled plugins failed to load. Please see the list on the '{PLUGINS}' tab of '{FILE}' > '{SETTINGS}'. This could be caused by a wrong folder structure. The load.py file should be located under plugins/PLUGIN_NAME/load.py.\r\n\r\nYou can disable a plugin by renaming its folder to have '{DISABLED}' on the end of the name.";

/* journal_lock.py: Title text on popup when Journal directory already locked; In files: journal_lock.py:208; */
"Journal directory already locked" = "Journal directory already locked";

Expand Down Expand Up @@ -261,9 +267,6 @@
/* coriolis.py: Settings>Coriolis - invalid override mode found; In files: coriolis.py:156; */
"Invalid Coriolis override mode!" = "Invalid Coriolis override mode!";


/* eddb.py: Journal Processing disabled due to an active killswitch; In files: eddb.py:179; */
"EDDB Journal processing disabled. See Log." = "EDDB Journal processing disabled. See Log.";
/* eddn.py: Error while trying to send data to EDDN; In files: eddn.py:458; eddn.py:2413; eddn.py:2451; eddn.py:2519; */
"Error: Can't connect to EDDN" = "Error: Can't connect to EDDN";

Expand Down Expand Up @@ -291,9 +294,6 @@
/* eddn.py: Status text shown while attempting to send data; In files: eddn.py:2507; */
"Sending data to EDDN..." = "Sending data to EDDN...";


/* edsm.py: Settings>EDSM - Label on checkbox for 'send data'; In files: edsm.py:308; */
"Send flight log and Cmdr status to EDSM" = "Send flight log and Cmdr status to EDSM";
/* edsm.py: Settings>EDSM - Label on header/URL to EDSM API key page; In files: edsm.py:319; */
"Elite Dangerous Star Map credentials" = "Elite Dangerous Star Map credentials";

Expand Down Expand Up @@ -471,12 +471,15 @@
/* prefs.py: Label on list of enabled plugins; In files: prefs.py:934; */
"Enabled Plugins" = "Enabled Plugins";


/* prefs.py: Plugins - Label for list of 'enabled' plugins that don't work with Python 3.x; In files: prefs.py:954; */
"Plugins Without Python 3.x Support:" = "Plugins Without Python 3.x Support:";
"Plugins Without Python 3.x Support" = "Plugins Without Python 3.x Support";

/* prefs.py: Plugins - Label on URL to documentation about migrating plugins from Python 2.7; In files: prefs.py:962; */
"Information on migrating plugins" = "Information on migrating plugins";

/* prefs.py: Plugins - Label for list of 'broken' plugins that failed to load; In files: prefs.py:1039; */
"Broken Plugins" = "Broken Plugins";

/* prefs.py: Lable on list of user-disabled plugins; In files: prefs.py:977; */
"Disabled Plugins" = "Disabled Plugins";

Expand Down
8 changes: 6 additions & 2 deletions coriolis-update-files.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,12 @@ def add(modules, name, attributes) -> None:
assert name not in modules, name
modules[name] = attributes

# Regenerate coriolis-data distribution
subprocess.check_call('npm install', cwd='coriolis-data', shell=True, stdout=sys.stdout, stderr=sys.stderr)
try:
# Regenerate coriolis-data distribution
subprocess.check_call('npm install', cwd='coriolis-data', shell=True, stdout=sys.stdout, stderr=sys.stderr)
except NotADirectoryError:
sys.exit("Coriolis-Data Directory not found! Have you set up your submodules? \n"
"https://github.com/EDCD/EDMarketConnector/wiki/Running-from-source#obtain-a-copy-of-the-application-source") # noqa: E501

file_path = 'coriolis-data/dist/index.json'
with open(file_path) as file:
Expand Down
2 changes: 2 additions & 0 deletions plug.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
# List of loaded Plugins
PLUGINS = []
PLUGINS_not_py3 = []
PLUGINS_broken = []


# For asynchronous error display
Expand Down Expand Up @@ -198,6 +199,7 @@ def _load_found_plugins():
plugin_logger = EDMCLogging.get_plugin_logger(name)
found.append(Plugin(name, os.path.join(config.plugin_dir_path, name, 'load.py'), plugin_logger))
except Exception:
PLUGINS_broken.append(Plugin(name, None, logger))
logger.exception(f'Failure loading found Plugin "{name}"')
pass
return found
Expand Down
17 changes: 17 additions & 0 deletions prefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -1029,6 +1029,23 @@ def __setup_plugin_tab(self, notebook: ttk.Notebook) -> None: # noqa: CCR001
nb.Label(plugins_frame, text=plugin.name).grid(
columnspan=2, padx=self.LISTX, pady=self.PADY, sticky=tk.W, row=row.get()
)
############################################################
# Show plugins that failed to load
############################################################
if len(plug.PLUGINS_broken):
ttk.Separator(plugins_frame, orient=tk.HORIZONTAL).grid(
columnspan=3, padx=self.PADX, pady=self.SEPY, sticky=tk.EW, row=row.get()
)
# LANG: Plugins - Label for list of 'broken' plugins that failed to load
nb.Label(plugins_frame, text=_('Broken Plugins')+':').grid(
padx=self.PADX, pady=self.PADY, sticky=tk.W, row=row.get()
)

for plugin in plug.PLUGINS_broken:
if plugin.folder: # 'system' ones have this set to None to suppress listing in Plugins prefs tab
nb.Label(plugins_frame, text=plugin.name).grid(
columnspan=2, padx=self.LISTX, pady=self.PADY, sticky=tk.W, row=row.get()
)

# LANG: Label on Settings > Plugins tab
notebook.add(plugins_frame, text=_('Plugins')) # Tab heading in settings
Expand Down

0 comments on commit a38cf5a

Please sign in to comment.