File indexing completed on 2024-12-01 10:31:29

0001 /*
0002     SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 #ifndef PULSEOBJECT_P_H
0007 #define PULSEOBJECT_P_H
0008 
0009 #include "debug.h"
0010 
0011 #include <QVariantMap>
0012 
0013 #include <pulse/introspect.h>
0014 
0015 #include "context.h"
0016 
0017 namespace PulseAudioQt
0018 {
0019 class PulseObjectPrivate
0020 {
0021 public:
0022     explicit PulseObjectPrivate(PulseObject *q);
0023     virtual ~PulseObjectPrivate();
0024 
0025     PulseObject *q;
0026     QVariantMap m_properties;
0027     QString m_name;
0028 
0029     template<typename PAInfo>
0030     void updatePulseObject(PAInfo *info)
0031     {
0032         if (m_name != QString::fromUtf8(info->name)) {
0033             m_name = QString::fromUtf8(info->name);
0034             Q_EMIT q->nameChanged();
0035         }
0036     }
0037 
0038     template<typename PAInfo>
0039     void updateProperties(PAInfo *info)
0040     {
0041         m_properties.clear();
0042         void *it = nullptr;
0043         while (const char *key = pa_proplist_iterate(info->proplist, &it)) {
0044             Q_ASSERT(key);
0045             const char *value = pa_proplist_gets(info->proplist, key);
0046             if (!value) {
0047                 qCDebug(PULSEAUDIOQT) << "property" << key << "not a string";
0048                 continue;
0049             }
0050             Q_ASSERT(value);
0051             m_properties.insert(QString::fromUtf8(key), QString::fromUtf8(value));
0052         }
0053         Q_EMIT q->propertiesChanged();
0054     }
0055 };
0056 }
0057 #endif