Skip to content

Commit cddee21

Browse files
committed
Cava backend communicates using signals
1 parent 41de896 commit cddee21

File tree

8 files changed

+374
-273
lines changed

8 files changed

+374
-273
lines changed

include/modules/cava.hpp

Lines changed: 0 additions & 59 deletions
This file was deleted.

include/modules/cava/cava.hpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#pragma once
2+
3+
#include "ALabel.hpp"
4+
#include "cava_backend.hpp"
5+
6+
namespace waybar::modules::cava {
7+
8+
class Cava final : public ALabel, public sigc::trackable {
9+
public:
10+
Cava(const std::string&, const Json::Value&);
11+
~Cava() = default;
12+
auto onUpdate(const std::string& input) -> void;
13+
auto onSilence() -> void;
14+
auto doAction(const std::string& name) -> void override;
15+
16+
private:
17+
std::shared_ptr<CavaBackend> backend_;
18+
// Text to display
19+
std::string label_text_{""};
20+
bool hide_on_silence_{false};
21+
std::string format_silent_{""};
22+
int ascii_range_{0};
23+
bool silence_{false};
24+
// Cava method
25+
void pause_resume();
26+
// ModuleActionMap
27+
static inline std::map<const std::string, void (waybar::modules::cava::Cava::* const)()> actionMap_{
28+
{"mode", &waybar::modules::cava::Cava::pause_resume}};
29+
};
30+
} // namespace waybar::modules
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#pragma once
2+
3+
#include "util/sleeper_thread.hpp"
4+
5+
#include <json/json.h>
6+
#include <sigc++/sigc++.h>
7+
8+
namespace cava {
9+
extern "C" {
10+
// Need sdl_glsl output feature to be enabled on libcava
11+
#ifndef SDL_GLSL
12+
#define SDL_GLSL
13+
#endif
14+
15+
#include <cava/common.h>
16+
17+
#ifdef SDL_GLSL
18+
#undef SDL_GLSL
19+
#endif
20+
}
21+
} // namespace cava
22+
23+
namespace waybar::modules::cava {
24+
using namespace std::literals::chrono_literals;
25+
26+
class CavaBackend final {
27+
public:
28+
static std::shared_ptr<CavaBackend> inst(const Json::Value& config);
29+
30+
virtual ~CavaBackend();
31+
// Methods
32+
int getAsciiRange();
33+
void doPauseResume();
34+
//Signal accessor
35+
using type_signal_update = sigc::signal<void(const std::string&)>;
36+
type_signal_update signal_update();
37+
using type_signal_silence = sigc::signal<void()>;
38+
type_signal_silence signal_silence();
39+
40+
private:
41+
CavaBackend(const Json::Value& config);
42+
util::SleeperThread thread_;
43+
util::SleeperThread read_thread_;
44+
// Cava API to read audio source
45+
::cava::ptr input_source_;
46+
47+
struct ::cava::error_s error_{}; // cava errors
48+
struct ::cava::config_params prm_{}; // cava parameters
49+
struct ::cava::audio_raw audio_raw_{}; // cava handled raw audio data(is based on audio_data)
50+
struct ::cava::audio_data audio_data_{}; // cava audio data
51+
struct ::cava::cava_plan* plan_; //{new cava_plan{}};
52+
53+
std::chrono::seconds fetch_input_delay_{4};
54+
// Delay to handle audio source
55+
std::chrono::milliseconds frame_time_milsec_{1s};
56+
57+
int re_paint_{0};
58+
bool silence_{false};
59+
std::chrono::seconds suspend_silence_delay_{0};
60+
int sleep_counter_{0};
61+
std::string output_{};
62+
// Methods
63+
void invoke();
64+
void execute();
65+
bool isSilence();
66+
void doUpdate();
67+
68+
// Signal
69+
type_signal_update m_signal_update_;
70+
type_signal_silence m_signal_silence_;
71+
};
72+
} // namespace waybar::modules::cava

meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ cava = dependency('cava',
505505

506506
if cava.found()
507507
add_project_arguments('-DHAVE_LIBCAVA', language: 'cpp')
508-
src_files += files('src/modules/cava.cpp')
508+
src_files += files('src/modules/cava/cava.cpp', 'src/modules/cava/cava_backend.cpp')
509509
man_files += files('man/waybar-cava.5.scd')
510510
endif
511511

src/factory.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
#include "modules/wireplumber.hpp"
110110
#endif
111111
#ifdef HAVE_LIBCAVA
112-
#include "modules/cava.hpp"
112+
#include "modules/cava/cava.hpp"
113113
#endif
114114
#ifdef HAVE_SYSTEMD_MONITOR
115115
#include "modules/systemd_failed_units.hpp"
@@ -343,7 +343,7 @@ waybar::AModule* waybar::Factory::makeModule(const std::string& name,
343343
#endif
344344
#ifdef HAVE_LIBCAVA
345345
if (ref == "cava") {
346-
return new waybar::modules::Cava(id, config_[name]);
346+
return new waybar::modules::cava::Cava(id, config_[name]);
347347
}
348348
#endif
349349
#ifdef HAVE_SYSTEMD_MONITOR

0 commit comments

Comments
 (0)