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.
This commit is contained in:
Ghostkeeper 2021-07-09 13:36:53 +02:00
parent 920e220bdb
commit bcd11636d5
No known key found for this signature in database
GPG key ID: D2A8871EE34EC59A

View file

@ -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. # Cura is released under the terms of the LGPLv3 or higher.
import collections import collections
@ -6,9 +6,11 @@ from typing import Optional, Dict, List, cast
from PyQt5.QtCore import QObject, pyqtSlot from PyQt5.QtCore import QObject, pyqtSlot
from UM.i18n import i18nCatalog
from UM.Resources import Resources from UM.Resources import Resources
from UM.Version import Version from UM.Version import Version
catalog = i18nCatalog("cura")
# #
# This manager provides means to load texts to QML. # 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 # Load change log texts and organize them with a dict
try: try:
file_path = Resources.getPath(Resources.Texts, "change_log.txt") 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. # 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.") + "<br>" + str(e)
change_logs_dict = {} # type: Dict[Version, Dict[str, List[str]]] change_logs_dict = {} # type: Dict[Version, Dict[str, List[str]]]
with open(file_path, "r", encoding = "utf-8") as f: try:
open_version = None # type: Optional[Version] with open(file_path, "r", encoding = "utf-8") as f:
open_header = "" # Initialise to an empty header in case there is no "*" in the first line of the changelog open_version = None # type: Optional[Version]
for line in f: open_header = "" # Initialise to an empty header in case there is no "*" in the first line of the changelog
line = line.replace("\n", "") for line in f:
if "[" in line and "]" in line: line = line.replace("\n", "")
line = line.replace("[", "") if "[" in line and "]" in line:
line = line.replace("]", "") line = line.replace("[", "")
open_version = Version(line) line = line.replace("]", "")
if open_version > Version([14, 99, 99]): # Bit of a hack: We released the 15.x.x versions before 2.x open_version = Version(line)
open_version = Version([0, open_version.getMinor(), open_version.getRevision(), open_version.getPostfixVersion()]) if open_version > Version([14, 99, 99]): # Bit of a hack: We released the 15.x.x versions before 2.x
open_header = "" open_version = Version([0, open_version.getMinor(), open_version.getRevision(), open_version.getPostfixVersion()])
change_logs_dict[open_version] = collections.OrderedDict() open_header = ""
elif line.startswith("*"): change_logs_dict[open_version] = collections.OrderedDict()
open_header = line.replace("*", "") elif line.startswith("*"):
change_logs_dict[cast(Version, open_version)][open_header] = [] open_header = line.replace("*", "")
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] = []
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.") + "<br>" + str(e)
# Format changelog text # Format changelog text
content = "" content = ""