1
0
Fork 0

get-state: Move code into __main__ functions

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2448>
This commit is contained in:
Marco Trevisan (Treviño) 2022-06-03 18:57:41 +02:00 committed by Marge Bot
parent 8d8694fd08
commit 40509154fb

View file

@ -13,41 +13,6 @@ class Source(enum.Enum):
FILE = 2 FILE = 2
parser = argparse.ArgumentParser(description='Get display state')
parser.add_argument('file', metavar='FILE', type=str, nargs='?',
help='Read the output from gdbus call instead of calling D-Bus')
parser.add_argument('--short', action='store_true')
args = parser.parse_args()
if args.file:
source = Source.FILE
path = args.file
else:
source = Source.DBUS
short = args.short
type_signature = '(ua((ssss)a(siiddada{sv})a{sv})a(iiduba(ssss)a{sv})a{sv})'
variant_type = GLib.VariantType.new(type_signature)
if source == Source.DBUS:
command = 'gdbus call -e '\
'-d org.gnome.Mutter.DisplayConfig '\
'-o /org/gnome/Mutter/DisplayConfig '\
'-m org.gnome.Mutter.DisplayConfig.GetCurrentState'
result = subprocess.run(command,
shell=True, check=True, capture_output=True, text=True)
data = result.stdout
else:
if path == '-':
data = sys.stdin.read()
else:
with open(path) as file:
data = file.read()
variant = GLib.variant_parse(variant_type, data)
def transform_to_string(transform): def transform_to_string(transform):
match transform: match transform:
case 0: return 'normal' case 0: return 'normal'
@ -97,18 +62,48 @@ def print_properties(level, lines, properties):
print_data(level + 1, is_last, lines, print_data(level + 1, is_last, lines,
f'{property}{properties[property]}') f'{property}{properties[property]}')
print('Serial: {}'.format(variant[0])) def print_current_state(args):
print() if args.file:
print('Monitors:') source = Source.FILE
monitors = variant[1] path = args.file
lines=[] else:
for monitor in monitors: source = Source.DBUS
short = args.short
type_signature = '(ua((ssss)a(siiddada{sv})a{sv})a(iiduba(ssss)a{sv})a{sv})'
variant_type = GLib.VariantType.new(type_signature)
if source == Source.DBUS:
command = 'gdbus call -e '\
'-d org.gnome.Mutter.DisplayConfig '\
'-o /org/gnome/Mutter/DisplayConfig '\
'-m org.gnome.Mutter.DisplayConfig.GetCurrentState'
result = subprocess.run(command,
shell=True, check=True, capture_output=True, text=True)
data = result.stdout
else:
if path == '-':
data = sys.stdin.read()
else:
with open(path) as file:
data = file.read()
variant = GLib.variant_parse(variant_type, data)
print('Serial: {}'.format(variant[0]))
print()
print('Monitors:')
monitors = variant[1]
lines = []
for monitor in monitors:
is_last = monitor == monitors[-1] is_last = monitor == monitors[-1]
spec = monitor[0] spec = monitor[0]
modes = monitor[1] modes = monitor[1]
properties = monitor[2] properties = monitor[2]
print_data(0, is_last, lines, 'Monitor {}'.format(spec[0])) print_data(0, is_last, lines, 'Monitor {}'.format(spec[0]))
print_data(1, False, lines, f'EDID: vendor: {spec[1]}, product: {spec[2]}, serial: {spec[3]}') print_data(
1, False, lines, f'EDID: vendor: {spec[1]}, product: {spec[2]}, serial: {spec[3]}')
mode_count = len(modes) mode_count = len(modes)
if short: if short:
@ -132,11 +127,11 @@ for monitor in monitors:
print_properties(1, lines, properties) print_properties(1, lines, properties)
print() print()
print('Logical monitors:') print('Logical monitors:')
logical_monitors = variant[2] logical_monitors = variant[2]
index = 1 index = 1
for logical_monitor in logical_monitors: for logical_monitor in logical_monitors:
is_last = logical_monitor == logical_monitors[-1] is_last = logical_monitor == logical_monitors[-1]
properties = logical_monitor[2] properties = logical_monitor[2]
print_data(0, is_last, lines, f'Logical monitor #{index}') print_data(0, is_last, lines, f'Logical monitor #{index}')
@ -161,6 +156,17 @@ for logical_monitor in logical_monitors:
index += 1 index += 1
properties = variant[3] properties = variant[3]
print() print()
print_properties(-1, lines, properties) print_properties(-1, lines, properties)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Get display state')
parser.add_argument('file', metavar='FILE', type=str, nargs='?',
help='Read the output from gdbus call instead of calling D-Bus')
parser.add_argument('--short', action='store_true')
args = parser.parse_args()
print_current_state(args)