Skip to content

Commit

Permalink
Squash merge branch per_app_rgb_settings - enables per game RGB lighting
Browse files Browse the repository at this point in the history
  • Loading branch information
aarron-lee committed Nov 27, 2023
1 parent f490f13 commit 8e72eee
Show file tree
Hide file tree
Showing 17 changed files with 741 additions and 273 deletions.
34 changes: 14 additions & 20 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import decky_plugin
import legion_configurator
import controller_enums
import rgb
import controller_settings as settings


try:
Expand All @@ -31,26 +33,18 @@ async def add(self, left, right):
async def _main(self):
decky_plugin.logger.info("Hello World!")

async def rgb_color(self, controller: str, red, blue, green, brightness):
hex_brightness = int(brightness)
color = bytes([red, green, blue])
controller_code = controller_enums.Controller[controller].value
rgb = legion_configurator.create_rgb_control_command(controller_code,0x01,color, hex_brightness, 0x01)
decky_plugin.logger.info(list(rgb))
legion_configurator.send_command(rgb)


async def rgb_on(self, controller: str):
controller_code = controller_enums.Controller[controller].value
rgb_on_command = legion_configurator.create_rgb_on_off_command(controller_code, True)
decky_plugin.logger.info(rgb_on_command)
legion_configurator.send_command(rgb_on_command)

async def rgb_off(self, controller: str):
controller_code = controller_enums.Controller[controller].value
rgb_off_command = legion_configurator.create_rgb_on_off_command(controller_code, False)
decky_plugin.logger.info(rgb_off_command)
legion_configurator.send_command(rgb_off_command)
async def get_settings(self):
return settings.get_settings()

async def save_rgb_per_game_profiles_enabled(self, enabled: bool):
return settings.set_setting('rgbPerGameProfilesEnabled', enabled)

async def save_rgb_settings(self, rgbProfiles):
return settings.set_all_rgb_profiles(rgbProfiles)

async def sync_rgb_settings(self, currentGameId):
decky_plugin.logger.info(f"sync rgb settings {currentGameId}")
return rgb.sync_rgb_settings(currentGameId)

async def remap_button(self, button: str, action: str):
decky_plugin.logger.info(f"remap_button {button} {action}")
Expand Down
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,13 @@
"typescript": "^4.7.4"
},
"dependencies": {
"@reduxjs/toolkit": "^1.9.7",
"@types/lodash": "^4.14.202",
"decky-frontend-lib": "^3.21.1",
"lodash": "^4.17.21",
"react-icons": "^4.4.0"
"react-icons": "^4.4.0",
"react-redux": "^8.1.3",
"redux": "^4.2.1"
},
"pnpm": {
"peerDependencyRules": {
Expand Down
137 changes: 134 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

66 changes: 65 additions & 1 deletion py_modules/controller_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,79 @@
setting_file = SettingsManager(name="settings", settings_directory=settings_directory)
setting_file.read()

def deep_merge(origin, destination):
for k, v in origin.items():
if isinstance(v, dict):
n = destination.setdefault(k, {})
deep_merge(v, n)
else:
destination[k] = v

return destination

def get_settings():
setting_file.read()
return setting_file.settings

def set_setting(name: str, value):
return setting_file.setSetting(name, value)

DEFAULT_RGB_LIGHT_VALUES = {
"enabled": False,
"red": 255,
"green": 255,
"blue": 255,
"brightness": 50
}

def bootstrap_rgb_settings(profileName: str, controller: str):
settings = get_settings()

if not settings.get('rgb'):
settings['rgb'] = {}
rgb_profiles = settings['rgb']
if not rgb_profiles.get(profileName):
rgb_profiles[profileName] = {}
rgb_profile = rgb_profiles[profileName]
default_rgb_profile = rgb_profiles.get('default').get(controller)

if not rgb_profile.get(controller):
rgb_profile[controller] = default_rgb_profile or DEFAULT_RGB_LIGHT_VALUES

def set_rgb_profile_value(profileName: str, controller: str, key: str, value):
bootstrap_rgb_settings(profileName, controller)

setting_file.settings['rgb'][profileName][controller][key] = value
setting_file.commit()

def set_rgb_profile_values(profileName: str, controller: str, values):
bootstrap_rgb_settings(profileName, controller)

profile = setting_file.settings['rgb'][profileName][controller]

deep_merge(values, profile)

setting_file.settings['rgb'][profileName][controller] = profile

setting_file.commit()

def set_all_rgb_profiles(rgb_profiles):
for profileName, rgbProfile in rgb_profiles.items():
left = rgbProfile.get('LEFT')
set_rgb_profile_values(
profileName=profileName,
controller='LEFT',
values=left
)
right = rgbProfile.get('RIGHT')
set_rgb_profile_values(
profileName=profileName,
controller='RIGHT',
values=right
)


def set_game_profile_setting(self, profileName: str, key: str, value):
def set_game_profile_setting(profileName: str, key: str, value):
setting_file.read()
if not setting_file.settings.get('gameProfiles'):
setting_file.settings['gameProfiles'] = {}
Expand Down
Loading

0 comments on commit 8e72eee

Please sign in to comment.