mirror of
https://github.com/librephoenix/nixos-config
synced 2025-01-19 07:05:51 +05:30
72 lines
2.6 KiB
Diff
72 lines
2.6 KiB
Diff
diff --git a/include/util/audio_backend.hpp b/include/util/audio_backend.hpp
|
|
index 2f53103e5..3737ae264 100644
|
|
--- a/include/util/audio_backend.hpp
|
|
+++ b/include/util/audio_backend.hpp
|
|
@@ -38,6 +38,8 @@ class AudioBackend {
|
|
std::string desc_;
|
|
std::string monitor_;
|
|
std::string current_sink_name_;
|
|
+ std::string default_sink_name;
|
|
+ bool default_sink_running_;
|
|
bool current_sink_running_;
|
|
// SOURCE
|
|
uint32_t source_idx_{0};
|
|
diff --git a/src/util/audio_backend.cpp b/src/util/audio_backend.cpp
|
|
index 3d90b6d5a..73aac148b 100644
|
|
--- a/src/util/audio_backend.cpp
|
|
+++ b/src/util/audio_backend.cpp
|
|
@@ -1,9 +1,12 @@
|
|
#include "util/audio_backend.hpp"
|
|
|
|
#include <fmt/core.h>
|
|
+#include <pulse/def.h>
|
|
#include <pulse/error.h>
|
|
+#include <pulse/introspect.h>
|
|
#include <pulse/subscribe.h>
|
|
#include <pulse/volume.h>
|
|
+#include <spdlog/spdlog.h>
|
|
|
|
#include <algorithm>
|
|
#include <cmath>
|
|
@@ -139,6 +142,10 @@ void AudioBackend::sinkInfoCb(pa_context * /*context*/, const pa_sink_info *i, i
|
|
void *data) {
|
|
if (i == nullptr) return;
|
|
|
|
+ auto running = i->state == PA_SINK_RUNNING;
|
|
+ auto idle = i->state == PA_SINK_IDLE;
|
|
+ spdlog::trace("Sink name {} Running:[{}] Idle:[{}]", i->name, running, idle);
|
|
+
|
|
auto *backend = static_cast<AudioBackend *>(data);
|
|
|
|
if (!backend->ignored_sinks_.empty()) {
|
|
@@ -155,11 +162,19 @@ void AudioBackend::sinkInfoCb(pa_context * /*context*/, const pa_sink_info *i, i
|
|
}
|
|
}
|
|
|
|
+ backend->default_sink_running_ = backend->default_sink_name == i->name &&
|
|
+ (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE);
|
|
+
|
|
+ if (i->name != backend->default_sink_name && !backend->default_sink_running_) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (backend->current_sink_name_ == i->name) {
|
|
- backend->current_sink_running_ = i->state == PA_SINK_RUNNING;
|
|
+ backend->current_sink_running_ = (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE);
|
|
}
|
|
|
|
- if (!backend->current_sink_running_ && i->state == PA_SINK_RUNNING) {
|
|
+ if (!backend->current_sink_running_ &&
|
|
+ (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE)) {
|
|
backend->current_sink_name_ = i->name;
|
|
backend->current_sink_running_ = true;
|
|
}
|
|
@@ -207,5 +222,6 @@ void AudioBackend::sourceInfoCb(pa_context * /*context*/, const pa_source_info *
|
|
void AudioBackend::serverInfoCb(pa_context *context, const pa_server_info *i, void *data) {
|
|
auto *backend = static_cast<AudioBackend *>(data);
|
|
backend->current_sink_name_ = i->default_sink_name;
|
|
+ backend->default_sink_name = i->default_sink_name;
|
|
backend->default_source_name_ = i->default_source_name;
|
|
|
|
pa_context_get_sink_info_list(context, sinkInfoCb, data);
|