-
Amarok now playing with dcop
Posted on March 28th, 2009 No commentsНещо ме беше хванала пак тая муза дето ми се пишат разни странни кодове и по-точно човърках конфигурацията на conky – ~/.conkyrc и по едно време като гледах възможностите от разни други прейъри да взима информацията какво свири, но няма за амарок, реших да си го направя сам. Бях чувал от един познат (Пройнов) за скрипт на амарок, който обновява настроението в скайп, това може би ми беше първоначалната идея, но документацията на скайп за комуникация по dbus или друг подобен интерфейс е неекзистентна. Та реших, че конки ще казва какво дрънчи в амарок. Конфигурацията на конки изглежда ето така:
background no update_interval 1.0 double_buffer yes use_xft no xftfont Monospace:size=10 xftalpha 0.8 own_window yes own_window_transparent yes own_window_type override own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager #on_bottom yes minimum_size 300 42 draw_shades yes draw_outline yes draw_borders yes draw_graph_borders no stippled_borders 0 border_margin 3 border_width 0 default_color white default_shade_color black default_outline_color black alignment top_right #gap_x 362 gap_y 30 #gap_y 10 no_buffers yes TEXT ${alignc}${color #F09000}${nodename} [Ma26${kernel} ${machine} ${alignc}${time %R:%S %d.%m.%Y} ${color #707070}${hr} ${color #F09000}M${color #707070}:${color white} ${mem}${color #707070}/${color white}${memmax} ${color #F09000}S${color #707070}:${color white} ${swap}${color #707070}/${colorwhite}${swapmax} ${color #F09000}P${color #707070}:${color white} ${running_processes}${color #707070}/${color white}${processes} ${color #707070}${hr}${color white} ${color #F09000}CPU0${color #707070}:${color white} ${cpu cpu0}% ${freq 1}MHz ${cpubar cpu0} ${color #F09000}CPU1${color #707070}:${color white} ${cpu cpu1}% ${freq 2}MHz ${cpubar cpu1} ${color #F09000}BAT${color #707070}:${color white} ${battery_percent}% ${battery_bar} ${if_up wlan1} ${color #707070}${hr} ${alignc}${color F09000}Wireless${color #707070}:${color white} wlan1 ${color #F09000}ESSID${color #707070}:${color white} ${wireless_essid wlan1} ${color #F09000}Signal${color #707070}:${color white} ${wireless_link_bar wlan1} ${endif}${color #707070}${hr} ${color white}${scroll 50 ${execpi 1 /usr/bin/php ~/dev/amarok_now_playing.phpСкрипта който вади данните от амарока е написан на php (в оригинал повечето са на перл). Използват се тръби (pipe) и функцията popen() (която е г/д една и съща и в перл и в php), която връща handle към съответната тръба. Имам инсталиран пакета php5-cli за да мога да изпълнявам php скриптове. Ето го кода:
<?php error_reporting(E_ALL); $commands=array(); $commands['player']=array(); $commands['player'][]='artist'; $commands['player'][]='title'; //$commands['player'][]='rating'; //$commands['player'][]='trackPlayCounter'; $commands['player'][]='currentTime'; $commands['player'][]='totalTime'; $type='player'; $results=array(); foreach($commands['player'] as $cmd) { /* Add redirection so we can get stderr. */ $handle = popen('dcop amarok '.$type.' '.$cmd, 'r'); //echo "'$handle'; " . gettype($handle) . "\n"; $read = fread($handle, 2096); $results[]=trim($read); pclose($handle); } echo $results[0].' - '.$results[1].' '.$results[2].'/'.$results[3].' | '; ?>



