From 707aa989082b639b86136ff2b277bad6803e21df Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Thu, 19 Oct 2017 15:02:13 +0200 Subject: [PATCH] Rust-music-server is now pretty cool... --- awesome/music.lua | 66 +++++++++++++++++++++++------------------------ awesome/rc.lua | 5 ++-- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/awesome/music.lua b/awesome/music.lua index 7b25eb8..b9dbb1b 100644 --- a/awesome/music.lua +++ b/awesome/music.lua @@ -3,17 +3,21 @@ local wibox = require("wibox") local awful = require("awful") local ret = {} -ret.widget = wibox.widget.textbox() -ret.widget:set_align("right") -ret.widget.font = "Ubuntu Mono" +ret.text_widget = wibox.widget.textbox() +ret.text_widget:set_align("right") +ret.text_widget.font = "Ubuntu Mono" +ret.icon_widget = wibox.widget.textbox() +ret.icon_widget:set_align("right") +ret.icon_widget.font = "Ubuntu Mono" + + +local icon = "" local total_text = "" local position = 1 local width = 30 local dots = 3 -local last_notification = nil - local function string_starts_with(String,Start) return string.sub(String,1,string.len(Start))==Start end @@ -42,53 +46,51 @@ local function pad(str, len, char) end local function set_text(text) - - total_text = text[1] - - if last_notification ~= nil then - naughty.destroy(last_notification) - end - - if text[2] == nil then - return - end - - elts = string_split(text[1], '-') - artist = string.sub(elts[1], 1, -1) - album = string.sub(elts[2], 2, -1) - song = string.sub(elts[3], 2) - notification_text = '\n' .. album .. '\n' .. song .. '\n' + total_text = text if string.len(total_text) >= width then position = math.floor((width - string.len(total_text)) / 2) end - - update_widget() end ret.execute_command = function(command) local fd = io.popen('music-client ' .. command) local text = string_split(fd:read('*all'), '\n') local rc = {fd:close()} + local active_command = string_starts_with(command, 'file') or string_starts_with(command, 'next') or string_starts_with(command, 'previous') + local start_server_command = active_command or string_starts_with(command, 'play') or string_starts_with(command, 'pause') + if rc[3] == 0 then - if string_starts_with(command, 'file') or string_starts_with(command, 'next') or string_starts_with(command, 'previous') then - set_text(text) + if active_command then + set_text(text[1]) elseif string_starts_with(command, 'noop') then total_text = text[1] position = math.floor((width - string.len(total_text)) / 2) end + elseif start_server_command then + -- Start the server and re-exec the command + os.execute('music-server&') + os.execute('sleep 0.2') + ret.execute_command('noop') else - set_text({'music-server not running'}) + set_text('music-server not running') end + + if text[2] ~= nil then + icon = text[2] + end + + update_widget() end function update_widget() + ret.icon_widget:set_text(' ' .. icon .. ' ') if string.len(total_text) < width then - ret.widget:set_text(pad(total_text, width, ' ')) + ret.text_widget:set_text(' ' .. pad(total_text, width + 1, ' ')) else local pos = math.min(position, string.len(total_text) - width) pos = math.max(1, pos) - ret.widget:set_text(string.sub(total_text, pos, pos + width)) + ret.text_widget:set_text(' ' .. string.sub(total_text, pos, pos + width)) position = position + 1 if position > string.len(total_text) then position = math.floor((width - string.len(total_text)) / 2) @@ -98,10 +100,8 @@ end ret.execute_command('noop') -ret.widget.timer = timer({timeout=0.2}) -ret.widget.timer:connect_signal("timeout", update_widget) -ret.widget.timer:start() - -ret.widget = ret.widget +ret.timer = timer({timeout=0.2}) +ret.timer:connect_signal("timeout", update_widget) +ret.timer:start() return ret diff --git a/awesome/rc.lua b/awesome/rc.lua index a04ad4c..3092d06 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -261,8 +261,9 @@ awful.screen.connect_for_each_screen(function(s) { -- Right widgets layout = wibox.layout.fixed.horizontal, delimiter, - -- music.widget, - -- delimiter, + music.icon_widget, + music.text_widget, + delimiter, volume_widget, delimiter, battery_widget,