Massive refactor (Zed wouldn't stop complaining about formatting) and

beginning of proper GNOME implementation.
This commit is contained in:
2026-08-15 23:56:17 +12:00
parent a4aa721a59
commit 19b7b89453
15 changed files with 346 additions and 148 deletions
+31 -20
View File
@@ -1,29 +1,40 @@
from .env_key import SunshineEnvKey as EnvKey
from .enums import SunshineAudioConfig
from .structs import SunshineAudioConfig, SunshineEnvironmentVariables, SunshineClientSpecs, SunshineClientInfo, SunshineClientOptions
from os import environ
from .enums import SunshineAudioConfig
from .env_key import SunshineEnvKey as EnvKey
from .structs import (
SunshineAudioConfig,
SunshineClientInfo,
SunshineClientOptions,
SunshineClientSpecs,
SunshineEnvironmentVariables,
)
def load_env_variables() -> SunshineEnvironmentVariables:
def ld_str(var: EnvKey): return environ.get(var.requested_key, var.default)
def ld_int(var: EnvKey): return int(ld_str(var))
def ld_bool(var: EnvKey): return ld_str(var).lower() == "true"
def ld_str(var: EnvKey):
return environ.get(var.requested_key, var.default)
def ld_int(var: EnvKey):
return int(ld_str(var))
def ld_bool(var: EnvKey):
return ld_str(var).lower() == "true"
return SunshineEnvironmentVariables(
SunshineClientInfo(
app_id = ld_str(EnvKey.APP_ID),
app_name = ld_str(EnvKey.APP_NAME)
app_id=ld_str(EnvKey.APP_ID), app_name=ld_str(EnvKey.APP_NAME)
),
SunshineClientSpecs(
width = ld_int(EnvKey.WIDTH),
height = ld_int(EnvKey.HEIGHT),
fps = ld_int(EnvKey.FPS),
hdr = ld_bool(EnvKey.HDR),
gcmap = ld_int(EnvKey.GCMAP)
width=ld_int(EnvKey.WIDTH),
height=ld_int(EnvKey.HEIGHT),
fps=ld_int(EnvKey.FPS),
hdr=ld_bool(EnvKey.HDR),
gcmap=ld_int(EnvKey.GCMAP),
),
SunshineClientOptions(
host_audio = ld_bool(EnvKey.HOST_AUDIO),
enable_sops = ld_bool(EnvKey.ENABLE_SOPS),
audio_config = SunshineAudioConfig(ld_str(EnvKey.AUDIO_CONFIG))
)
)
host_audio=ld_bool(EnvKey.HOST_AUDIO),
enable_sops=ld_bool(EnvKey.ENABLE_SOPS),
audio_config=SunshineAudioConfig(ld_str(EnvKey.AUDIO_CONFIG)),
),
)
+1 -1
View File
@@ -1,7 +1,7 @@
from enum import StrEnum
class SunshineAudioConfig(StrEnum):
STEREO = "2.0"
SURROUND_5_1 = "5.1"
SURROUND_7_1 = "7.1"
+3 -1
View File
@@ -1,5 +1,6 @@
from enum import Enum
class KeyDefaultMixin(str):
def __new__(cls, requested_key: str, default: str):
obj = str.__new__(cls, requested_key)
@@ -7,6 +8,7 @@ class KeyDefaultMixin(str):
obj.default = default
return obj
class SunshineEnvKey(KeyDefaultMixin, Enum):
APP_ID = ("SUNSHINE_APP_ID", "Unknown ID")
APP_NAME = ("SUNSHINE_APP_NAME", "Unknown App Name")
@@ -17,4 +19,4 @@ class SunshineEnvKey(KeyDefaultMixin, Enum):
GCMAP = ("SUNSHINE_CLIENT_GCMAP", "0")
HOST_AUDIO = ("SUNSHINE_CLIENT_HOST_AUDIO", "0")
ENABLE_SOPS = ("SUNSHINE_CLIENT_ENABLE_SOPS", "0")
AUDIO_CONFIG = ("SUNSHINE_CLIENT_AUDIO_CONFIGURATION", "2.0")
AUDIO_CONFIG = ("SUNSHINE_CLIENT_AUDIO_CONFIGURATION", "2.0")
+5 -1
View File
@@ -2,11 +2,13 @@ from dataclasses import dataclass
from .enums import SunshineAudioConfig
@dataclass
class SunshineClientInfo:
app_id: str
app_name: str
@dataclass
class SunshineClientSpecs:
width: int
@@ -15,14 +17,16 @@ class SunshineClientSpecs:
hdr: bool
gcmap: int
@dataclass
class SunshineClientOptions:
host_audio: bool
enable_sops: bool
audio_config: SunshineAudioConfig
@dataclass
class SunshineEnvironmentVariables:
info: SunshineClientInfo
specs: SunshineClientSpecs
options: SunshineClientOptions
options: SunshineClientOptions