/** * @RDE_HEADER@ * The MvsModel provices data for TrainingVoiceCommunicationDialog * $Id$ * $HeadURL$ * $Author$ * Created by Hannes Baeuerle, SLSE, 2017-07-24 */ #include "avm_mvs_dialog.h" #include #include #include #include namespace AudioVideoManagement { MvsModel::MvsModel(QObject *parent) : LtsAbstractTableModel( { tr("Video Team Name"), tr("Stream Name") }, parent) , m_exerciseId(-1) , m_logger(getLogger("MvsModel")) {} QVariant MvsModel::data(const QModelIndex &index, int role) const { if (role != Qt::DisplayRole || !indexIsValid(index)) return QVariant(); const AudioVideoManagement::VideoTeam &config = m_vecData.at(index.row()); switch (index.column()) { case CHANNEL: return QString::fromStdString(m_videoTeams.value(config.id()).name()); case STREAM_NAME: return QString::fromStdString(config.streamName()); } return QVariant(); } bool MvsModel::init(int32_t exerciseId, const std::shared_ptr &avmDtc) { m_avmDtc = avmDtc; m_exerciseId = exerciseId; m_videoTeams = avmDtc->videoTeams(); connect(m_avmDtc.get(), &AudioVideoManagement::Interface::Dtc::videoTeamChanged, this, [this](const AudioVideoManagement::VideoTeam & data, DataModification modType) { Q_UNUSED(modType); if (data.exerciseId() == m_exerciseId) onDataChanged(data, DataModification::eAdded); else onDataChanged(data, DataModification::eRemoved); } ); QVector configs; const QMap configMap = m_avmDtc->videoTeams(); for (auto it = configMap.begin(); it != configMap.end(); ++it) { if (it.value().exerciseId() == m_exerciseId) configs.append(it.value()); } setData(configs); return true; } QByteArray MvsModel::modelToJson() { QJsonObject obj; QJsonArray arr; obj[QStringLiteral("XmlType")] = FileManagement::toString(FileManagement::XmlType::AVMMvsDialog); for (int row = 0; row < rowCount(); row++) { DEBUG_LOG(m_logger) << "row =" << ": " << row; QJsonObject inner; const VideoTeam &config = m_vecData.at(row); inner[QStringLiteral("id")] = config.id(); inner[QStringLiteral("exerciseId")] = config.exerciseId(); inner[QStringLiteral("name")] = QString::fromStdString(config.name()); inner[QStringLiteral("streamName")] = QString::fromStdString(config.streamName()); arr += inner; } obj[QStringLiteral("videoTeams")] = arr; QJsonDocument doc(obj); return doc.toJson(QJsonDocument::Compact); } QVector MvsModel::jsonToVideoTeamVector(const QByteArray &content) { // already checked that content is not empty, parseable and contains proper XmlType (AVMMvsDialog) QVector result; const QJsonDocument doc(QJsonDocument::fromJson(content)); const QJsonObject obj(doc.object()); const QJsonArray arr(obj.value(QStringLiteral("videoTeams")).toArray()); for (const auto &ele : arr) { const QJsonObject obj(ele.toObject()); int id = obj[QStringLiteral("id")].toInt(); //TODO Library: check id = 0? if (id <= 0) return QVector(); const VideoTeam team = m_avmDtc->videoTeam(id); if (!m_avmDtc->isFreeVideoTeam(m_exerciseId, id)) continue; VideoTeamModifyRequest config; config.id(id); config.name(team.name()); config.ssrc(team.ssrc()); config.vtPort(team.vtPort()); config.exerciseId(m_exerciseId); config.streamName(obj[QStringLiteral("streamName")].toString().toStdString()); INFO_LOG(m_logger) << "insertRow: " << config.name() << " VideoTeamId=" << config.id(); result.append(std::move(config)); } return result; } bool MvsModel::isFiltered(const VideoTeam &data, DataModification modType) const { Q_UNUSED(modType) if (data.exerciseId() != m_exerciseId) return true; return false; } } //namespace AudioVideoManagement