mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-07 01:15:33 +00:00
Follow-up of #4999 (which mentions different warnings). This change fixes other warnings that we were still getting.
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
#!/usr/bin/python3
|
|
|
|
from gi.repository import Gio
|
|
|
|
# GSettings path destkop/ibus/keyman/options
|
|
GSETTINGS_BASE = 'com.keyman.options'
|
|
|
|
# Utilities to get and set Keyman options in GSettings:
|
|
# /desktop/ibus/keyman/options/packageID/keyboardID/options
|
|
|
|
|
|
def get_child_schema(info):
|
|
if 'packageID' not in info or 'keyboardID' not in info or not info['packageID'] or not info['keyboardID']:
|
|
return None
|
|
|
|
settings = Gio.Settings.new(GSETTINGS_BASE)
|
|
path = settings.get_property('path')
|
|
if not path.endswith('/'):
|
|
path += '/'
|
|
path += info['packageID'] + '/' + info['keyboardID'] + '/'
|
|
return Gio.Settings.new_with_path(f'{GSETTINGS_BASE}.child', path)
|
|
|
|
|
|
def get_option(info):
|
|
"""
|
|
Get the Keyman keyboard options from GSettings
|
|
Convert from list of comma-separated strings into dictionary
|
|
|
|
Args:
|
|
info: dictionary
|
|
packageID (str): Package ID
|
|
keyboardID(str): Keyboard ID
|
|
|
|
Returns:
|
|
result (dictionary): Keyboard options
|
|
"""
|
|
result = {}
|
|
if 'packageID' in info and 'keyboardID' in info:
|
|
if child_schema := get_child_schema(info):
|
|
list_options = child_schema.get_strv('options')
|
|
result = dict(option.split("=") for option in list_options)
|
|
return result
|
|
|
|
|
|
def set_option(info, options):
|
|
"""
|
|
Store the Keyman keyboard options in GSettings as a list of strings
|
|
|
|
Args:
|
|
info: dictionary
|
|
packageID (str): package ID
|
|
keyboardID (str): keyboard ID
|
|
options: dictionary
|
|
key and values to store
|
|
"""
|
|
if 'packageID' in info and 'keyboardID' in info and options:
|
|
# Convert dictionary of options into a list of option strings
|
|
list_options = [f'{key}={value}' for key, value in options.items()]
|
|
if child_schema := get_child_schema(info):
|
|
child_schema.set_strv('options', list_options)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
info = {"packageID": "invalid", "keyboardID": "invalid"}
|
|
options = get_option(info)
|
|
assert(options == {})
|
|
|
|
info = {"packageID": "sil_cipher_music", "keyboardID": "sil_cipher_music"}
|
|
options = get_option(info)
|
|
|
|
options["set_nfc"] = "1"
|
|
set_option(info, options)
|