146 lines
4.0 KiB
C++
Executable File
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
|