Files
qt5-legatus-legacy/Lts/Plugins/AudioVideoManagement/Gui/MobileVideoSystem/avm_mvs_model.cpp
T
2026-08-13 18:33:10 +02:00

146 lines
4.0 KiB
C++
Executable File

/**
* @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 <FileManagement/flm_translation.h>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
namespace AudioVideoManagement
{
MvsModel::MvsModel(QObject *parent)
: LtsAbstractTableModel<AudioVideoManagement::VideoTeam>(
{
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<AudioVideoManagement::Interface::Dtc> &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<AudioVideoManagement::VideoTeam> configs;
const QMap<int, AudioVideoManagement::VideoTeam> 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<VideoTeamModifyRequest> MvsModel::jsonToVideoTeamVector(const QByteArray &content)
{
// already checked that content is not empty, parseable and contains proper XmlType (AVMMvsDialog)
QVector<VideoTeamModifyRequest> 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<VideoTeamModifyRequest>();
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