From 9776462747fcd5e09cb92dac8d740642e5eae1a4 Mon Sep 17 00:00:00 2001 From: manongjohn Date: Sat, 13 Mar 2021 17:56:42 -0500 Subject: [PATCH] Display rhubarb processing errors in popup --- toonz/sources/toonz/lipsyncpopup.cpp | 31 ++++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/toonz/sources/toonz/lipsyncpopup.cpp b/toonz/sources/toonz/lipsyncpopup.cpp index 5d692171..7a8d7d10 100644 --- a/toonz/sources/toonz/lipsyncpopup.cpp +++ b/toonz/sources/toonz/lipsyncpopup.cpp @@ -781,11 +781,24 @@ void LipSyncPopup::runRhubarb() { //----------------------------------------------------------------------------- void LipSyncPopup::onOutputReady() { - QString output = m_rhubarb->readAllStandardError().simplified(); - int index = output.lastIndexOf("%"); - QString newString = output.mid(index - 2, 2); - m_progressDialog->setValue(newString.toInt()); - qDebug() << "output: " << output; + QString output = m_rhubarb->readAllStandardError().simplified(); + output = output.replace("\\n", "\n") + .replace("\\\\", "\\") + .replace("\\\"", "") + .replace("\"", ""); + QStringList outputList = + output.mid(2, (output.size() - 4)).split(", ", QString::SkipEmptyParts); + if (outputList.size()) { + QStringList outputType = outputList.at(0).split(": "); + if (outputType.at(1) == "progress") { + QStringList outputValue = outputList.at(1).split(": "); + double progress = outputValue.at(1).toDouble() * 100.0; + m_progressDialog->setValue(progress); + } else if (outputType.at(1) == "failure") { + QStringList outputReason = outputList.at(1).split(": "); + DVGui::warning(tr("Rhubarb Processing Error:\n\n") + outputReason.at(1)); + } + } } //----------------------------------------------------------------------------- @@ -829,12 +842,8 @@ void LipSyncPopup::onApplyButton() { int exitCode = -1; if (m_rhubarb->exitStatus() == QProcess::NormalExit) { exitCode = m_rhubarb->exitCode(); - if (exitCode != 0) { - DVGui::warning( - tr("An error occurred processing the audio. Please check the audio " - "and try again.")); - return; - } + // onOuputReady will handle displaying any error messages from rhubarb + if (exitCode != 0) return; } std::string strResults = results.toStdString(); m_startAt->setValue(std::max(1, m_startFrame));