From 82fc0c16718b01032df6041589d77a5fc401211b Mon Sep 17 00:00:00 2001 From: Guillaume DOTT Date: Sun, 11 Nov 2012 01:21:20 +0100 Subject: [PATCH] Initial commit --- init.lua | 6 +++ mpc.lua | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++ volume.lua | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 258 insertions(+) create mode 100644 init.lua create mode 100755 mpc.lua create mode 100755 volume.lua diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..18b3b48 --- /dev/null +++ b/init.lua @@ -0,0 +1,6 @@ +-- {{{ Configure widgets +require("iniquitous.mpc") +require("iniquitous.volume") +-- }}} + +module("iniquitous") diff --git a/mpc.lua b/mpc.lua new file mode 100755 index 0000000..d1b0e45 --- /dev/null +++ b/mpc.lua @@ -0,0 +1,127 @@ +local awful = awful +local naughty = { notify = naughty.notify } +local widget = widget +local timer = timer +local string = string +local os = { + getenv = os.getenv, + execute = os.execute +} +local io = { + open = io.open, + close = io.close +} +local table = { + insert = table.insert +} +local print = print +local tonumber = tonumber + +module("iniquitous.mpc") + +function music_current_short() + local music = awful.util.pread('mpc -f "[%artist%]##[%track%]##[%title%]##[%time%]##" | head -2 | sed "s/^\\[\\(playing\\|paused\\)\\] \\+#[0-9]\\+\\/[0-9]\\+ \\+\\([0-9]\\+:[0-9]\\+\\)\\/.*$/\\1#\\2#/" | tr -d "\\n"') + --print(music) + + local len_max = 20 + local t = {} + for k in string.gmatch(music, "[^#]*#") do + k = string.sub(k, 1, string.len(k)-1) + if(string.len(k) > len_max) then + k = string.sub(k, 1, len_max).."..." + end + table.insert(t, k) + end + + local res + if(#t >= 6) then + res = t[1].. " - " ..t[2].. " - " ..t[3].. " # " .. t[6] .. "/" ..t[4].. " ["..t[5].."]" + else + res = "Mpd Daemon is not runnig" + end + + return awful.util.escape(res) +end +function music_current_full() + local music = awful.util.pread("mpc -f \"[%artist%]\\n%album%\\n%track% - %title%\\n## %time%\" | head -4"); + + if(string.len(music) == 0) then + music = "Mpd Daemon is not runnig" + else + music = string.sub(music, 1, string.len(music)-1) + end + + return awful.util.escape(music) +end +function music_cover() + local cover = os.getenv("HOME") .. "/.album/default.png" + local music = awful.util.pread("mpc -f \"%artist%-%album%\"") + --local dir = awful.util.pread("qdbus org.gnome.Rhythmbox /org/gnome/Rhythmbox/Player \"org.gnome.Rhythmbox.Player.getPlayingUri\"") + --local dir_format = url_decode(dir:sub(8, dir:find("\/[^\/]+$"))) + --print(dir_format) + + local dir = "/home/gdott9/Music/" .. awful.util.pread("dirname \"`mpc -f '%file%' | head -1`\"") + + if(string.len(music) > 0) then + music = string.gsub(string.sub(music, 1, string.len(music)-1), "[/\?%*:|\"<>]", "_") + --local file = os.getenv("HOME") .. "/.album/".. music ..".jpg" + local file = string.sub(dir, 1, string.len(dir)-1) .. "/cover.jpg" + local test = io.open(file) + --print(file) + + if(test ~= nil) then + --print("good") + io.close(test) + cover = file + else + file = os.getenv("HOME") .. "/.album/".. music ..".jpg" + test = io.open(file) + if(test ~= nil) then + io.close(test) + cover = file + end + --print("bad") + end + end + + return cover + --local cover = awful.util.pread("conkyRhythmbox -d CA") + + --return (cover.len > 0) and cover or os.getenv("HOME") .. "/.album/default.png" +end +function notify() + naughty.notify({ + icon=music_cover(), + icon_size=50, + text=music_current_full(), + position="bottom_right", + timeout=2 + }) +end + +function init() + tb = widget({ type = "textbox" }) + tb.text = "Rhythmbox" + tb:buttons(awful.util.table.join( + awful.button({ }, 1, function () notify() end), + awful.button({ }, 3, function () + os.execute("mpc toggle >/dev/null") + tb.text = music_current_short() + end) + )) + + local timer = timer { timeout = 2 } + timer:add_signal("timeout", function() tb.text = music_current_short() end) + timer:start() + + tb.text = music_current_short() + return tb +end + +function url_decode(str) + str = string.gsub (str, "+", " ") + str = string.gsub (str, "%%(%x%x)", + function(h) return string.char(tonumber(h,16)) end) + str = string.gsub (str, "\r\n", "\n") + return str +end diff --git a/volume.lua b/volume.lua new file mode 100755 index 0000000..f3c4ff6 --- /dev/null +++ b/volume.lua @@ -0,0 +1,125 @@ +local awful = awful +local beautiful = beautiful +local widget = widget +local timer = timer +local string = string +local tonumber = tonumber +local image = image +local os = { + getenv = os.getenv, + execute = os.execute +} +local io = { + open = io.open, + close = io.close +} +local table = { + insert = table.insert +} +module("iniquitous.volume") + +local img = widget({ type = "imagebox" }) +local tb = widget({ type = "textbox" }) +tb.text = "N/A%" + +local initialized = false + +local channel = "" +local mode = "" + +local mute = "" +local unmute = "" +local unmute2 = "" + +local up = "" +local down = "" +local value = nil + +local vol = 0 + +function init(a_mode, a_channel) + mode = a_mode + channel = a_channel + + if mode == "oss" then + up = "ossmix " .. channel .. " +2" + down = "ossmix " .. channel .. " -- -2" + mute = "ossmix " .. channel .. " 0" + unmute = "ossmix " .. channel .. " " + value = function() return awful.util.pread("ossmix " .. channel):match("(%d+)") end + + initialized = true + elseif mode == "alsa" then + up = "amixer sset " .. channel .. " 2%+" + down = "amixer sset " .. channel .. " 2%-" + mute = "amixer sset " .. channel .. " 0" + unmute = "amixer sset " .. channel .. " " + unmute2 = "%" + value = function() return awful.util.pread("amixer get " .. channel):match("(%d+)%%") end + + initialized = true + end + volume(display) + + local but = awful.util.table.join( + awful.button({ }, 3, function () volume("mute") end), + awful.button({ }, 4, function () volume("up") end), + awful.button({ }, 5, function () volume("down") end) + ) + tb:buttons(but) + img:buttons(but) + + local timer = timer { timeout = 7 } + timer:add_signal("timeout", function() volume("display") end) + timer:start() +end + + +function volume(mode) + if mode == "up" then + os.execute(up .. " >/dev/null") + elseif mode == "down" then + os.execute(down .. " >/dev/null") + elseif mode == "mute" then + --The mute option is useless without ossvol, ossmix does not navitely support muting + --awful.util.spawn("ossvol -t") + local volume = value() + + volume = tonumber(volume) + if volume == 0 then + os.execute(unmute .. vol .. unmute2 .. " >/dev/null") + else + vol = volume + os.execute(mute .. " >/dev/null") + end + end + + local volume = tonumber(value()) + display(volume) +end + +function display(volume) + if volume == nil then + vol_lvl = "mute" + volume = 0 + elseif volume == 0 then + vol_lvl = "mute" + elseif volume < 25 then + vol_lvl = "low" + elseif volume < 50 then + vol_lvl = "med" + elseif volume < 75 then + vol_lvl = "med2" + else + vol_lvl = "high" + end + img.image = image(beautiful["vol_" .. vol_lvl]) + tb.text = volume .."%" +end + +function textbox() + return tb +end +function imagebox() + return img +end