clan-core/pkgs/moonlight-sunshine-accept/moonlight_sunshine_accept/sunshine/state.py
a-kenji 32d0f1ccd4
All checks were successful
checks / check-links (pull_request) Successful in 21s
checks / checks (pull_request) Successful in 33s
checks / checks-impure (pull_request) Successful in 1m48s
init: sunshine-moonlight-accept module
2024-03-19 12:11:09 +01:00

68 lines
2.2 KiB
Python

import json
import os
from typing import Any
def default_sunshine_config_dir() -> str:
return os.path.join(os.path.expanduser("~"), ".config", "sunshine")
def default_sunshine_state_file() -> str:
return os.path.join(default_sunshine_config_dir(), "sunshine_state.json")
def load_state(sunshine_state_path: str) -> dict[str, Any] | None:
sunshine_state_path = sunshine_state_path or default_sunshine_state_file()
print(f"Loading sunshine state from {sunshine_state_path}")
try:
with open(sunshine_state_path) as file:
config = file.read()
return config
except FileNotFoundError:
print("Sunshine state file not found.")
return None
# this needs to be created before sunshine is first run
def init_state(uuid: str, sunshine_state_path: str) -> None:
print("Initializing sunshine state.")
data = {}
data["root"] = {}
data["root"]["uniqueid"] = uuid
data["root"]["devices"] = []
# write the initial bootstrap config file
write_state(data, sunshine_state_path)
def write_state(data: dict[str, Any], sunshine_state_path: str) -> None:
sunshine_state_path = sunshine_state_path or default_sunshine_state_file()
with open(sunshine_state_path, "w") as file:
json.dump(data, file, indent=4)
# this is used by moonlight-qt
def pseudo_uuid() -> str:
return "0123456789ABCDEF"
# TODO: finish this function
def add_moonlight_client(certificate: str, sunshine_state_path: str, uuid: str) -> None:
print("Adding moonlight client to sunshine state.")
state = load_state(sunshine_state_path)
if state:
state = json.loads(state)
if not state["root"]["devices"]:
state["root"]["devices"].append(
{"uniqueid": pseudo_uuid(), "certs": [certificate]}
)
write_state(state, sunshine_state_path)
if certificate not in state["root"]["devices"][0]["certs"]:
state["root"]["devices"][0]["certs"].append(certificate)
state["root"]["devices"][0]["uniqueid"] = pseudo_uuid()
write_state(state, sunshine_state_path)
else:
print("Moonlight certificate already added.")