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:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user