From fc9a3909774e8ea012f528f09045a98e8997dc30 Mon Sep 17 00:00:00 2001 From: Marvin Dostal Date: Sun, 17 Jul 2022 13:34:01 +0200 Subject: [PATCH 1/6] sni: Use the given pixmap even if there is a name given --- src/modules/sni/item.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp index 0295153e..b2c41edb 100644 --- a/src/modules/sni/item.cpp +++ b/src/modules/sni/item.cpp @@ -319,14 +319,15 @@ void Item::updateImage() { Glib::RefPtr Item::getIconPixbuf() { try { + if (icon_pixmap) { + return icon_pixmap; + } if (!icon_name.empty()) { std::ifstream temp(icon_name); if (temp.is_open()) { return Gdk::Pixbuf::create_from_file(icon_name); } return getIconByName(icon_name, getScaledIconSize()); - } else if (icon_pixmap) { - return icon_pixmap; } } catch (Glib::Error& e) { spdlog::error("Item '{}': {}", id, static_cast(e.what())); From f437bf96e38f6edb5e271ebc4792dc2d92c60c36 Mon Sep 17 00:00:00 2001 From: Marvin Dostal Date: Sun, 17 Jul 2022 22:11:08 +0200 Subject: [PATCH 2/6] sni: Prefer system icons over pixmap --- src/modules/sni/item.cpp | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp index b2c41edb..cd77964c 100644 --- a/src/modules/sni/item.cpp +++ b/src/modules/sni/item.cpp @@ -318,20 +318,42 @@ void Item::updateImage() { } Glib::RefPtr Item::getIconPixbuf() { - try { - if (icon_pixmap) { - return icon_pixmap; - } - if (!icon_name.empty()) { + + if (!icon_name.empty()) { + + try { std::ifstream temp(icon_name); if (temp.is_open()) { return Gdk::Pixbuf::create_from_file(icon_name); } - return getIconByName(icon_name, getScaledIconSize()); + } catch (Glib::Error& e) { + // Ignore because we want to also try different methods of getting an icon. + // + // But a warning is logged, as the file apparently exists, but there was + // a failure in creating a pixbuf out of it. + + spdlog::warn("Item '{}': {}", id, static_cast(e.what())); + } + + try { + // Will throw if it can not find an icon. + return getIconByName(icon_name, getScaledIconSize()); + } catch (Glib::Error& e) { + spdlog::info("Item '{}': {}", id, static_cast(e.what())); } - } catch (Glib::Error& e) { - spdlog::error("Item '{}': {}", id, static_cast(e.what())); } + + // Return the pixmap only if an icon for the given name could not be found. + if (icon_pixmap) { + return icon_pixmap; + } + + if (icon_name.empty()) { + spdlog::error("Item '{}': No icon name or pixmap given.", id, icon_name); + } else { + spdlog::error("Item '{}': Could not find an icon named '{}' and no pixmap given.", id, icon_name); + } + return getIconByName("image-missing", getScaledIconSize()); } From 699f732146fc15034756d297ebb88df2d7f1e84b Mon Sep 17 00:00:00 2001 From: Marvin Dostal Date: Sun, 17 Jul 2022 22:13:20 +0200 Subject: [PATCH 3/6] sni: Remove unnecessary getIconByName call --- src/modules/sni/item.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp index cd77964c..e30e5e8c 100644 --- a/src/modules/sni/item.cpp +++ b/src/modules/sni/item.cpp @@ -300,10 +300,6 @@ void Item::updateImage() { auto pixbuf = getIconPixbuf(); auto scaled_icon_size = getScaledIconSize(); - if (!pixbuf) { - pixbuf = getIconByName("image-missing", getScaledIconSize()); - } - // If the loaded icon is not square, assume that the icon height should match the // requested icon size, but the width is allowed to be different. As such, if the // height of the image does not match the requested icon size, resize the icon such that From 04d66de866c58ff22546ecd647380597690ef7e7 Mon Sep 17 00:00:00 2001 From: Marvin Dostal Date: Sun, 17 Jul 2022 22:20:24 +0200 Subject: [PATCH 4/6] sni: remove unnecesary parameter --- src/modules/sni/item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp index e30e5e8c..07ebeba8 100644 --- a/src/modules/sni/item.cpp +++ b/src/modules/sni/item.cpp @@ -345,7 +345,7 @@ Glib::RefPtr Item::getIconPixbuf() { } if (icon_name.empty()) { - spdlog::error("Item '{}': No icon name or pixmap given.", id, icon_name); + spdlog::error("Item '{}': No icon name or pixmap given.", id); } else { spdlog::error("Item '{}': Could not find an icon named '{}' and no pixmap given.", id, icon_name); } From 95b5348c24ee88dd389cd65d2c513ac212e07015 Mon Sep 17 00:00:00 2001 From: Marvin Dostal Date: Wed, 3 Aug 2022 17:34:34 +0200 Subject: [PATCH 5/6] sni: change missing icon in theme logging from info to trace --- src/modules/sni/item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp index 07ebeba8..773cfdae 100644 --- a/src/modules/sni/item.cpp +++ b/src/modules/sni/item.cpp @@ -335,7 +335,7 @@ Glib::RefPtr Item::getIconPixbuf() { // Will throw if it can not find an icon. return getIconByName(icon_name, getScaledIconSize()); } catch (Glib::Error& e) { - spdlog::info("Item '{}': {}", id, static_cast(e.what())); + spdlog::trace("Item '{}': {}", id, static_cast(e.what())); } } From 11239a490031040594742169caa5bdfd87701975 Mon Sep 17 00:00:00 2001 From: Mika Braunschweig Date: Fri, 22 Jul 2022 12:09:09 +0200 Subject: [PATCH 6/6] mpd: add filename formatter --- include/modules/mpd/mpd.hpp | 1 + src/modules/mpd/mpd.cpp | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/include/modules/mpd/mpd.hpp b/include/modules/mpd/mpd.hpp index 01240d15..ae3f9152 100644 --- a/include/modules/mpd/mpd.hpp +++ b/include/modules/mpd/mpd.hpp @@ -41,6 +41,7 @@ class MPD : public ALabel { private: std::string getTag(mpd_tag_type type, unsigned idx = 0) const; + std::string getFilename() const; void setLabel(); std::string getStateIcon() const; std::string getOptionIcon(std::string optionName, bool activated) const; diff --git a/src/modules/mpd/mpd.cpp b/src/modules/mpd/mpd.cpp index cfacb20c..9b878f93 100644 --- a/src/modules/mpd/mpd.cpp +++ b/src/modules/mpd/mpd.cpp @@ -73,6 +73,16 @@ std::string waybar::modules::MPD::getTag(mpd_tag_type type, unsigned idx) const return result; } +std::string waybar::modules::MPD::getFilename() const { + std::string path = mpd_song_get_uri(song_.get()); + size_t position = path.find_last_of("/"); + if (position == std::string::npos) { + return path; + } else { + return path.substr(position + 1); + } +} + void waybar::modules::MPD::setLabel() { if (connection_ == nullptr) { label_.get_style_context()->add_class("disconnected"); @@ -100,7 +110,7 @@ void waybar::modules::MPD::setLabel() { auto format = format_; Glib::ustring artist, album_artist, album, title; - std::string date; + std::string date, filename; int song_pos = 0, queue_length = 0, volume = 0; std::chrono::seconds elapsedTime, totalTime; @@ -130,6 +140,7 @@ void waybar::modules::MPD::setLabel() { album = getTag(MPD_TAG_ALBUM); title = getTag(MPD_TAG_TITLE); date = getTag(MPD_TAG_DATE); + filename = getFilename(); song_pos = mpd_status_get_song_pos(status_.get()) + 1; volume = mpd_status_get_volume(status_.get()); if (volume < 0) { @@ -165,7 +176,8 @@ void waybar::modules::MPD::setLabel() { fmt::arg("totalTime", totalTime), fmt::arg("songPosition", song_pos), fmt::arg("queueLength", queue_length), fmt::arg("stateIcon", stateIcon), fmt::arg("consumeIcon", consumeIcon), fmt::arg("randomIcon", randomIcon), - fmt::arg("repeatIcon", repeatIcon), fmt::arg("singleIcon", singleIcon))); + fmt::arg("repeatIcon", repeatIcon), fmt::arg("singleIcon", singleIcon), + fmt::arg("filename", filename))); } catch (fmt::format_error const& e) { spdlog::warn("mpd: format error: {}", e.what()); }