1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-07-15 01:24:29 +02:00

created the data parser of the sget control of the amixer sget <controller> command.

This commit is contained in:
Eden Refael
2024-11-24 21:16:48 +02:00
parent 27ce3b2c3d
commit 37dc01f960

View File

@ -67,12 +67,59 @@ def parse(
jc.utils.input_type_check(data)
raw_output = []
# cleandata = list(filter(None, data.splitlines()))
#
lines = list(filter(None, data.splitlines())) # lines=cleandata
data = {}
# Strip and check for the first line to extract the control name directly
first_line = lines[0].strip()
if first_line.startswith("Simple mixer control"):
# Extract the control name, removing the single quotes
control_name = first_line.split("'")[1] # Extracts the part inside the single quotes
else:
raise ValueError("Invalid amixer output format: missing control name.")
# Add control name to the parsed data as a key
data["control_name"] = control_name
# Parse the rest of the output
for line in lines[1:]:
line = line.strip()
if line.startswith("Capabilities:"):
data["capabilities"] = line.split(":")[1].strip().split()
elif line.startswith("Playback channels:"):
data["playback_channels"] = line.split(":")[1].strip().split(" - ")
elif line.startswith("Limits:"):
limits = line.split(":")[1].strip().split(" - ")
data["limits"] = {
"playback_min": int(limits[0].split()[1]),
"playback_max": int(limits[1])
}
elif line.startswith("Mono:") or line.startswith("Front Left:") or line.startswith("Front Right:"):
# Identifying whether it's Mono, Front Left, or Front Right
channel_name = line.split(":")[0].strip().lower().replace(" ", "_")
channel_info = line.split(":")[1].strip()
# Example: "Playback 255 [100%] [0.00dB] [on]"
channel_data = channel_info.split(" ")
playback_value = int(channel_data[0])
percentage = channel_data[1][1:-1] # Extract percentage e.g. "100%"
db_value = channel_data[2][1:-3] # Extract dB value e.g. "0.00dB"
status = channel_data[3][1:-1] # Extract status "on" or "off"
# Storing channel data in the dict
data[channel_name] = {
"playback_value": playback_value,
"percentage": percentage,
"dB": db_value,
"status": status
}
return data
# if jc.utils.has_data(data):
#
# # remove final Entries row if -v was used
# if cleandata[-1].startswith('Entries:'):
# remove final Entries row if -v was used
# if cleandata[-1].startswith('Entries:'):
# cleandata.pop(-1)
#
# # detect if freebsd/osx style was used