diff --git a/docs/source/widgets.rst b/docs/source/widgets.rst index f7098f4..571abe8 100644 --- a/docs/source/widgets.rst +++ b/docs/source/widgets.rst @@ -290,14 +290,17 @@ Provides Music Player Daemon information. Supported platforms: platform independent (required tools: ``curl``). -* Argument: an array including password, hostname and port in that order. +* Argument: an array including password, hostname, port and separator in that + order, or a table with the previously mentioned fields. ``nil`` fields will be fallen back to default - (``localhost:6600`` without password). + (``localhost:6600`` without password and ``", "`` as a separator). * Returns a table with string keys: ``${volume}``, ``${bitrate}``, ``${elapsed}`` (in seconds), ``${duration}`` (in seconds), ``${Elapsed}`` (formatted as [hh:]mm:ss), ``${Duration}`` (formatted as [hh:]mm:ss), ``${Progress}`` (in percentage), ``${random}``, ``${repeat}``, ``${state}``, ``${Artist}``, ``${Title}``, + ``${Artists}`` (all artists concatenated with the configured separator), + ``${Genres}`` (all genres concatenated with the configured separator), ``${Album}``, ``${Genre}`` and optionally ``${Name}`` and ``${file}``. In addition, some common mpd commands are available as functions: diff --git a/widgets/mpd_all.lua b/widgets/mpd_all.lua index 60e323c..79f17ed 100644 --- a/widgets/mpd_all.lua +++ b/widgets/mpd_all.lua @@ -6,6 +6,7 @@ -- Copyright (C) 2019 Juan Carlos Menonita -- Copyright (C) 2019 Lorenzo Gaggini -- Copyright (C) 2022 Constantin Piber +-- Copyright (C) 2023 Cássio Ávila -- -- This file is part of Vicious. -- @@ -122,15 +123,21 @@ function mpd_all.async(format, warg, callback) ["{random}"] = 0, ["{state}"] = "N/A", ["{Artist}"] = "N/A", + ["{Artists}"] = "N/A", ["{Title}"] = "N/A", ["{Album}"] = "N/A", ["{Genre}"] = "N/A", - --["{Name}"] = "N/A", - --["{file}"] = "N/A", + ["{Genres}"] = "N/A", } + local separator = warg and (warg.separator or warg[4]) or ", " + local cmd = build_cmd(warg, "status\ncurrentsong\n") + local function append_with_separator (current, value) + return ("%s%s%s"):format(current, separator, value) + end + -- Get data from MPD server spawn.with_line_callback_with_shell(cmd, { stdout = function (line) @@ -144,8 +151,17 @@ function mpd_all.async(format, warg, callback) elseif k == "state" then mpd_state[key] = helpers.capitalize(v) elseif k == "Artist" or k == "Title" or - --k == "Name" or k == "file" or k == "Album" or k == "Genre" then + if k == "Artist" or k == "Genre" then + local current_key = "{" .. k .. "s}" + local current_state = mpd_state[current_key] + if current_state == "N/A" then + mpd_state[current_key] = v + else + mpd_state[current_key] = append_with_separator( + current_state, v) + end + end mpd_state[key] = v end end