File indexing completed on 2024-12-01 11:13:23

0001 /*
0002     SPDX-FileCopyrightText: 2014-2015 Harald Sitter <sitter@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "card.h"
0008 
0009 #include "debug.h"
0010 
0011 #include "context.h"
0012 
0013 namespace QPulseAudio
0014 {
0015 Card::Card(QObject *parent)
0016     : PulseObject(parent)
0017 {
0018 }
0019 
0020 void Card::update(const pa_card_info *info)
0021 {
0022     updatePulseObject(info);
0023 
0024     QString infoName = QString::fromUtf8(info->name);
0025     if (m_name != infoName) {
0026         m_name = infoName;
0027         Q_EMIT nameChanged();
0028     }
0029 
0030     const quint32 oldActiveProfileIndex = m_activeProfileIndex;
0031     bool profilesHaveChanged = false;
0032     int i = 0;
0033     for (auto **it = info->profiles2; it && *it != nullptr; ++it) {
0034         if (i < m_profiles.count()) {
0035             auto *profile = static_cast<Profile *>(m_profiles.at(i));
0036             profilesHaveChanged |= profile->setInfo(*it);
0037         } else {
0038             auto *profile = new Profile(this);
0039             profile->setInfo(*it);
0040             m_profiles.append(profile);
0041             profilesHaveChanged = true;
0042         }
0043         if (info->active_profile2 == *it) {
0044             m_activeProfileIndex = i;
0045         }
0046         ++i;
0047     }
0048 
0049     while (m_profiles.count() > i) {
0050         delete m_profiles.takeLast();
0051         profilesHaveChanged = true;
0052     }
0053 
0054     if (profilesHaveChanged) {
0055         Q_EMIT profilesChanged();
0056     }
0057     if (profilesHaveChanged || m_activeProfileIndex != oldActiveProfileIndex) {
0058         Q_EMIT activeProfileIndexChanged();
0059     }
0060 
0061     bool portsHaveChanged = false;
0062     i = 0;
0063     for (auto **ports = info->ports; ports && *ports != nullptr; ++ports) {
0064         if (i < m_ports.count()) {
0065             Port *port = static_cast<Port *>(m_ports.at(i));
0066             portsHaveChanged |= port->setInfo(*ports);
0067         } else {
0068             Port *port = new Port(this);
0069             port->setInfo(*ports);
0070             m_ports.append(port);
0071             portsHaveChanged = true;
0072         }
0073         ++i;
0074     }
0075 
0076     while (m_ports.count() > i) {
0077         delete m_ports.takeLast();
0078         portsHaveChanged = true;
0079     }
0080 
0081     if (portsHaveChanged) {
0082         Q_EMIT portsChanged();
0083     }
0084 }
0085 
0086 QString Card::name() const
0087 {
0088     return m_name;
0089 }
0090 
0091 QList<QObject *> Card::profiles() const
0092 {
0093     return m_profiles;
0094 }
0095 
0096 quint32 Card::activeProfileIndex() const
0097 {
0098     return m_activeProfileIndex;
0099 }
0100 
0101 void Card::setActiveProfileIndex(quint32 profileIndex)
0102 {
0103     const Profile *profile = qobject_cast<Profile *>(profiles().at(profileIndex));
0104     context()->setCardProfile(index(), profile->name());
0105 }
0106 
0107 QList<QObject *> Card::ports() const
0108 {
0109     return m_ports;
0110 }
0111 
0112 } // QPulseAudio