A small batch of fixes (#81)

* log_analyser: Use a set for notes

* Use sys.exc_info() instead of sys.exception()

sys.exception() only exists since python 3.11

* Create data dir if it doesn't exist
This commit is contained in:
TSRBerry 2024-01-06 15:33:01 +01:00 committed by GitHub
parent caa5cf55ed
commit 03e4fd3541
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 43 deletions

View file

@ -19,8 +19,6 @@ sys.path.append(state_dir)
import config
# TODO: check __name__ for __main__ nerd
script_name = os.path.basename(__file__).split(".")[0]
log_file_name = f"{script_name}.log"
@ -61,6 +59,9 @@ wanted_jsons = [
"data/disabled_ids.json",
]
if not os.path.exists(os.path.join(state_dir, "data")):
os.makedirs(os.path.join(state_dir, "data"))
for wanted_json_idx in range(len(wanted_jsons)):
wanted_jsons[wanted_json_idx] = os.path.join(
state_dir, wanted_jsons[wanted_json_idx]
@ -142,7 +143,7 @@ async def on_command(ctx):
async def on_error(event: str, *args, **kwargs):
log.exception(f"Error on {event}:")
exception = sys.exception()
exception = sys.exc_info()[1]
is_report_allowed = any(
[
not isinstance(exception, x)
@ -270,15 +271,6 @@ async def on_message(message):
await bot.invoke(ctx)
if not os.path.exists("data"):
os.makedirs("data")
for wanted_json in wanted_jsons:
if not os.path.exists(wanted_json):
with open(wanted_json, "w") as f:
f.write("{}")
async def main():
async with bot:
if len(config.guild_whitelist) == 1:

View file

@ -33,7 +33,7 @@ class LogAnalyser:
_emu_info: dict[str, Optional[str]]
_game_info: dict[str, Optional[str]]
_settings: dict[str, Optional[str]]
_notes: list[str]
_notes: Union[set[str], list[str]]
@staticmethod
def is_homebrew(log_file: str) -> bool:
@ -178,7 +178,7 @@ class LogAnalyser:
"aspect_ratio": "Unknown",
"texture_recompression": "Unknown",
}
self._notes = []
self._notes = set()
self._log_errors = []
def __get_errors(self):
@ -408,10 +408,10 @@ class LogAnalyser:
# Hid Configure lines can appear multiple times, so converting to dict keys removes duplicate entries,
# also maintains the list order
input_status = list(dict.fromkeys(input_status))
self._notes.append("\n".join(input_status))
self._notes.add("\n".join(input_status))
# If emulator crashes on startup without game load, there is no need to show controller notification at all
elif self._game_info["game_name"] != "Unknown":
self._notes.append("⚠️ No controller information found")
self._notes.add("⚠️ No controller information found")
def __get_os_notes(self):
if (
@ -419,11 +419,11 @@ class LogAnalyser:
and self._settings["graphics_backend"] != "Vulkan"
):
if "Intel" in self._hardware_info["gpu"]:
self._notes.append(
self._notes.add(
"**⚠️ Intel iGPU users should consider using Vulkan graphics backend**"
)
if "AMD" in self._hardware_info["gpu"]:
self._notes.append(
self._notes.add(
"**⚠️ AMD GPU users should consider using Vulkan graphics backend**"
)
@ -436,7 +436,7 @@ class LogAnalyser:
)
if "Debug" in user_logs:
self._notes.append(
self._notes.add(
"⚠️ **Debug logs enabled will have a negative impact on performance**"
)
@ -447,47 +447,47 @@ class LogAnalyser:
else:
log_string = "✅ Default logs enabled"
self._notes.append(log_string)
self._notes.add(log_string)
def __get_settings_notes(self):
if self._settings["audio_backend"] == "Dummy":
self._notes.append(
self._notes.add(
"⚠️ Dummy audio backend, consider changing to SDL2 or OpenAL"
)
if self._settings["pptc"] == "Disabled":
self._notes.append("🔴 **PPTC cache should be enabled**")
self._notes.add("🔴 **PPTC cache should be enabled**")
if self._settings["shader_cache"] == "Disabled":
self._notes.append("🔴 **Shader cache should be enabled**")
self._notes.add("🔴 **Shader cache should be enabled**")
if self._settings["expand_ram"] == "True":
self._notes.append(
self._notes.add(
"⚠️ `Use alternative memory layout` should only be enabled for 4K mods"
)
if self._settings["memory_manager"] == "SoftwarePageTable":
self._notes.append(
self._notes.add(
"🔴 **`Software` setting in Memory Manager Mode will give slower performance than the default setting of `Host unchecked`**"
)
if self._settings["ignore_missing_services"] == "True":
self._notes.append(
self._notes.add(
"⚠️ `Ignore Missing Services` being enabled can cause instability"
)
if self._settings["vsync"] == "Disabled":
self._notes.append(
self._notes.add(
"⚠️ V-Sync disabled can cause instability like games running faster than intended or longer load times"
)
if self._settings["fs_integrity"] == "Disabled":
self._notes.append(
self._notes.add(
"⚠️ Disabling file integrity checks may cause corrupted dumps to not be detected"
)
if self._settings["backend_threading"] == "Off":
self._notes.append(
self._notes.add(
"🔴 **Graphics Backend Multithreading should be set to `Auto`**"
)
@ -507,37 +507,37 @@ class LogAnalyser:
for common_error in self.get_common_errors():
match common_error:
case CommonError.SHADER_CACHE_COLLISION:
self._notes.append(
self._notes.add(
"⚠️ Cache collision detected. Investigate possible shader cache issues"
)
case CommonError.SHADER_CACHE_CORRUPTION:
self._notes.append(
self._notes.add(
"⚠️ Cache corruption detected. Investigate possible shader cache issues"
)
case CommonError.DUMP_HASH:
self._notes.append(
self._notes.add(
"⚠️ Dump error detected. Investigate possible bad game/firmware dump issues"
)
case CommonError.UPDATE_KEYS:
self._notes.append(
self._notes.add(
"⚠️ Keys or firmware out of date, consider updating them"
)
case CommonError.FILE_PERMISSIONS:
self._notes.append(
self._notes.add(
"⚠️ File permission error. Consider deleting save directory and allowing Ryujinx to make a new one"
)
case CommonError.FILE_NOT_FOUND:
self._notes.append(
"⚠️ Save not found error. Consider starting game without a save file or using a new save file⚠ Save not found error. Consider starting game without a save file or using a new save file"
self._notes.add(
"⚠️ Save not found error. Consider starting game without a save file or using a new save file"
)
case CommonError.MISSING_SERVICES:
if self._settings["ignore_missing_services"] == "False":
self._notes.append(
self._notes.add(
"⚠️ Consider enabling `Ignore Missing Services` in Ryujinx settings"
)
case CommonError.VULKAN_OUT_OF_MEMORY:
if self._settings["texture_recompression"] == "Disabled":
self._notes.append(
self._notes.add(
"⚠️ Consider enabling `Texture Recompression` in Ryujinx settings"
)
case _:
@ -547,10 +547,10 @@ class LogAnalyser:
latest_timestamp = re.findall(timestamp_regex, self._log_text)[-1]
if latest_timestamp:
timestamp_message = f" Time elapsed: `{latest_timestamp}`"
self._notes.append(timestamp_message)
self._notes.add(timestamp_message)
if self.is_default_user_profile():
self._notes.append(
self._notes.add(
"⚠️ Default user profile in use, consider creating a custom one."
)
@ -562,11 +562,11 @@ class LogAnalyser:
and self._game_info["game_name"] != "Unknown"
):
firmware_warning = f"**❌ Nintendo Switch firmware not found**"
self._notes.append(firmware_warning)
self._notes.add(firmware_warning)
self.__get_settings_notes()
if self.get_ryujinx_version() == RyujinxVersion.CUSTOM:
self._notes.append("**⚠️ Custom builds are not officially supported**")
self._notes.add("**⚠️ Custom builds are not officially supported**")
def get_ryujinx_version(self):
mainline_version = re.compile(r"^\d\.\d\.\d+$")
@ -655,7 +655,7 @@ class LogAnalyser:
self._game_info["cheats"] = "\n".join(limit_cheats)
if is_channel_allowed and self.get_ryujinx_version() == RyujinxVersion.PR:
self._notes.append(
self._notes.add(
f"**⚠️ PR build logs should be posted in <#{pr_channel}> if reporting bugs or tests**"
)