mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 10:09:05 +02:00
Made stopping scripts by hash (path/url) more tolerable and fixed stopping script functionality in ScriptDiscoveryService:
made stopScript(string) to stop script by url or path and stopScriptName(string) to stop by filename
This commit is contained in:
parent
e04f89280d
commit
9992f4b5c5
4 changed files with 39 additions and 30 deletions
|
@ -606,7 +606,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
_overlays.init(); // do this before scripts load
|
_overlays.init(); // do this before scripts load
|
||||||
|
|
||||||
_runningScriptsWidget->setRunningScripts(getRunningScripts());
|
_runningScriptsWidget->setRunningScripts(getRunningScripts());
|
||||||
connect(_runningScriptsWidget, &RunningScriptsWidget::stopScriptName, this, &Application::stopScript);
|
|
||||||
|
|
||||||
connect(this, SIGNAL(aboutToQuit()), this, SLOT(saveScripts()));
|
connect(this, SIGNAL(aboutToQuit()), this, SLOT(saveScripts()));
|
||||||
connect(this, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit()));
|
connect(this, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit()));
|
||||||
|
@ -4328,17 +4327,18 @@ void Application::stopAllScripts(bool restart) {
|
||||||
_myAvatar->clearScriptableSettings();
|
_myAvatar->clearScriptableSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::stopScript(const QString &scriptName, bool restart) {
|
bool Application::stopScript(const QString& scriptHash, bool restart) {
|
||||||
const QString& scriptURLString = QUrl(scriptName).toString();
|
bool stoppedScript = false;
|
||||||
if (_scriptEnginesHash.contains(scriptURLString)) {
|
if (_scriptEnginesHash.contains(scriptHash)) {
|
||||||
ScriptEngine* scriptEngine = _scriptEnginesHash[scriptURLString];
|
ScriptEngine* scriptEngine = _scriptEnginesHash[scriptHash];
|
||||||
if (restart) {
|
if (restart) {
|
||||||
auto scriptCache = DependencyManager::get<ScriptCache>();
|
auto scriptCache = DependencyManager::get<ScriptCache>();
|
||||||
scriptCache->deleteScript(scriptName);
|
scriptCache->deleteScript(QUrl(scriptHash));
|
||||||
connect(scriptEngine, SIGNAL(finished(const QString&)), SLOT(reloadScript(const QString&)));
|
connect(scriptEngine, SIGNAL(finished(const QString&)), SLOT(reloadScript(const QString&)));
|
||||||
}
|
}
|
||||||
scriptEngine->stop();
|
scriptEngine->stop();
|
||||||
qCDebug(interfaceapp) << "stopping script..." << scriptName;
|
stoppedScript = true;
|
||||||
|
qCDebug(interfaceapp) << "stopping script..." << scriptHash;
|
||||||
// HACK: ATM scripts cannot set/get their animation priorities, so we clear priorities
|
// HACK: ATM scripts cannot set/get their animation priorities, so we clear priorities
|
||||||
// whenever a script stops in case it happened to have been setting joint rotations.
|
// whenever a script stops in case it happened to have been setting joint rotations.
|
||||||
// TODO: expose animation priorities and provide a layered animation control system.
|
// TODO: expose animation priorities and provide a layered animation control system.
|
||||||
|
@ -4347,6 +4347,7 @@ void Application::stopScript(const QString &scriptName, bool restart) {
|
||||||
if (_scriptEnginesHash.empty()) {
|
if (_scriptEnginesHash.empty()) {
|
||||||
_myAvatar->clearScriptableSettings();
|
_myAvatar->clearScriptableSettings();
|
||||||
}
|
}
|
||||||
|
return stoppedScript;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::reloadAllScripts() {
|
void Application::reloadAllScripts() {
|
||||||
|
|
|
@ -292,7 +292,7 @@ public:
|
||||||
NodeToJurisdictionMap& getEntityServerJurisdictions() { return _entityServerJurisdictions; }
|
NodeToJurisdictionMap& getEntityServerJurisdictions() { return _entityServerJurisdictions; }
|
||||||
|
|
||||||
QStringList getRunningScripts() { return _scriptEnginesHash.keys(); }
|
QStringList getRunningScripts() { return _scriptEnginesHash.keys(); }
|
||||||
ScriptEngine* getScriptEngine(QString scriptHash) { return _scriptEnginesHash.contains(scriptHash) ? _scriptEnginesHash[scriptHash] : NULL; }
|
ScriptEngine* getScriptEngine(const QString& scriptHash) { return _scriptEnginesHash.contains(scriptHash) ? _scriptEnginesHash[scriptHash] : NULL; }
|
||||||
|
|
||||||
bool isLookingAtMyAvatar(AvatarSharedPointer avatar);
|
bool isLookingAtMyAvatar(AvatarSharedPointer avatar);
|
||||||
|
|
||||||
|
@ -395,7 +395,7 @@ public slots:
|
||||||
void reloadScript(const QString& scriptName, bool isUserLoaded = true);
|
void reloadScript(const QString& scriptName, bool isUserLoaded = true);
|
||||||
void scriptFinished(const QString& scriptName);
|
void scriptFinished(const QString& scriptName);
|
||||||
void stopAllScripts(bool restart = false);
|
void stopAllScripts(bool restart = false);
|
||||||
void stopScript(const QString& scriptName, bool restart = false);
|
bool stopScript(const QString& scriptHash, bool restart = false);
|
||||||
void reloadAllScripts();
|
void reloadAllScripts();
|
||||||
void reloadOneScript(const QString& scriptName);
|
void reloadOneScript(const QString& scriptName);
|
||||||
void loadDefaultScripts();
|
void loadDefaultScripts();
|
||||||
|
|
|
@ -57,16 +57,15 @@ RunningScriptsWidget::RunningScriptsWidget(QWidget* parent) :
|
||||||
connect(ui->filterLineEdit, &QLineEdit::textChanged, this, &RunningScriptsWidget::updateFileFilter);
|
connect(ui->filterLineEdit, &QLineEdit::textChanged, this, &RunningScriptsWidget::updateFileFilter);
|
||||||
connect(ui->scriptTreeView, &QTreeView::doubleClicked, this, &RunningScriptsWidget::loadScriptFromList);
|
connect(ui->scriptTreeView, &QTreeView::doubleClicked, this, &RunningScriptsWidget::loadScriptFromList);
|
||||||
|
|
||||||
connect(ui->reloadAllButton, &QPushButton::clicked,
|
connect(ui->reloadAllButton, &QPushButton::clicked, Application::getInstance(), &Application::reloadAllScripts);
|
||||||
Application::getInstance(), &Application::reloadAllScripts);
|
connect(ui->stopAllButton, &QPushButton::clicked, this, &RunningScriptsWidget::allScriptsStopped);
|
||||||
connect(ui->stopAllButton, &QPushButton::clicked,
|
connect(ui->loadScriptFromDiskButton, &QPushButton::clicked, Application::getInstance(), &Application::loadDialog);
|
||||||
this, &RunningScriptsWidget::allScriptsStopped);
|
connect(ui->loadScriptFromURLButton, &QPushButton::clicked, Application::getInstance(), &Application::loadScriptURLDialog);
|
||||||
connect(ui->loadScriptFromDiskButton, &QPushButton::clicked,
|
connect(&_reloadSignalMapper, static_cast<void(QSignalMapper::*)(const QString&)>(&QSignalMapper::mapped),
|
||||||
Application::getInstance(), &Application::loadDialog);
|
Application::getInstance(), &Application::reloadOneScript);
|
||||||
connect(ui->loadScriptFromURLButton, &QPushButton::clicked,
|
|
||||||
Application::getInstance(), &Application::loadScriptURLDialog);
|
connect(&_stopSignalMapper, static_cast<void(QSignalMapper::*)(const QString&)>(&QSignalMapper::mapped),
|
||||||
connect(&_reloadSignalMapper, SIGNAL(mapped(QString)), Application::getInstance(), SLOT(reloadOneScript(const QString&)));
|
[](const QString& script) { Application::getInstance()->stopScript(script); });
|
||||||
connect(&_stopSignalMapper, SIGNAL(mapped(QString)), Application::getInstance(), SLOT(stopScript(const QString&)));
|
|
||||||
|
|
||||||
UIUtil::scaleWidgetFontSizes(this);
|
UIUtil::scaleWidgetFontSizes(this);
|
||||||
}
|
}
|
||||||
|
@ -217,9 +216,6 @@ void RunningScriptsWidget::keyPressEvent(QKeyEvent *keyEvent) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunningScriptsWidget::scriptStopped(const QString& scriptName) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void RunningScriptsWidget::allScriptsStopped() {
|
void RunningScriptsWidget::allScriptsStopped() {
|
||||||
Application::getInstance()->stopAllScripts();
|
Application::getInstance()->stopAllScripts();
|
||||||
}
|
}
|
||||||
|
@ -227,15 +223,16 @@ void RunningScriptsWidget::allScriptsStopped() {
|
||||||
QVariantList RunningScriptsWidget::getRunning() {
|
QVariantList RunningScriptsWidget::getRunning() {
|
||||||
const int WINDOWS_DRIVE_LETTER_SIZE = 1;
|
const int WINDOWS_DRIVE_LETTER_SIZE = 1;
|
||||||
QVariantList result;
|
QVariantList result;
|
||||||
QStringList runningScripts = Application::getInstance()->getRunningScripts();
|
foreach(const QString& runningScript, Application::getInstance()->getRunningScripts()) {
|
||||||
for (int i = 0; i < runningScripts.size(); i++) {
|
QUrl runningScriptURL = QUrl(runningScript);
|
||||||
QUrl runningScriptURL = QUrl(runningScripts.at(i));
|
|
||||||
if (runningScriptURL.scheme().size() <= WINDOWS_DRIVE_LETTER_SIZE) {
|
if (runningScriptURL.scheme().size() <= WINDOWS_DRIVE_LETTER_SIZE) {
|
||||||
runningScriptURL = QUrl::fromLocalFile(runningScriptURL.toDisplayString(QUrl::FormattingOptions(QUrl::FullyEncoded)));
|
runningScriptURL = QUrl::fromLocalFile(runningScriptURL.toDisplayString(QUrl::FormattingOptions(QUrl::FullyEncoded)));
|
||||||
}
|
}
|
||||||
QVariantMap resultNode;
|
QVariantMap resultNode;
|
||||||
resultNode.insert("name", runningScriptURL.fileName());
|
resultNode.insert("name", runningScriptURL.fileName());
|
||||||
resultNode.insert("url", runningScriptURL.toDisplayString(QUrl::FormattingOptions(QUrl::FullyEncoded)));
|
resultNode.insert("url", runningScriptURL.toDisplayString(QUrl::FormattingOptions(QUrl::FullyEncoded)));
|
||||||
|
// The path contains the exact path/URL of the script, which also is used in the stopScript function.
|
||||||
|
resultNode.insert("path", runningScript);
|
||||||
resultNode.insert("local", runningScriptURL.isLocalFile());
|
resultNode.insert("local", runningScriptURL.isLocalFile());
|
||||||
result.append(resultNode);
|
result.append(resultNode);
|
||||||
}
|
}
|
||||||
|
@ -294,3 +291,16 @@ QVariantList RunningScriptsWidget::getLocal() {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RunningScriptsWidget::stopScriptByName(const QString& name) {
|
||||||
|
foreach (const QString& runningScript, Application::getInstance()->getRunningScripts()) {
|
||||||
|
if (QUrl(runningScript).fileName().toLower() == name.trimmed().toLower()) {
|
||||||
|
return Application::getInstance()->stopScript(runningScript, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RunningScriptsWidget::stopScript(const QString& name, bool restart) {
|
||||||
|
return Application::getInstance()->stopScript(name, restart);
|
||||||
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ public:
|
||||||
const ScriptsModel* getScriptsModel() { return &_scriptsModel; }
|
const ScriptsModel* getScriptsModel() { return &_scriptsModel; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void stopScriptName(const QString& name, bool restart = false);
|
void scriptStopped(const QString& scriptName);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool eventFilter(QObject* sender, QEvent* event);
|
virtual bool eventFilter(QObject* sender, QEvent* event);
|
||||||
|
@ -45,10 +45,11 @@ protected:
|
||||||
virtual void showEvent(QShowEvent* event);
|
virtual void showEvent(QShowEvent* event);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void scriptStopped(const QString& scriptName);
|
|
||||||
QVariantList getRunning();
|
QVariantList getRunning();
|
||||||
QVariantList getPublic();
|
QVariantList getPublic();
|
||||||
QVariantList getLocal();
|
QVariantList getLocal();
|
||||||
|
bool stopScript(const QString& name, bool restart = false);
|
||||||
|
bool stopScriptByName(const QString& name);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void allScriptsStopped();
|
void allScriptsStopped();
|
||||||
|
@ -63,9 +64,6 @@ private:
|
||||||
QSignalMapper _stopSignalMapper;
|
QSignalMapper _stopSignalMapper;
|
||||||
ScriptsModelFilter _scriptsModelFilter;
|
ScriptsModelFilter _scriptsModelFilter;
|
||||||
ScriptsModel _scriptsModel;
|
ScriptsModel _scriptsModel;
|
||||||
ScriptsTableWidget* _recentlyLoadedScriptsTable;
|
|
||||||
QStringList _recentlyLoadedScripts;
|
|
||||||
QString _lastStoppedScript;
|
|
||||||
|
|
||||||
QVariantList getPublicChildNodes(TreeNodeFolder* parent);
|
QVariantList getPublicChildNodes(TreeNodeFolder* parent);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue