Moving GTK dispatcher into frontend
This commit is contained in:
parent
13519ca5bf
commit
52f4db1154
|
|
@ -41,7 +41,8 @@ class CavaBackend final {
|
||||||
private:
|
private:
|
||||||
CavaBackend(const Json::Value& config);
|
CavaBackend(const Json::Value& config);
|
||||||
util::SleeperThread read_thread_;
|
util::SleeperThread read_thread_;
|
||||||
sigc::connection out_thread_;
|
util::SleeperThread out_thread_;
|
||||||
|
|
||||||
// Cava API to read audio source
|
// Cava API to read audio source
|
||||||
::cava::ptr input_source_{NULL};
|
::cava::ptr input_source_{NULL};
|
||||||
|
|
||||||
|
|
@ -69,7 +70,6 @@ class CavaBackend final {
|
||||||
void doUpdate(bool force = false);
|
void doUpdate(bool force = false);
|
||||||
void loadConfig();
|
void loadConfig();
|
||||||
void freeBackend();
|
void freeBackend();
|
||||||
void doOutReadConnect();
|
|
||||||
|
|
||||||
// Signal
|
// Signal
|
||||||
type_signal_update m_signal_update_;
|
type_signal_update m_signal_update_;
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ auto waybar::modules::cava::Cava::doAction(const std::string& name) -> void {
|
||||||
// Cava actions
|
// Cava actions
|
||||||
void waybar::modules::cava::Cava::pause_resume() { backend_->doPauseResume(); }
|
void waybar::modules::cava::Cava::pause_resume() { backend_->doPauseResume(); }
|
||||||
auto waybar::modules::cava::Cava::onUpdate(const std::string& input) -> void {
|
auto waybar::modules::cava::Cava::onUpdate(const std::string& input) -> void {
|
||||||
|
Glib::signal_idle().connect_once([this, input]() {
|
||||||
if (silence_) {
|
if (silence_) {
|
||||||
label_.get_style_context()->remove_class("silent");
|
label_.get_style_context()->remove_class("silent");
|
||||||
if (!label_.get_style_context()->has_class("updated"))
|
if (!label_.get_style_context()->has_class("updated"))
|
||||||
|
|
@ -36,9 +37,12 @@ auto waybar::modules::cava::Cava::onUpdate(const std::string& input) -> void {
|
||||||
label_.set_markup(label_text_);
|
label_.set_markup(label_text_);
|
||||||
label_.show();
|
label_.show();
|
||||||
ALabel::update();
|
ALabel::update();
|
||||||
|
});
|
||||||
silence_ = false;
|
silence_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto waybar::modules::cava::Cava::onSilence() -> void {
|
auto waybar::modules::cava::Cava::onSilence() -> void {
|
||||||
|
Glib::signal_idle().connect_once([this]() {
|
||||||
if (!silence_) {
|
if (!silence_) {
|
||||||
if (label_.get_style_context()->has_class("updated"))
|
if (label_.get_style_context()->has_class("updated"))
|
||||||
label_.get_style_context()->remove_class("updated");
|
label_.get_style_context()->remove_class("updated");
|
||||||
|
|
@ -50,4 +54,5 @@ auto waybar::modules::cava::Cava::onSilence() -> void {
|
||||||
silence_ = true;
|
silence_ = true;
|
||||||
label_.get_style_context()->add_class("silent");
|
label_.get_style_context()->add_class("silent");
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,6 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) : con
|
||||||
loadConfig();
|
loadConfig();
|
||||||
// Read audio source trough cava API. Cava orginizes this process via infinity loop
|
// Read audio source trough cava API. Cava orginizes this process via infinity loop
|
||||||
read_thread_ = [this] {
|
read_thread_ = [this] {
|
||||||
// Thread safe reading incoming source and do callbacks
|
|
||||||
doOutReadConnect();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
input_source_(&audio_data_);
|
input_source_(&audio_data_);
|
||||||
} catch (const std::runtime_error& e) {
|
} catch (const std::runtime_error& e) {
|
||||||
|
|
@ -25,9 +22,19 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) : con
|
||||||
read_thread_.sleep_for(fetch_input_delay_);
|
read_thread_.sleep_for(fetch_input_delay_);
|
||||||
loadConfig();
|
loadConfig();
|
||||||
};
|
};
|
||||||
|
// Write outcoming data. Emit signals
|
||||||
|
out_thread_ = [this] {
|
||||||
|
Update();
|
||||||
|
out_thread_.sleep_for(frame_time_milsec_);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
waybar::modules::cava::CavaBackend::~CavaBackend() { freeBackend(); }
|
waybar::modules::cava::CavaBackend::~CavaBackend() {
|
||||||
|
out_thread_.stop();
|
||||||
|
read_thread_.stop();
|
||||||
|
|
||||||
|
freeBackend();
|
||||||
|
}
|
||||||
|
|
||||||
static bool upThreadDelay(std::chrono::milliseconds& delay, std::chrono::seconds& delta) {
|
static bool upThreadDelay(std::chrono::milliseconds& delay, std::chrono::seconds& delta) {
|
||||||
if (delta == std::chrono::seconds{0}) {
|
if (delta == std::chrono::seconds{0}) {
|
||||||
|
|
@ -94,7 +101,7 @@ void waybar::modules::cava::CavaBackend::doPauseResume() {
|
||||||
upThreadDelay(frame_time_milsec_, suspend_silence_delay_);
|
upThreadDelay(frame_time_milsec_, suspend_silence_delay_);
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&audio_data_.lock);
|
pthread_mutex_unlock(&audio_data_.lock);
|
||||||
doOutReadConnect();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
waybar::modules::cava::CavaBackend::type_signal_update
|
waybar::modules::cava::CavaBackend::type_signal_update
|
||||||
|
|
@ -124,19 +131,17 @@ void waybar::modules::cava::CavaBackend::doUpdate(bool force) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!silence_ || prm_.sleep_timer == 0) {
|
if (!silence_ || prm_.sleep_timer == 0) {
|
||||||
if (downThreadDelay(frame_time_milsec_, suspend_silence_delay_)) doOutReadConnect();
|
if (downThreadDelay(frame_time_milsec_, suspend_silence_delay_)) Update();
|
||||||
execute();
|
execute();
|
||||||
if (re_paint_ == 1 || force) m_signal_update_.emit(output_);
|
if (re_paint_ == 1 || force) m_signal_update_.emit(output_);
|
||||||
} else {
|
} else {
|
||||||
if (upThreadDelay(frame_time_milsec_, suspend_silence_delay_)) doOutReadConnect();
|
if (upThreadDelay(frame_time_milsec_, suspend_silence_delay_)) Update();
|
||||||
if (silence_ != silence_prev_ || force) m_signal_silence_.emit();
|
if (silence_ != silence_prev_ || force) m_signal_silence_.emit();
|
||||||
}
|
}
|
||||||
silence_prev_ = silence_;
|
silence_prev_ = silence_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void waybar::modules::cava::CavaBackend::freeBackend() {
|
void waybar::modules::cava::CavaBackend::freeBackend() {
|
||||||
out_thread_.disconnect();
|
|
||||||
|
|
||||||
if (plan_ != NULL) {
|
if (plan_ != NULL) {
|
||||||
cava_destroy(plan_);
|
cava_destroy(plan_);
|
||||||
plan_ = NULL;
|
plan_ = NULL;
|
||||||
|
|
@ -238,14 +243,3 @@ void waybar::modules::cava::CavaBackend::loadConfig() {
|
||||||
if (!plan_) spdlog::error("cava backend plan is not provided");
|
if (!plan_) spdlog::error("cava backend plan is not provided");
|
||||||
audio_raw_.previous_frame[0] = -1; // For first Update() call need to rePaint text message
|
audio_raw_.previous_frame[0] = -1; // For first Update() call need to rePaint text message
|
||||||
}
|
}
|
||||||
|
|
||||||
void waybar::modules::cava::CavaBackend::doOutReadConnect() {
|
|
||||||
out_thread_.disconnect();
|
|
||||||
// Thread safe reading incoming source and do callbacks
|
|
||||||
out_thread_ = Glib::signal_timeout().connect(
|
|
||||||
[&]() {
|
|
||||||
Update();
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
frame_time_milsec_.count());
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue