63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <pipewire/pipewire.h>
 | |
| 
 | |
| #include <string>
 | |
| 
 | |
| #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<std::string *> 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<std::string *> 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
 |