Style code (#25)

This commit is contained in:
Alex
2018-08-16 14:29:41 +02:00
committed by GitHub
parent 3fdc50163d
commit 6635548d3e
31 changed files with 761 additions and 664 deletions

View File

@ -1,39 +1,44 @@
#include "modules/pulseaudio.hpp"
waybar::modules::Pulseaudio::Pulseaudio(Json::Value config)
: _config(config), _mainloop(nullptr), _mainloop_api(nullptr),
_context(nullptr), _sinkIdx(0), _volume(0), _muted(false)
: config_(std::move(config)), mainloop_(nullptr), mainloop_api_(nullptr),
context_(nullptr), sink_idx_(0), volume_(0), muted_(false)
{
_label.set_name("pulseaudio");
_mainloop = pa_threaded_mainloop_new();
if (!_mainloop)
label_.set_name("pulseaudio");
mainloop_ = pa_threaded_mainloop_new();
if (mainloop_ == nullptr) {
throw std::runtime_error("pa_mainloop_new() failed.");
pa_threaded_mainloop_lock(_mainloop);
_mainloop_api = pa_threaded_mainloop_get_api(_mainloop);
_context = pa_context_new(_mainloop_api, "waybar");
if (!_context)
}
pa_threaded_mainloop_lock(mainloop_);
mainloop_api_ = pa_threaded_mainloop_get_api(mainloop_);
context_ = pa_context_new(mainloop_api_, "waybar");
if (context_ == nullptr) {
throw std::runtime_error("pa_context_new() failed.");
if (pa_context_connect(_context, NULL, PA_CONTEXT_NOAUTOSPAWN, NULL) < 0)
throw std::runtime_error(fmt::format("pa_context_connect() failed: {}",
pa_strerror(pa_context_errno(_context))));
pa_context_set_state_callback(_context, _contextStateCb, this);
if (pa_threaded_mainloop_start(_mainloop) < 0)
}
if (pa_context_connect(context_, nullptr, PA_CONTEXT_NOAUTOSPAWN,
nullptr) < 0) {
auto err = fmt::format("pa_context_connect() failed: {}",
pa_strerror(pa_context_errno(context_)));
throw std::runtime_error(err);
}
pa_context_set_state_callback(context_, contextStateCb, this);
if (pa_threaded_mainloop_start(mainloop_) < 0) {
throw std::runtime_error("pa_mainloop_run() failed.");
pa_threaded_mainloop_unlock(_mainloop);
}
pa_threaded_mainloop_unlock(mainloop_);
};
void waybar::modules::Pulseaudio::_contextStateCb(pa_context *c, void *data)
void waybar::modules::Pulseaudio::contextStateCb(pa_context *c, void *data)
{
auto pa = static_cast<waybar::modules::Pulseaudio *>(data);
switch (pa_context_get_state(c)) {
case PA_CONTEXT_TERMINATED:
pa->_mainloop_api->quit(pa->_mainloop_api, 0);
pa->mainloop_api_->quit(pa->mainloop_api_, 0);
break;
case PA_CONTEXT_READY:
pa_context_get_server_info(c, _serverInfoCb, data);
pa_context_set_subscribe_callback(c, _subscribeCb, data);
pa_context_subscribe(c, PA_SUBSCRIPTION_MASK_SINK, nullptr,
nullptr);
pa_context_get_server_info(c, serverInfoCb, data);
pa_context_set_subscribe_callback(c, subscribeCb, data);
pa_context_subscribe(c, PA_SUBSCRIPTION_MASK_SINK, nullptr, nullptr);
break;
case PA_CONTEXT_CONNECTING:
case PA_CONTEXT_AUTHORIZING:
@ -41,7 +46,7 @@ void waybar::modules::Pulseaudio::_contextStateCb(pa_context *c, void *data)
break;
case PA_CONTEXT_FAILED:
default:
pa->_mainloop_api->quit(pa->_mainloop_api, 1);
pa->mainloop_api_->quit(pa->mainloop_api_, 1);
break;
}
}
@ -49,37 +54,35 @@ void waybar::modules::Pulseaudio::_contextStateCb(pa_context *c, void *data)
/*
* Called when an event we subscribed to occurs.
*/
void waybar::modules::Pulseaudio::_subscribeCb(pa_context *context,
pa_subscription_event_type_t type, uint32_t idx, void *data)
void waybar::modules::Pulseaudio::subscribeCb(pa_context* context,
pa_subscription_event_type_t type, uint32_t idx, void* data)
{
unsigned facility = type & PA_SUBSCRIPTION_EVENT_FACILITY_MASK;
pa_operation *op = nullptr;
switch (facility) {
case PA_SUBSCRIPTION_EVENT_SINK:
pa_context_get_sink_info_by_index(context, idx, _sinkInfoCb, data);
break;
default:
assert(0);
break;
case PA_SUBSCRIPTION_EVENT_SINK:
pa_context_get_sink_info_by_index(context, idx, sinkInfoCb, data);
break;
default:
assert(0);
break;
}
if (op)
pa_operation_unref(op);
}
/*
* Called when the requested sink information is ready.
*/
void waybar::modules::Pulseaudio::_sinkInfoCb(pa_context *context,
const pa_sink_info *i, int eol, void *data)
void waybar::modules::Pulseaudio::sinkInfoCb(pa_context* /*context*/,
const pa_sink_info* i, int /*eol*/, void* data)
{
if (i) {
if (i != nullptr) {
auto pa = static_cast<waybar::modules::Pulseaudio *>(data);
float volume = (float)pa_cvolume_avg(&(i->volume)) / (float)PA_VOLUME_NORM;
pa->_sinkIdx = i->index;
pa->_volume = volume * 100.0f;
pa->_muted = i->mute;
pa->_desc = i->description;
float volume = static_cast<float>(pa_cvolume_avg(&(i->volume)))
/ float{PA_VOLUME_NORM};
pa->sink_idx_ = i->index;
pa->volume_ = volume * 100.0f;
pa->muted_ = i->mute != 0;
pa->desc_ = i->description;
Glib::signal_idle().connect_once(sigc::mem_fun(*pa, &Pulseaudio::update));
}
}
@ -88,36 +91,40 @@ void waybar::modules::Pulseaudio::_sinkInfoCb(pa_context *context,
* Called when the requested information on the server is ready. This is
* used to find the default PulseAudio sink.
*/
void waybar::modules::Pulseaudio::_serverInfoCb(pa_context *context,
void waybar::modules::Pulseaudio::serverInfoCb(pa_context *context,
const pa_server_info *i, void *data)
{
pa_context_get_sink_info_by_name(context, i->default_sink_name, _sinkInfoCb,
data);
pa_context_get_sink_info_by_name(context, i->default_sink_name,
sinkInfoCb, data);
}
auto waybar::modules::Pulseaudio::update() -> void
{
auto format = _config["format"] ? _config["format"].asString() : "{volume}%";
if (_muted) {
auto format =
config_["format"] ? config_["format"].asString() : "{volume}%";
if (muted_) {
format =
_config["format-muted"] ? _config["format-muted"].asString() : format;
_label.get_style_context()->add_class("muted");
} else
_label.get_style_context()->remove_class("muted");
_label.set_label(fmt::format(format,
fmt::arg("volume", _volume),
fmt::arg("icon", _getIcon(_volume))));
_label.set_tooltip_text(_desc);
config_["format-muted"] ? config_["format-muted"].asString() : format;
label_.get_style_context()->add_class("muted");
} else {
label_.get_style_context()->remove_class("muted");
}
label_.set_label(fmt::format(format,
fmt::arg("volume", volume_),
fmt::arg("icon", getIcon(volume_))));
label_.set_tooltip_text(desc_);
}
std::string waybar::modules::Pulseaudio::_getIcon(uint16_t percentage)
std::string waybar::modules::Pulseaudio::getIcon(uint16_t percentage)
{
if (!_config["format-icons"] || !_config["format-icons"].isArray()) return "";
auto size = _config["format-icons"].size();
if (!config_["format-icons"] || !config_["format-icons"].isArray()) {
return "";
}
auto size = config_["format-icons"].size();
auto idx = std::clamp(percentage / (100 / size), 0U, size - 1);
return _config["format-icons"][idx].asString();
return config_["format-icons"][idx].asString();
}
waybar::modules::Pulseaudio::operator Gtk::Widget &() {
return _label;
return label_;
}