1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-13 07:47:14 +03:00

Added warning popup on start

Popup shows on start when there are killswitches that match the current
version.
This commit is contained in:
A_D 2020-11-03 17:52:21 +02:00 committed by Athanasius
parent 6374fbbeb8
commit 81e2cd2f92
2 changed files with 66 additions and 8 deletions

View File

@ -1435,6 +1435,50 @@ Locale LC_TIME: {locale.getlocale(locale.LC_TIME)}'''
)
def setup_killswitches():
"""Download and setup the main killswitch list."""
logger.debug('fetching killswitches...')
killswitch.setup_main_list()
def show_killswitch_poppup(root=None):
"""Show a warning popup if there are any killswitches that match the current version."""
if len(kills := killswitch.kills_for_version()) == 0:
return
text = (
"Some EDMC Features have been disabled for known issues.\n"
"Please update EDMC as soon as possible to resolve any issues.\n"
)
tl = tk.Toplevel(root)
tl.wm_attributes('-topmost', True)
tl.geometry(f'+{root.winfo_rootx()}+{root.winfo_rooty()}')
tl.columnconfigure(1, weight=1)
tl.title("EDMC Features have been disabled")
frame = tk.Frame(tl)
frame.grid()
t = tk.Label(frame, text=text)
t.grid(columnspan=2)
idx = 1
for version in kills:
tk.Label(frame, text=f'Version: {version.version}').grid(row=idx, sticky=tk.W)
idx += 1
for id, reason in version.kills.items():
tk.Label(frame, text=id).grid(column=0, row=idx, sticky=tk.W, padx=(10, 0))
tk.Label(frame, text=reason).grid(column=1, row=idx, sticky=tk.E, padx=(0, 10))
idx += 1
idx += 1
ok_button = tk.Button(frame, text="ok", command=tl.destroy)
ok_button.grid(columnspan=2, sticky=tk.EW)
theme.apply(tl)
# Run the app
if __name__ == "__main__":
# Command-line arguments
@ -1531,7 +1575,8 @@ sys.path: {sys.path}'''
except Exception:
logger.exception(
f"Exception other than locale.Error on setting LC_ALL=('{locale_startup[0]}', 'UTF_8')")
f"Exception other than locale.Error on setting LC_ALL=('{locale_startup[0]}', 'UTF_8')"
)
else:
log_locale('After switching to UTF-8 encoding (same language)')
@ -1566,9 +1611,7 @@ sys.path: {sys.path}'''
Translations.install(config.get_str('language')) # Can generate errors so wait til log set up
logger.debug('fetching killswitches...')
killswitch.setup_main_list()
setup_killswitches()
root = tk.Tk(className=appname.lower())
# UI Scaling
@ -1622,6 +1665,7 @@ sys.path: {sys.path}'''
root.wm_attributes('-alpha', ui_transparency / 100)
root.after(0, messagebox_not_py3)
root.after(1, show_killswitch_poppup, root)
root.mainloop()
logger.info('Exiting')

View File

@ -51,14 +51,23 @@ class KillSwitchSet:
return DisabledResult(False, "")
def is_disabled(self, id: str, *, version=_current_version) -> bool:
def is_disabled(self, id: str, *, version: semantic_version.Version = _current_version) -> bool:
"""Return whether or not a given feature ID is disabled for the given version."""
return self.get_disabled(id, version=version).disabled
def get_reason(self, id: str, version=_current_version) -> str:
def get_reason(self, id: str, version: semantic_version.Version = _current_version) -> str:
"""Return a reason for why the given id is disabled for the given version, if any."""
return self.get_disabled(id, version=version).reason
def kills_for_version(self, version: semantic_version.Version = _current_version) -> List[KillSwitch]:
"""
Get all killswitch entries that apply to the given version.
:param version: the version to check against, defaults to the current EDMC version
:return: the matching kill switches
"""
return [k for k in self.kill_switches if version in k.version]
def __str__(self) -> str:
"""Return a string representation of KillSwitchSet."""
return f'KillSwitchSet: {str(self.kill_switches)}'
@ -172,16 +181,21 @@ def get_disabled(id: str, *, version: semantic_version.Version = _current_versio
return active.get_disabled(id, version=version)
def is_disabled(id: str, *, version=_current_version) -> bool:
def is_disabled(id: str, *, version: semantic_version.Version = _current_version) -> bool:
"""Query the global KillSwitchSet#is_disabled method."""
return active.is_disabled(id, version=version)
def get_reason(id: str, *, version=_current_version) -> str:
def get_reason(id: str, *, version: semantic_version.Version = _current_version) -> str:
"""Query the global KillSwitchSet#get_reason method."""
return active.get_reason(id, version=version)
def kills_for_version(version: semantic_version.Version = _current_version) -> List[KillSwitch]:
"""Query the global KillSwitchSet for kills matching a particular version."""
return active.kills_for_version(version)
if __name__ == "__main__":
setup_main_list()
print(f'{_current_version=}')