%
% anyremote configuration file for MPD management (Server-mode)
%
% prerequisites: mpc client, mpd must be started already with playlist prepared
%

% STATUS nonstable
% TODO who must start mpd and prepare playlist?
% XTEST no
% SOUND app
% ENV no
% ALL_IN_ONE 
% TODO make stable

GuiAppName=MPD
GuiAppBinary=mpc
GuiAppRun=echo 'P=`ps -ef|grep mpd|grep -v grep|grep -v anyremote|grep -v nedit|grep -v mpd.cfg`; if [ "x$P" == "x" ]; then echo NOK; else echo OK; fi' | bash -f -s
GuiAppType=Application
GuiAppProtocols=Server
GuiAppDesc=Music Player Daemon (MPD) allows remote access for playing music.

[Protocol]=Server

(Init)=\
	Include($(CfgDir)/Utils/aliases-server.cfg);\
	Macro(CheckMPC);\
	Macro(CheckMPD);\
	Macro(CheckPL);\
	Make(var,home,echo $HOME);\
	Make(var,player_name,by_value,MPD);\
	Include($(CfgDir)/Utils/aliases-server-player.cfg);
	
(Connect)=Make(mode,mpd);

Cancel=Exit

CheckMPC=Exec(P=`which mpc 2> /dev/null|grep mpc|grep -v no|wc -l|tr -d " "`; if [ "x$P" = "x0" ]; then $(CfgDir)/Utils/message.sh "ERROR: mpc client is not installed"; fi);
CheckMPD=Exec(P=`ps -ef|grep mpd|grep -v grep|grep -v mpd.cfg|wc -l|tr -d " "`; if [ "x$P" = "x0" ]; then $(CfgDir)/Utils/message.sh "ERROR: mpd is not run"; fi);
CheckPL =Exec(P=`mpc playlist 2> /dev/null|wc -l|tr -d " "`; if [ "x$P" = "x0" ]; then $(CfgDir)/Utils/message.sh "ERROR: mpd playlist is empty"; fi);

#MPD_SETTILE=ExecAndSet(title,sleep 1;mpc|head  -1|sed "s/.*\///;s/(/-/g;s/)/-/g");
MPD_SETTILE=ExecAndSet(title,sleep 1;echo 'mpc|head -n1|while read name;do echo $name;done'|bash -f -s)

[Mode]=mpd : default_player

(EnterMode)=\
	Macro(SETUP_DEFAULT_POWER_MANAGEMENT);\
	Macro(RUN_IF_NEED);\
	Macro(SETUP_DEFAULT_PLAYER);\
	Make(var,mpd_volume,by_value,-1);\
	Macro(APP_MENU);

(ExitMode) =Timer(MPD_SETTILE,cancel)

APP_MENU=\
	Set(menu,replace,Playlist,Toggle Shuffle,Toggle Repeat,Power Off,Suspend);\
	Macro(ALLIN1MENU);

Back=Set(text,close);\
	Macro(APP_MENU);
	
Toggle Shuffle=Exec(mpc shuffle);
Toggle Repeat =Exec(mpc repeat);
Playlist      =Make(mode,mpd_playlist);

% Override
1=Exec(mpc volume -5)
2=Make(var,mpd_volume,if [ "x$(mpd_volume)" = "x-1" ]; then mpc volume|tr -s " "|cut -f 2 -d " "|sed "s/%//";mpc volume 0 > /dev/null; else mpc volume $(mpd_volume) > /dev/null;echo "-1"; fi)
3=Exec(mpc volume +5)

PLAY=Exec(mpc play);Macro(MPD_SETTILE);Timer(MPD_SETTILE,5,0)
RWD=Exec(mpc seek -00:00:05)
FF=Exec(mpc seek +00:00:05)
PREV=Exec(mpc prev);Macro(MPD_SETTILE)
NEXT=Exec(mpc next);Macro(MPD_SETTILE)
STOP=Exec(mpc stop);Timer(MPD_SETTILE,cancel)
PAUSE=Exec(mpc toggle);

RUN_IF_NEED=Make(none);
RUN_OR_QUIT=Make(none);

QUIT=Exec(mpd --kill);

[ModeEnd]

[Mode]=mpd_playlist

(EnterMode)=\
	Timer(MPD_SETTILE,cancel);\
	Set(list,font,medium);\
	ExecAndSet(list,replace,Playlist,mpc playlist|tr -d ','|tr -s ' '|cut -f 2,3,4,5,6,7 -d " "|sed "s/%20/ /g;s/$/,/;s/,/\r/g;s/(/-/g;s/)/-/g;s/$/,/");\
	Set(menu,replace,Choose);
	
(ExitMode)=\
	Set(list,close);\
	Macro(MPD_SETTILE);\
	Timer(MPD_SETTILE,5,0);

Back($$)  =Make(mode,mpd);
Choose($$)=Exec(mpc play $(Index));
Push($$)=Macro(Choose($$));

[ModeEnd]
[End]
