migrate to eventbus, add support to macos

This commit is contained in:
aynakeya
2025-10-02 21:57:22 +08:00
parent a81eb4a131
commit 918e2e81b3
49 changed files with 251 additions and 236 deletions

View File

@@ -1,7 +1,6 @@
package component
import (
"AynaLivePlayer/gui/xfyne"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/widget"
)
@@ -15,7 +14,6 @@ type Entry struct {
func NewEntry() *Entry {
e := &Entry{}
e.ExtendBaseWidget(e)
xfyne.EntryDisableUndoRedo(&e.Entry)
return e
}

View File

@@ -38,12 +38,12 @@ func (b *bascicConfig) CreatePanel() fyne.CanvasObject {
mode = model.PlaylistModeRandom
}
logger.Infof("Set player playlist mode to %d", mode)
_ = global.EventBus.Publish(events.PlaylistModeChangeCmd(model.PlaylistIDPlayer),
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistModeChangeCmd(model.PlaylistIDPlayer),
events.PlaylistModeChangeCmdEvent{
Mode: mode,
})
})
global.EventBus.Subscribe("", events.PlaylistModeChangeUpdate(model.PlaylistIDPlayer),
global.EventBus.Subscribe(eventChannel, events.PlaylistModeChangeUpdate(model.PlaylistIDPlayer),
"gui.config.basic.random_playlist.player",
gutil.ThreadSafeHandler(func(event *eventbus.Event) {
data := event.Data.(events.PlaylistModeChangeUpdateEvent)
@@ -56,13 +56,13 @@ func (b *bascicConfig) CreatePanel() fyne.CanvasObject {
if b {
mode = model.PlaylistModeRandom
}
_ = global.EventBus.Publish(events.PlaylistModeChangeCmd(model.PlaylistIDSystem),
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistModeChangeCmd(model.PlaylistIDSystem),
events.PlaylistModeChangeCmdEvent{
Mode: mode,
})
})
global.EventBus.Subscribe("", events.PlaylistModeChangeUpdate(model.PlaylistIDSystem),
global.EventBus.Subscribe(eventChannel, events.PlaylistModeChangeUpdate(model.PlaylistIDSystem),
"gui.config.basic.random_playlist.system",
gutil.ThreadSafeHandler(func(event *eventbus.Event) {
data := event.Data.(events.PlaylistModeChangeUpdateEvent)
@@ -80,11 +80,11 @@ func (b *bascicConfig) CreatePanel() fyne.CanvasObject {
if !ok {
return
}
_ = global.EventBus.Publish(events.PlayerSetAudioDeviceCmd, events.PlayerSetAudioDeviceCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerSetAudioDeviceCmd, events.PlayerSetAudioDeviceCmdEvent{
Device: name,
})
})
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.PlayerAudioDeviceUpdate,
"gui.config.basic.audio_device.update",
gutil.ThreadSafeHandler(func(event *eventbus.Event) {
@@ -123,7 +123,7 @@ func (b *bascicConfig) CreatePanel() fyne.CanvasObject {
config.General.AutoCheckUpdate),
)
checkUpdateBtn := widget.NewButton(i18n.T("gui.config.basic.check_update"), func() {
_ = global.EventBus.Publish(events.CheckUpdateCmd, events.CheckUpdateCmdEvent{})
_ = global.EventBus.PublishToChannel(eventChannel, events.CheckUpdateCmd, events.CheckUpdateCmdEvent{})
})
useSysPlaylistBtn := container.NewHBox(
widget.NewLabel(i18n.T("gui.config.basic.use_system_playlist")),

5
gui/consts.go Normal file
View File

@@ -0,0 +1,5 @@
package gui
const (
eventChannel = "gui"
)

View File

@@ -72,7 +72,7 @@ func Initialize() {
// setupPlayerWindow()
// register error
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.ErrorUpdate, "gui.show_error", gutil.ThreadSafeHandler(func(e *eventbus.Event) {
err := e.Data.(events.ErrorUpdateEvent).Error
logger.Warnf("gui received error event: %v, %v", err, err == nil)

View File

@@ -1,6 +1,6 @@
//go:build darwin || windows || linux
package xfyne
package gutil
import (
"fyne.io/fyne/v2"

View File

@@ -1,7 +1,10 @@
//go:build darwin
// +build darwin
package xfyne
package gutil
import (
"fyne.io/fyne/v2"
)
func GetWindowHandle(window fyne.Window) uintptr {
glfwWindow := getGlfwWindow(window)

View File

@@ -1,7 +1,6 @@
//go:build linux
// +build linux
package xfyne
package gutil
import (
"fyne.io/fyne/v2"

View File

@@ -1,7 +1,6 @@
//go:build !darwin && !windows && !linux
// +build !darwin,!windows,!linux
package xfyne
package gutil
import "fyne.io/fyne/v2"

View File

@@ -1,7 +1,6 @@
//go:build windows
// +build windows
package xfyne
package gutil
import (
"fyne.io/fyne/v2"

View File

@@ -7,7 +7,7 @@ import (
)
func registerHandlers() {
global.EventBus.Subscribe("", events.GUISetPlayerWindowOpenCmd, "gui.player.videoplayer.handleopen", func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.GUISetPlayerWindowOpenCmd, "gui.player.videoplayer.handleopen", func(event *eventbus.Event) {
data := event.Data.(events.GUISetPlayerWindowOpenCmdEvent)
if data.SetOpen {
playerWindow.Close()

View File

@@ -50,12 +50,12 @@ func createHistoryList() fyne.CanvasObject {
btns := object.(*fyne.Container).Objects[2].(*fyne.Container).Objects
m.User = model.SystemUser
btns[0].(*widget.Button).OnTapped = func() {
_ = global.EventBus.Publish(events.PlayerPlayCmd, events.PlayerPlayCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerPlayCmd, events.PlayerPlayCmdEvent{
Media: m,
})
}
btns[1].(*widget.Button).OnTapped = func() {
_ = global.EventBus.Publish(events.PlaylistInsertCmd(model.PlaylistIDPlayer), events.PlaylistInsertCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistInsertCmd(model.PlaylistIDPlayer), events.PlaylistInsertCmdEvent{
Media: m,
Position: -1,
})
@@ -75,7 +75,7 @@ func createHistoryList() fyne.CanvasObject {
}
func registerHistoryHandler() {
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.PlaylistDetailUpdate(model.PlaylistIDHistory),
"gui.history.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
History.mux.Lock()

View File

@@ -5,7 +5,6 @@ import (
"AynaLivePlayer/core/model"
"AynaLivePlayer/global"
"AynaLivePlayer/gui/gutil"
"AynaLivePlayer/gui/xfyne"
"AynaLivePlayer/pkg/eventbus"
"AynaLivePlayer/pkg/i18n"
"fyne.io/fyne/v2"
@@ -59,8 +58,8 @@ func createRoomSelector() fyne.CanvasObject {
descriptionLabel.SetText("")
}
})
idEntry := xfyne.EntryDisableUndoRedo(widget.NewEntry())
nameEntry := xfyne.EntryDisableUndoRedo(widget.NewEntry())
idEntry := widget.NewEntry()
nameEntry := widget.NewEntry()
dia := dialog.NewCustomConfirm(
i18n.T("gui.room.add.title"),
i18n.T("gui.room.add.confirm"),
@@ -80,7 +79,7 @@ func createRoomSelector() fyne.CanvasObject {
func(b bool) {
if b && len(clientNameEntry.Selected) > 0 && len(idEntry.Text) > 0 {
logger.Infof("Add room %s %s", clientNameEntry.Selected, idEntry.Text)
_ = global.EventBus.Publish(
_ = global.EventBus.PublishToChannel(eventChannel,
events.LiveRoomAddCmd,
events.LiveRoomAddCmdEvent{
Title: nameEntry.Text,
@@ -98,7 +97,7 @@ func createRoomSelector() fyne.CanvasObject {
if len(RoomTab.rooms) == 0 {
return
}
_ = global.EventBus.Publish(
_ = global.EventBus.PublishToChannel(eventChannel,
events.LiveRoomRemoveCmd,
events.LiveRoomRemoveCmdEvent{
Identifier: RoomTab.rooms[RoomTab.Index].LiveRoom.Identifier(),
@@ -133,14 +132,14 @@ func createRoomSelector() fyne.CanvasObject {
}
func registerRoomHandlers() {
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.LiveRoomProviderUpdate,
"gui.liveroom.provider_update",
gutil.ThreadSafeHandler(func(event *eventbus.Event) {
RoomTab.providers = event.Data.(events.LiveRoomProviderUpdateEvent).Providers
RoomTab.Rooms.Refresh()
}))
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.LiveRoomRoomsUpdate,
"gui.liveroom.rooms_update",
gutil.ThreadSafeHandler(func(event *eventbus.Event) {
@@ -152,7 +151,7 @@ func registerRoomHandlers() {
RoomTab.Rooms.Refresh()
RoomTab.lock.Unlock()
}))
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.LiveRoomStatusUpdate,
"gui.liveroom.room_status_update",
gutil.ThreadSafeHandler(func(event *eventbus.Event) {
@@ -194,7 +193,7 @@ func createRoomController() fyne.CanvasObject {
}
RoomTab.ConnectBtn.Disable()
logger.Infof("Connect to room %s", RoomTab.rooms[RoomTab.Index].LiveRoom.Identifier())
_ = global.EventBus.Publish(
_ = global.EventBus.PublishToChannel(eventChannel,
events.LiveRoomOperationCmd,
events.LiveRoomOperationCmdEvent{
Identifier: RoomTab.rooms[RoomTab.Index].LiveRoom.Identifier(),
@@ -207,14 +206,14 @@ func createRoomController() fyne.CanvasObject {
}
RoomTab.DisConnectBtn.Disable()
logger.Infof("Disconnect from room %s", RoomTab.rooms[RoomTab.Index].LiveRoom.Identifier())
_ = global.EventBus.Publish(
_ = global.EventBus.PublishToChannel(eventChannel,
events.LiveRoomOperationCmd,
events.LiveRoomOperationCmdEvent{
Identifier: RoomTab.rooms[RoomTab.Index].LiveRoom.Identifier(),
SetConnect: false,
})
})
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.LiveRoomOperationFinish,
"gui.liveroom.operation_finish",
gutil.ThreadSafeHandler(func(event *eventbus.Event) {
@@ -229,7 +228,7 @@ func createRoomController() fyne.CanvasObject {
return
}
logger.Infof("Change room %s autoconnect to %v", RoomTab.rooms[RoomTab.Index].LiveRoom.Identifier(), b)
_ = global.EventBus.Publish(
_ = global.EventBus.PublishToChannel(eventChannel,
events.LiveRoomConfigChangeCmd,
events.LiveRoomConfigChangeCmdEvent{
Identifier: RoomTab.rooms[RoomTab.Index].LiveRoom.Identifier(),

View File

@@ -45,16 +45,16 @@ var PlayController = &PlayControllerContainer{}
func registerPlayControllerHandler() {
PlayController.ButtonPrev.OnTapped = func() {
_ = global.EventBus.Publish(events.PlayerSeekCmd, events.PlayerSeekCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerSeekCmd, events.PlayerSeekCmdEvent{
Position: 0,
Absolute: true,
})
}
PlayController.ButtonSwitch.OnTapped = func() {
_ = global.EventBus.Publish(events.PlayerToggleCmd, events.PlayerToggleCmdEvent{})
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerToggleCmd, events.PlayerToggleCmdEvent{})
}
PlayController.ButtonNext.OnTapped = func() {
_ = global.EventBus.Publish(events.PlayerPlayNextCmd, events.PlayerPlayNextCmdEvent{})
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerPlayNextCmd, events.PlayerPlayNextCmdEvent{})
}
PlayController.ButtonLrc.OnTapped = func() {
@@ -68,7 +68,7 @@ func registerPlayControllerHandler() {
showPlayerWindow()
}
global.EventBus.Subscribe("", events.PlayerPropertyPauseUpdate, "gui.player.controller.paused", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlayerPropertyPauseUpdate, "gui.player.controller.paused", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
if event.Data.(events.PlayerPropertyPauseUpdateEvent).Paused {
PlayController.ButtonSwitch.Icon = theme.MediaPlayIcon()
} else {
@@ -77,7 +77,7 @@ func registerPlayControllerHandler() {
PlayController.ButtonSwitch.Refresh()
}))
global.EventBus.Subscribe("", events.PlayerPropertyPercentPosUpdate, "gui.player.controller.percent_pos", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlayerPropertyPercentPosUpdate, "gui.player.controller.percent_pos", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
if PlayController.Progress.Dragging {
return
}
@@ -85,7 +85,7 @@ func registerPlayControllerHandler() {
PlayController.Progress.Refresh()
}))
global.EventBus.Subscribe("", events.PlayerPropertyStateUpdate, "gui.player.controller.idle_active", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlayerPropertyStateUpdate, "gui.player.controller.idle_active", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
state := event.Data.(events.PlayerPropertyStateUpdateEvent).State
if state == model.PlayerStateIdle || state == model.PlayerStateLoading {
PlayController.Progress.Value = 0
@@ -101,33 +101,33 @@ func registerPlayControllerHandler() {
PlayController.Progress.Max = 0
PlayController.Progress.OnDragEnd = func(f float64) {
_ = global.EventBus.Publish(events.PlayerSeekCmd, events.PlayerSeekCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerSeekCmd, events.PlayerSeekCmdEvent{
Position: f / 10,
Absolute: false,
})
}
global.EventBus.Subscribe("", events.PlayerPropertyTimePosUpdate, "gui.player.controller.time_pos", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlayerPropertyTimePosUpdate, "gui.player.controller.time_pos", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
PlayController.CurrentTime.SetText(util.FormatTime(int(event.Data.(events.PlayerPropertyTimePosUpdateEvent).TimePos)))
}))
global.EventBus.Subscribe("", events.PlayerPropertyDurationUpdate, "gui.player.controller.duration", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlayerPropertyDurationUpdate, "gui.player.controller.duration", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
PlayController.TotalTime.SetText(util.FormatTime(int(event.Data.(events.PlayerPropertyDurationUpdateEvent).Duration)))
}))
global.EventBus.Subscribe("", events.PlayerPropertyVolumeUpdate, "gui.player.controller.volume", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlayerPropertyVolumeUpdate, "gui.player.controller.volume", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
PlayController.Volume.Value = event.Data.(events.PlayerPropertyVolumeUpdateEvent).Volume
PlayController.Volume.Refresh()
}))
PlayController.Volume.OnChanged = func(f float64) {
_ = global.EventBus.Publish(events.PlayerVolumeChangeCmd, events.PlayerVolumeChangeCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerVolumeChangeCmd, events.PlayerVolumeChangeCmdEvent{
Volume: f,
})
}
// todo: double check cover loading for new thread model
global.EventBus.Subscribe("", events.PlayerPlayingUpdate, "gui.player.updateinfo", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlayerPlayingUpdate, "gui.player.updateinfo", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
if event.Data.(events.PlayerPlayingUpdateEvent).Removed {
PlayController.Progress.Value = 0
PlayController.Progress.Max = 0
@@ -227,7 +227,7 @@ func createPlayControllerV2() fyne.CanvasObject {
PlayController.Progress)
PlayController.Title = widget.NewLabel("Title")
PlayController.Title.Wrapping = fyne.TextTruncate
PlayController.Title.Truncation = fyne.TextTruncateClip
PlayController.Artist = widget.NewLabel("Artist")
PlayController.Username = widget.NewLabel("Username")

View File

@@ -42,7 +42,7 @@ func createLyricWindow() fyne.Window {
w.CenterOnScreen()
// register handlers
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.PlayerLyricPosUpdate, "player.lyric.current_lyric", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
e := event.Data.(events.PlayerLyricPosUpdateEvent)
logger.Debug("lyric update", e)
@@ -69,16 +69,16 @@ func createLyricWindow() fyne.Window {
fullLrc.Refresh()
}))
global.EventBus.Subscribe("", events.PlayerLyricReload, "player.lyric.current_lyric", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
e := event.Data.(events.PlayerLyricReloadEvent)
global.EventBus.Subscribe(eventChannel, events.UpdateCurrentLyric, "player.lyric.current_lyric", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
e := event.Data.(events.UpdateCurrentLyricData)
fullLrc.Objects = createLyricObj(&e.Lyrics)
lrcWindow.Refresh()
}))
_ = global.EventBus.Publish(events.PlayerLyricRequestCmd, events.PlayerLyricRequestCmdEvent{})
_ = global.EventBus.PublishToChannel(eventChannel, events.CmdGetCurrentLyric, events.CmdGetCurrentLyricData{})
w.SetOnClosed(func() {
global.EventBus.Unsubscribe(events.PlayerLyricReload, "player.lyric.current_lyric")
global.EventBus.Unsubscribe(events.UpdateCurrentLyric, "player.lyric.current_lyric")
PlayController.LrcWindowOpen = false
})
return w

View File

@@ -28,12 +28,12 @@ func (b *playlistOperationButton) Tapped(e *fyne.PointEvent) {
func newPlaylistOperationButton() *playlistOperationButton {
b := &playlistOperationButton{Index: 0}
deleteItem := fyne.NewMenuItem(i18n.T("gui.player.playlist.op.delete"), func() {
_ = global.EventBus.Publish(events.PlaylistDeleteCmd(model.PlaylistIDPlayer), events.PlaylistDeleteCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistDeleteCmd(model.PlaylistIDPlayer), events.PlaylistDeleteCmdEvent{
Index: b.Index,
})
})
topItem := fyne.NewMenuItem(i18n.T("gui.player.playlist.op.top"), func() {
_ = global.EventBus.Publish(events.PlaylistMoveCmd(model.PlaylistIDPlayer), events.PlaylistMoveCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistMoveCmd(model.PlaylistIDPlayer), events.PlaylistMoveCmdEvent{
From: b.Index,
To: 0,
})
@@ -75,7 +75,7 @@ func createPlaylist() fyne.CanvasObject {
object.(*fyne.Container).Objects[1].(*widget.Label).SetText(fmt.Sprintf("%d", id))
object.(*fyne.Container).Objects[2].(*playlistOperationButton).Index = id
})
global.EventBus.Subscribe("", events.PlaylistDetailUpdate(model.PlaylistIDPlayer), "gui.player.playlist.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.PlaylistDetailUpdate(model.PlaylistIDPlayer), "gui.player.playlist.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
UserPlaylist.mux.Lock()
UserPlaylist.Medias = event.Data.(events.PlaylistDetailUpdateEvent).Medias
UserPlaylist.List.Refresh()

View File

@@ -3,7 +3,7 @@ package gui
import (
"AynaLivePlayer/core/events"
"AynaLivePlayer/global"
"AynaLivePlayer/gui/xfyne"
"AynaLivePlayer/gui/gutil"
"fyne.io/fyne/v2"
)
@@ -22,10 +22,10 @@ func showPlayerWindow() {
}
playerWindow.Show()
if playerWindowHandle == 0 {
playerWindowHandle = xfyne.GetWindowHandle(playerWindow)
playerWindowHandle = gutil.GetWindowHandle(playerWindow)
logger.Infof("video output window handle: %d", playerWindowHandle)
if playerWindowHandle != 0 {
_ = global.EventBus.Publish(events.PlayerVideoPlayerSetWindowHandleCmd,
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerVideoPlayerSetWindowHandleCmd,
events.PlayerVideoPlayerSetWindowHandleCmdEvent{Handle: playerWindowHandle})
}
}

View File

@@ -5,7 +5,7 @@ import (
"AynaLivePlayer/core/model"
"AynaLivePlayer/global"
"AynaLivePlayer/gui/gutil"
"AynaLivePlayer/gui/xfyne"
"AynaLivePlayer/pkg/eventbus"
"AynaLivePlayer/pkg/i18n"
"fmt"
@@ -46,7 +46,7 @@ func createPlaylists() fyne.CanvasObject {
})
PlaylistManager.AddBtn = widget.NewButton(i18n.T("gui.playlist.button.add"), func() {
providerEntry := widget.NewSelect(PlaylistManager.providers, nil)
idEntry := xfyne.EntryDisableUndoRedo(widget.NewEntry())
idEntry := widget.NewEntry()
dia := dialog.NewCustomConfirm(
i18n.T("gui.playlist.add.title"),
i18n.T("gui.playlist.add.confirm"),
@@ -64,7 +64,7 @@ func createPlaylists() fyne.CanvasObject {
func(b bool) {
if b && len(providerEntry.Selected) > 0 && len(idEntry.Text) > 0 {
logger.Infof("add playlists %s %s", providerEntry.Selected, idEntry.Text)
_ = global.EventBus.Publish(
_ = global.EventBus.PublishToChannel(eventChannel,
events.PlaylistManagerAddPlaylistCmd,
events.PlaylistManagerAddPlaylistCmdEvent{
Provider: providerEntry.Selected,
@@ -82,7 +82,7 @@ func createPlaylists() fyne.CanvasObject {
return
}
logger.Infof("remove playlists %s", PlaylistManager.currentPlaylists[PlaylistManager.Index].Meta.ID())
_ = global.EventBus.Publish(
_ = global.EventBus.PublishToChannel(eventChannel,
events.PlaylistManagerRemovePlaylistCmd,
events.PlaylistManagerRemovePlaylistCmdEvent{
PlaylistID: PlaylistManager.currentPlaylists[PlaylistManager.Index].Meta.ID(),
@@ -93,18 +93,18 @@ func createPlaylists() fyne.CanvasObject {
return
}
PlaylistManager.Index = id
_ = global.EventBus.Publish(events.PlaylistManagerGetCurrentCmd, events.PlaylistManagerGetCurrentCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistManagerGetCurrentCmd, events.PlaylistManagerGetCurrentCmdEvent{
PlaylistID: PlaylistManager.currentPlaylists[id].Meta.ID(),
})
}
global.EventBus.Subscribe("", events.MediaProviderUpdate,
global.EventBus.Subscribe(eventChannel, events.MediaProviderUpdate,
"gui.playlists.provider.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
providers := event.Data.(events.MediaProviderUpdateEvent)
s := make([]string, len(providers.Providers))
copy(s, providers.Providers)
PlaylistManager.providers = s
}))
global.EventBus.Subscribe("", events.PlaylistManagerInfoUpdate,
global.EventBus.Subscribe(eventChannel, events.PlaylistManagerInfoUpdate,
"gui.playlists.info.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
data := event.Data.(events.PlaylistManagerInfoUpdateEvent)
prevLen := len(PlaylistManager.currentPlaylists)
@@ -115,7 +115,7 @@ func createPlaylists() fyne.CanvasObject {
PlaylistManager.Playlists.Select(0)
}
}))
global.EventBus.Subscribe("", events.PlaylistManagerSystemUpdate,
global.EventBus.Subscribe(eventChannel, events.PlaylistManagerSystemUpdate,
"gui.playlists.system.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
data := event.Data.(events.PlaylistManagerSystemUpdateEvent)
PlaylistManager.CurrentSystemPlaylist.SetText(i18n.T("gui.playlist.current") + data.Info.DisplayName())
@@ -137,7 +137,7 @@ func createPlaylistMedias() fyne.CanvasObject {
if PlaylistManager.Index >= len(PlaylistManager.currentPlaylists) {
return
}
_ = global.EventBus.Publish(events.PlaylistManagerRefreshCurrentCmd, events.PlaylistManagerRefreshCurrentCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistManagerRefreshCurrentCmd, events.PlaylistManagerRefreshCurrentCmdEvent{
PlaylistID: PlaylistManager.currentPlaylists[PlaylistManager.Index].Meta.ID(),
})
})
@@ -148,7 +148,7 @@ func createPlaylistMedias() fyne.CanvasObject {
return
}
logger.Infof("set playlist %s as system", PlaylistManager.currentPlaylists[PlaylistManager.Index].Meta.ID())
_ = global.EventBus.Publish(events.PlaylistManagerSetSystemCmd, events.PlaylistManagerSetSystemCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistManagerSetSystemCmd, events.PlaylistManagerSetSystemCmdEvent{
PlaylistID: PlaylistManager.currentPlaylists[PlaylistManager.Index].Meta.ID(),
})
})
@@ -179,18 +179,18 @@ func createPlaylistMedias() fyne.CanvasObject {
btns := object.(*fyne.Container).Objects[2].(*fyne.Container).Objects
m.User = model.SystemUser
btns[0].(*widget.Button).OnTapped = func() {
_ = global.EventBus.Publish(events.PlayerPlayCmd, events.PlayerPlayCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerPlayCmd, events.PlayerPlayCmdEvent{
Media: m,
})
}
btns[1].(*widget.Button).OnTapped = func() {
_ = global.EventBus.Publish(events.PlaylistInsertCmd(model.PlaylistIDPlayer), events.PlaylistInsertCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistInsertCmd(model.PlaylistIDPlayer), events.PlaylistInsertCmdEvent{
Media: m,
Position: -1,
})
}
})
global.EventBus.Subscribe("", events.PlaylistManagerCurrentUpdate,
global.EventBus.Subscribe(eventChannel, events.PlaylistManagerCurrentUpdate,
"gui.playlists.current.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
logger.Infof("receive current playlist update, try to refresh playlist medias")
data := event.Data.(events.PlaylistManagerCurrentUpdateEvent)

View File

@@ -35,13 +35,13 @@ func createSearchBar() fyne.CanvasObject {
SearchResult.Items = make([]model.Media, 0)
SearchResult.List.Refresh()
SearchResult.mux.Unlock()
_ = global.EventBus.Publish(events.SearchCmd, events.SearchCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.SearchCmd, events.SearchCmdEvent{
Keyword: keyword,
Provider: pr,
})
})
global.EventBus.Subscribe("", events.MediaProviderUpdate,
global.EventBus.Subscribe(eventChannel, events.MediaProviderUpdate,
"gui.search.provider.update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
providers := event.Data.(events.MediaProviderUpdateEvent)
s := make([]string, len(providers.Providers))

View File

@@ -51,18 +51,18 @@ func createSearchList() fyne.CanvasObject {
object.(*fyne.Container).Objects[1].(*widget.Label).SetText(fmt.Sprintf("%d", id))
btns := object.(*fyne.Container).Objects[2].(*fyne.Container).Objects
btns[0].(*widget.Button).OnTapped = func() {
_ = global.EventBus.Publish(events.PlayerPlayCmd, events.PlayerPlayCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlayerPlayCmd, events.PlayerPlayCmdEvent{
Media: SearchResult.Items[id],
})
}
btns[1].(*widget.Button).OnTapped = func() {
_ = global.EventBus.Publish(events.PlaylistInsertCmd(model.PlaylistIDPlayer), events.PlaylistInsertCmdEvent{
_ = global.EventBus.PublishToChannel(eventChannel, events.PlaylistInsertCmd(model.PlaylistIDPlayer), events.PlaylistInsertCmdEvent{
Media: SearchResult.Items[id],
Position: -1,
})
}
})
global.EventBus.Subscribe("", events.SearchResultUpdate, "gui.search.update_result", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
global.EventBus.Subscribe(eventChannel, events.SearchResultUpdate, "gui.search.update_result", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
items := event.Data.(events.SearchResultUpdateEvent).Medias
SearchResult.Items = items
SearchResult.mux.Lock()

View File

@@ -11,7 +11,7 @@ import (
)
func checkUpdate() {
global.EventBus.Subscribe("",
global.EventBus.Subscribe(eventChannel,
events.CheckUpdateResultUpdate, "gui.updater.check_update", gutil.ThreadSafeHandler(func(event *eventbus.Event) {
data := event.Data.(events.CheckUpdateResultUpdateEvent)
msg := data.Info.Version.String() + "\n\n\n" + data.Info.Info

View File

@@ -1,14 +0,0 @@
package xfyne
import (
"fyne.io/fyne/v2/widget"
)
func EntryDisableUndoRedo(entry *widget.Entry) *widget.Entry {
// do nothing because the bug has been fixed in fyne@v2.5.1
return entry
//val := reflect.ValueOf(entry).Elem().FieldByName("shortcut").Addr().UnsafePointer()
//(*fyne.ShortcutHandler)(val).RemoveShortcut(&fyne.ShortcutRedo{})
//(*fyne.ShortcutHandler)(val).RemoveShortcut(&fyne.ShortcutUndo{})
//return entry
}

View File

@@ -1,11 +0,0 @@
package xfyne
import (
"fyne.io/fyne/v2/widget"
"testing"
)
func TestEntryDisableUndoRedo(t *testing.T) {
entry := widget.NewEntry()
EntryDisableUndoRedo(entry)
}