diff --git a/ttkHyperlinkLabel.py b/ttkHyperlinkLabel.py index 3bb878a6..f7780566 100644 --- a/ttkHyperlinkLabel.py +++ b/ttkHyperlinkLabel.py @@ -19,6 +19,7 @@ In addition to standard ttk.Label arguments, takes the following arguments: May be imported by plugins """ from __future__ import annotations +import html from functools import partial import sys import tkinter as tk @@ -27,9 +28,11 @@ from tkinter import font as tk_font from tkinter import ttk from typing import Any import plug +from os import path from config import config, logger from l10n import translations as tr from monitor import monitor +from EDMarketConnector import SHIPYARD_HTML_TEMPLATE class HyperlinkLabel(tk.Label or ttk.Label): # type: ignore @@ -70,7 +73,7 @@ class HyperlinkLabel(tk.Label or ttk.Label): # type: ignore # Add Menu Options self.plug_options = kw.pop('plug_options', None) self.name = kw.get('name', None) - if self.name == 'ship' and not bool(config.get_int("use_alt_shipyard_open")): + if self.name == 'ship': self.menu.add_separator() for url in plug.provides('shipyard_url'): self.menu.add_command( @@ -96,12 +99,27 @@ class HyperlinkLabel(tk.Label or ttk.Label): # type: ignore def open_shipyard(self, url: str): """Open the Current Ship Loadout in the Selected Provider.""" - if loadout := monitor.ship(): + if not (loadout := monitor.ship()): + logger.warning('No ship loadout, aborting.') + return '' + if not bool(config.get_int("use_alt_shipyard_open")): opener = plug.invoke(url, 'EDSY', 'shipyard_url', loadout, monitor.is_beta) if opener: return webbrowser.open(opener) - logger.warning('No ship loadout, aborting.') - return '' + else: + # Avoid file length limits if possible + provider = config.get_str('shipyard_provider', default='EDSY') + target = plug.invoke(provider, 'EDSY', 'shipyard_url', loadout, monitor.is_beta) + file_name = path.join(config.app_dir_path, "last_shipyard.html") + + with open(file_name, 'w') as f: + f.write(SHIPYARD_HTML_TEMPLATE.format( + link=html.escape(str(target)), + provider_name=html.escape(str(provider)), + ship_name=html.escape("Ship") + )) + + webbrowser.open(f'file://localhost/{file_name}') def open_system(self, url: str): """Open the Current System in the Selected Provider."""