2023-05-15 12:25:20 +00:00
|
|
|
import re
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
class Test:
|
|
|
|
def __init__(self):
|
|
|
|
self.options = {}
|
|
|
|
self.error_count = 0
|
2023-06-24 17:31:49 +00:00
|
|
|
self.ignore_params = ["pci_dev", "mangoapp_steam", "fsr_steam_sharpness",
|
|
|
|
"blacklist", "media_player_format"]
|
2023-05-15 12:25:20 +00:00
|
|
|
# self.files_changed()
|
|
|
|
self.get_options()
|
|
|
|
self.get_param_defaults()
|
|
|
|
self.find_options_in_readme()
|
|
|
|
self.find_options_in_conf()
|
|
|
|
|
|
|
|
if self.error_count > 0:
|
|
|
|
print(f"number of errors: {self.error_count}")
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
def get_options(self):
|
|
|
|
regex = r"\((.*?)\)"
|
|
|
|
with open('../src/overlay_params.h') as f:
|
|
|
|
for line in f:
|
|
|
|
if ("OVERLAY_PARAM_BOOL" in line or "OVERLAY_PARAM_CUSTOM"
|
|
|
|
in line) and not "#" in line:
|
|
|
|
match = re.search(regex, line)
|
2023-05-30 11:08:57 +00:00
|
|
|
if match:
|
|
|
|
key = match.group(1)
|
|
|
|
if key in self.ignore_params:
|
|
|
|
continue
|
|
|
|
else:
|
|
|
|
self.options[key] = None
|
2023-05-15 12:25:20 +00:00
|
|
|
|
|
|
|
def find_options_in_readme(self):
|
|
|
|
with open("../README.md") as f:
|
|
|
|
file = f.read()
|
|
|
|
for option in self.options:
|
|
|
|
if not option in file:
|
|
|
|
self.error_count += 1
|
|
|
|
print(f"Option: {option} is not found in README.md")
|
|
|
|
|
|
|
|
def find_options_in_conf(self):
|
|
|
|
with open("../data/MangoHud.conf") as f:
|
|
|
|
file = f.read()
|
|
|
|
for option, val in self.options.items():
|
2023-05-30 05:46:15 +00:00
|
|
|
|
2023-05-15 12:25:20 +00:00
|
|
|
if not option in file:
|
|
|
|
self.error_count += 1
|
|
|
|
print(f"Option: {option} is not found in MangoHud.conf")
|
2023-05-30 05:46:15 +00:00
|
|
|
|
2023-05-15 12:25:20 +00:00
|
|
|
if option in file:
|
|
|
|
option = "# " + option
|
|
|
|
for line in file.splitlines():
|
|
|
|
if option in line:
|
|
|
|
line = line.strip().split("=")
|
|
|
|
if len(line) != 2:
|
|
|
|
continue
|
|
|
|
|
|
|
|
key = line[0].strip("#").strip()
|
2023-06-24 17:31:49 +00:00
|
|
|
if key not in self.options:
|
|
|
|
continue
|
|
|
|
|
2023-05-15 12:25:20 +00:00
|
|
|
value = line[1].strip()
|
|
|
|
if "," in value:
|
|
|
|
value = value.split(",")
|
|
|
|
|
|
|
|
if self.options[key] != value:
|
|
|
|
self.error_count += 1
|
|
|
|
print(f"Sample config: option: {key} value is not the same as default")
|
|
|
|
print(f"default: {self.options[key]}, config: {value}")
|
|
|
|
print("")
|
|
|
|
|
|
|
|
def get_param_defaults(self):
|
|
|
|
# Open the C++ file
|
|
|
|
with open('../src/overlay_params.cpp', 'r') as f:
|
|
|
|
# Read the contents of the file
|
|
|
|
contents = f.read()
|
|
|
|
|
|
|
|
# Define the name of the function to search for
|
|
|
|
function_name = 'set_param_defaults'
|
|
|
|
|
|
|
|
# Define a regular expression to match the function definition
|
|
|
|
function_regex = re.compile(r"void\s+" +
|
|
|
|
function_name + r"\s*\(([^)]*)\)\s*{(.+?)\s*}\s*\n",
|
|
|
|
re.MULTILINE | re.DOTALL)
|
|
|
|
|
|
|
|
# Find the match of the regular expression in the file contents
|
|
|
|
match = function_regex.search(contents)
|
|
|
|
|
|
|
|
# If the function is found, extract the contents
|
|
|
|
if match:
|
|
|
|
# Extract the contents of the function
|
|
|
|
function_contents = match.group(2)
|
|
|
|
for line in function_contents.splitlines():
|
2023-05-30 11:08:57 +00:00
|
|
|
|
2023-05-15 12:25:20 +00:00
|
|
|
# FIXME: Some variables get stored as string in a string
|
|
|
|
if not "enabled" in line:
|
|
|
|
line = line.replace("params->", "")
|
|
|
|
line = line.strip().strip(";").split("=")
|
|
|
|
if len(line) != 2:
|
|
|
|
continue
|
|
|
|
|
|
|
|
key = line[0].strip()
|
|
|
|
value = line[1].strip()
|
2023-06-24 17:31:49 +00:00
|
|
|
if key not in self.options:
|
|
|
|
continue
|
|
|
|
|
2023-05-15 12:25:20 +00:00
|
|
|
# convert to a list if it contains curly bracket
|
|
|
|
if "{" in value:
|
|
|
|
value = value.replace("{", "").replace("}", "").strip().split(", ")
|
|
|
|
# If option has color in it's name we can assume it's value is
|
|
|
|
# one or more colors and that they are in binary.
|
|
|
|
# We want to convert this from binary because the config
|
|
|
|
# will not be in this format
|
|
|
|
if "color" in key:
|
|
|
|
value = [hex[2:] for hex in value]
|
|
|
|
value = [string.upper() for string in value]
|
|
|
|
|
|
|
|
# same reasoning as above
|
|
|
|
if "color" in key and type(value) is str:
|
|
|
|
value = value[2:]
|
|
|
|
value = value.upper()
|
|
|
|
|
|
|
|
if "fps_sampling_period" in key:
|
|
|
|
value = re.sub(r';\s*/\*.*?\*/', '', value)
|
|
|
|
value = str(int(int(value) / 1000000))
|
2023-05-30 05:46:15 +00:00
|
|
|
|
|
|
|
# if value is a list, make sure we don't store str in str
|
|
|
|
if type(value) == list:
|
|
|
|
value = [element.strip('"') for element in value]
|
|
|
|
|
2023-05-15 12:25:20 +00:00
|
|
|
self.options[key] = value
|
|
|
|
|
2023-06-24 17:31:49 +00:00
|
|
|
Test()
|