From e860bdcfbf6de330d47c9536a7ed0f1c6418549c Mon Sep 17 00:00:00 2001 From: dogmaphobic Date: Wed, 4 Mar 2015 00:54:13 -0500 Subject: [PATCH] Made spoken time in milliseconds into something more normal like x minutes and y seconds. --- src/audio/QGCAudioWorker.cpp | 41 +++++++++++++++++++++++++++++++++++- src/audio/QGCAudioWorker.h | 3 +++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/audio/QGCAudioWorker.cpp b/src/audio/QGCAudioWorker.cpp index 5b7f4eb6d..b96c4d9f6 100644 --- a/src/audio/QGCAudioWorker.cpp +++ b/src/audio/QGCAudioWorker.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "QGC.h" #include "QGCAudioWorker.h" @@ -89,7 +90,7 @@ QGCAudioWorker::~QGCAudioWorker() #endif } -void QGCAudioWorker::say(QString text, int severity) +void QGCAudioWorker::say(QString inText, int severity) { static bool threadInit = false; if (!threadInit) { @@ -99,6 +100,7 @@ void QGCAudioWorker::say(QString text, int severity) if (!muted) { + QString text = _fixMillisecondString(inText); // Prepend high priority text with alert beep if (severity < GAudioOutput::AUDIO_SEVERITY_CRITICAL) { beep(); @@ -170,3 +172,40 @@ bool QGCAudioWorker::isMuted() { return this->muted; } + +bool QGCAudioWorker::_getMillisecondString(const QString& string, QString& match, int& number) { + QRegularExpression re("([0-9]*ms)"); + QRegularExpressionMatchIterator i = re.globalMatch(string); + while (i.hasNext()) { + QRegularExpressionMatch qmatch = i.next(); + if (qmatch.hasMatch()) { + match = qmatch.captured(0); + number = qmatch.captured(0).replace("ms", "").toInt(); + return true; + } + } + return false; +} + +QString QGCAudioWorker::_fixMillisecondString(const QString& string) { + QString match; + QString newNumber; + QString result = string; + int number; + if(_getMillisecondString(string, match, number) && number > 1000) { + if(number < 60000) { + int seconds = number / 1000; + newNumber = QString("%1 second%2").arg(seconds).arg(seconds > 1 ? "s" : ""); + } else { + int minutes = number / 60000; + int seconds = (number - (minutes * 60000)) / 1000; + if (!seconds) { + newNumber = QString("%1 minute%2").arg(minutes).arg(minutes > 1 ? "s" : ""); + } else { + newNumber = QString("%1 minute%2 and %3 second%4").arg(minutes).arg(minutes > 1 ? "s" : "").arg(seconds).arg(seconds > 1 ? "s" : ""); + } + } + result.replace(match, newNumber); + } + return result; +} diff --git a/src/audio/QGCAudioWorker.h b/src/audio/QGCAudioWorker.h index 7e06023e5..beafe429e 100644 --- a/src/audio/QGCAudioWorker.h +++ b/src/audio/QGCAudioWorker.h @@ -50,6 +50,9 @@ protected: bool emergency; ///< Emergency status flag QTimer *emergencyTimer; bool muted; +private: + QString _fixMillisecondString(const QString& string); + bool _getMillisecondString(const QString& string, QString& match, int& number); }; #endif // QGCAUDIOWORKER_H -- 2.22.0