Улучшенная работа погоды + ускорение работы + фикс неработоспособности после пары часов
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@@ -4,10 +4,11 @@ Regulates system volume on a scale from 1 to 10.
|
||||
"""
|
||||
|
||||
# Модуль управления громкостью системы.
|
||||
# Работает через системную утилиту amixer (ALSA) в Linux.
|
||||
# Работает через различные системные утилиты в зависимости от ОС.
|
||||
|
||||
import subprocess
|
||||
import re
|
||||
import platform
|
||||
|
||||
# Карта для перевода слов в цифры ("пять" -> 5)
|
||||
NUMBER_MAP = {
|
||||
@@ -25,6 +26,71 @@ NUMBER_MAP = {
|
||||
}
|
||||
|
||||
|
||||
def _get_volume_command(level: int):
|
||||
"""
|
||||
Возвращает команду для изменения громкости в зависимости от ОС.
|
||||
|
||||
Args:
|
||||
level: Уровень громкости (1-10)
|
||||
|
||||
Returns:
|
||||
Список команд для выполнения или None, если команда не поддерживается
|
||||
"""
|
||||
percentage = level * 10
|
||||
|
||||
system = platform.system().lower()
|
||||
|
||||
if system == "linux":
|
||||
# Проверяем доступность различных утилит
|
||||
if _command_exists("pactl"):
|
||||
# Используем PulseAudio (более современный подход)
|
||||
return ["pactl", "set-sink-volume", "@DEFAULT_SINK@", f"{percentage}%"]
|
||||
elif _command_exists("amixer"):
|
||||
# Используем ALSA
|
||||
return ["amixer", "-q", "sset", "Master", f"{percentage}%"]
|
||||
else:
|
||||
# Проверяем alsamixer
|
||||
if _command_exists("alsamixer"):
|
||||
return ["amixer", "-q", "sset", "Master", f"{percentage}%"]
|
||||
elif system == "darwin": # macOS
|
||||
return ["osascript", "-e", f"set volume output volume {percentage}"]
|
||||
elif system == "windows":
|
||||
# Для Windows используем PowerShell команду
|
||||
# Это требует дополнительных библиотек, поэтому пока просто покажем сообщение
|
||||
print("⚠️ Настройка громкости на Windows требует дополнительных библиотек")
|
||||
return None
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def _command_exists(command):
|
||||
"""
|
||||
Проверяет, существует ли команда в системе.
|
||||
|
||||
Args:
|
||||
command: Название команды
|
||||
|
||||
Returns:
|
||||
True, если команда существует
|
||||
"""
|
||||
try:
|
||||
subprocess.run(["which", command],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
check=False)
|
||||
return True
|
||||
except:
|
||||
try:
|
||||
# Альтернативная проверка для Windows
|
||||
subprocess.run(["where", command],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
check=False)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
|
||||
def set_volume(level: int) -> bool:
|
||||
"""
|
||||
Устанавливает системную громкость (шкала 1-10).
|
||||
@@ -51,16 +117,22 @@ def set_volume(level: int) -> bool:
|
||||
|
||||
percentage = level * 10
|
||||
|
||||
# Получаем команду для текущей ОС
|
||||
cmd = _get_volume_command(level)
|
||||
|
||||
if cmd is None:
|
||||
print(f"❌ Не найдена подходящая утилита для изменения громкости на вашей системе")
|
||||
print(f"💡 Установите PulseAudio (pactl) или ALSA (amixer) для управления громкостью")
|
||||
return False
|
||||
|
||||
try:
|
||||
# Вызов команды amixer для изменения громкости Master канала
|
||||
# -q: quiet (без вывода)
|
||||
# sset: simple set
|
||||
cmd = ["amixer", "-q", "sset", "Master", f"{percentage}%"]
|
||||
subprocess.run(cmd, check=True)
|
||||
# Выполняем команду
|
||||
result = subprocess.run(cmd, check=True, capture_output=True, text=True)
|
||||
print(f"🔊 Громкость установлена на {level} ({percentage}%)")
|
||||
return True
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"❌ Ошибка при установке громкости: {e}")
|
||||
print(f"💡 Убедитесь, что у вас установлены и настроены аудио утилиты (pactl, amixer)")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ Неизвестная ошибка громкости: {e}")
|
||||
|
||||
Reference in New Issue
Block a user