discord-rich-presence-plex/core/config.py

93 lines
2.8 KiB
Python
Raw Normal View History

2024-02-06 20:10:41 +00:00
from config.constants import configFilePathBase
from utils.dict import copyDict
2022-05-14 09:43:02 +00:00
from utils.logging import logger
import json
2022-05-14 09:43:02 +00:00
import models.config
import os
import time
2023-11-04 19:39:30 +00:00
import yaml
2022-05-14 09:43:02 +00:00
config: models.config.Config = {
"logging": {
"debug": True,
"writeToFile": False,
},
"display": {
"duration": True,
"genres": True,
"album": True,
2024-10-17 18:19:30 +00:00
"albumImage": True,
"artist": True,
"artistImage": True,
"year": True,
"statusIcon": False,
2024-09-23 11:53:02 +00:00
"progressMode": "bar",
"paused": False,
"posters": {
"enabled": False,
"imgurClientID": "",
2024-02-10 07:12:58 +00:00
"maxSize": 256,
},
"buttons": [],
},
"users": [],
}
2023-11-04 19:39:30 +00:00
supportedConfigFileExtensions = {
"yaml": "yaml",
"yml": "yaml",
"json": "json",
}
configFileExtension = ""
configFileType = ""
configFilePath = ""
def loadConfig() -> None:
2023-11-05 05:24:45 +00:00
global configFileExtension, configFileType, configFilePath
doesFileExist = False
for i, (fileExtension, fileType) in enumerate(supportedConfigFileExtensions.items()):
2024-02-06 20:10:41 +00:00
doesFileExist = os.path.isfile(f"{configFilePathBase}.{fileExtension}")
2023-11-05 05:24:45 +00:00
isFirstItem = i == 0
if doesFileExist or isFirstItem:
2023-11-04 19:39:30 +00:00
configFileExtension = fileExtension
configFileType = fileType
2024-02-06 20:10:41 +00:00
configFilePath = f"{configFilePathBase}.{configFileExtension}"
2023-11-05 05:24:45 +00:00
if doesFileExist:
break
if doesFileExist:
try:
with open(configFilePath, "r", encoding = "UTF-8") as configFile:
2023-11-04 19:39:30 +00:00
if configFileType == "yaml":
2024-08-30 14:59:02 +00:00
loadedConfig = yaml.safe_load(configFile) or {} # pyright: ignore[reportUnknownVariableType]
2023-11-04 19:39:30 +00:00
else:
2024-08-30 14:59:02 +00:00
loadedConfig = json.load(configFile) or {} # pyright: ignore[reportUnknownVariableType]
except:
2024-02-06 20:10:41 +00:00
os.rename(configFilePath, f"{configFilePathBase}-{time.time():.0f}.{configFileExtension}")
2023-11-05 05:24:45 +00:00
logger.exception("Failed to parse the config file. A new one will be created.")
else:
copyDict(loadedConfig, config)
if "hideTotalTime" in config["display"]:
config["display"]["duration"] = not config["display"]["hideTotalTime"]
del config["display"]["hideTotalTime"]
if "useRemainingTime" in config["display"]:
del config["display"]["useRemainingTime"]
2024-09-23 11:53:02 +00:00
if "remainingTime" in config["display"]:
del config["display"]["remainingTime"]
if config["display"]["progressMode"] not in ["off", "elapsed", "remaining", "bar"]:
config["display"]["progressMode"] = "bar"
saveConfig()
2023-11-04 19:39:30 +00:00
class YamlSafeDumper(yaml.SafeDumper):
def increase_indent(self, flow: bool = False, indentless: bool = False) -> None:
return super().increase_indent(flow, False)
def saveConfig() -> None:
try:
with open(configFilePath, "w", encoding = "UTF-8") as configFile:
2023-11-04 19:39:30 +00:00
if configFileType == "yaml":
yaml.dump(config, configFile, sort_keys = False, Dumper = YamlSafeDumper, allow_unicode = True)
else:
json.dump(config, configFile, indent = "\t")
configFile.write("\n")
except:
2023-11-05 05:24:45 +00:00
logger.exception("Failed to write to the config file")