lomereiter 13.06.2011 20:34

Codingconky & clementine

Пересел я вчера с mpd+ario на Clementine и столкнулся с необходимостью переписывать конфиг коньков. Нагуглить удалось только костыльные решения в духе "qdbus org.mpris.clementine /Player GetMetadata | awk '/artist/{print substr($0,9)}'". Но мне это показалось каким-то убогим, и я сел ковыряться с DBus-ом на Vala.


В конечном счёте я пришёл к следующему решению: на вход программе подаётся строка, элементы вида #{parameter} заменяются на то, что нужно, остальное остаётся неизменным. Преимущества подхода в том, что Metadata запрашивается единожды и к тому же в конфиге не возникает нагромождения ${exec bla-bla-bla}.

В итоге кусок конфигурации коньков будет иметь какой-то такой вид:
${execp clem_conky '

    ${alignc} ${color yellow} #{artist} ${color white}
    ${alignc} #{tracknumber} - #{title}
    ${alignc} #{album} (#{year})
    ${alignc} Bitrate: #{bitrate} kbps | Frequency: #{samplerate} Hz
    ${alignc} Volume: #{volume}%
    ${alignc} #{percent}% (#{elapsed} / #{totaltime})
    ${alignc} Shuffle: #{shuffle} | Status: #{status}
    ${alignc} #{progressbar}
'}

Если кто не в курсе — execp отличается от exec тем, что conky рассматривает вывод команды не как тупо строку, а как полноценный кусок конфигурации.

Примечания:
1) #{progressbar} отрисовывает через коньковский execibar, так что настроить его длину/ширину можно только через default_bar_size.
2) Кроме того, в конфиге наверняка придётся увеличить text_buffer_size, который по дефолту 128 — в данном случае хватило 512.
3) Поскольку Clementine соответствует спецификации MPRIS, код лёгким движением руки можно переделать под другие плееры. Например, существует MPRIS-плагин для Exaile — всё отличие в "org.mpris.exaile" вместо "org.mpris.clementine" (впрочем, не проверял).
4) UPD: ещё можно обложку отрисовывать. Например, #{cover -s 100x100 -p 20, 50} — всё, кроме слова 'cover', передаётся команде $image.

Как заинсталлить (нужен установленный не слишком старый Vala — для дебиана из testing):
wget https://raw.github.com/lomereiter/clem_conky/master/clem_conky.vala

valac --pkg gio-2.0 clem_conky.vala
sudo cp clem_conky /usr/local/bin # (опционально)

Список переменных читайте в исходном коде: выше показаны не все, да и у некоторых есть синонимы (вот до чего кодинг на Ruby доводит).
Предложения по улучшению приветствуются)

Картинка:


Тэги: Clementine conky Vala
+ 15 -
Похожие Поделиться

nk 14.06.2011 11:30 #
Скриншот бы и было бы в обще замечательно
lomereiter 14.06.2011 13:03 #
добавил. правда, сам-то я conky+dzen2 использую)
kstep 14.06.2011 12:48 #
Сам коньки и клементинку не пользую, но жЫрный плюс за вала и красивый код. Прям сердце порадовалось.
lomereiter 14.06.2011 13:16 #
На Vala сложновато писать некрасиво) Жаль, документация куцая: в API reference зачастую одни заголовки методов без всякого описания.
K900 14.06.2011 15:14 #
См. elementary. Код не-кодера на Vala - это нечто.
lomereiter 15.06.2011 11:32 #
У меня какое-то двоякое впечатление от elementary.
Программистское: "охохо, сколько недопиленных велосипедов! это ж как скилл можно прокачать!"
Пользовательское: "ну и на кой мне эти ваши Marlin-ы да BeatBox-ы, если есть Nautilus и DeadBeef?"
Короче, не заразился энтузиазмом.
111 03.02.2013 21:41 #
Если кто-то это всё-ещё юзает, вы можете столкнуться с ошибкой приведения в строчке
1
int32 ms_totaltime = track_info.lookup("mtime").get_int32();


Т.к mtime теперь имеет тип int64. Для себя решил костылем:
1
int32 ms_totaltime = (int32)track_info.lookup("mtime").get_int64();