Skip to content

Commit

Permalink
fix playing track not being nil after receiving track end event
Browse files Browse the repository at this point in the history
  • Loading branch information
topi314 committed Oct 8, 2022
1 parent b7a7916 commit 5ad39c2
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 37 deletions.
38 changes: 1 addition & 37 deletions lavalink/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -233,43 +233,7 @@ func (n *nodeImpl) onEvent(event OpEvent) {

switch e := event.(type) {
case TrackEvent:
track, err := n.lavalink.DecodeTrack(e.Track())
if err != nil {
n.lavalink.Logger().Errorf("error while decoding track: %s", err)
return
}
if playingTrack := player.PlayingTrack(); playingTrack != nil {
track.SetUserData(playingTrack.UserData())
}
switch ee := e.(type) {
case TrackStartEvent:
player.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackStart(player, track)
}
})

case TrackEndEvent:
player.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackEnd(player, track, ee.Reason)
}
})

case TrackExceptionEvent:
player.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackException(player, track, ee.Exception)
}
})

case TrackStuckEvent:
player.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackStuck(player, track, ee.ThresholdMs)
}
})
}
player.OnEvent(e)

case WebsocketClosedEvent:
player.EmitEvent(func(l any) {
Expand Down
45 changes: 45 additions & 0 deletions lavalink/player.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ type Player interface {
EmitEvent(caller func(l any))
AddListener(listener any)
RemoveListener(listener any)
OnEvent(event TrackEvent)
}

type PlayOptions struct {
Expand Down Expand Up @@ -401,6 +402,50 @@ func (p *DefaultPlayer) RemoveListener(listener any) {
}
}

func (p *DefaultPlayer) OnEvent(event TrackEvent) {
track, err := p.node.Lavalink().DecodeTrack(event.Track())
if err != nil {
p.node.Lavalink().Logger().Errorf("error while decoding track: %s", err)
return
}
if playingTrack := p.track; playingTrack != nil {
track.SetUserData(playingTrack.UserData())
}

switch e := event.(type) {
case TrackStartEvent:
p.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackStart(p, track)
}
})

case TrackEndEvent:
p.track = nil
p.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackEnd(p, track, e.Reason)
}
})

case TrackExceptionEvent:
p.track = nil
p.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackException(p, track, e.Exception)
}
})

case TrackStuckEvent:
p.track = nil
p.EmitEvent(func(l any) {
if listener := l.(PlayerEventListener); listener != nil {
listener.OnTrackStuck(p, track, e.ThresholdMs)
}
})
}
}

func (p *DefaultPlayer) commitFilters(filters Filters) error {
if p.node == nil {
return nil
Expand Down

0 comments on commit 5ad39c2

Please sign in to comment.