From bcd11636d5899d712c85b96abd77cdbaa7f09acb Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 9 Jul 2021 13:36:53 +0200 Subject: Catch error when release notes file could not be read And show an error message to the user in that case. This could happen if the user modified their installation or their resource folder. Fixes Sentry issue CURA-2P2. --- cura/UI/TextManager.py | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) (limited to 'cura/UI') diff --git a/cura/UI/TextManager.py b/cura/UI/TextManager.py index dbe7940f26..e45689936b 100644 --- a/cura/UI/TextManager.py +++ b/cura/UI/TextManager.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Ultimaker B.V. +# Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import collections @@ -6,9 +6,11 @@ from typing import Optional, Dict, List, cast from PyQt5.QtCore import QObject, pyqtSlot +from UM.i18n import i18nCatalog from UM.Resources import Resources from UM.Version import Version +catalog = i18nCatalog("cura") # # This manager provides means to load texts to QML. @@ -30,30 +32,33 @@ class TextManager(QObject): # Load change log texts and organize them with a dict try: file_path = Resources.getPath(Resources.Texts, "change_log.txt") - except FileNotFoundError: + except FileNotFoundError as e: # I have no idea how / when this happens, but we're getting crash reports about it. - return "" + return catalog.i18nc("@text:window", "The release notes could not be opened.") + "
" + str(e) change_logs_dict = {} # type: Dict[Version, Dict[str, List[str]]] - with open(file_path, "r", encoding = "utf-8") as f: - open_version = None # type: Optional[Version] - open_header = "" # Initialise to an empty header in case there is no "*" in the first line of the changelog - for line in f: - line = line.replace("\n", "") - if "[" in line and "]" in line: - line = line.replace("[", "") - line = line.replace("]", "") - open_version = Version(line) - if open_version > Version([14, 99, 99]): # Bit of a hack: We released the 15.x.x versions before 2.x - open_version = Version([0, open_version.getMinor(), open_version.getRevision(), open_version.getPostfixVersion()]) - open_header = "" - change_logs_dict[open_version] = collections.OrderedDict() - elif line.startswith("*"): - open_header = line.replace("*", "") - change_logs_dict[cast(Version, open_version)][open_header] = [] - elif line != "": - if open_header not in change_logs_dict[cast(Version, open_version)]: + try: + with open(file_path, "r", encoding = "utf-8") as f: + open_version = None # type: Optional[Version] + open_header = "" # Initialise to an empty header in case there is no "*" in the first line of the changelog + for line in f: + line = line.replace("\n", "") + if "[" in line and "]" in line: + line = line.replace("[", "") + line = line.replace("]", "") + open_version = Version(line) + if open_version > Version([14, 99, 99]): # Bit of a hack: We released the 15.x.x versions before 2.x + open_version = Version([0, open_version.getMinor(), open_version.getRevision(), open_version.getPostfixVersion()]) + open_header = "" + change_logs_dict[open_version] = collections.OrderedDict() + elif line.startswith("*"): + open_header = line.replace("*", "") change_logs_dict[cast(Version, open_version)][open_header] = [] - change_logs_dict[cast(Version, open_version)][open_header].append(line) + elif line != "": + if open_header not in change_logs_dict[cast(Version, open_version)]: + change_logs_dict[cast(Version, open_version)][open_header] = [] + change_logs_dict[cast(Version, open_version)][open_header].append(line) + except EnvironmentError as e: + return catalog.i18nc("@text:window", "The release notes could not be opened.") + "
" + str(e) # Format changelog text content = "" -- cgit v1.2.3