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,6 +5,7 @@ import (
|
||||
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application/convertor"
|
||||
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application/setting"
|
||||
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/ffmpeg"
|
||||
"time"
|
||||
)
|
||||
|
||||
type AppContract interface {
|
||||
@@ -16,6 +17,8 @@ type AppContract interface {
|
||||
GetItemsToConvert() convertor.ItemsToConvertContract
|
||||
GetQueueService() convertor.QueueListContract
|
||||
Run()
|
||||
AfterClosing()
|
||||
RunConvertor()
|
||||
}
|
||||
|
||||
type application struct {
|
||||
@@ -79,3 +82,56 @@ func (a *application) GetConvertorService() convertor.ConvertorContract {
|
||||
func (a *application) Run() {
|
||||
a.fyneApp.Run()
|
||||
}
|
||||
|
||||
func (a *application) RunConvertor() {
|
||||
go func() {
|
||||
for {
|
||||
time.Sleep(time.Millisecond * 3000)
|
||||
queueId, queue := a.queueService.Next()
|
||||
if queue == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
queue.Status = convertor.StatusType(convertor.InProgress)
|
||||
a.queueService.EventChangeQueue(queueId, queue)
|
||||
|
||||
if a.progressBarService.GetContainer().Hidden {
|
||||
a.progressBarService.GetContainer().Show()
|
||||
}
|
||||
|
||||
totalDuration := float64(0)
|
||||
ffprobe, err := a.ffmpegService.GetFFprobe()
|
||||
if err == nil {
|
||||
totalDuration, err = ffprobe.GetTotalDuration(&queue.Setting.FileInput)
|
||||
if err != nil {
|
||||
totalDuration = float64(0)
|
||||
}
|
||||
}
|
||||
|
||||
progress := a.progressBarService.GetProgressbar(
|
||||
totalDuration,
|
||||
queue.Setting.FileInput.Path,
|
||||
)
|
||||
|
||||
err = a.convertorService.RunConvert(*queue.Setting, progress)
|
||||
if err != nil {
|
||||
queue.Status = convertor.StatusType(convertor.Error)
|
||||
queue.Error = err
|
||||
a.queueService.EventChangeQueue(queueId, queue)
|
||||
a.progressBarService.ProcessEndedWithError(err.Error())
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
queue.Status = convertor.StatusType(convertor.Completed)
|
||||
a.queueService.EventChangeQueue(queueId, queue)
|
||||
a.progressBarService.ProcessEndedWithSuccess(&queue.Setting.FileOut)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func (a *application) AfterClosing() {
|
||||
for _, cmd := range a.convertorService.GetRunningProcesses() {
|
||||
_ = cmd.Process.Kill()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user