#pragma once #include #include #include "util/gtk_icon.hpp" namespace waybar::util::PipewireBackend { enum PrivacyNodeType { PRIVACY_NODE_TYPE_NONE, PRIVACY_NODE_TYPE_VIDEO_INPUT, PRIVACY_NODE_TYPE_AUDIO_INPUT, PRIVACY_NODE_TYPE_AUDIO_OUTPUT }; class PrivacyNodeInfo { public: PrivacyNodeType type = PRIVACY_NODE_TYPE_NONE; uint32_t id; uint32_t client_id; enum pw_node_state state = PW_NODE_STATE_IDLE; std::string media_class; std::string media_name; std::string node_name; std::string application_name; std::string pipewire_access_portal_app_id; std::string application_icon_name; struct spa_hook object_listener; struct spa_hook proxy_listener; void *data; std::string get_name() { const std::vector names{&application_name, &node_name}; std::string name = "Unknown Application"; for (auto &name_ : names) { if (name_ != nullptr && name_->length() > 0) { name = *name_; name[0] = toupper(name[0]); break; } } return name; } std::string get_icon_name() { const std::vector names{&application_icon_name, &pipewire_access_portal_app_id, &application_name, &node_name}; const std::string name = "application-x-executable-symbolic"; for (auto &name_ : names) { if (name_ != nullptr && name_->length() > 0 && DefaultGtkIconThemeWrapper::has_icon(*name_)) { return *name_; } } return name; } }; } // namespace waybar::util::PipewireBackend