forked from quickshell/quickshell
These don't appear to be intended for use by applications, only the non configured ones. This fixes the default device being unset on many computers and the device being lost on actions like headphone unplug which replace it.
62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <pipewire/extensions/metadata.h>
|
|
#include <pipewire/type.h>
|
|
#include <qobject.h>
|
|
#include <qtmetamacros.h>
|
|
|
|
#include "core.hpp"
|
|
#include "registry.hpp"
|
|
|
|
namespace qs::service::pipewire {
|
|
|
|
constexpr const char TYPE_INTERFACE_Metadata[] = PW_TYPE_INTERFACE_Metadata; // NOLINT
|
|
class PwMetadata
|
|
: public PwBindable<pw_metadata, TYPE_INTERFACE_Metadata, PW_VERSION_METADATA> { // NOLINT
|
|
Q_OBJECT;
|
|
|
|
public:
|
|
void bindHooks() override;
|
|
void unbindHooks() override;
|
|
|
|
private:
|
|
static const pw_metadata_events EVENTS;
|
|
static int
|
|
onProperty(void* data, quint32 subject, const char* key, const char* type, const char* value);
|
|
|
|
SpaHook listener;
|
|
};
|
|
|
|
class PwDefaultsMetadata: public QObject {
|
|
Q_OBJECT;
|
|
|
|
public:
|
|
explicit PwDefaultsMetadata(PwRegistry* registry);
|
|
|
|
[[nodiscard]] QString defaultSource() const;
|
|
[[nodiscard]] QString defaultSink() const;
|
|
|
|
signals:
|
|
void defaultSourceChanged();
|
|
void defaultSinkChanged();
|
|
|
|
private slots:
|
|
void onMetadataUpdate(
|
|
PwMetadata* metadata,
|
|
quint32 subject,
|
|
const char* key,
|
|
const char* type,
|
|
const char* value
|
|
);
|
|
|
|
private:
|
|
static QString parseNameSpaJson(const char* spaJson);
|
|
|
|
PwBindableRef<PwMetadata> defaultSinkHolder;
|
|
PwBindableRef<PwMetadata> defaultSourceHolder;
|
|
|
|
QString mDefaultSink;
|
|
QString mDefaultSource;
|
|
};
|
|
|
|
} // namespace qs::service::pipewire
|