add skip on fail

This commit is contained in:
aynakeya
2024-04-24 01:27:57 -07:00
parent ee775dee8d
commit 58d7ebd43d
7 changed files with 53 additions and 11 deletions

View File

@@ -16,6 +16,12 @@ type PlayerPlayCmdEvent struct {
Media model.Media
}
const PlayerPlayErrorUpdate = "update.player.play.error"
type PlayerPlayErrorUpdateEvent struct {
Error error
}
const PlayerSeekCmd = "cmd.player.op.seek"
type PlayerSeekCmdEvent struct {

View File

@@ -4,6 +4,8 @@ import (
"AynaLivePlayer/core/events"
"AynaLivePlayer/core/model"
"AynaLivePlayer/global"
"AynaLivePlayer/gui/component"
"AynaLivePlayer/pkg/config"
"AynaLivePlayer/pkg/event"
"AynaLivePlayer/pkg/i18n"
"fyne.io/fyne/v2"
@@ -105,13 +107,13 @@ func (b *bascicConfig) CreatePanel() fyne.CanvasObject {
outputDevice := container.NewBorder(nil, nil,
widget.NewLabel(i18n.T("gui.config.basic.audio_device")), nil,
deviceSel)
//skipWhenErr := container.NewHBox(
// widget.NewLabel(i18n.T("gui.config.basic.skip_when_error")),
// component.NewCheckOneWayBinding(
// i18n.T("gui.config.basic.skip_when_error.prompt"),
// &API.PlayControl().Config().AutoNextWhenFail,
// API.PlayControl().Config().AutoNextWhenFail),
//)
skipWhenErr := container.NewHBox(
widget.NewLabel(i18n.T("gui.config.basic.skip_when_error")),
component.NewCheckOneWayBinding(
i18n.T("gui.config.basic.skip_when_error.prompt"),
&config.General.PlayNextOnFail,
config.General.PlayNextOnFail),
)
//checkUpdateBox := container.NewHBox(
// widget.NewLabel(i18n.T("gui.config.basic.auto_check_update")),
// component.NewCheckOneWayBinding(
@@ -134,6 +136,6 @@ func (b *bascicConfig) CreatePanel() fyne.CanvasObject {
// }
//})
//b.panel = container.NewVBox(randomPlaylist, outputDevice, skipPlaylist, skipWhenErr, checkUpdateBox, checkUpdateBtn)
b.panel = container.NewVBox(randomPlaylist, outputDevice)
b.panel = container.NewVBox(randomPlaylist, skipWhenErr, outputDevice)
return b.panel
}

View File

@@ -5,6 +5,7 @@ import (
"AynaLivePlayer/core/model"
"AynaLivePlayer/global"
"AynaLivePlayer/internal/playlist"
"AynaLivePlayer/pkg/config"
"AynaLivePlayer/pkg/event"
)
@@ -36,7 +37,17 @@ func handlePlayNext() {
global.EventManager.RegisterA(
events.PlaylistInsertUpdate(model.PlaylistIDPlayer),
"internal.controller.playcontrol.playnext_when_insert",
"internal.controller.playcontrol.playnext_when_insert.player",
func(event *event.Event) {
if isIdle {
global.EventManager.CallA(events.PlayerPlayNextCmd,
events.PlayerPlayNextCmdEvent{})
}
})
global.EventManager.RegisterA(
events.PlaylistInsertUpdate(model.PlaylistIDSystem),
"internal.controller.playcontrol.playnext_when_insert.system",
func(event *event.Event) {
if isIdle {
global.EventManager.CallA(events.PlayerPlayNextCmd,
@@ -49,17 +60,27 @@ func handlePlayNext() {
"internal.controller.playcontrol.playnext",
func(event *event.Event) {
if playlist.PlayerPlaylist.Size() > 0 {
log.Infof("Try to play next media in player playlist")
global.EventManager.CallA(events.PlaylistNextCmd(model.PlaylistIDPlayer),
events.PlaylistNextCmdEvent{
Remove: true,
})
} else {
log.Infof("Try to play next media in system playlist")
global.EventManager.CallA(events.PlaylistNextCmd(model.PlaylistIDSystem),
events.PlaylistNextCmdEvent{
Remove: true,
Remove: false,
})
}
})
global.EventManager.RegisterA(
events.PlayerPlayErrorUpdate,
"internal.controller.playcontrol.playnext_on_error",
func(event *event.Event) {
if isIdle && config.General.PlayNextOnFail {
global.EventManager.CallA(events.PlayerPlayNextCmd, events.PlayerPlayNextCmdEvent{})
}
})
global.EventManager.RegisterA(events.PlaylistNextUpdate(model.PlaylistIDPlayer),

View File

@@ -160,6 +160,11 @@ func registerCmdHandler() {
mediaUrls, err := miaosic.GetMediaUrl(mediaInfo.Meta, miaosic.QualityAny)
if err != nil || len(mediaUrls) == 0 {
log.Warn("[MPV PlayControl] get media url failed", err)
global.EventManager.CallA(
events.PlayerPlayErrorUpdate,
events.PlayerPlayErrorUpdateEvent{
Error: err,
})
return
}
mediaUrl := mediaUrls[0]
@@ -191,6 +196,11 @@ func registerCmdHandler() {
log.Debugf("mpv command load file %s %s", mediaInfo.Title, mediaUrl.Url)
if err := libmpv.Command([]string{"loadfile", mediaUrl.Url}); err != nil {
log.Warn("[MPV PlayControl] mpv load media failed", mediaInfo)
global.EventManager.CallA(
events.PlayerPlayErrorUpdate,
events.PlayerPlayErrorUpdateEvent{
Error: err,
})
return
}
})

View File

@@ -37,6 +37,7 @@ func newPlaylist(id model.PlaylistID) *playlist {
pl.Delete(e.Index)
})
global.EventManager.RegisterA(events.PlaylistNextCmd(id), "internal.playlist.next", func(event *event.Event) {
log.Infof("Playlist %s recieve next", id)
pl.Next(event.Data.(events.PlaylistNextCmdEvent).Remove)
})
global.EventManager.RegisterA(events.PlaylistModeChangeCmd(id), "internal.playlist.mode", func(event *event.Event) {

View File

@@ -10,7 +10,7 @@ import (
const (
ProgramName = "卡西米尔唱片机"
Version uint32 = 0x010003
Version uint32 = 0x010004
)
const (

View File

@@ -7,6 +7,7 @@ type _GeneralConfig struct {
Language string
AutoCheckUpdate bool
ShowSystemTray bool
PlayNextOnFail bool
}
func (c *_GeneralConfig) Name() string {
@@ -19,4 +20,5 @@ var General = &_GeneralConfig{
AutoCheckUpdate: true,
Width: 960,
Height: 480,
PlayNextOnFail: false,
}