service/pipewire: refactor defaults and metadata handling

This commit is contained in:
outfoxxed 2024-09-23 18:41:38 -07:00
parent 7f9762be53
commit f889f08901
Signed by untrusted user: outfoxxed
GPG key ID: 4C88A185FB89301E
11 changed files with 455 additions and 144 deletions

View file

@ -0,0 +1,73 @@
#pragma once
#include <qobject.h>
#include <qtmetamacros.h>
#include "registry.hpp"
namespace qs::service::pipewire {
class PwDefaultTracker: public QObject {
Q_OBJECT;
public:
explicit PwDefaultTracker(PwRegistry* registry);
[[nodiscard]] PwNode* defaultSink() const;
[[nodiscard]] PwNode* defaultSource() const;
[[nodiscard]] PwNode* defaultConfiguredSink() const;
[[nodiscard]] const QString& defaultConfiguredSinkName() const;
[[nodiscard]] PwNode* defaultConfiguredSource() const;
[[nodiscard]] const QString& defaultConfiguredSourceName() const;
signals:
void defaultSinkChanged();
void defaultSinkNameChanged();
void defaultSourceChanged();
void defaultSourceNameChanged();
void defaultConfiguredSinkChanged();
void defaultConfiguredSinkNameChanged();
void defaultConfiguredSourceChanged();
void defaultConfiguredSourceNameChanged();
private slots:
void onMetadataAdded(PwMetadata* metadata);
void onMetadataProperty(const char* key, const char* type, const char* value);
void onNodeAdded(PwNode* node);
void onNodeDestroyed(QObject* node);
private:
void setDefaultSink(PwNode* node);
void setDefaultSinkName(const QString& name);
void setDefaultSource(PwNode* node);
void setDefaultSourceName(const QString& name);
void setDefaultConfiguredSink(PwNode* node);
void setDefaultConfiguredSinkName(const QString& name);
void setDefaultConfiguredSource(PwNode* node);
void setDefaultConfiguredSourceName(const QString& name);
PwRegistry* registry;
PwBindableRef<PwMetadata> defaultsMetadata;
PwNode* mDefaultSink = nullptr;
QString mDefaultSinkName;
PwNode* mDefaultSource = nullptr;
QString mDefaultSourceName;
PwNode* mDefaultConfiguredSink = nullptr;
QString mDefaultConfiguredSinkName;
PwNode* mDefaultConfiguredSource = nullptr;
QString mDefaultConfiguredSourceName;
};
} // namespace qs::service::pipewire