Index: sources/device/DeviceController.cpp =================================================================== diff -u -r59625af31d9009df82fa48310b54c0f247e829fc -rfcdb1dfa21f3d5c02e549089c19ab7d57b19040c --- sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision 59625af31d9009df82fa48310b54c0f247e829fc) +++ sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision fcdb1dfa21f3d5c02e549089c19ab7d57b19040c) @@ -1233,3 +1233,56 @@ didAttributeResponse(model.data()); LOG_APPED_UI(model.data().mMessage); } + + +///////////////////////////////////////////// DeviceFinalizeSoftwareUpdate +void DeviceController::onAttributeRequest(const DeviceFinalizeSoftwareUpdateRequestData &vData) +{ + _deviceFinalizeSoftwareUpdateRequest._data = vData; + + // ----- check that script exists. + QString script = Device_FinalizeSoftwareUpdateScriptPath; + DeviceError::Scripts_Error_Enum err = DeviceError::eDevice_OK; + QFileInfo info(script); + if ( ! info.exists () ) { err = DeviceError::eDevice_Scripts_Error_NotFound ;} + if ( ! info.isExecutable() ) { err = DeviceError::eDevice_Scripts_Error_NotExecutable ;} + + if ( checkError(err, _deviceFinalizeSoftwareUpdateResponse, script) ) + return; + + // ----- check if the process is not running + if ( _processFinalizeSoftwareUpdate.state() != QProcess::NotRunning ) { + checkError(DeviceError::eDevice_Scripts_Error_IsRunning, _deviceFinalizeSoftwareUpdateResponse); + return; + } + + // ----- run the process + int timeout_ms = 10000; + TimedProcess *timedProcess = new TimedProcess(&_processFinalizeSoftwareUpdate, script, timeout_ms, { }); + timedProcess->start(); + + MDeviceFinalizeSoftwareUpdateResponse model; + model._data.mAccepted = false; // will indirectly set the property startSoftwareUpdateEnabled + model._data.mMessage = tr("Starting finalization of software update."); + didAttributeResponse(model.data()); +} + +/*! + * \brief DeviceController::onProcessFinalizeSoftwareUpdateExitCode + * \param vExitCode + * \param vStatus + */ +void DeviceController::onProcessFinalizeSoftwareUpdateExitCode(int vExitCode, QProcess::ExitStatus vStatus) +{ + // The Exit code in this script is not used. + // any other checking is done by UI Software at the moment this script is called. + // The only thing matters is the paired device info in text and it will be empty string if error happens. + MDeviceFinalizeSoftwareUpdateResponse model; + QByteArray deviceInfo; + if ( vStatus ) vExitCode = Device::DeviceError::eDevice_Scripts_Error_Status; + else deviceInfo = _processFinalizeSoftwareUpdate.readAll(); + model.fromByteArray( deviceInfo, &vExitCode ); + // DEBUG: qDebug() << model._data.mMessage << deviceInfo; + didAttributeResponse(model.data()); + LOG_APPED_UI(model.data().mMessage); +}