From d3de207205e72c6fc6459a695bc1f812744737b6 Mon Sep 17 00:00:00 2001 From: gaberm Date: Thu, 3 Dec 2020 11:03:38 +0200 Subject: [PATCH 1/2] added next & prev buttons support --- mpris-widget/README.md | 16 ++++++---- mpris-widget/init.lua | 67 ++++++++++++++++++++++++++++++++++++++--- mpris-widget/music.png | Bin 0 -> 6005 bytes 3 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 mpris-widget/music.png diff --git a/mpris-widget/README.md b/mpris-widget/README.md index 317385f8..e7c1f5c6 100644 --- a/mpris-widget/README.md +++ b/mpris-widget/README.md @@ -1,13 +1,13 @@ -# MPRIS Widget +# MPD Widget -Music Player Info widget cy @mgabs +Music Player Daemon widget by @raphaelfournier. # Prerequisite -Install `playerctl` (mpris implementation), should be available in repo, e.g for Ubuntu: +Install `mpd` (Music Player Daemon itself) and `mpc` (Music Player Client - program for controlling mpd), both should be available in repo, e.g for Ubuntu: ```bash -sudo apt-get install playerctl +sudo apt-get install mpd mpc ``` ## Installation @@ -15,12 +15,16 @@ sudo apt-get install playerctl To use this widget clone repo under **~/.config/awesome/** and then add it in **rc.lua**: ```lua -local mpris_widget = require("awesome-wm-widgets.mpris-widget") +local mpdarc_widget = require("awesome-wm-widgets.mpdarc-widget.mpdarc") ... s.mytasklist, -- Middle widget { -- Right widgets layout = wibox.layout.fixed.horizontal, ... - mpris_widget, + mpdarc_widget(), ... ``` + +## Options + +The widgets takes button as boolean argument to enable or disable next & previous buttons diff --git a/mpris-widget/init.lua b/mpris-widget/init.lua index 5af85b43..7bb93d44 100644 --- a/mpris-widget/init.lua +++ b/mpris-widget/init.lua @@ -11,6 +11,7 @@ local spawn = require("awful.spawn") local watch = require("awful.widget.watch") local wibox = require("wibox") local naughty = require("naughty") +local gears = require("gears") local GET_MPD_CMD = "playerctl -f '{{status}};{{xesam:artist}};{{xesam:title}};{{mpris:artUrl}}' metadata" @@ -24,8 +25,12 @@ local PREV_MPD_CMD = "playerctl previous" local PATH_TO_ICONS = "/usr/share/icons/Arc" local PAUSE_ICON_NAME = PATH_TO_ICONS .. "/actions/24/player_pause.png" local PLAY_ICON_NAME = PATH_TO_ICONS .. "/actions/24/player_play.png" +local NEXT_ICON_NAME = PATH_TO_ICONS .. "/actions/24/gtk-media-previous-rtl.png" +local PREV_ICON_NAME = PATH_TO_ICONS .. "/actions/24/gtk-media-previous-ltr.png" local STOP_ICON_NAME = PATH_TO_ICONS .. "/actions/24/player_stop.png" local LIBRARY_ICON_NAME = PATH_TO_ICONS .. "/actions/24/music-library.png" +local DEFAULT_ART = gears.filesystem.get_configuration_dir() .. + "widgets/mpris-widget/music.png" local mpdarc_widget = {} @@ -41,10 +46,25 @@ local function worker(args) } local mirrored_icon = wibox.container.mirror(icon, {horizontal = true}) + local next = wibox.widget { + id = "next", + widget = wibox.widget.imagebox, + image = NEXT_ICON_NAME + } + local prev = wibox.widget { + id = "prev", + widget = wibox.widget.imagebox, + image = PREV_ICON_NAME + } + + local mirrored_next = wibox.container.mirror(next, {horizontal = true}) + local mirrored_prev = wibox.container.mirror(prev, {horizontal = true}) local mpdarc = wibox.widget { mirrored_icon, + prev, + next, -- max_value = 1, - -- value = 0, + -- value = 1, thickness = 2, start_angle = 4.71238898, -- 2pi*3/4 forced_height = 24, @@ -74,34 +94,70 @@ local function worker(args) art = words[4] if current_song ~= nil then if string.len(current_song) > 18 then - current_song = string.sub(current_song, 0, 9) .. ".." + current_song = string.sub(current_song, 0, 16) .. ".." end end - if art ~= nil then artUrl = string.sub(art, 8, -1) end + if art ~= nil then + if string.len(art) > 10 then + artUrl = string.sub(art, 8, -1) + end + else + artUrl = DEFAULT_ART + end if mpdstatus == "Playing" then mpdarc_icon_widget.visible = true + mirrored_prev.visible = true + mirrored_next.visible = true icon.image = PLAY_ICON_NAME widget.colors = {beautiful.widget_main_color} mpdarc_current_song_widget.markup = current_song elseif mpdstatus == "Paused" then mpdarc_icon_widget.visible = true + mirrored_prev.visible = true + mirrored_next.visible = true icon.image = PAUSE_ICON_NAME widget.colors = {beautiful.widget_main_color} mpdarc_current_song_widget.markup = current_song elseif mpdstatus == "Stopped" then mpdarc_icon_widget.visible = true + mirrored_prev.visible = true + mirrored_next.visible = true icon.image = STOP_ICON_NAME mpdarc_current_song_widget.markup = "" else -- no player is running icon.image = LIBRARY_ICON_NAME mpdarc_icon_widget.visible = false + mirrored_prev.visible = false + mirrored_next.visible = false mpdarc_current_song_widget.markup = "" widget.colors = {beautiful.widget_red} end end + mirrored_next:connect_signal("button::press", function(_, _, _, button) + if (button == 1) then + awful.spawn(NEXT_MPD_CMD, false) -- left click + end + + spawn.easy_async(GET_MPD_CMD, + function(stdout, stderr, exitreason, exitcode) + update_graphic(mpdarc, stdout, stderr, exitreason, exitcode) + end) + end) + + mirrored_prev:connect_signal("button::press", function(_, _, _, button) + if (button == 1) then + awful.spawn(PREV_MPD_CMD, false) -- left click + end + + spawn.easy_async(GET_MPD_CMD, + function(stdout, stderr, exitreason, exitcode) + update_graphic(mpdarc, stdout, stderr, exitreason, exitcode) + end) + end) + mpdarc:connect_signal("button::press", function(_, _, _, button) if (button == 1) then awful.spawn(TOGGLE_MPD_CMD, false) -- left click @@ -131,7 +187,8 @@ local function worker(args) width = 240, height = 90, title = "" .. mpdstatus .. "", - text = current_song .. " by " .. artist, + text = current_song .. " - " .. artist, + -- text = "art: " .. artUrl, image = artUrl } end) @@ -147,7 +204,9 @@ local function worker(args) mpdarc_widget = wibox.widget { screen = 'primary', + mirrored_next, mpdarc_icon_widget, + mirrored_prev, mpdarc_current_song_widget, layout = wibox.layout.align.horizontal } diff --git a/mpris-widget/music.png b/mpris-widget/music.png new file mode 100644 index 0000000000000000000000000000000000000000..e6496b241e3774654789950e2ab31c81a1233858 GIT binary patch literal 6005 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 literal 0 HcmV?d00001 From 73cc04a6602b353024d7eb1525646acfe9997070 Mon Sep 17 00:00:00 2001 From: gaberm Date: Thu, 3 Dec 2020 11:07:24 +0200 Subject: [PATCH 2/2] updated readme --- mpris-widget/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mpris-widget/README.md b/mpris-widget/README.md index e7c1f5c6..41147cc1 100644 --- a/mpris-widget/README.md +++ b/mpris-widget/README.md @@ -1,13 +1,13 @@ -# MPD Widget +# MPRIS Widget -Music Player Daemon widget by @raphaelfournier. +Music Player Daemon control widget by @mgabs. # Prerequisite -Install `mpd` (Music Player Daemon itself) and `mpc` (Music Player Client - program for controlling mpd), both should be available in repo, e.g for Ubuntu: +Install `playerctl` - program for controlling mpris), both should be available in repo, e.g for Ubuntu: ```bash -sudo apt-get install mpd mpc +sudo apt-get install playerctl ``` ## Installation