add length limits for MPD module tags

pull/1002/head
nullobsi 2021-01-30 18:04:59 -08:00
parent 69a366dced
commit 6cc3212605
No known key found for this signature in database
GPG Key ID: 4698F7ECCC7E2005
2 changed files with 39 additions and 11 deletions

View File

@ -73,6 +73,22 @@ Addressed by *mpd*
default: "MPD (disconnected)" ++ default: "MPD (disconnected)" ++
Tooltip information displayed when the MPD server can't be reached. Tooltip information displayed when the MPD server can't be reached.
*artist-len*: ++
typeof: integer ++
Maximum length of the Artist tag.
*album-len*: ++
typeof: integer ++
Maximum length of the Album tag.
*album-artist-len*: ++
typeof: integer ++
Maximum length of the Album Artist tag.
*title-len*: ++
typeof: integer ++
Maximum length of the Title tag.
*rotate*: ++ *rotate*: ++
typeof: integer ++ typeof: integer ++
Positive value to rotate the text label. Positive value to rotate the text label.

View File

@ -2,7 +2,7 @@
#include <fmt/chrono.h> #include <fmt/chrono.h>
#include <spdlog/spdlog.h> #include <spdlog/spdlog.h>
#include <glibmm/ustring.h>
#include "modules/mpd/state.hpp" #include "modules/mpd/state.hpp"
#if defined(MPD_NOINLINE) #if defined(MPD_NOINLINE)
namespace waybar::modules { namespace waybar::modules {
@ -98,8 +98,8 @@ void waybar::modules::MPD::setLabel() {
} }
auto format = format_; auto format = format_;
Glib::ustring artist, album_artist, album, title;
std::string artist, album_artist, album, title, date; std::string date;
int song_pos = 0, queue_length = 0; int song_pos = 0, queue_length = 0;
std::chrono::seconds elapsedTime, totalTime; std::chrono::seconds elapsedTime, totalTime;
@ -144,13 +144,25 @@ void waybar::modules::MPD::setLabel() {
bool singleActivated = mpd_status_get_single(status_.get()); bool singleActivated = mpd_status_get_single(status_.get());
std::string singleIcon = getOptionIcon("single", singleActivated); std::string singleIcon = getOptionIcon("single", singleActivated);
auto artistLen = config_["artist-len"].isInt() ?
config_["artist-len"].asInt() : artist.size();
auto albumArtistLen = config_["album-artist-len"].isInt() ?
config_["album-artist-len"].asInt() : album_artist.size();
auto albumLen = config_["album-len"].isInt() ?
config_["album-len"].asInt() : album.size();
auto titleLen = config_["title-len"].isInt() ?
config_["title-len"].asInt() : title.size();
try { try {
label_.set_markup( label_.set_markup(
fmt::format(format, fmt::format(format,
fmt::arg("artist", Glib::Markup::escape_text(artist).raw()), fmt::arg("artist", Glib::Markup::escape_text(artist.substr(0, artistLen)).raw()),
fmt::arg("albumArtist", Glib::Markup::escape_text(album_artist).raw()), fmt::arg("albumArtist", Glib::Markup::escape_text(album_artist.substr(0, albumArtistLen)).raw()),
fmt::arg("album", Glib::Markup::escape_text(album).raw()), fmt::arg("album", Glib::Markup::escape_text(album.substr(0, albumLen)).raw()),
fmt::arg("title", Glib::Markup::escape_text(title).raw()), fmt::arg("title", Glib::Markup::escape_text(title.substr(0, titleLen)).raw()),
fmt::arg("date", Glib::Markup::escape_text(date).raw()), fmt::arg("date", Glib::Markup::escape_text(date).raw()),
fmt::arg("elapsedTime", elapsedTime), fmt::arg("elapsedTime", elapsedTime),
fmt::arg("totalTime", totalTime), fmt::arg("totalTime", totalTime),
@ -171,10 +183,10 @@ void waybar::modules::MPD::setLabel() {
: "MPD (connected)"; : "MPD (connected)";
try { try {
auto tooltip_text = fmt::format(tooltip_format, auto tooltip_text = fmt::format(tooltip_format,
fmt::arg("artist", artist), fmt::arg("artist", artist.substr(0, artistLen).raw()),
fmt::arg("albumArtist", album_artist), fmt::arg("albumArtist", album_artist.substr(0, albumArtistLen).raw()),
fmt::arg("album", album), fmt::arg("album", album.substr(0, albumLen).raw()),
fmt::arg("title", title), fmt::arg("title", title.substr(0, titleLen).raw()),
fmt::arg("date", date), fmt::arg("date", date),
fmt::arg("elapsedTime", elapsedTime), fmt::arg("elapsedTime", elapsedTime),
fmt::arg("totalTime", totalTime), fmt::arg("totalTime", totalTime),