Улучшенная работа погоды + ускорение работы + фикс неработоспособности после пары часов

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
2026-02-02 21:06:14 +03:00
parent 2d40bc0f9b
commit 845ef7c531
7 changed files with 661 additions and 72 deletions

View File

@@ -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}")