%
% anyremote configuration file for Kaffeine management. (Server-mode Command Fusion iViewer)
% prerequisites: Iviewer client installed on Ipod touch/Iphone 2.x and Iviewer free winamp GUI
%

% STATUS stable
% XTEST no
% SOUND mixer
% ENV no
% TODO qdbus org.mpris.kaffeine /TrackList GetMetadata X

GuiAppName=Kaffeine
GuiAppBinary=kaffeine
GuiAppVersion= V=`kaffeine -v|grep KDE|tr -d " "|cut -f 2 -d ":"|cut -f 1 -d "."`; if [ "x$V" = "x4" ]; then echo OK; else echo NOK; fi
GuiAppRun= A=`pgrep kaffeine`; if [ "x$A" = "x" ]; then echo NOK; else echo OK; fi
GuiAppIcon=kaffeine.png
GuiAppType=Application
GuiAppProtocols=iViewer
GuiAppDesc=KDE media player

[Protocol]=iViewer

(Init)=\
	Include($(CfgDir)/Utils/aliases-iviewer.cfg);\
	Make(var,IViewer,by_value,true);\
	Exec(V=`kaffeine -v|grep KDE|tr -d " "|cut -f 2 -d ":"|cut -f 1 -d "."`; if [ "x$V" = "x3" ]; then $(CfgDir)/Utils/message.sh "ERROR: this configuration file is for KDE4"; fi);

%a1 = volume
%a2 = needs a constent update to. its the seek bar

%s1 = artist
%s2 = track
%s5 = current playback in min:sec
%s6 = song length min:sec.

% play
d1(1)=Exec(qdbus org.mpris.kaffeine /Player Play);

% stop
d30(1)=Exec(qdbus org.mpris.kaffeine /Player Stop);

% pause
d31(1)=Exec(qdbus org.mpris.kaffeine /Player Pause);

% next
d5(1)=Exec(qdbus org.mpris.kaffeine /Player Next);\
	Macro(TITLE);

% prev
d6(1)=Exec(qdbus org.mpris.kaffeine /Player Prev);\
        Macro(TITLE);

% toggle repeat
d12(1)=Exec(echo "Toggle repeat")

% toggle shuffle
d9(1)=Exec(echo "Toggle shuffle")

% volume contol
a1($$)=Make(var,change_vol,echo "$(Index)*100/65535"|bc);\
        Exec(qdbus org.mpris.kaffeine /Player VolumeSet $(change_vol));\
	Macro(VOLUME);

% seek >> and <<
a2($$)=Macro(PLAYBACK);

% Feedback
PLAYBACK=\
	Make(var,song_pos,qdbus org.mpris.kaffeine /Player PositionGet);\
	Make(var,pos_mm,echo "$(song_pos)/60000"|bc);\
	Make(var,pos_ss,echo "($(song_pos)-$(pos_mm)*60000)/1000"|bc);\
	Send(string,s5=$(pos_mm):$(pos_ss));Send(bytes,3);\
	Make(var,song_len,echo 1);\ 
	Make(var,playback_pos,echo "65535*$(song_pos)/$(song_len)"|bc);\
        Send(string,a2=$(playback_pos));Send(bytes,3);

% get volume: 0 - 65535
VOLUME=\
	Make(var,vol_value,echo "65535*"`qdbus org.kde.kaffeine /Player VolumeGet`"/100"|bc);\
        Send(string,a1=$(vol_value));\
	Send(bytes,3);

%
% It seems qdbus org.mpris.kaffeine /TrackList GetMetadata X does not works
%
% Artist name
ARTIST=\
	ExecAndSend(string,echo "");

% Track
TRACK=\
	ExecAndSend(string,echo "");

% Song length mm:ss
SONG_LEN=\
	Make(var,song_len,echo 1);\
	Make(var,song_mm,echo "$(song_len)/60000"|bc);\
	Make(var,song_ss,echo "($(song_len)-$(song_mm)*60000)/1000"|bc);\
	Send(string,$(song_mm):$(song_ss));

%
% The following is a common part. In general, it should not be changed.
%

TITLE=\
	Send(string,s1=);Macro(ARTIST);Send(bytes,3);\
	Send(string,s2=);Macro(TRACK);Send(bytes,3);\
	Send(string,s6=);Macro(SONG_LEN);Send(bytes,3);

d5(0)=Macro(TITLE);
d6(0)=Macro(TITLE);

% Init
i(1)=Macro(TITLE);

% Password p(PASSWORD)"
p($$)=Send(string,p=ok);Send(bytes,3);

% Heartbeat
DISC=\
	Macro(STOP_TIMERS);\
	Make(disconnect);

h(0)=Timer(DISC,reset);

% no needs to send "h=1\03" replay directly because this will be done 
% automatically - that controlled by $(IViewer) variable
% If $(IViewer) variable is not set it needs to use the following command:
% h(0)=Send(bytes,104,61,49,3);Timer(DISC,reset);

STOP_TIMERS=\
	Timer(PLAYBACK,cancel);\
	Timer(VOLUME,cancel);\
	Timer(TITLE,cancel);
	
% Event timers
(Connect)=\
	Exec(A=`qdbus|grep kaffeine`; if [ "x$A" = "x" ]; then kaffeine;fi);\
	Timer(DISC,10,1);\
	Timer(PLAYBACK,3,0);\
	Timer(VOLUME,10,0);\
	Timer(TITLE,5,0);

(Disconnect)=\
	Macro(STOP_TIMERS);

[End]

