You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libcutefish/audio/pulseobject.h

73 lines
1.7 KiB
C

4 years ago
/*
SPDX-FileCopyrightText: 2014-2015 Harald Sitter <sitter@kde.org>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#ifndef PULSEOBJECT_H
#define PULSEOBJECT_H
#include "debug.h"
#include <QObject>
#include <pulse/introspect.h>
namespace QPulseAudio
{
class Context;
class PulseObject : public QObject
{
Q_OBJECT
Q_PROPERTY(quint32 index READ index CONSTANT)
Q_PROPERTY(QString iconName READ iconName CONSTANT)
Q_PROPERTY(QVariantMap properties READ properties NOTIFY propertiesChanged)
public:
template<typename PAInfo>
void updatePulseObject(PAInfo *info)
{
m_index = info->index;
QVariantMap properties;
void *it = nullptr;
while (const char *key = pa_proplist_iterate(info->proplist, &it)) {
Q_ASSERT(key);
const char *value = pa_proplist_gets(info->proplist, key);
if (!value) {
qCDebug(PLASMAPA) << "property" << key << "not a string";
continue;
}
Q_ASSERT(value);
properties.insert(QString::fromUtf8(key), QString::fromUtf8(value));
}
if (m_properties != properties) {
m_properties = properties;
Q_EMIT propertiesChanged();
}
}
quint32 index() const;
QString iconName() const;
QVariantMap properties() const;
Q_SIGNALS:
void propertiesChanged();
protected:
explicit PulseObject(QObject *parent);
~PulseObject() override;
Context *context() const;
quint32 m_index;
QVariantMap m_properties;
private:
// Ensure that we get properly parented.
PulseObject();
};
} // QPulseAudio
#endif // PULSEOBJECT_H