Add FFplay support to the application

Integrated FFplay functionality across the application. This includes support for setting up the FFplay path and invoking FFplay for media playback.
This commit is contained in:
2025-05-19 22:49:09 +05:00
parent a831d56d93
commit 306383449a
17 changed files with 244 additions and 24 deletions

View File

@@ -66,6 +66,7 @@ type QueueLayoutObject struct {
items map[int]QueueLayoutItem
localizerService LocalizerContract
queueStatisticsFormat *queueStatisticsFormat
ffplayService FFplayContract
}
type QueueLayoutItem struct {
@@ -73,11 +74,12 @@ type QueueLayoutItem struct {
ProgressBar *widget.ProgressBar
StatusMessage *canvas.Text
MessageError *canvas.Text
buttonPlay *widget.Button
status *StatusContract
}
func NewQueueLayoutObject(queue QueueListContract, localizerService LocalizerContract) *QueueLayoutObject {
func NewQueueLayoutObject(queue QueueListContract, localizerService LocalizerContract, ffplayService FFplayContract) *QueueLayoutObject {
title := widget.NewLabel(localizerService.GetMessage(&i18n.LocalizeConfig{MessageID: "queue"}))
title.TextStyle.Bold = true
@@ -98,6 +100,7 @@ func NewQueueLayoutObject(queue QueueListContract, localizerService LocalizerCon
items: items,
localizerService: localizerService,
queueStatisticsFormat: queueStatisticsFormat,
ffplayService: ffplayService,
}
queue.AddListener(queueLayoutObject)
@@ -121,11 +124,18 @@ func (o QueueLayoutObject) Add(id int, queue *Queue) {
statusMessage := canvas.NewText(o.getStatusTitle(queue.Status), theme.Color(theme.ColorNamePrimary))
messageError := canvas.NewText("", theme.Color(theme.ColorNameError))
buttonPlay := widget.NewButtonWithIcon("", theme.Icon(theme.IconNameMediaPlay), func() {
})
buttonPlay.Hide()
content := container.NewVBox(
container.NewHScroll(widget.NewLabel(queue.Setting.VideoFileInput.Name)),
progressBar,
container.NewHScroll(statusMessage),
container.NewHScroll(container.NewHBox(
buttonPlay,
statusMessage,
)),
container.NewHScroll(messageError),
canvas.NewLine(theme.Color(theme.ColorNameFocus)),
container.NewPadded(),
@@ -141,6 +151,7 @@ func (o QueueLayoutObject) Add(id int, queue *Queue) {
ProgressBar: progressBar,
StatusMessage: statusMessage,
MessageError: messageError,
buttonPlay: buttonPlay,
status: &queue.Status,
}
o.container.Add(content)
@@ -169,6 +180,20 @@ func (o QueueLayoutObject) ChangeQueueStatus(queueId int, queue *Queue) {
item.MessageError.Refresh()
})
}
if queue.Status == StatusType(Completed) {
item.buttonPlay.Show()
item.buttonPlay.OnTapped = func() {
item.buttonPlay.Disable()
go func() {
_ = o.ffplayService.Run(FFplaySetting{
PathToFile: queue.Setting.VideoFileOut.Path,
})
fyne.Do(func() {
item.buttonPlay.Enable()
})
}()
}
}
if o.queueStatisticsFormat.isChecked(queue.Status) == false && item.CanvasObject.Visible() == true {
item.CanvasObject.Hide()
} else if item.CanvasObject.Visible() == false {