History

Work on better subscribtion to script messages

ksuprynowicz committed 3 years ago

Commit 274867b1 parent f3dbfc49 files · +209 −53Browse files

Showing the changes to libraries/script-engine/src/ScriptManager.cpp (1 of 9 files). Show all

Unified · Split

libraries/script-engine/src/ScriptManager.cpp+99−31
@@ -225,7 +225,12 @@ QString encodeEntityIdIntoEntityUrl(const QString& url, const QString& entityID) · 224 unmodified lines
225225
226226 QString ScriptManager::logException(const ScriptValue& exception) {
227227 auto message = formatException(exception, _enableExtendedJSExceptions.get());
228− scriptErrorMessage(message);
228+ auto context = _engine->currentContext();
229+ if (context) {
230+ scriptErrorMessage(message, context->currentFileName(), context->currentLineNumber());
231+ } else {
232+ scriptErrorMessage(message, "", -1);
233+ }
229234 return message;
230235 }
231236
@@ -330,6 +335,11 @@ ScriptManager::ScriptManager(Context context, const QString& scriptContents, con · 98 unmodified lines
330335 });
331336 }
332337
338+ //Gather entity script messages for transmission when running server side.
339+ if (_type == Type::ENTITY_SERVER) {
340+ ;
341+ }
342+
333343 if (!_areMetaTypesInitialized) {
334344 initMetaTypes();
335345 }
@@ -514,7 +524,7 @@ void ScriptManager::waitTillDoneRunning(bool shutdown) { · 178 unmodified lines
514524 }
515525 #endif
516526
517− scriptInfoMessage("Script Engine has stopped:" + getFilename());
527+ scriptInfoMessage("Script Engine has stopped:" + getFilename(), "", -1);
518528 }
519529 }
520530
@@ -549,7 +559,7 @@ void ScriptManager::loadURL(const QUrl& scriptURL, bool reload) { · 28 unmodified lines
549559
550560 // Check that script has a supported file extension
551561 if (!hasValidScriptSuffix(_fileNameString)) {
552− scriptErrorMessage("File extension of file: " + _fileNameString + " is not a currently supported script type");
562+ scriptErrorMessage("File extension of file: " + _fileNameString + " is not a currently supported script type", _fileNameString, -1);
553563 emit errorLoadingScript(_fileNameString);
554564 return;
555565 }
@@ -559,7 +569,7 @@ void ScriptManager::loadURL(const QUrl& scriptURL, bool reload) { · 3 unmodified lines
559569 scriptCache->getScriptContents(url.toString(), [this](const QString& url, const QString& scriptContents, bool isURL, bool success, const QString&status) {
560570 qCDebug(scriptengine) << "loadURL" << url << status << QThread::currentThread();
561571 if (!success) {
562− scriptErrorMessage("ERROR Loading file (" + status + "):" + url);
572+ scriptErrorMessage("ERROR Loading file (" + status + "):" + url, url, -1);
563573 emit errorLoadingScript(_fileNameString);
564574 return;
565575 }
@@ -570,40 +580,35 @@ void ScriptManager::loadURL(const QUrl& scriptURL, bool reload) { · 4 unmodified lines
570580 }, reload, maxRetries);
571581 }
572582
573−void ScriptManager::scriptErrorMessage(const QString& message) {
583+void ScriptManager::scriptErrorMessage(const QString& message, const QString& fileName, int lineNumber) {
574584 qCCritical(scriptengine, "[%s] %s", qUtf8Printable(getFilename()), qUtf8Printable(message));
575585 emit errorMessage(message, getFilename());
576586 if (!currentEntityIdentifier.isInvalidID()) {
577− // TODO: add line number and proper file name
578− //if (engine() && engine()->currentContext() && engine()->currentContext()->)
579− emit errorEntityMessage(message, getFilename(), currentEntityIdentifier);
587+ emit errorEntityMessage(message, fileName, lineNumber, currentEntityIdentifier);
580588 }
581589 }
582590
583−void ScriptManager::scriptWarningMessage(const QString& message) {
591+void ScriptManager::scriptWarningMessage(const QString& message, const QString& fileName, int lineNumber) {
584592 qCWarning(scriptengine, "[%s] %s", qUtf8Printable(getFilename()), qUtf8Printable(message));
585593 emit warningMessage(message, getFilename());
586594 if (!currentEntityIdentifier.isInvalidID()) {
587− // TODO: add line number and proper file name
588− emit warningEntityMessage(message, getFilename(), currentEntityIdentifier);
595+ emit warningEntityMessage(message, fileName, lineNumber, currentEntityIdentifier);
589596 }
590597 }
591598
592−void ScriptManager::scriptInfoMessage(const QString& message) {
599+void ScriptManager::scriptInfoMessage(const QString& message, const QString& fileName, int lineNumber) {
593600 qCInfo(scriptengine, "[%s] %s", qUtf8Printable(getFilename()), qUtf8Printable(message));
594601 emit infoMessage(message, getFilename());
595602 if (!currentEntityIdentifier.isInvalidID()) {
596− // TODO: add line number and proper file name
597− emit infoEntityMessage(message, getFilename(), currentEntityIdentifier);
603+ emit infoEntityMessage(message, fileName, lineNumber, currentEntityIdentifier);
598604 }
599605 }
600606
601−void ScriptManager::scriptPrintedMessage(const QString& message) {
607+void ScriptManager::scriptPrintedMessage(const QString& message, const QString& fileName, int lineNumber) {
602608 qCDebug(scriptengine, "[%s] %s", qUtf8Printable(getFilename()), qUtf8Printable(message));
603609 emit printedMessage(message, getFilename());
604610 if (!currentEntityIdentifier.isInvalidID()) {
605− // TODO: add line number and proper file name
606− emit printedEntityMessage(message, getFilename(), currentEntityIdentifier);
611+ emit printedEntityMessage(message, fileName, lineNumber, currentEntityIdentifier);
607612 }
608613 }
609614
@@ -929,7 +934,7 @@ void ScriptManager::run() { · 319 unmodified lines
929934 return; // bail early - avoid setting state in init(), as evaluate() will bail too
930935 }
931936
932− scriptInfoMessage("Script Engine starting:" + getFilename());
937+ scriptInfoMessage("Script Engine starting:" + getFilename(), getFilename(), -1);
933938
934939 if (!_isInitialized) {
935940 init();
@@ -1081,7 +1086,7 @@ void ScriptManager::run() { · 145 unmodified lines
10811086 _engine->clearExceptions();
10821087 }
10831088 }
1084− scriptInfoMessage("Script Engine stopping:" + getFilename());
1089+ scriptInfoMessage("Script Engine stopping:" + getFilename(), getFilename(), -1);
10851090
10861091 stopAllTimers(); // make sure all our timers are stopped if the script is ending
10871092 emit scriptEnding();
@@ -1156,7 +1161,7 @@ void ScriptManager::updateMemoryCost(const qint64& deltaSize) { · 68 unmodified lines
11561161
11571162 void ScriptManager::timerFired() {
11581163 if (isStopped()) {
1159− scriptWarningMessage("Script.timerFired() while shutting down is ignored... parent script:" + getFilename());
1164+ scriptWarningMessage("Script.timerFired() while shutting down is ignored... parent script:" + getFilename(), getFilename(), -1);
11601165 return; // bail early
11611166 }
11621167
@@ -1223,7 +1228,14 @@ QTimer* ScriptManager::setupTimerWithInterval(const ScriptValue& function, int i · 60 unmodified lines
12231228
12241229 QTimer* ScriptManager::setInterval(const ScriptValue& function, int intervalMS) {
12251230 if (isStopped()) {
1226− scriptWarningMessage("Script.setInterval() while shutting down is ignored... parent script:" + getFilename());
1231+ int lineNumber = -1;
1232+ QString fileName = getFilename();
1233+ auto context = _engine->currentContext();
1234+ if (context) {
1235+ lineNumber = context->currentLineNumber();
1236+ fileName = context->currentFileName();
1237+ }
1238+ scriptWarningMessage("Script.setInterval() while shutting down is ignored... parent script:" + getFilename(), fileName, lineNumber);
12271239 return NULL; // bail early
12281240 }
12291241
@@ -1232,7 +1244,14 @@ QTimer* ScriptManager::setInterval(const ScriptValue& function, int intervalMS) · 2 unmodified lines
12321244
12331245 QTimer* ScriptManager::setTimeout(const ScriptValue& function, int timeoutMS) {
12341246 if (isStopped()) {
1235− scriptWarningMessage("Script.setTimeout() while shutting down is ignored... parent script:" + getFilename());
1247+ int lineNumber = -1;
1248+ QString fileName = getFilename();
1249+ auto context = _engine->currentContext();
1250+ if (context) {
1251+ lineNumber = context->currentLineNumber();
1252+ fileName = context->currentFileName();
1253+ }
1254+ scriptWarningMessage("Script.setTimeout() while shutting down is ignored... parent script:" + getFilename(), fileName, lineNumber);
12361255 return NULL; // bail early
12371256 }
12381257
@@ -1668,8 +1687,15 @@ void ScriptManager::include(const QStringList& includeFiles, const ScriptValue& · 429 unmodified lines
16681687 return;
16691688 }
16701689 if (isStopped()) {
1690+ int lineNumber = -1;
1691+ QString fileName = getFilename();
1692+ auto context = _engine->currentContext();
1693+ if (context) {
1694+ lineNumber = context->currentLineNumber();
1695+ fileName = context->currentFileName();
1696+ }
16711697 scriptWarningMessage("Script.include() while shutting down is ignored... includeFiles:"
1672− + includeFiles.join(",") + "parent script:" + getFilename());
1698+ + includeFiles.join(",") + "parent script:" + getFilename(), fileName, lineNumber);
16731699 return; // bail early
16741700 }
16751701 QList<QUrl> urls;
@@ -1682,8 +1708,15 @@ void ScriptManager::include(const QStringList& includeFiles, const ScriptValue& · 6 unmodified lines
16821708 thisURL = expandScriptUrl(QUrl::fromLocalFile(expandScriptPath(file)));
16831709 QUrl defaultScriptsLoc = PathUtils::defaultScriptsLocation();
16841710 if (!defaultScriptsLoc.isParentOf(thisURL)) {
1711+ int lineNumber = -1;
1712+ QString fileName = getFilename();
1713+ auto context = _engine->currentContext();
1714+ if (context) {
1715+ lineNumber = context->currentLineNumber();
1716+ fileName = context->currentFileName();
1717+ }
16851718 //V8TODO this probably needs to be done per context, otherwise file cannot be included again in a module
1686− scriptWarningMessage("Script.include() -- skipping" + file + "-- outside of standard libraries");
1719+ scriptWarningMessage("Script.include() -- skipping" + file + "-- outside of standard libraries", fileName, lineNumber);
16871720 continue;
16881721 }
16891722 isStandardLibrary = true;
@@ -1693,8 +1726,15 @@ void ScriptManager::include(const QStringList& includeFiles, const ScriptValue& · 3 unmodified lines
16931726
16941727 bool disallowOutsideFiles = thisURL.isLocalFile() && !isStandardLibrary && !currentSandboxURL.isLocalFile();
16951728 if (disallowOutsideFiles && !PathUtils::isDescendantOf(thisURL, currentSandboxURL)) {
1729+ int lineNumber = -1;
1730+ QString fileName = currentSandboxURL.toString();
1731+ auto context = _engine->currentContext();
1732+ if (context) {
1733+ lineNumber = context->currentLineNumber();
1734+ fileName = context->currentFileName();
1735+ }
16961736 scriptWarningMessage("Script.include() ignoring file path" + thisURL.toString()
1697− + "outside of original entity script" + currentSandboxURL.toString());
1737+ + "outside of original entity script" + currentSandboxURL.toString(), fileName, lineNumber);
16981738 } else {
16991739 // We could also check here for CORS, but we don't yet.
17001740 // It turns out that QUrl.resolve will not change hosts and copy authority, so we don't need to check that here.
@@ -1716,7 +1756,14 @@ void ScriptManager::include(const QStringList& includeFiles, const ScriptValue& · 15 unmodified lines
17161756 for (QUrl url : urls) {
17171757 QString contents = data[url];
17181758 if (contents.isNull()) {
1719− scriptErrorMessage("Error loading file (" + status[url] +"): " + url.toString());
1759+ int lineNumber = -1;
1760+ QString fileName = url.toString();
1761+ auto context = _engine->currentContext();
1762+ if (context) {
1763+ lineNumber = context->currentLineNumber();
1764+ fileName = context->currentFileName();
1765+ }
1766+ scriptErrorMessage("Error loading file (" + status[url] +"): " + url.toString(), fileName, lineNumber);
17201767 } else {
17211768 std::lock_guard<std::recursive_mutex> lock(_lock);
17221769 if (!_includedURLs.contains(url)) {
@@ -1736,7 +1783,14 @@ void ScriptManager::include(const QStringList& includeFiles, const ScriptValue& · 13 unmodified lines
17361783 _engine->clearExceptions();
17371784 }
17381785 } else {
1739− scriptPrintedMessage("Script.include() skipping evaluation of previously included url:" + url.toString());
1786+ int lineNumber = -1;
1787+ QString fileName = url.toString();
1788+ auto context = _engine->currentContext();
1789+ if (context) {
1790+ lineNumber = context->currentLineNumber();
1791+ fileName = context->currentFileName();
1792+ }
1793+ scriptPrintedMessage("Script.include() skipping evaluation of previously included url:" + url.toString(), fileName, lineNumber);
17401794 }
17411795 }
17421796 }
@@ -1765,8 +1819,15 @@ void ScriptManager::include(const QStringList& includeFiles, const ScriptValue& · 22 unmodified lines
17651819
17661820 void ScriptManager::include(const QString& includeFile, const ScriptValue& callback) {
17671821 if (isStopped()) {
1822+ int lineNumber = -1;
1823+ QString fileName = currentSandboxURL.toString();
1824+ auto context = _engine->currentContext();
1825+ if (context) {
1826+ lineNumber = context->currentLineNumber();
1827+ fileName = context->currentFileName();
1828+ }
17681829 scriptWarningMessage("Script.include() while shutting down is ignored... includeFile:"
1769− + includeFile + "parent script:" + getFilename());
1830+ + includeFile + "parent script:" + getFilename(), fileName, lineNumber);
17701831 return; // bail early
17711832 }
17721833
@@ -1782,14 +1843,21 @@ void ScriptManager::load(const QString& loadFile) { · 9 unmodified lines
17821843 if (!_engine->IS_THREADSAFE_INVOCATION(__FUNCTION__)) {
17831844 return;
17841845 }
1846+ int lineNumber = -1;
1847+ QString fileName = getFilename();
1848+ auto context = _engine->currentContext();
1849+ if (context) {
1850+ lineNumber = context->currentLineNumber();
1851+ fileName = context->currentFileName();
1852+ }
17851853 if (isStopped()) {
17861854 scriptWarningMessage("Script.load() while shutting down is ignored... loadFile:"
1787− + loadFile + "parent script:" + getFilename());
1855+ + loadFile + "parent script:" + getFilename(), fileName, lineNumber);
17881856 return; // bail early
17891857 }
17901858 if (!currentEntityIdentifier.isInvalidID()) {
17911859 scriptWarningMessage("Script.load() from entity script is ignored... loadFile:"
1792− + loadFile + "parent script:" + getFilename() + "entity: " + currentEntityIdentifier.toString());
1860+ + loadFile + "parent script:" + getFilename() + "entity: " + currentEntityIdentifier.toString(), fileName, lineNumber);
17931861 return; // bail early
17941862 }
17951863
@@ -2457,7 +2525,7 @@ void ScriptManager::refreshFileScript(const EntityItemID& entityID) { · 661 unmodified lines
24572525 QString filePath = QUrl(details.scriptText).toLocalFile();
24582526 auto lastModified = QFileInfo(filePath).lastModified().toMSecsSinceEpoch();
24592527 if (lastModified > details.lastModified) {
2460− scriptInfoMessage("Reloading modified script " + details.scriptText);
2528+ scriptInfoMessage("Reloading modified script " + details.scriptText, filePath, -1);
24612529 loadEntityScript(entityID, details.scriptText, true);
24622530 }
24632531 }