Issue-3092 Add node type to wireplumber logs
- The module only fetches nodes for "node-type". This causes the 'onMixerChanged' log to spam whenever two or more wireplumber modules were registered on different nodes. To reduce this the unknown node warning will now only print if the node is not the focus of any current module.
This commit is contained in:
@ -32,6 +32,8 @@ class Wireplumber : public ALabel {
|
|||||||
|
|
||||||
bool handleScroll(GdkEventScroll* e) override;
|
bool handleScroll(GdkEventScroll* e) override;
|
||||||
|
|
||||||
|
static std::list<waybar::modules::Wireplumber*> modules;
|
||||||
|
|
||||||
WpCore* wp_core_;
|
WpCore* wp_core_;
|
||||||
GPtrArray* apis_;
|
GPtrArray* apis_;
|
||||||
WpObjectManager* om_;
|
WpObjectManager* om_;
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
bool isValidNodeId(uint32_t id) { return id > 0 && id < G_MAXUINT32; }
|
bool isValidNodeId(uint32_t id) { return id > 0 && id < G_MAXUINT32; }
|
||||||
|
|
||||||
|
std::list<waybar::modules::Wireplumber*> waybar::modules::Wireplumber::modules;
|
||||||
|
|
||||||
waybar::modules::Wireplumber::Wireplumber(const std::string& id, const Json::Value& config)
|
waybar::modules::Wireplumber::Wireplumber(const std::string& id, const Json::Value& config)
|
||||||
: ALabel(config, "wireplumber", id, "{volume}%"),
|
: ALabel(config, "wireplumber", id, "{volume}%"),
|
||||||
wp_core_(nullptr),
|
wp_core_(nullptr),
|
||||||
@ -18,6 +20,8 @@ waybar::modules::Wireplumber::Wireplumber(const std::string& id, const Json::Val
|
|||||||
min_step_(0.0),
|
min_step_(0.0),
|
||||||
node_id_(0),
|
node_id_(0),
|
||||||
type_(nullptr) {
|
type_(nullptr) {
|
||||||
|
waybar::modules::Wireplumber::modules.push_back(this);
|
||||||
|
|
||||||
wp_init(WP_INIT_PIPEWIRE);
|
wp_init(WP_INIT_PIPEWIRE);
|
||||||
wp_core_ = wp_core_new(nullptr, nullptr, nullptr);
|
wp_core_ = wp_core_new(nullptr, nullptr, nullptr);
|
||||||
apis_ = g_ptr_array_new_with_free_func(g_object_unref);
|
apis_ = g_ptr_array_new_with_free_func(g_object_unref);
|
||||||
@ -28,14 +32,14 @@ waybar::modules::Wireplumber::Wireplumber(const std::string& id, const Json::Val
|
|||||||
|
|
||||||
prepare(this);
|
prepare(this);
|
||||||
|
|
||||||
spdlog::debug("[{}]: connecting to pipewire...", name_);
|
spdlog::debug("[{}]: connecting to pipewire: '{}'...", name_, type_);
|
||||||
|
|
||||||
if (wp_core_connect(wp_core_) == 0) {
|
if (wp_core_connect(wp_core_) == 0) {
|
||||||
spdlog::error("[{}]: Could not connect to PipeWire", name_);
|
spdlog::error("[{}]: Could not connect to PipeWire: '{}'", name_, type_);
|
||||||
throw std::runtime_error("Could not connect to PipeWire\n");
|
throw std::runtime_error("Could not connect to PipeWire\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
spdlog::debug("[{}]: connected!", name_);
|
spdlog::debug("[{}]: {} connected!", name_, type_);
|
||||||
|
|
||||||
g_signal_connect_swapped(om_, "installed", (GCallback)onObjectManagerInstalled, this);
|
g_signal_connect_swapped(om_, "installed", (GCallback)onObjectManagerInstalled, this);
|
||||||
|
|
||||||
@ -43,6 +47,7 @@ waybar::modules::Wireplumber::Wireplumber(const std::string& id, const Json::Val
|
|||||||
}
|
}
|
||||||
|
|
||||||
waybar::modules::Wireplumber::~Wireplumber() {
|
waybar::modules::Wireplumber::~Wireplumber() {
|
||||||
|
waybar::modules::Wireplumber::modules.remove(this);
|
||||||
wp_core_disconnect(wp_core_);
|
wp_core_disconnect(wp_core_);
|
||||||
g_clear_pointer(&apis_, g_ptr_array_unref);
|
g_clear_pointer(&apis_, g_ptr_array_unref);
|
||||||
g_clear_object(&om_);
|
g_clear_object(&om_);
|
||||||
@ -54,10 +59,11 @@ waybar::modules::Wireplumber::~Wireplumber() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void waybar::modules::Wireplumber::updateNodeName(waybar::modules::Wireplumber* self, uint32_t id) {
|
void waybar::modules::Wireplumber::updateNodeName(waybar::modules::Wireplumber* self, uint32_t id) {
|
||||||
spdlog::debug("[{}]: updating node name with node.id {}", self->name_, id);
|
spdlog::debug("[{}]: updating '{}' node name with node.id {}", self->name_, self->type_, id);
|
||||||
|
|
||||||
if (!isValidNodeId(id)) {
|
if (!isValidNodeId(id)) {
|
||||||
spdlog::warn("[{}]: '{}' is not a valid node ID. Ignoring node name update.", self->name_, id);
|
spdlog::warn("[{}]: '{}' is not a valid node ID. Ignoring '{}' node name update.", self->name_,
|
||||||
|
id, self->type_);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +91,7 @@ void waybar::modules::Wireplumber::updateNodeName(waybar::modules::Wireplumber*
|
|||||||
self->node_name_ = nick != nullptr ? nick
|
self->node_name_ = nick != nullptr ? nick
|
||||||
: description != nullptr ? description
|
: description != nullptr ? description
|
||||||
: "Unknown node name";
|
: "Unknown node name";
|
||||||
spdlog::debug("[{}]: Updating node name to: {}", self->name_, self->node_name_);
|
spdlog::debug("[{}]: Updating '{}' node name to: {}", self->name_, self->type_, self->node_name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void waybar::modules::Wireplumber::updateVolume(waybar::modules::Wireplumber* self, uint32_t id) {
|
void waybar::modules::Wireplumber::updateVolume(waybar::modules::Wireplumber* self, uint32_t id) {
|
||||||
@ -93,7 +99,8 @@ void waybar::modules::Wireplumber::updateVolume(waybar::modules::Wireplumber* se
|
|||||||
GVariant* variant = nullptr;
|
GVariant* variant = nullptr;
|
||||||
|
|
||||||
if (!isValidNodeId(id)) {
|
if (!isValidNodeId(id)) {
|
||||||
spdlog::error("[{}]: '{}' is not a valid node ID. Ignoring volume update.", self->name_, id);
|
spdlog::error("[{}]: '{}' is not a valid '{}' node ID. Ignoring volume update.", self->name_,
|
||||||
|
id, self->type_);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,13 +121,22 @@ void waybar::modules::Wireplumber::updateVolume(waybar::modules::Wireplumber* se
|
|||||||
}
|
}
|
||||||
|
|
||||||
void waybar::modules::Wireplumber::onMixerChanged(waybar::modules::Wireplumber* self, uint32_t id) {
|
void waybar::modules::Wireplumber::onMixerChanged(waybar::modules::Wireplumber* self, uint32_t id) {
|
||||||
spdlog::debug("[{}]: (onMixerChanged) - id: {}", self->name_, id);
|
|
||||||
|
|
||||||
g_autoptr(WpNode) node = static_cast<WpNode*>(wp_object_manager_lookup(
|
g_autoptr(WpNode) node = static_cast<WpNode*>(wp_object_manager_lookup(
|
||||||
self->om_, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_G_PROPERTY, "bound-id", "=u", id, nullptr));
|
self->om_, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_G_PROPERTY, "bound-id", "=u", id, nullptr));
|
||||||
|
|
||||||
if (node == nullptr) {
|
if (node == nullptr) {
|
||||||
spdlog::warn("[{}]: (onMixerChanged) - Object with id {} not found", self->name_, id);
|
// log a warning only if no other widget is targeting the id.
|
||||||
|
// this reduces log spam when multiple instances of the module are used on different node types.
|
||||||
|
if (id != self->node_id_) {
|
||||||
|
for (auto const& module : waybar::modules::Wireplumber::modules) {
|
||||||
|
if (module->node_id_ == id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
spdlog::warn("[{}]: (onMixerChanged: {}) - Object with id {} not found", self->name_,
|
||||||
|
self->type_, id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,26 +144,27 @@ void waybar::modules::Wireplumber::onMixerChanged(waybar::modules::Wireplumber*
|
|||||||
|
|
||||||
if (self->node_id_ != id) {
|
if (self->node_id_ != id) {
|
||||||
spdlog::debug(
|
spdlog::debug(
|
||||||
"[{}]: (onMixerChanged) - ignoring mixer update for node: id: {}, name: {} as it is not "
|
"[{}]: (onMixerChanged: {}) - ignoring mixer update for node: id: {}, name: {} as it is "
|
||||||
"the default node: {} with id: {}",
|
"not the default node: {} with id: {}",
|
||||||
self->name_, id, name, self->default_node_name_, self->node_id_);
|
self->name_, self->type_, id, name, self->default_node_name_, self->node_id_);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
spdlog::debug("[{}]: (onMixerChanged) - Need to update volume for node with id {} and name {}",
|
spdlog::debug(
|
||||||
self->name_, id, name);
|
"[{}]: (onMixerChanged: {}) - Need to update volume for node with id {} and name {}",
|
||||||
|
self->name_, self->type_, id, name);
|
||||||
updateVolume(self, id);
|
updateVolume(self, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void waybar::modules::Wireplumber::onDefaultNodesApiChanged(waybar::modules::Wireplumber* self) {
|
void waybar::modules::Wireplumber::onDefaultNodesApiChanged(waybar::modules::Wireplumber* self) {
|
||||||
spdlog::debug("[{}]: (onDefaultNodesApiChanged)", self->name_);
|
spdlog::debug("[{}]: (onDefaultNodesApiChanged: {})", self->name_, self->type_);
|
||||||
|
|
||||||
uint32_t defaultNodeId;
|
uint32_t defaultNodeId;
|
||||||
g_signal_emit_by_name(self->def_nodes_api_, "get-default-node", self->type_, &defaultNodeId);
|
g_signal_emit_by_name(self->def_nodes_api_, "get-default-node", self->type_, &defaultNodeId);
|
||||||
|
|
||||||
if (!isValidNodeId(defaultNodeId)) {
|
if (!isValidNodeId(defaultNodeId)) {
|
||||||
spdlog::warn("[{}]: '{}' is not a valid node ID. Ignoring node change.", self->name_,
|
spdlog::warn("[{}]: '{}' is not a valid node ID. Ignoring '{}' node change.", self->name_,
|
||||||
defaultNodeId);
|
defaultNodeId, self->type_);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,8 +173,8 @@ void waybar::modules::Wireplumber::onDefaultNodesApiChanged(waybar::modules::Wir
|
|||||||
"=u", defaultNodeId, nullptr));
|
"=u", defaultNodeId, nullptr));
|
||||||
|
|
||||||
if (node == nullptr) {
|
if (node == nullptr) {
|
||||||
spdlog::warn("[{}]: (onDefaultNodesApiChanged) - Object with id {} not found", self->name_,
|
spdlog::warn("[{}]: (onDefaultNodesApiChanged: {}) - Object with id {} not found", self->name_,
|
||||||
defaultNodeId);
|
self->type_, defaultNodeId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,21 +182,22 @@ void waybar::modules::Wireplumber::onDefaultNodesApiChanged(waybar::modules::Wir
|
|||||||
wp_pipewire_object_get_property(WP_PIPEWIRE_OBJECT(node), "node.name");
|
wp_pipewire_object_get_property(WP_PIPEWIRE_OBJECT(node), "node.name");
|
||||||
|
|
||||||
spdlog::debug(
|
spdlog::debug(
|
||||||
"[{}]: (onDefaultNodesApiChanged) - got the following default node: Node(name: {}, id: {})",
|
"[{}]: (onDefaultNodesApiChanged: {}) - got the following default node: Node(name: {}, id: "
|
||||||
self->name_, defaultNodeName, defaultNodeId);
|
"{})",
|
||||||
|
self->name_, self->type_, defaultNodeName, defaultNodeId);
|
||||||
|
|
||||||
if (g_strcmp0(self->default_node_name_, defaultNodeName) == 0 &&
|
if (g_strcmp0(self->default_node_name_, defaultNodeName) == 0 &&
|
||||||
self->node_id_ == defaultNodeId) {
|
self->node_id_ == defaultNodeId) {
|
||||||
spdlog::debug(
|
spdlog::debug(
|
||||||
"[{}]: (onDefaultNodesApiChanged) - Default node has not changed. Node(name: {}, id: {}). "
|
"[{}]: (onDefaultNodesApiChanged: {}) - Default node has not changed. Node(name: {}, id: "
|
||||||
"Ignoring.",
|
"{}). Ignoring.",
|
||||||
self->name_, self->default_node_name_, defaultNodeId);
|
self->name_, self->type_, self->default_node_name_, defaultNodeId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
spdlog::debug(
|
spdlog::debug(
|
||||||
"[{}]: (onDefaultNodesApiChanged) - Default node changed to -> Node(name: {}, id: {})",
|
"[{}]: (onDefaultNodesApiChanged: {}) - Default node changed to -> Node(name: {}, id: {})",
|
||||||
self->name_, defaultNodeName, defaultNodeId);
|
self->name_, self->type_, defaultNodeName, defaultNodeId);
|
||||||
|
|
||||||
g_free(self->default_node_name_);
|
g_free(self->default_node_name_);
|
||||||
self->default_node_name_ = g_strdup(defaultNodeName);
|
self->default_node_name_ = g_strdup(defaultNodeName);
|
||||||
@ -210,8 +228,9 @@ void waybar::modules::Wireplumber::onObjectManagerInstalled(waybar::modules::Wir
|
|||||||
g_signal_emit_by_name(self->def_nodes_api_, "get-default-node", self->type_, &self->node_id_);
|
g_signal_emit_by_name(self->def_nodes_api_, "get-default-node", self->type_, &self->node_id_);
|
||||||
|
|
||||||
if (self->default_node_name_ != nullptr) {
|
if (self->default_node_name_ != nullptr) {
|
||||||
spdlog::debug("[{}]: (onObjectManagerInstalled) - default configured node name: {} and id: {}",
|
spdlog::debug(
|
||||||
self->name_, self->default_node_name_, self->node_id_);
|
"[{}]: (onObjectManagerInstalled: {}) - default configured node name: {} and id: {}",
|
||||||
|
self->name_, self->type_, self->default_node_name_, self->node_id_);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateVolume(self, self->node_id_);
|
updateVolume(self, self->node_id_);
|
||||||
@ -248,8 +267,8 @@ void waybar::modules::Wireplumber::activatePlugins() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void waybar::modules::Wireplumber::prepare() {
|
void waybar::modules::Wireplumber::prepare(waybar::modules::Wireplumber* self) {
|
||||||
spdlog::debug("[{}]: preparing object manager", name_);
|
spdlog::debug("[{}]: preparing object manager: '{}'", name_, self->type_);
|
||||||
wp_object_manager_add_interest(om_, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY, "media.class",
|
wp_object_manager_add_interest(om_, WP_TYPE_NODE, WP_CONSTRAINT_TYPE_PW_PROPERTY, "media.class",
|
||||||
"=s", self->type_, nullptr);
|
"=s", self->type_, nullptr);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user