mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2026-03-19 02:19:45 +08:00
add skip on fail
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
|
||||
const (
|
||||
ProgramName = "卡西米尔唱片机"
|
||||
Version uint32 = 0x010003
|
||||
Version uint32 = 0x010004
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user