#include "helper.h" #include "mainwindow.h" #include void populatePorts(const pa_card_info &info, std::map &ports) { ports.clear(); for (uint32_t i = 0; i < info.n_ports; ++i) { PortInfo p; p.name = info.ports[i]->name; p.description = info.ports[i]->description; p.priority = info.ports[i]->priority; p.available = info.ports[i]->available; p.direction = info.ports[i]->direction; p.latency_offset = info.ports[i]->latency_offset; for (pa_card_profile_info2 ** p_profile = info.ports[i]->profiles2; p_profile && *p_profile != nullptr; ++p_profile) p.profiles.push_back((*p_profile)->name); ports[p.name] = p; } } void groupProfiles(const std::set &profile_priorities, const std::map &ports, QMap &profiles) { profiles.clear(); for (auto p_profile : profile_priorities) { bool hasNo = false, hasOther = false; std::map::const_iterator portIt; QByteArray desc = p_profile->description; for (portIt = ports.begin(); portIt != ports.end(); portIt++) { PortInfo port = portIt->second; if (std::find(port.profiles.begin(), port.profiles.end(), p_profile->name) == port.profiles.end()) continue; if (port.available == PA_PORT_AVAILABLE_NO) hasNo = true; else { hasOther = true; break; } } if (hasNo && !hasOther) desc += MainWindow::tr(" (unplugged)").toUtf8().constData(); if (!p_profile->available) desc += MainWindow::tr(" (unavailable)").toUtf8().constData(); QString parseId = QString::fromUtf8(p_profile->name); int plus = parseId.indexOf(QLatin1Char('+')); if (plus != -1) { parseId = parseId.left(plus); } auto list = parseId.split(QRegularExpression(QLatin1String("[:\\-]"))); parseId.clear(); for (auto p : list) { if (p == QLatin1String("input") || p == QLatin1String("output")) continue; if (parseId.isEmpty() || p.startsWith(QLatin1String("extra"))) { parseId.append(p); } } //qDebug() << "ParseID:" << parseId; ProfileGroup &group = profiles[parseId]; if (p_profile->available) { group.available = true; } group.addEntry(p_profile->name, desc.constData()); } }