anaconda/anaconda-40.22.3.13/pyanaconda/modules/localization/localization_interface.py
2024-11-14 21:39:56 -08:00

295 lines
11 KiB
Python

#
# DBus interface for the localization module.
#
# Copyright (C) 2018 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# the GNU General Public License v.2, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY expressed or implied, including the implied warranties of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details. You should have received a copy of the
# GNU General Public License along with this program; if not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
# source code or documentation are not subject to the GNU General Public
# License and may only be used or replicated with the express permission of
# Red Hat, Inc.
#
from pyanaconda.modules.common.structures.language import LanguageData, LocaleData
from pyanaconda.modules.common.constants.services import LOCALIZATION
from dasbus.server.property import emits_properties_changed
from dasbus.typing import * # pylint: disable=wildcard-import
from pyanaconda.modules.common.base import KickstartModuleInterface
from pyanaconda.modules.common.containers import TaskContainer
from dasbus.server.interface import dbus_interface, dbus_signal
@dbus_interface(LOCALIZATION.interface_name)
class LocalizationInterface(KickstartModuleInterface):
"""DBus interface for Localization module."""
def connect_signals(self):
super().connect_signals()
self.watch_property("Language", self.implementation.language_changed)
self.watch_property("LanguageSupport", self.implementation.language_support_changed)
self.watch_property("LanguageKickstarted", self.implementation.language_seen_changed)
self.watch_property("VirtualConsoleKeymap", self.implementation.vc_keymap_changed)
self.watch_property("XLayouts", self.implementation.x_layouts_changed)
self.watch_property("LayoutSwitchOptions", self.implementation.switch_options_changed)
self.watch_property("KeyboardKickstarted", self.implementation.keyboard_seen_changed)
self.implementation.compositor_selected_layout_changed.connect(
self.CompositorSelectedLayoutChanged
)
self.implementation.compositor_layouts_changed.connect(self.CompositorLayoutsChanged)
def GetLanguages(self) -> List[Str]:
"""Get languages with available translations.
For example: ["en", "cs"]
:return: a list of language ids
"""
return self.implementation.get_languages()
def GetLanguageData(self, language_id: Str) -> Structure:
"""Get data about the specified language.
:param: a language id (for example, "en")
:return: a language data
"""
language_data = self.implementation.get_language_data(language_id)
return LanguageData.to_structure(language_data)
def GetLocales(self, language_id: Str) -> List[Str]:
"""Get locales available for the specified language.
For example: ["de_DE.UTF-8", "de_AT.UTF-8", ... ]
:return: a list of locale ids
"""
return self.implementation.get_locales(language_id)
def GetCommonLocales(self) -> List[Str]:
"""Get a list of the most commonly used locales.
For example: ["ar_EG.UTF-8", "en_US.UTF-8", "en_GB.UTF-8", ...]
:return: a list of common locale IDs
"""
return self.implementation.get_common_locales()
def GetLocaleData(self, locale_id: Str) -> Structure:
"""Get data about the specified locale.
:param: a locale id (for example, "en_US.UTF-8")
:return: a locale data
"""
locale_data = self.implementation.get_locale_data(locale_id)
return LocaleData.to_structure(locale_data)
@property
def Language(self) -> Str:
"""The language the system will use."""
return self.implementation.language
@Language.setter
@emits_properties_changed
def Language(self, language: Str):
"""Set the language.
Sets the language to use during installation and the default language
to use on the installed system.
The value (language ID) can be the same as any recognized setting for
the ``$LANG`` environment variable, though not all languages are
supported during installation.
:param language: Language ID ($LANG).
"""
self.implementation.set_language(language)
@property
def LanguageSupport(self) -> List[Str]:
"""Supported languages on the system."""
return self.implementation.language_support
@LanguageSupport.setter
@emits_properties_changed
def LanguageSupport(self, language_support: List[Str]):
"""Set the languages for which the support should be installed.
Language support packages for specified languages will be installed.
:param language_support: IDs of languages ($LANG) to be supported on system.
"""
self.implementation.set_language_support(language_support)
@property
def LanguageKickstarted(self) -> Bool:
"""Was the language set in a kickstart?
:return: True if it was set in a kickstart, otherwise False
"""
return self.implementation.language_seen
@LanguageKickstarted.setter
@emits_properties_changed
def LanguageKickstarted(self, language_seen: Bool):
"""Set if language should be considered as coming from kickstart
:param bool language_seen: if language should be considered as coming from kickstart
"""
self.implementation.set_language_seen(language_seen)
def SetKeyboard(self, keyboard: Str):
"""Set the system keyboard type in generic way.
Can contain virtual console keyboard mapping or X layout specification.
This is deprecated way of specifying keyboard, use either
SetVirtualConsoleKeymap and/or SetXLayouts.
:param keyboard: system keyboard specification
"""
self.implementation.set_from_generic_keyboard_setting(keyboard)
@property
def VirtualConsoleKeymap(self) -> Str:
"""Virtual Console keyboard mapping."""
return self.implementation.vc_keymap
@VirtualConsoleKeymap.setter
@emits_properties_changed
def VirtualConsoleKeymap(self, vc_keymap: Str):
"""Set Virtual console keyboard mapping.
The mapping name corresponds to filenames in /usr/lib/kbd/keymaps
(localectl --list-keymaps).
:param vc_keymap: Virtual console keymap name.
"""
self.implementation.set_vc_keymap(vc_keymap)
@property
def XLayouts(self) -> List[Str]:
"""X Layouts that should be used on the system."""
return self.implementation.x_layouts
@XLayouts.setter
@emits_properties_changed
def XLayouts(self, x_layouts: List[Str]):
"""Set the X layouts for the system.
The layout is specified by values used by setxkbmap(1). Accepts either
layout format (eg "cz") or the layout(variant) format (eg "cz (qwerty)")
:param x_layouts: List of x layout specifications.
"""
self.implementation.set_x_layouts(x_layouts)
@property
def LayoutSwitchOptions(self) -> List[Str]:
"""List of options for layout switching"""
return self.implementation.switch_options
@LayoutSwitchOptions.setter
@emits_properties_changed
def LayoutSwitchOptions(self, switch_options: List[Str]):
"""Set the layout switchin options.
Accepts the same values as setxkbmap(1) for switching.
:param options: List of layout switching options.
"""
self.implementation.set_switch_options(switch_options)
@property
def KeyboardKickstarted(self) -> Bool:
"""Was keyboard command seen in kickstart?
:return: True if keyboard command was seen in kickstart, otherwise False
"""
return self.implementation.keyboard_seen
@KeyboardKickstarted.setter
@emits_properties_changed
def KeyboardKickstarted(self, keyboard_seen: Bool):
"""Set if keyboard should be considered as coming from kickstart
:param bool keyboard_seen: if keyboard should be considered as coming from kickstart
"""
self.implementation.set_keyboard_seen(keyboard_seen)
def PopulateMissingKeyboardConfigurationWithTask(self) -> ObjPath:
"""Pouplate missing keyboard configuration.
The configuration is populated by conversion and/or default values.
:return: DBus path of the task populating the configuration
"""
return TaskContainer.to_object_path(
self.implementation.populate_missing_keyboard_configuration_with_task()
)
def ApplyKeyboardWithTask(self) -> ObjPath:
"""Apply keyboard configuration to the current system.
:return: DBus path of the task applying the configuration
"""
return TaskContainer.to_object_path(
self.implementation.apply_keyboard_with_task()
)
def GetCompositorSelectedLayout(self) -> Str:
"""Get the activated keyboard layout.
:return: Current keyboard layout (e.g. "cz (qwerty)")
:rtype: str
"""
return self.implementation.get_compositor_selected_layout()
def SetCompositorSelectedLayout(self, layout_variant: Str) -> Bool:
"""Set the activated keyboard layout.
:param layout_variant: The layout to set, with format "layout (variant)"
(e.g. "cz (qwerty)")
:type layout_variant: str
:return: If the keyboard layout was activated
:rtype: bool
"""
return self.implementation.set_compositor_selected_layout(layout_variant)
def SelectNextCompositorLayout(self):
"""Set the next available layout as active."""
return self.implementation.select_next_compositor_layout()
@dbus_signal
def CompositorSelectedLayoutChanged(self, layout: Str):
"""Signal emitted when the selected keyboard layout changes."""
pass
def GetCompositorLayouts(self) -> List[Str]:
"""Get all available keyboard layouts.
:return: A list of keyboard layouts (e.g. ["cz (qwerty)", cn (mon_todo_galik)])
:rtype: list of strings
"""
return self.implementation.get_compositor_layouts()
def SetCompositorLayouts(self, layout_variants: List[Str], options: List[Str]):
"""Set the available keyboard layouts.
:param layout_variants: A list of keyboard layouts (e.g. ["cz (qwerty)",
cn (mon_todo_galik)])
:type layout_variants: list of strings
:param options: A list of switching options
:type options: list of strings
"""
self.implementation.set_compositor_layouts(layout_variants, options)
@dbus_signal
def CompositorLayoutsChanged(self, layouts: List[Str]):
"""Signal emitted when available layouts change."""
pass