%PDF- %PDF-
Direktori : /usr/lib/python3/dist-packages/orca/ |
Current File : //usr/lib/python3/dist-packages/orca/system_information_presenter.py |
# Orca # # Copyright 2005-2008 Sun Microsystems Inc. # Copyright 2016-2024 Igalia, S.L. # Copyright 2024 GNOME Foundation Inc. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., Franklin Street, Fifth Floor, # Boston MA 02110-1301 USA. """Module for presenting system information""" __id__ = "$Id$" __version__ = "$Revision$" __date__ = "$Date$" __copyright__ = "Copyright (c) 2005-2008 Sun Microsystems Inc." \ "Copyright (c) 2016-2024 Igalia, S.L." \ "Copyright (c) 2024 GNOME Foundation Inc." __license__ = "LGPL" try: import psutil except ModuleNotFoundError: psutil = None import time from . import cmdnames from . import debug from . import input_event from . import keybindings from . import messages from . import settings_manager class SystemInformationPresenter: """Provides commands to present system information.""" def __init__(self): self._handlers = self.get_handlers(True) self._bindings = keybindings.KeyBindings() def get_bindings(self, refresh=False, is_desktop=True): """Returns the system-information-presenter keybindings.""" if refresh: msg = "SYSTEM INFORMATION PRESENTER: Refreshing bindings." debug.printMessage(debug.LEVEL_INFO, msg, True) self._setup_bindings() elif self._bindings.isEmpty(): self._setup_bindings() return self._bindings def get_handlers(self, refresh=False): """Returns the system-information-presenter handlers.""" if refresh: msg = "SYSTEM INFORMATION PRESENTER: Refreshing handlers." debug.printMessage(debug.LEVEL_INFO, msg, True) self._setup_handlers() return self._handlers def _setup_handlers(self): """Sets up the system-information-presenter input event handlers.""" self._handlers = {} self._handlers["presentTimeHandler"] = \ input_event.InputEventHandler( self.present_time, cmdnames.PRESENT_CURRENT_TIME) self._handlers["presentDateHandler"] = \ input_event.InputEventHandler( self.present_date, cmdnames.PRESENT_CURRENT_DATE) self._handlers["present_battery_status"] = \ input_event.InputEventHandler( self.present_battery_status, cmdnames.PRESENT_BATTERY_STATUS) self._handlers["present_cpu_and_memory_usage"] = \ input_event.InputEventHandler( self.present_cpu_and_memory_usage, cmdnames.PRESENT_CPU_AND_MEMORY_USAGE) msg = "SYSTEM INFORMATION PRESENTER: Handlers set up." debug.printMessage(debug.LEVEL_INFO, msg, True) def _setup_bindings(self): """Sets up the system-information-presenter key bindings.""" self._bindings = keybindings.KeyBindings() self._bindings.add( keybindings.KeyBinding( "t", keybindings.defaultModifierMask, keybindings.ORCA_MODIFIER_MASK, self._handlers.get("presentTimeHandler"), 1)) self._bindings.add( keybindings.KeyBinding( "t", keybindings.defaultModifierMask, keybindings.ORCA_MODIFIER_MASK, self._handlers.get("presentDateHandler"), 2)) self._bindings.add( keybindings.KeyBinding( "", keybindings.defaultModifierMask, keybindings.ORCA_MODIFIER_MASK, self._handlers.get("present_battery_status"), 1)) self._bindings.add( keybindings.KeyBinding( "", keybindings.defaultModifierMask, keybindings.ORCA_MODIFIER_MASK, self._handlers.get("present_cpu_and_memory_usage"), 1)) msg = "SYSTEM INFORMATION PRESENTER: Bindings set up." debug.printMessage(debug.LEVEL_INFO, msg, True) def present_time(self, script, event=None): """Presents the current time.""" time_format = settings_manager.getManager().getSetting('presentTimeFormat') script.presentMessage(time.strftime(time_format, time.localtime())) return True def present_date(self, script, event=None): """Presents the current date.""" data_format = settings_manager.getManager().getSetting('presentDateFormat') script.presentMessage(time.strftime(data_format, time.localtime())) return True def present_battery_status(self, script, event=None): """Presents the battery status.""" if not (psutil and psutil.sensors_battery()): script.presentMessage(messages.BATTERY_STATUS_UNKNOWN) return True battery = psutil.sensors_battery() if battery.power_plugged: msg = f"{messages.BATTERY_LEVEL % battery.percent} {messages.BATTERY_PLUGGED_IN_TRUE}" else: msg = f"{messages.BATTERY_LEVEL % battery.percent} {messages.BATTERY_PLUGGED_IN_FALSE}" script.presentMessage(msg) return True def present_cpu_and_memory_usage(self, script, event=None): """Presents the cpu and memory usage.""" if psutil is None: script.presentMessage(messages.CPU_AND_MEMORY_USAGE_UNKNOWN) return True cpu_usage = round(psutil.cpu_percent()) memory = psutil.virtual_memory() memory_percent= round(memory.percent) if memory.total > 1024 ** 3: details = messages.memoryUsageGB(memory.used / (1024 ** 3), memory.total / (1024 ** 3)) else: details = messages.memoryUsageMB(memory.used / (1024 ** 2), memory.total / (1024 ** 2)) msg = f"{messages.CPU_AND_MEMORY_USAGE_LEVELS % (cpu_usage, memory_percent)}. {details}" script.presentMessage(msg) return True _presenter = SystemInformationPresenter() def getPresenter(): return _presenter