Програмиране, линукс, хардуер и може би Аз :)
RSS icon Email icon Home icon
  • Amarok now playing with dcop

    Posted on March 28th, 2009 DataMatrix 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].' | ';
    ?>