Скрипт для выключения Mac по завершению фильма в VLC

Как работает скрипт

Скрипт использует несколько важных механизмов:

  1. AppleScript для связи с VLC: macOS позволяет использовать AppleScript для взаимодействия с приложениями. Через эти команды скрипт может узнать, играет ли сейчас фильм и сколько времени осталось до его окончания.
  2. Проверка состояния воспроизведения: Скрипт постоянно (каждую секунду) проверяет, продолжает ли VLC воспроизведение. Как только воспроизведение останавливается, запускается процедура выключения.
  3. Отложенное выключение: После завершения фильма скрипт не выключает компьютер немедленно, а устанавливает таймер на 5 минут. Это даёт вам возможность отменить выключение, если вы решите посмотреть ещё что-то.
  4. Информирование пользователя: Скрипт показывает системное уведомление о предстоящем выключении и выводит в терминал информацию о том, как отменить выключение.

Как использовать скрипт

  1. Сохраните код в файл, например vlc_shutdown.sh
  2. Сделайте файл исполняемым: chmod +x vlc_shutdown.sh
  3. Запустите VLC и начните воспроизведение фильма
  4. Запустите скрипт: ./vlc_shutdown.sh

Какие проблемы решает этот подход

Этот скрипт имеет несколько преимуществ перед простым таймером выключения:

  • Адаптивность: Скрипт автоматически определяет, сколько времени осталось до конца фильма, вместо того чтобы полагаться на фиксированное время.
  • Интеллектуальное поведение: Если вы остановите фильм или закроете VLC, скрипт все равно сработает и выключит компьютер.
  • Безопасность: Задержка в 5 минут перед выключением даёт вам время отменить выключение, если вы передумали.
#!/bin/bash

# Скрипт для выключения Mac по завершению воспроизведения в VLC
# Принцип работы: скрипт периодически проверяет, активно ли воспроизведение в VLC
# Когда воспроизведение останавливается, компьютер выключается после небольшой задержки

# Функция для проверки, запущен ли VLC
is_vlc_running() {
    pgrep -x VLC >/dev/null
    return $?
}

# Функция для проверки, воспроизводится ли что-то в VLC
is_vlc_playing() {
    # Используем AppleScript для проверки статуса воспроизведения
    playing=$(osascript -e 'tell application "VLC" to get playing')
    if [ "$playing" = "true" ]; then
        return 0  # Воспроизведение активно
    else
        return 1  # Воспроизведение не активно
    fi
}

# Функция для получения оставшегося времени фильма
get_remaining_time() {
    # Получаем оставшееся время в секундах
    remaining=$(osascript -e 'tell application "VLC" to get ((duration - time) as integer)')
    echo $remaining
}

# Проверяем, запущен ли VLC
if ! is_vlc_running; then
    echo "VLC не запущен. Запустите VLC и начните воспроизведение фильма, затем выполните скрипт снова."
    exit 1
fi

# Проверяем, воспроизводится ли что-то
if ! is_vlc_playing; then
    echo "В VLC ничего не воспроизводится. Начните воспроизведение фильма, затем выполните скрипт снова."
    exit 1
fi

# Получаем оставшееся время фильма и название файла
remaining_seconds=$(get_remaining_time)
current_file=$(osascript -e 'tell application "VLC" to get name of current item')

# Выводим информацию
echo "Обнаружен воспроизводимый файл: $current_file"
echo "Оставшееся время: $(($remaining_seconds / 60)) минут и $(($remaining_seconds % 60)) секунд"
echo "Компьютер будет выключен после завершения воспроизведения."

# Добавляем небольшую задержку перед выключением (5 минут)
shutdown_delay=5

echo "После завершения воспроизведения компьютер выключится через $shutdown_delay минут."
echo "Для отмены этого скрипта нажмите Ctrl+C."

# Цикл ожидания завершения воспроизведения
while true; do
    if ! is_vlc_running; then
        echo "VLC был закрыт. Начинаем процедуру выключения..."
        break
    fi
    
    if ! is_vlc_playing; then
        echo "Воспроизведение завершено. Начинаем процедуру выключения..."
        break
    fi
    
    # Обновляем оставшееся время каждые 30 секунд
    if (( $(date +%s) % 30 == 0 )); then
        remaining_seconds=$(get_remaining_time)
        echo "Оставшееся время: $(($remaining_seconds / 60)) минут и $(($remaining_seconds % 60)) секунд"
    fi
    
    # Пауза в 1 секунду между проверками
    sleep 1
done

# Показываем уведомление о предстоящем выключении
osascript -e "display notification \"Компьютер будет выключен через $shutdown_delay минут\" with title \"Автоматическое выключение\""

# Запускаем таймер выключения
sudo shutdown -h +$shutdown_delay

echo "Компьютер будет выключен через $shutdown_delay минут."
echo "Чтобы отменить выключение, выполните команду: sudo shutdown -c"

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *