1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-12-27 04:32:55 +00:00

Provide support to query the active port on PulseAudio's default sink (#405)

* Provide support to query the active port on PA's default sink

This commit exposes 2 objects:
- pa_sink_active_port_name
  (example value: "analog-output-headphones")
- pa_sink_active_port_description
  (example value: "Headphones")
that give respectively the name and description strings
for the active port on the default sink provided by PulseAudio.

* Reflect 9ed28f2a in the documentation
This commit is contained in:
Arseny 2018-01-19 17:03:06 +03:00 committed by Brenden Matthews
parent c712d67884
commit e1a19b3093
4 changed files with 42 additions and 2 deletions

View File

@ -3072,6 +3072,24 @@
<listitem>Pulseaudio's default sink description. <listitem>Pulseaudio's default sink description.
<para /></listitem> <para /></listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<command>
<option>pa_sink_active_port_name</option>
</command>
</term>
<listitem>Pulseaudio's default sink active port name.
<para /></listitem>
</varlistentry>
<varlistentry>
<term>
<command>
<option>pa_sink_active_port_description</option>
</command>
</term>
<listitem>Pulseaudio's default sink active port description.
<para /></listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<command> <command>

View File

@ -1888,6 +1888,14 @@ struct text_object *construct_text_object(char *s, const char *arg,
obj->callbacks.print = &print_puau_sink_description; obj->callbacks.print = &print_puau_sink_description;
obj->callbacks.free = &free_pulseaudio; obj->callbacks.free = &free_pulseaudio;
init_pulseaudio(obj); init_pulseaudio(obj);
END OBJ(pa_sink_active_port_name, 0)
obj->callbacks.print = &print_puau_sink_active_port_name;
obj->callbacks.free = &free_pulseaudio;
init_pulseaudio(obj);
END OBJ(pa_sink_active_port_description, 0)
obj->callbacks.print = &print_puau_sink_active_port_description;
obj->callbacks.free = &free_pulseaudio;
init_pulseaudio(obj);
END OBJ(pa_sink_volume, 0) END OBJ(pa_sink_volume, 0)
obj->callbacks.percentage = &puau_vol; obj->callbacks.percentage = &puau_vol;
obj->callbacks.free = &free_pulseaudio; obj->callbacks.free = &free_pulseaudio;

View File

@ -43,7 +43,7 @@ struct pulseaudio_default_results get_result_copy();
const struct pulseaudio_default_results pulseaudio_result0 = const struct pulseaudio_default_results pulseaudio_result0 =
{ std::string(), std::string(), 0, 0, 0, 0, std::string(), std::string(), 0 }; { std::string(), std::string(), std::string(), std::string(), 0, 0, 0, 0, std::string(), std::string(), 0 };
pulseaudio_c *pulseaudio = NULL; pulseaudio_c *pulseaudio = NULL;
void pa_sink_info_callback(pa_context *c, const pa_sink_info *i, int eol, void *data) { void pa_sink_info_callback(pa_context *c, const pa_sink_info *i, int eol, void *data) {
@ -53,6 +53,8 @@ void pa_sink_info_callback(pa_context *c, const pa_sink_info *i, int eol, void *
pdr->sink_mute = i->mute; pdr->sink_mute = i->mute;
pdr->sink_card = i->card; pdr->sink_card = i->card;
pdr->sink_index = i->index; pdr->sink_index = i->index;
pdr->sink_active_port_name.assign(i->active_port->name);
pdr->sink_active_port_description.assign(i->active_port->description);
pdr->sink_volume = round_to_int(100.0f * (float)pa_cvolume_avg(&(i->volume)) / (float)PA_VOLUME_NORM); pdr->sink_volume = round_to_int(100.0f * (float)pa_cvolume_avg(&(i->volume)) / (float)PA_VOLUME_NORM);
pa_threaded_mainloop_signal(pulseaudio->mainloop, 0); pa_threaded_mainloop_signal(pulseaudio->mainloop, 0);
} }
@ -284,6 +286,14 @@ void print_puau_sink_description(struct text_object *obj, char *p, int p_max_siz
snprintf(p, p_max_size, "%s", get_pulseaudio(obj).sink_description.c_str()); snprintf(p, p_max_size, "%s", get_pulseaudio(obj).sink_description.c_str());
} }
void print_puau_sink_active_port_name(struct text_object *obj, char *p, int p_max_size) {
snprintf(p, p_max_size, "%s", get_pulseaudio(obj).sink_active_port_name.c_str());
}
void print_puau_sink_active_port_description(struct text_object *obj, char *p, int p_max_size) {
snprintf(p, p_max_size, "%s", get_pulseaudio(obj).sink_active_port_description.c_str());
}
void print_puau_card_active_profile(struct text_object *obj, char *p, int p_max_size) { void print_puau_card_active_profile(struct text_object *obj, char *p, int p_max_size) {
snprintf(p, p_max_size, "%s", get_pulseaudio(obj).card_active_profile_description.c_str()); snprintf(p, p_max_size, "%s", get_pulseaudio(obj).card_active_profile_description.c_str());
} }

View File

@ -38,6 +38,8 @@ void init_pulseaudio(struct text_object *obj);
void free_pulseaudio(struct text_object *obj); void free_pulseaudio(struct text_object *obj);
uint8_t puau_vol(struct text_object *); // preserve pa_* for libpulse uint8_t puau_vol(struct text_object *); // preserve pa_* for libpulse
void print_puau_sink_description(struct text_object *obj, char *p, int p_max_size); void print_puau_sink_description(struct text_object *obj, char *p, int p_max_size);
void print_puau_sink_active_port_name(struct text_object *obj, char *p, int p_max_size);
void print_puau_sink_active_port_description(struct text_object *obj, char *p, int p_max_size);
void print_puau_card_name(struct text_object *obj, char *p, int p_max_size); void print_puau_card_name(struct text_object *obj, char *p, int p_max_size);
void print_puau_card_active_profile(struct text_object *obj, char *p, int p_max_size); void print_puau_card_active_profile(struct text_object *obj, char *p, int p_max_size);
double puau_volumebarval(struct text_object *obj); double puau_volumebarval(struct text_object *obj);
@ -47,6 +49,8 @@ struct pulseaudio_default_results {
// default sink // default sink
std::string sink_name; std::string sink_name;
std::string sink_description; std::string sink_description;
std::string sink_active_port_name;
std::string sink_active_port_description;
uint32_t sink_card; uint32_t sink_card;
int sink_mute; int sink_mute;
uint32_t sink_index; uint32_t sink_index;
@ -77,7 +81,7 @@ class pulseaudio_c {
context(NULL), context(NULL),
cstate(PULSE_CONTEXT_INITIALIZING), cstate(PULSE_CONTEXT_INITIALIZING),
ninits(0), ninits(0),
result({ std::string(), std::string(), 0, 0, 0, 0, std::string(), std::string(), 0 }){}; result({ std::string(), std::string(), std::string(), std::string(), 0, 0, 0, 0, std::string(), std::string(), 0 }){};
}; };
#endif /* _PULSEAUDIO_H */ #endif /* _PULSEAUDIO_H */