Introduce progress bar updates and queue processing logic

Implemented progress bar integration with `ProgressBarContract` for real-time conversion tracking and status updates. Added queue management functionality to process files sequentially with error and completion handling. Extended `ConvertorContract` and `FFmpegContract` to support tracking of running processes and conversion progress.
This commit is contained in:
2025-06-08 22:19:28 +05:00
parent 1b1cdd5c22
commit 2909ef7cea
4 changed files with 251 additions and 4 deletions

View File

@@ -5,25 +5,54 @@ import (
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application/convertor/encoder"
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/ffmpeg"
"io"
"os/exec"
"strings"
)
type ConvertorContract interface {
RunConvert(setting ffmpeg.ConvertSetting, progress ffmpeg.ProgressContract) error
GetSupportFormats() (encoder.ConvertorFormatsContract, error)
GetRunningProcesses() map[int]*exec.Cmd
}
type runningProcesses struct {
items map[int]*exec.Cmd
numberOfStarts int
}
type convertor struct {
ffmpegService ffmpeg.UtilitiesContract
ffmpegService ffmpeg.UtilitiesContract
runningProcesses *runningProcesses
}
func NewConvertor(
ffmpegService ffmpeg.UtilitiesContract,
) ConvertorContract {
return &convertor{
ffmpegService: ffmpegService,
ffmpegService: ffmpegService,
runningProcesses: &runningProcesses{items: map[int]*exec.Cmd{}, numberOfStarts: 0},
}
}
func (c *convertor) RunConvert(setting ffmpeg.ConvertSetting, progress ffmpeg.ProgressContract) error {
ffmpegService, err := c.ffmpegService.GetFFmpeg()
if err != nil {
return err
}
index := c.runningProcesses.numberOfStarts
beforeWait := func(cmd *exec.Cmd) {
c.runningProcesses.numberOfStarts++
c.runningProcesses.items[index] = cmd
}
afterWait := func(cmd *exec.Cmd) {
delete(c.runningProcesses.items, index)
}
return ffmpegService.RunConvert(setting, progress, beforeWait, afterWait)
}
func (c *convertor) GetSupportFormats() (encoder.ConvertorFormatsContract, error) {
var err error
@@ -52,3 +81,7 @@ func (c *convertor) GetSupportFormats() (encoder.ConvertorFormatsContract, error
return formats, err
}
func (c *convertor) GetRunningProcesses() map[int]*exec.Cmd {
return c.runningProcesses.items
}