native functionality bridge
This commit is contained in:
+1
-59
@@ -1,70 +1,12 @@
|
||||
package backend
|
||||
|
||||
/**
|
||||
* This file handles implementation of MacOS native controls via the native 'MediaPlayer' framework
|
||||
**/
|
||||
|
||||
// #cgo CFLAGS: -x objective-c
|
||||
// #cgo LDFLAGS: -framework Cocoa -framework MediaPlayer
|
||||
// #include "mpmediabridge.h"
|
||||
import (
|
||||
"C"
|
||||
)
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unsafe"
|
||||
|
||||
"github.com/dweymouth/supersonic/backend/mediaprovider"
|
||||
"github.com/dweymouth/supersonic/player"
|
||||
)
|
||||
|
||||
// MPMediaHandler is the handler for MacOS media controls and system events.
|
||||
type MPMediaHandler struct {
|
||||
player *player.Player
|
||||
playbackManager *PlaybackManager
|
||||
ArtURLLookup func(trackID string) (string, error)
|
||||
}
|
||||
|
||||
func NewMPMediaHandler(player *player.Player, playbackManager *PlaybackManager) *MPMediaHandler {
|
||||
mp := &MPMediaHandler{
|
||||
player: player,
|
||||
playbackManager: playbackManager,
|
||||
}
|
||||
|
||||
mp.playbackManager.OnSongChange(func(track, _ *mediaprovider.Track) {
|
||||
if mp.ArtURLLookup != nil {
|
||||
mp.ArtURLLookup(track.CoverArtID)
|
||||
}
|
||||
|
||||
cTitle := C.CString(track.Name)
|
||||
defer C.free(unsafe.Pointer(cTitle))
|
||||
|
||||
artist := ""
|
||||
if len(track.ArtistNames) > 0 {
|
||||
artist = track.ArtistNames[0]
|
||||
}
|
||||
|
||||
cArtist := C.CString(artist)
|
||||
defer C.free(unsafe.Pointer(cArtist))
|
||||
|
||||
// TODO: pass in local URL for image (can be loaded via NSImage)
|
||||
C.setNowPlayingInfo(cTitle, cArtist)
|
||||
})
|
||||
|
||||
mp.player.OnStopped(func() {
|
||||
// TODO: media stopped playing
|
||||
fmt.Println("Stopped")
|
||||
})
|
||||
|
||||
mp.player.OnPlaying(func() {
|
||||
// TODO: media playing
|
||||
fmt.Println("Playing")
|
||||
})
|
||||
|
||||
mp.player.OnPaused(func() {
|
||||
// TODO: media paused
|
||||
fmt.Println("Paused")
|
||||
})
|
||||
|
||||
return mp
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user