Перейти к содержимому

Уведомления о завершении загрузки

Скачивание Blu-ray, конвертация видео в ffmpeg, выгрузка дампа — вещи на часы. Не сидеть же возле терминала. Привязываем notifly-send к завершению.

Самое простое:

Окно терминала
yt-dlp 'https://...' && \
notifly-send "✅ Скачивание готово" "$(basename "$PWD")" 5 || \
notifly-send "❌ Скачивание провалилось" "См. терминал" 8

Или единым обёрткой notifly-run — она ловит успех и ошибку с длительностью и хвостом лога.

Окно терминала
notifly-run ffmpeg -i input.mkv -c:v libx264 -crf 20 -c:a aac out.mp4

В сообщение придут длительность и последние строки лога ffmpeg (там обычно frame=… и итоговый bitrate).

Окно терминала
yt-dlp --download-archive done.txt -i \
'https://www.youtube.com/playlist?list=...' \
&& notifly-send "✅ Плейлист готов" "$(wc -l < done.txt) файлов" 4

В ~/.config/yt-dlp/config:

--exec "echo {} | xargs -I{} ~/bin/notifly-send '🎬 Скачано' '{}' 4"

Каждый скачанный файл — отдельный push.

wget не имеет встроенного хука, но мы запускаем его в обёртке:

Окно терминала
notifly-run wget -c 'https://example.com/huge.iso'
Окно терминала
notifly-run rsync -aHAX --info=progress2 /home/me/photos /mnt/nas/photos
Окно терминала
for f in *.mkv; do
out="${f%.mkv}.mp4"
if ffmpeg -nostdin -i "$f" -c:v libx264 -crf 22 -c:a aac "$out" </dev/null; then
notifly-send "$out" "Готов." 3
else
notifly-send "$f" "Ошибка ffmpeg." 7
fi
done
notifly-send "🏁 Партия готова" "Сконвертировано: $(ls *.mp4 | wc -l)" 5

Аналог &&/|| и notifly-run для Windows. Предполагается настроенная функция Send-Notifly.

C:\scripts\Notifly-Run.ps1
param([Parameter(Mandatory, ValueFromRemainingArguments)] [string[]]$Cmd)
. $env:USERPROFILE\Documents\WindowsPowerShell\Notifly.ps1
$start = Get-Date
$log = New-TemporaryFile
$label = ($Cmd -join ' ').Substring(0, [Math]::Min(60, ($Cmd -join ' ').Length))
& $Cmd[0] $Cmd[1..($Cmd.Count-1)] *> $log
$rc = $LASTEXITCODE
$dur = ((Get-Date) - $start)
$tail = (Get-Content $log -Tail 12) -join "`n"
if ($rc -eq 0) {
Send-Notifly -Title "$label" `
-Message "Длительность: $($dur.ToString('hh\:mm\:ss'))`n`n$tail" `
-Priority 4
} else {
Send-Notifly -Title "$label (rc=$rc)" `
-Message "Длительность: $($dur.ToString('hh\:mm\:ss'))`n`n$tail" `
-Priority 8
}
Remove-Item $log -Force
exit $rc

Использование:

Окно терминала
.\Notifly-Run.ps1 yt-dlp 'https://www.youtube.com/playlist?list=...'
.\Notifly-Run.ps1 ffmpeg -i input.mkv -c:v libx264 -crf 20 -c:a aac out.mp4
.\Notifly-Run.ps1 robocopy C:\Photos D:\Backup\Photos /MIR

Коротко через алиас в профиле PowerShell:

Окно терминала
Set-Alias nrun C:\scripts\Notifly-Run.ps1
nrun yt-dlp 'https://...'

Пакетная конвертация .mkv.mp4:

Окно терминала
Get-ChildItem *.mkv | ForEach-Object {
$out = $_.BaseName + ".mp4"
nrun ffmpeg -nostdin -i $_.Name -c:v libx264 -crf 22 -c:a aac $out
}
Send-Notifly -Title "🏁 Партия готова" `
-Message "MP4-файлов: $((Get-ChildItem *.mp4).Count)" -Priority 5
  • Свобода от вкладки терминала. Можно закрыть SSH/laptop и вернуться, когда придёт push.
  • Метрики в кармане. Длительность, размер файла, статус.
  • Цепочки задач. Один файл скачан → следующий пошёл, и push после каждого.
  • Слать в extras["client::display"] ссылку на превью (миниатюру видео или скриншот).
  • Использовать приоритеты — fail = 8, success = 3.