Уведомления о завершении загрузки
Скачивание Blu-ray, конвертация видео в ffmpeg, выгрузка дампа — вещи на
часы. Не сидеть же возле терминала. Привязываем notifly-send к завершению.
Универсальный bash-приём &&/||
Заголовок раздела «Универсальный bash-приём &&/||»Самое простое:
yt-dlp 'https://...' && \ notifly-send "✅ Скачивание готово" "$(basename "$PWD")" 5 || \ notifly-send "❌ Скачивание провалилось" "См. терминал" 8Или единым обёрткой notifly-run — она ловит
успех и ошибку с длительностью и хвостом лога.
Длинная конвертация ffmpeg
Заголовок раздела «Длинная конвертация ffmpeg»notifly-run ffmpeg -i input.mkv -c:v libx264 -crf 20 -c:a aac out.mp4В сообщение придут длительность и последние строки лога ffmpeg
(там обычно frame=… и итоговый bitrate).
yt-dlp: батч-скачивание плейлиста
Заголовок раздела «yt-dlp: батч-скачивание плейлиста»yt-dlp --download-archive done.txt -i \ 'https://www.youtube.com/playlist?list=...' \&& notifly-send "✅ Плейлист готов" "$(wc -l < done.txt) файлов" 4Постхук в самом yt-dlp
Заголовок раздела «Постхук в самом yt-dlp»В ~/.config/yt-dlp/config:
--exec "echo {} | xargs -I{} ~/bin/notifly-send '🎬 Скачано' '{}' 4"Каждый скачанный файл — отдельный push.
wget с прогрессом
Заголовок раздела «wget с прогрессом»wget не имеет встроенного хука, но мы запускаем его в обёртке:
notifly-run wget -c 'https://example.com/huge.iso'rsync огромных копирований
Заголовок раздела «rsync огромных копирований»notifly-run rsync -aHAX --info=progress2 /home/me/photos /mnt/nas/photosКонвертация всех .mkv в папке
Заголовок раздела «Конвертация всех .mkv в папке»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 fidonenotifly-send "🏁 Партия готова" "Сконвертировано: $(ls *.mp4 | wc -l)" 5Windows: PowerShell Notifly-Run
Заголовок раздела «Windows: PowerShell Notifly-Run»Аналог &&/|| и notifly-run для Windows. Предполагается настроенная
функция Send-Notifly.
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 -Forceexit $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.ps1nrun 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.