1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-06-07 10:53:26 +03:00

Merge pull request #2211 from HullSeals/enhancement/2203/add-global-exception-handling

[2203] Implement Total Exception Handling
This commit is contained in:
David Sangrey 2024-05-13 19:47:27 -04:00 committed by GitHub
commit af891c85a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 20 deletions

View File

@ -11,9 +11,11 @@ from __future__ import annotations
import argparse import argparse
import html import html
import locale import locale
import os
import pathlib import pathlib
import queue import queue
import re import re
import signal
import subprocess import subprocess
import sys import sys
import threading import threading
@ -335,29 +337,13 @@ if __name__ == '__main__': # noqa: C901
def already_running_popup(): def already_running_popup():
"""Create the "already running" popup.""" """Create the "already running" popup."""
import tkinter as tk from tkinter import messagebox
from tkinter import ttk
# Check for CL arg that suppresses this popup. # Check for CL arg that suppresses this popup.
if args.suppress_dupe_process_popup: if args.suppress_dupe_process_popup:
sys.exit(0) sys.exit(0)
root = tk.Tk(className=appname.lower()) messagebox.showerror(title=appname, message="An EDMarketConnector process was already running, exiting.")
sys.exit(0)
frame = tk.Frame(root)
frame.grid(row=1, column=0, sticky=tk.NSEW)
label = tk.Label(frame, text='An EDMarketConnector.exe process was already running, exiting.')
label.grid(row=1, column=0, sticky=tk.NSEW)
button = ttk.Button(frame, text='OK', command=lambda: sys.exit(0))
button.grid(row=2, column=0, sticky=tk.S)
try:
root.mainloop()
except KeyboardInterrupt:
logger.info("Ctrl+C Detected, Attempting Clean Shutdown")
sys.exit()
logger.info('Exiting')
journal_lock = JournalLock() journal_lock = JournalLock()
locked = journal_lock.obtain_lock() locked = journal_lock.obtain_lock()
@ -2226,7 +2212,29 @@ sys.path: {sys.path}'''
if theme.default_ui_scale is not None: if theme.default_ui_scale is not None:
root.tk.call('tk', 'scaling', theme.default_ui_scale * float(ui_scale) / 100.0) root.tk.call('tk', 'scaling', theme.default_ui_scale * float(ui_scale) / 100.0)
try:
app = AppWindow(root) app = AppWindow(root)
except Exception as err:
logger.exception(f"EDMC Critical Error: {err}")
title = tr.tl("Error") # LANG: Generic error prefix
message = tr.tl( # LANG: EDMC Critical Error Notification
"EDSM encountered a critical error, and cannot recover. EDMC is shutting down for its own protection!"
)
err = f"{err.__class__.__name__}: {err}" # type: ignore # hijacking the existing exception detection
detail = tr.tl( # LANG: EDMC Critical Error Details
r"Here's what EDMC Detected:\r\n\r\n{ERR}\r\n\r\nDo you want to file a Bug Report on GitHub?"
).format(ERR=err)
detail = detail.replace('\\n', '\n')
detail = detail.replace('\\r', '\r')
msg = tk.messagebox.askyesno(
title=title, message=message, detail=detail, icon=tkinter.messagebox.ERROR, type=tkinter.messagebox.YESNO
)
if msg:
webbrowser.open(
"https://github.com/EDCD/EDMarketConnector/issues/new?"
"assignees=&labels=bug%2C+unconfirmed&projects=&template=bug_report.md&title="
)
os.kill(os.getpid(), signal.SIGTERM)
def messagebox_broken_plugins(): def messagebox_broken_plugins():
"""Display message about 'broken' plugins that failed to load.""" """Display message about 'broken' plugins that failed to load."""

View File

@ -36,6 +36,12 @@
/* companion.py: Failed to get Access Token from Frontier Auth service; In files: companion.py:508; */ /* companion.py: Failed to get Access Token from Frontier Auth service; In files: companion.py:508; */
"Error: unable to get token" = "Error: unable to get token"; "Error: unable to get token" = "Error: unable to get token";
/* EDMarketConnector.py: EDMC Critical Error Notification; */
"EDSM encountered a critical error, and cannot recover. EDMC is shutting down for its own protection!" = "EDSM encountered a critical error, and cannot recover. EDMC is shutting down for its own protection!";
/* EDMarketConnector.py: EDMC Critical Error Details; */
"Here's what EDMC Detected:\r\n\r\n{ERR}\r\n\r\nDo you want to file a Bug Report on GitHub?" = "Here's what EDMC Detected:\r\n\r\n{ERR}\r\n\r\nDo you want to file a Bug Report on GitHub?";
/* companion.py: Frontier CAPI returned 418, meaning down for maintenance; In files: companion.py:844; */ /* companion.py: Frontier CAPI returned 418, meaning down for maintenance; In files: companion.py:844; */
"Frontier CAPI down for maintenance" = "Frontier CAPI down for maintenance"; "Frontier CAPI down for maintenance" = "Frontier CAPI down for maintenance";