@@ -20,6 +20,7 @@ import (
2020 "github.com/dweymouth/supersonic/backend/player"
2121 "github.com/dweymouth/supersonic/backend/player/mpv"
2222 "github.com/dweymouth/supersonic/backend/util"
23+ "github.com/dweymouth/supersonic/backend/windows"
2324 "github.com/google/uuid"
2425
2526 "github.com/20after4/configdir"
@@ -49,7 +50,7 @@ type App struct {
4950 LocalPlayer * mpv.Player
5051 UpdateChecker UpdateChecker
5152 MPRISHandler * MPRISHandler
52- WinSMTC * SMTC
53+ WinSMTC * windows. SMTC
5354 ipcServer ipc.IPCServer
5455 LrcLibFetcher * LrcLibFetcher
5556
@@ -192,7 +193,10 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
192193 ipc .DestroyConn () // cleanup socket possibly orphaned by crashed process
193194 listener , err := ipc .Listen ()
194195 if err == nil {
195- a .ipcServer = ipc .NewServer (a .PlaybackManager , a .callOnReactivate ,
196+ a .ipcServer = ipc .NewServer (
197+ a .PlaybackManager ,
198+ a .ServerManager ,
199+ a .callOnReactivate ,
196200 func () { _ = a .callOnExit () })
197201 go a .ipcServer .Serve (listener )
198202 } else {
@@ -378,25 +382,25 @@ func (a *App) setupMPRIS(mprisAppName string) {
378382}
379383
380384func (a * App ) SetupWindowsSMTC (hwnd uintptr ) {
381- smtc , err := InitSMTCForWindow (hwnd )
385+ smtc , err := windows . InitSMTCForWindow (hwnd )
382386 if err != nil {
383387 log .Printf ("error initializing SMTC: %d" , err )
384388 return
385389 }
386390 a .WinSMTC = smtc
387391 smtc .UpdateMetadata (a .displayAppName , "" )
388392
389- smtc .OnButtonPressed (func (btn SMTCButton ) {
393+ smtc .OnButtonPressed (func (btn windows. SMTCButton ) {
390394 switch btn {
391- case SMTCButtonPlay :
395+ case windows . SMTCButtonPlay :
392396 a .PlaybackManager .Continue ()
393- case SMTCButtonPause :
397+ case windows . SMTCButtonPause :
394398 a .PlaybackManager .Pause ()
395- case SMTCButtonNext :
399+ case windows . SMTCButtonNext :
396400 a .PlaybackManager .SeekNext ()
397- case SMTCButtonPrevious :
401+ case windows . SMTCButtonPrevious :
398402 a .PlaybackManager .SeekBackOrPrevious ()
399- case SMTCButtonStop :
403+ case windows . SMTCButtonStop :
400404 a .PlaybackManager .Stop ()
401405 }
402406 })
@@ -425,18 +429,37 @@ func (a *App) SetupWindowsSMTC(hwnd uintptr) {
425429 })
426430 a .PlaybackManager .OnPlaying (func () {
427431 smtc .SetEnabled (true )
428- smtc .UpdatePlaybackState (SMTCPlaybackStatePlaying )
432+ smtc .UpdatePlaybackState (windows . SMTCPlaybackStatePlaying )
429433 })
430434 a .PlaybackManager .OnPaused (func () {
431435 smtc .SetEnabled (true )
432- smtc .UpdatePlaybackState (SMTCPlaybackStatePaused )
436+ smtc .UpdatePlaybackState (windows . SMTCPlaybackStatePaused )
433437 })
434438 a .PlaybackManager .OnStopped (func () {
435439 smtc .SetEnabled (false )
436- smtc .UpdatePlaybackState (SMTCPlaybackStateStopped )
440+ smtc .UpdatePlaybackState (windows . SMTCPlaybackStateStopped )
437441 })
438442}
439443
444+ func (a * App ) SetupWindowsTaskbarButtons (hwnd uintptr ) {
445+ windows .InitializeTaskbarButtons (hwnd , func (btn windows.TaskbarButton ) {
446+ switch btn {
447+ case windows .TaskbarButtonPrevious :
448+ a .PlaybackManager .SeekBackOrPrevious ()
449+ case windows .TaskbarButtonPlayPause :
450+ a .PlaybackManager .PlayPause ()
451+ case windows .TaskbarButtonNext :
452+ a .PlaybackManager .SeekNext ()
453+ }
454+ })
455+ a .PlaybackManager .OnPlaying (func () {
456+ windows .SetTaskbarButtonIsPlaying (true )
457+ })
458+ f := func () { windows .SetTaskbarButtonIsPlaying (false ) }
459+ a .PlaybackManager .OnPaused (f )
460+ a .PlaybackManager .OnStopped (f )
461+ }
462+
440463func (a * App ) LoginToDefaultServer () error {
441464 serverCfg := a .ServerManager .GetDefaultServer ()
442465 if serverCfg == nil {
@@ -548,6 +571,10 @@ func (a *App) checkFlagsAndSendIPCMsg(cli *ipc.Client) error {
548571 return cli .SeekBackOrPrevious ()
549572 case * FlagNext :
550573 return cli .SeekNext ()
574+ case * FlagStop :
575+ return cli .Stop ()
576+ case * FlagStopAfterCurrent :
577+ return cli .StopAfterCurrent ()
551578 case * FlagShow :
552579 return cli .Show ()
553580 case VolumeCLIArg >= 0 :
@@ -558,6 +585,30 @@ func (a *App) checkFlagsAndSendIPCMsg(cli *ipc.Client) error {
558585 return cli .SeekSeconds (SeekToCLIArg )
559586 case SeekByCLIArg != 0 :
560587 return cli .SeekBySeconds (SeekByCLIArg )
588+ case PlayAlbumCLIArg != "" :
589+ return cli .PlayAlbum (PlayAlbumCLIArg , FirstTrackCLIArg , * FlagShuffle )
590+ case PlayPlaylistCLIArg != "" :
591+ return cli .PlayPlaylist (PlayPlaylistCLIArg , FirstTrackCLIArg , * FlagShuffle )
592+ case PlayTrackCLIArg != "" :
593+ return cli .PlayTrack (PlayTrackCLIArg )
594+ case SearchAlbumCLIArg != "" :
595+ data , err := cli .SearchAlbum (SearchAlbumCLIArg )
596+ if err == nil {
597+ fmt .Println (data )
598+ }
599+ return err
600+ case SearchPlaylistCLIArg != "" :
601+ data , err := cli .SearchPlaylist (SearchPlaylistCLIArg )
602+ if err == nil {
603+ fmt .Println (data )
604+ }
605+ return err
606+ case SearchTrackCLIArg != "" :
607+ data , err := cli .SearchTrack (SearchTrackCLIArg )
608+ if err == nil {
609+ fmt .Println (data )
610+ }
611+ return err
561612 default :
562613 return nil
563614 }
0 commit comments