Merge branch 'master' into feat-mpd_smart_title
This commit is contained in:
6
flake.lock
generated
6
flake.lock
generated
@@ -18,11 +18,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1759036355,
|
"lastModified": 1760878510,
|
||||||
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
|
"narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
|
"rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
@@ -43,13 +43,13 @@ class CavaBackend final {
|
|||||||
util::SleeperThread thread_;
|
util::SleeperThread thread_;
|
||||||
util::SleeperThread read_thread_;
|
util::SleeperThread read_thread_;
|
||||||
// Cava API to read audio source
|
// Cava API to read audio source
|
||||||
::cava::ptr input_source_;
|
::cava::ptr input_source_{NULL};
|
||||||
|
|
||||||
struct ::cava::error_s error_{}; // cava errors
|
struct ::cava::error_s error_{}; // cava errors
|
||||||
struct ::cava::config_params prm_{}; // cava parameters
|
struct ::cava::config_params prm_{}; // cava parameters
|
||||||
struct ::cava::audio_raw audio_raw_{}; // cava handled raw audio data(is based on audio_data)
|
struct ::cava::audio_raw audio_raw_{}; // cava handled raw audio data(is based on audio_data)
|
||||||
struct ::cava::audio_data audio_data_{}; // cava audio data
|
struct ::cava::audio_data audio_data_{}; // cava audio data
|
||||||
struct ::cava::cava_plan* plan_; //{new cava_plan{}};
|
struct ::cava::cava_plan* plan_{NULL}; //{new cava_plan{}};
|
||||||
|
|
||||||
std::chrono::seconds fetch_input_delay_{4};
|
std::chrono::seconds fetch_input_delay_{4};
|
||||||
// Delay to handle audio source
|
// Delay to handle audio source
|
||||||
|
|||||||
@@ -77,12 +77,12 @@ The slider is a component with multiple CSS Nodes, of which the following are ex
|
|||||||
min-height: 80px;
|
min-height: 80px;
|
||||||
min-width: 10px;
|
min-width: 10px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
background-color: black;
|
background: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pulseaudio-slider highlight {
|
#pulseaudio-slider highlight {
|
||||||
min-width: 10px;
|
min-width: 10px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
background-color: green;
|
background: green;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
cava = dependency('cava',
|
cava = dependency('cava',
|
||||||
version : '>=0.10.4',
|
version : '>=0.10.6',
|
||||||
required: get_option('cava'),
|
required: get_option('cava'),
|
||||||
fallback : ['cava', 'cava_dep'],
|
fallback : ['cava', 'cava_dep'],
|
||||||
not_found_message: 'cava is not found. Building waybar without cava')
|
not_found_message: 'cava is not found. Building waybar without cava')
|
||||||
|
|||||||
@@ -5,17 +5,17 @@
|
|||||||
version,
|
version,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
libcava = rec {
|
libcava = {
|
||||||
version = "0.10.4";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
owner = "LukashonakV";
|
owner = "LukashonakV";
|
||||||
repo = "cava";
|
repo = "cava";
|
||||||
tag = version;
|
# NOTE: Needs to match the cava.wrap
|
||||||
hash = "sha256-9eTDqM+O1tA/3bEfd1apm8LbEcR9CVgELTIspSVPMKM=";
|
rev = "23efcced43b5a395747b18a2e5f2171fc0925d18";
|
||||||
|
hash = "sha256-CNspaoK5KuME0GfaNijpC24BfALngzNi04/VNwPqMvo=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
(waybar.overrideAttrs (oldAttrs: {
|
waybar.overrideAttrs (oldAttrs: {
|
||||||
inherit version;
|
inherit version;
|
||||||
|
|
||||||
src = lib.cleanSourceWith {
|
src = lib.cleanSourceWith {
|
||||||
@@ -39,8 +39,8 @@ in
|
|||||||
|
|
||||||
postUnpack = ''
|
postUnpack = ''
|
||||||
pushd "$sourceRoot"
|
pushd "$sourceRoot"
|
||||||
cp -R --no-preserve=mode,ownership ${libcava.src} subprojects/cava-${libcava.version}
|
cp -R --no-preserve=mode,ownership ${libcava.src} subprojects/cava
|
||||||
patchShebangs .
|
patchShebangs .
|
||||||
popd
|
popd
|
||||||
'';
|
'';
|
||||||
}))
|
})
|
||||||
|
|||||||
@@ -183,16 +183,24 @@ const std::string waybar::Client::getStyle(const std::string &style,
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto waybar::Client::setupCss(const std::string &css_file) -> void {
|
auto waybar::Client::setupCss(const std::string &css_file) -> void {
|
||||||
css_provider_ = Gtk::CssProvider::create();
|
auto screen = Gdk::Screen::get_default();
|
||||||
style_context_ = Gtk::StyleContext::create();
|
if (!screen) {
|
||||||
|
throw std::runtime_error("No default screen");
|
||||||
|
}
|
||||||
|
|
||||||
// Load our css file, wherever that may be hiding
|
if (css_provider_) {
|
||||||
|
Gtk::StyleContext::remove_provider_for_screen(screen, css_provider_);
|
||||||
|
css_provider_.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
css_provider_ = Gtk::CssProvider::create();
|
||||||
if (!css_provider_->load_from_path(css_file)) {
|
if (!css_provider_->load_from_path(css_file)) {
|
||||||
|
css_provider_.reset();
|
||||||
throw std::runtime_error("Can't open style file");
|
throw std::runtime_error("Can't open style file");
|
||||||
}
|
}
|
||||||
// there's always only one screen
|
|
||||||
style_context_->add_provider_for_screen(Gdk::Screen::get_default(), css_provider_,
|
Gtk::StyleContext::add_provider_for_screen(screen, css_provider_,
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_USER);
|
GTK_STYLE_PROVIDER_PRIORITY_USER);
|
||||||
}
|
}
|
||||||
|
|
||||||
void waybar::Client::bindInterfaces() {
|
void waybar::Client::bindInterfaces() {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) {
|
|||||||
// Load cava config
|
// Load cava config
|
||||||
error_.length = 0;
|
error_.length = 0;
|
||||||
|
|
||||||
if (!load_config(cfgPath, &prm_, false, &error_)) {
|
if (!load_config(cfgPath, &prm_, false, &error_, 0)) {
|
||||||
spdlog::error("cava backend. Error loading config. {0}", error_.message);
|
spdlog::error("cava backend. Error loading config. {0}", error_.message);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -26,8 +26,10 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) {
|
|||||||
// Override cava parameters by the user config
|
// Override cava parameters by the user config
|
||||||
prm_.inAtty = 0;
|
prm_.inAtty = 0;
|
||||||
prm_.output = ::cava::output_method::OUTPUT_RAW;
|
prm_.output = ::cava::output_method::OUTPUT_RAW;
|
||||||
strcpy(prm_.data_format, "ascii");
|
if (prm_.data_format) free(prm_.data_format);
|
||||||
strcpy(prm_.raw_target, "/dev/stdout");
|
prm_.data_format = strdup("ascii");
|
||||||
|
if (prm_.raw_target) free(prm_.raw_target);
|
||||||
|
prm_.raw_target = strdup("/dev/stdout");
|
||||||
prm_.ascii_range = config["format-icons"].size() - 1;
|
prm_.ascii_range = config["format-icons"].size() - 1;
|
||||||
|
|
||||||
prm_.bar_width = 2;
|
prm_.bar_width = 2;
|
||||||
@@ -54,7 +56,10 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) {
|
|||||||
if (config["sleep_timer"].isInt()) prm_.sleep_timer = config["sleep_timer"].asInt();
|
if (config["sleep_timer"].isInt()) prm_.sleep_timer = config["sleep_timer"].asInt();
|
||||||
if (config["method"].isString())
|
if (config["method"].isString())
|
||||||
prm_.input = ::cava::input_method_by_name(config["method"].asString().c_str());
|
prm_.input = ::cava::input_method_by_name(config["method"].asString().c_str());
|
||||||
if (config["source"].isString()) prm_.audio_source = config["source"].asString().data();
|
if (config["source"].isString()) {
|
||||||
|
if (prm_.audio_source) free(prm_.audio_source);
|
||||||
|
prm_.audio_source = config["source"].asString().data();
|
||||||
|
}
|
||||||
if (config["sample_rate"].isNumeric()) prm_.samplerate = config["sample_rate"].asLargestInt();
|
if (config["sample_rate"].isNumeric()) prm_.samplerate = config["sample_rate"].asLargestInt();
|
||||||
if (config["sample_bits"].isInt()) prm_.samplebits = config["sample_bits"].asInt();
|
if (config["sample_bits"].isInt()) prm_.samplebits = config["sample_bits"].asInt();
|
||||||
if (config["stereo"].isBool()) prm_.stereo = config["stereo"].asBool();
|
if (config["stereo"].isBool()) prm_.stereo = config["stereo"].asBool();
|
||||||
@@ -67,25 +72,14 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) {
|
|||||||
if (config["input_delay"].isInt())
|
if (config["input_delay"].isInt())
|
||||||
fetch_input_delay_ = std::chrono::seconds(config["input_delay"].asInt());
|
fetch_input_delay_ = std::chrono::seconds(config["input_delay"].asInt());
|
||||||
|
|
||||||
// Make cava parameters configuration
|
|
||||||
plan_ = new ::cava::cava_plan{};
|
|
||||||
|
|
||||||
audio_raw_.height = prm_.ascii_range;
|
audio_raw_.height = prm_.ascii_range;
|
||||||
audio_data_.format = -1;
|
audio_data_.format = -1;
|
||||||
audio_data_.source = new char[1 + strlen(prm_.audio_source)];
|
|
||||||
audio_data_.source[0] = '\0';
|
|
||||||
strcpy(audio_data_.source, prm_.audio_source);
|
|
||||||
|
|
||||||
audio_data_.rate = 0;
|
audio_data_.rate = 0;
|
||||||
audio_data_.samples_counter = 0;
|
audio_data_.samples_counter = 0;
|
||||||
audio_data_.channels = 2;
|
audio_data_.channels = 2;
|
||||||
audio_data_.IEEE_FLOAT = 0;
|
audio_data_.IEEE_FLOAT = 0;
|
||||||
|
|
||||||
audio_data_.input_buffer_size = BUFFER_SIZE * audio_data_.channels;
|
audio_data_.input_buffer_size = BUFFER_SIZE * audio_data_.channels;
|
||||||
audio_data_.cava_buffer_size = audio_data_.input_buffer_size * 8;
|
audio_data_.cava_buffer_size = audio_data_.input_buffer_size * 8;
|
||||||
|
|
||||||
audio_data_.cava_in = new double[audio_data_.cava_buffer_size]{0.0};
|
|
||||||
|
|
||||||
audio_data_.terminate = 0;
|
audio_data_.terminate = 0;
|
||||||
audio_data_.suspendFlag = false;
|
audio_data_.suspendFlag = false;
|
||||||
input_source_ = get_input(&audio_data_, &prm_);
|
input_source_ = get_input(&audio_data_, &prm_);
|
||||||
@@ -95,8 +89,9 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make cava parameters configuration
|
||||||
// Init cava plan, audio_raw structure
|
// Init cava plan, audio_raw structure
|
||||||
audio_raw_init(&audio_data_, &audio_raw_, &prm_, plan_);
|
audio_raw_init(&audio_data_, &audio_raw_, &prm_, &plan_);
|
||||||
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
|
||||||
// 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
|
||||||
@@ -118,8 +113,16 @@ waybar::modules::cava::CavaBackend::CavaBackend(const Json::Value& config) {
|
|||||||
waybar::modules::cava::CavaBackend::~CavaBackend() {
|
waybar::modules::cava::CavaBackend::~CavaBackend() {
|
||||||
thread_.stop();
|
thread_.stop();
|
||||||
read_thread_.stop();
|
read_thread_.stop();
|
||||||
|
cava_destroy(plan_);
|
||||||
delete plan_;
|
delete plan_;
|
||||||
plan_ = nullptr;
|
plan_ = nullptr;
|
||||||
|
audio_raw_clean(&audio_raw_);
|
||||||
|
pthread_mutex_lock(&audio_data_.lock);
|
||||||
|
audio_data_.terminate = 1;
|
||||||
|
pthread_mutex_unlock(&audio_data_.lock);
|
||||||
|
config_clean(&prm_);
|
||||||
|
free(audio_data_.source);
|
||||||
|
free(audio_data_.cava_in);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void upThreadDelay(std::chrono::milliseconds& delay, std::chrono::seconds& delta) {
|
static void upThreadDelay(std::chrono::milliseconds& delay, std::chrono::seconds& delta) {
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ const unsigned cldRowsInMonth(const year_month& ym, const weekday& firstdow) {
|
|||||||
auto cldGetWeekForLine(const year_month& ym, const weekday& firstdow, const unsigned line)
|
auto cldGetWeekForLine(const year_month& ym, const weekday& firstdow, const unsigned line)
|
||||||
-> const year_month_weekday {
|
-> const year_month_weekday {
|
||||||
const unsigned idx = line - 2;
|
const unsigned idx = line - 2;
|
||||||
const std::chrono::weekday_indexed indexed_first_day_of_week =
|
const auto indexed_first_day_of_week =
|
||||||
weekday{ym / 1} == firstdow ? firstdow[idx + 1] : firstdow[idx];
|
weekday{ym / 1} == firstdow ? firstdow[idx + 1] : firstdow[idx];
|
||||||
|
|
||||||
return ym / indexed_first_day_of_week;
|
return ym / indexed_first_day_of_week;
|
||||||
|
|||||||
@@ -201,7 +201,9 @@ BacklightBackend::BacklightBackend(std::chrono::milliseconds interval,
|
|||||||
const auto &event = events[i];
|
const auto &event = events[i];
|
||||||
check_eq(event.data.fd, udev_fd, "unexpected udev fd");
|
check_eq(event.data.fd, udev_fd, "unexpected udev fd");
|
||||||
std::unique_ptr<udev_device, UdevDeviceDeleter> dev{udev_monitor_receive_device(mon.get())};
|
std::unique_ptr<udev_device, UdevDeviceDeleter> dev{udev_monitor_receive_device(mon.get())};
|
||||||
check_nn(dev.get(), "epoll dev was null");
|
if (!dev) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
upsert_device(devices, dev.get());
|
upsert_device(devices, dev.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
[wrap-file]
|
[wrap-git]
|
||||||
directory = cava-0.10.4
|
url = https://github.com/LukashonakV/cava.git
|
||||||
source_url = https://github.com/LukashonakV/cava/archive/0.10.4.tar.gz
|
revision = 23efcced43b5a395747b18a2e5f2171fc0925d18
|
||||||
source_filename = cava-0.10.4.tar.gz
|
depth = 1
|
||||||
source_hash =7bc1c1f9535f2bcc5cd2ae8a2434a2e3a05f5670b1c96316df304137ffc65756
|
|
||||||
|
#directory = cava-0.10.6
|
||||||
|
#source_url = https://github.com/LukashonakV/cava/archive/0.10.6.tar.gz
|
||||||
|
#source_filename = cava-0.10.6.tar.gz
|
||||||
|
#source_hash = e715c4c6a625b8dc063e57e8e81c80e4d1015ec1b98db69a283b2c6770f839f4
|
||||||
[provide]
|
[provide]
|
||||||
cava = cava_dep
|
cava = cava_dep
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
[wrap-file]
|
[wrap-file]
|
||||||
directory = fmt-11.0.2
|
directory = fmt-12.0.0
|
||||||
source_url = https://github.com/fmtlib/fmt/archive/11.0.2.tar.gz
|
source_url = https://github.com/fmtlib/fmt/archive/12.0.0.tar.gz
|
||||||
source_filename = fmt-11.0.2.tar.gz
|
source_filename = fmt-12.0.0.tar.gz
|
||||||
source_hash = 6cb1e6d37bdcb756dbbe59be438790db409cdb4868c66e888d5df9f13f7c027f
|
source_hash = aa3e8fbb6a0066c03454434add1f1fc23299e85758ceec0d7d2d974431481e40
|
||||||
patch_filename = fmt_11.0.2-1_patch.zip
|
patch_filename = fmt_12.0.0-1_patch.zip
|
||||||
patch_url = https://wrapdb.mesonbuild.com/v2/fmt_11.0.2-1/get_patch
|
patch_url = https://wrapdb.mesonbuild.com/v2/fmt_12.0.0-1/get_patch
|
||||||
patch_hash = 90c9e3b8e8f29713d40ca949f6f93ad115d78d7fb921064112bc6179e6427c5e
|
patch_hash = 307f288ebf3850abf2f0c50ac1fb07de97df9538d39146d802f3c0d6cada8998
|
||||||
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_11.0.2-1/fmt-11.0.2.tar.gz
|
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_12.0.0-1/fmt-12.0.0.tar.gz
|
||||||
wrapdb_version = 11.0.2-1
|
wrapdb_version = 12.0.0-1
|
||||||
|
|
||||||
[provide]
|
[provide]
|
||||||
fmt = fmt_dep
|
fmt = fmt_dep
|
||||||
|
|||||||
Reference in New Issue
Block a user