Skip to content
Snippets Groups Projects
Commit f53910b1 authored by Burak Hançerli's avatar Burak Hançerli :headphones:
Browse files

QDS-14321 Async project receive

parent d011f122
No related branches found
Tags v2.0.0-b4
No related merge requests found
......@@ -132,6 +132,8 @@ Rectangle {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
from: 0
to: 100
height: 2
visible: true
indeterminate: true
......@@ -148,20 +150,22 @@ Rectangle {
Connections {
target: backend
function onPopupOpen(text, timeout) {
function onPopupOpen() {
popup.visible = true
popupText.text = text
timer.interval = timeout
timer.running = timeout <= 0
}
function onPopupClose() {
popup.visible = false
}
function onPopupTextChanged(text) {
console.log("Popup text changed", text)
function onPopupChangeText(text, timeout) {
popupText.text = text
timer.interval = timeout
timer.running = timeout > 0
}
function onPopupChangeProgress(percentage){
progressBar.value = percentage
}
function onPopupProgressIndeterminateChanged(indeterminate) {
......
......@@ -118,10 +118,19 @@ QString Backend::buildInfo() const
// clang-format on
}
void Backend::updatePopup(const QString &text, bool indeterminate)
void Backend::updatePopupText(const QString &text, int timeout)
{
emit popupTextChanged(text);
emit popupProgressIndeterminateChanged(indeterminate);
emit popupOpen();
emit popupChangeText(text, timeout);
emit popupProgressIndeterminateChanged(true);
QEventLoop().processEvents(QEventLoop::AllEvents, 1000);
}
void Backend::updatePopupProgress(const int progress)
{
emit popupOpen();
emit popupProgressIndeterminateChanged(false);
emit popupChangeProgress(progress);
QEventLoop().processEvents(QEventLoop::AllEvents, 1000);
}
......@@ -135,8 +144,6 @@ void Backend::initProjectManager()
Qt::QueuedConnection,
Q_ARG(QString, m_lastProjectSenderId));
});
updatePopup("Initializing Project Manager...");
}
void Backend::initDsManager()
......@@ -157,6 +164,7 @@ void Backend::initDsManager()
if (id == m_lastProjectSenderId) {
QMetaObject::invokeMethod(m_projectManager.get(), "stopProject");
}
emit popupClose();
});
connect(m_dsManager.get(), &DesignStudioManager::allDesignStudiosDisconnected, this, [this] {
......@@ -164,9 +172,18 @@ void Backend::initDsManager()
emit connectedChanged(false);
});
connect(m_dsManager.get(), &DesignStudioManager::projectIncoming, this, [this] {
emit popupOpen("Receiving project...");
});
connect(m_dsManager.get(),
&DesignStudioManager::projectIncoming,
this,
[this](const int projectSize) {
qDebug() << "Project incoming with size" << projectSize;
emit updatePopupText("Receiving project...");
});
connect(m_dsManager.get(),
&DesignStudioManager::projectIncomingProgress,
this,
[this](const QString &id, const int percentage) { updatePopupProgress(percentage); });
connect(m_dsManager.get(),
&DesignStudioManager::projectStopRequested,
......@@ -187,17 +204,16 @@ void Backend::connectDesignStudio(const QString &ipAddr)
"initDesignStudio",
Q_ARG(QString, ipAddr),
Q_ARG(QString, ""));
emit popupOpen("Connecting in the background...", 1500);
emit updatePopupText("Connecting in the background...", 1500);
}
void Backend::runProject(const QString &id, const QByteArray &projectData)
{
emit popupOpen("Running project...");
emit updatePopupText("Running project...");
// we'll use this to notify the correct DS when the project started/stopped
m_lastProjectSenderId = id;
QMetaObject::invokeMethod(m_dsManager.get(), "sendProjectRunning", Q_ARG(QString, id));
bool retVal;
QMetaObject::invokeMethod(m_projectManager.get(),
"runProject",
......@@ -205,9 +221,9 @@ void Backend::runProject(const QString &id, const QByteArray &projectData)
Q_ARG(QByteArray, projectData),
Q_ARG(bool, autoScaleProject()));
if (!retVal) {
if (!retVal)
QMetaObject::invokeMethod(m_dsManager.get(), "sendProjectStopped", Q_ARG(QString, id));
}
emit popupClose();
}
......
......@@ -56,7 +56,8 @@ private:
Settings m_settings;
// member functions
void updatePopup(const QString &text, bool indeterminate = true);
void updatePopupText(const QString &text, int timeout = 0);
void updatePopupProgress(const int progress);
void initDsManager();
void initProjectManager();
......@@ -67,8 +68,9 @@ private:
signals:
// UI signals - Popup
void popupProgressIndeterminateChanged(bool indeterminate);
void popupTextChanged(QString text);
void popupOpen(const QString &text = {}, int timeout = 0);
void popupChangeText(QString text, int timeout = 0);
void popupChangeProgress(int progress);
void popupOpen();
void popupClose();
// UI signals - from DS Manager page
......
......@@ -59,10 +59,20 @@ void DesignStudio::initSocket()
&QWebSocket::textMessageReceived,
this,
&DesignStudio::processTextMessage);
connect(m_socket.data(),
&QWebSocket::binaryMessageReceived,
&QWebSocket::binaryFrameReceived,
this,
&DesignStudio::processBinaryMessage);
[this](const QByteArray &frame, bool isLastFrame) {
qDebug() << "Binary frame received. Size:" << frame.size()
<< "is last: " << isLastFrame;
m_projectData.append(frame);
emit projectIncomingProgress(m_id,
m_projectData.size() * 100 / m_incomingProjectSize);
if (isLastFrame) {
emit projectReceived(m_id, m_projectData);
}
});
}
QString DesignStudio::ipv4Addr() const
......@@ -127,8 +137,10 @@ void DesignStudio::processTextMessage(const QString &message)
sendDeviceInfo();
emit idReceived(newDesignStudioId, ipv4Addr());
} else if (dataType == PackageFromDesignStudio::projectData) {
qDebug() << "Project is expected";
emit projectIncoming();
m_incomingProjectSize = jsonObj.value("data").toInt();
qDebug() << "Project is expected with size" << m_incomingProjectSize;
m_projectData.clear();
emit projectIncoming(m_incomingProjectSize);
} else if (dataType == PackageFromDesignStudio::stopRunningProject) {
qDebug() << "Stop running project requested";
emit projectStopRequested(m_id);
......
......@@ -50,6 +50,10 @@ private:
QString m_id;
QString m_deviceUuid;
// project
QByteArray m_projectData;
int m_incomingProjectSize;
// DS comm
void sendData(const QLatin1String &dataType, const QJsonValue &data = QJsonValue());
......@@ -68,7 +72,8 @@ signals:
// DS signals
void idReceived(const QString &id, const QString &ipv4Addr);
void projectIncoming();
void projectIncoming(const int projectSize);
void projectIncomingProgress(const QString &id, const int percentage);
void projectReceived(const QString &id, const QByteArray &data);
void projectStopRequested(const QString &id);
};
......@@ -66,9 +66,15 @@ void DesignStudioManager::incomingConnection()
emit allDesignStudiosDisconnected();
});
connect(designStudio.data(), &DesignStudio::projectIncoming, this, [this]() {
emit projectIncoming();
});
connect(designStudio.data(),
&DesignStudio::projectIncoming,
this,
&DesignStudioManager::projectIncoming);
connect(designStudio.data(),
&DesignStudio::projectIncomingProgress,
this,
&DesignStudioManager::projectIncomingProgress);
connect(designStudio.data(),
&DesignStudio::projectReceived,
......
......@@ -35,7 +35,8 @@ private:
void incomingConnection();
signals:
void projectIncoming();
void projectIncoming(const int &projectSize);
void projectIncomingProgress(const QString &id, const int percentage);
void projectReceived(const QString &id, const QByteArray &project);
void designStudioConnected(const QString &id, const QString &ipAddr);
void designStudioDisconnected(const QString &id, const QString &ipAddr);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment