From 4efeb928e2ff62b3642e4e2bee79ad2661ab0480 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 20 Sep 2016 08:21:44 -0700 Subject: [PATCH] Add user activity logging to tutorial --- .../UserActivityLoggerScriptingInterface.cpp | 10 +++++++++ .../UserActivityLoggerScriptingInterface.h | 1 + tutorial/tutorial.js | 22 +++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp b/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp index 8b22b8ff58..de3238f08d 100644 --- a/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp +++ b/libraries/networking/src/UserActivityLoggerScriptingInterface.cpp @@ -24,6 +24,16 @@ void UserActivityLoggerScriptingInterface::toggledAway(bool isAway) { logAction("toggled_away", { { "is_away", isAway } }); } +void UserActivityLoggerScriptingInterface::tutorialProgress(QString stepName, int stepNumber, float secondsToComplete, float tutorialElapsedTime) { + logAction("tutorial_progress", { + { "step", stepName }, + { "stepNumber", stepNumber }, + { "secondsToComplete", secondsToComplete }, + { "tutorial_elapsed_time", tutorialElapsedTime } + }); + +} + void UserActivityLoggerScriptingInterface::logAction(QString action, QJsonObject details) { QMetaObject::invokeMethod(&UserActivityLogger::getInstance(), "logAction", Q_ARG(QString, action), diff --git a/libraries/networking/src/UserActivityLoggerScriptingInterface.h b/libraries/networking/src/UserActivityLoggerScriptingInterface.h index 9d60d666e2..bf3e20a2d7 100644 --- a/libraries/networking/src/UserActivityLoggerScriptingInterface.h +++ b/libraries/networking/src/UserActivityLoggerScriptingInterface.h @@ -23,6 +23,7 @@ public: Q_INVOKABLE void enabledEdit(); Q_INVOKABLE void openedMarketplace(); Q_INVOKABLE void toggledAway(bool isAway); + Q_INVOKABLE void tutorialProgress(QString stepName, int stepNumber, float secondsToComplete, float tutorialElapsedTime); private: void logAction(QString action, QJsonObject details = {}); diff --git a/tutorial/tutorial.js b/tutorial/tutorial.js index 1d768fe148..a01d1616e0 100644 --- a/tutorial/tutorial.js +++ b/tutorial/tutorial.js @@ -210,6 +210,7 @@ function playSuccessSound() { /////////////////////////////////////////////////////////////////////////////// var stepDisableControllers = function(name) { this.tag = name; + this.shouldLog = false; } stepDisableControllers.prototype = { start: function(onFinish) { @@ -959,10 +960,15 @@ TutorialManager = function() { var currentStepNum = -1; var currentStep = null; + var startedTutorialAt = 0; + var startedLastStepAt = 0; + + var self = this; this.startTutorial = function() { currentStepNum = -1; currentStep = null; + startedTutorialAt = Date.now(); STEPS = [ new stepDisableControllers("step0"), new stepOrient("orient"), @@ -984,6 +990,17 @@ TutorialManager = function() { this.startNextStep(); } + this.onFinish = function() { + if (currentStep && currentStep.shouldLog !== false) { + var timeToFinishStep = (Date.now() - startedLastStepAt) / 1000; + var tutorialTimeElapsed = (Date.now() - startedTutorialAt) / 1000; + UserActivityLogger.tutorialProgress( + currentStep.tag, currentStepNum, timeToFinishStep, tutorialTimeElapsed); + } + + self.startNextStep(); + } + this.startNextStep = function() { if (currentStep) { currentStep.cleanup(); @@ -1000,14 +1017,15 @@ TutorialManager = function() { } else { print("Starting step", currentStepNum); currentStep = STEPS[currentStepNum]; - currentStep.start(this.startNextStep); + startedLastStepAt = Date.now(); + currentStep.start(this.onFinish); return true; } }.bind(this); this.restartStep = function() { if (currentStep) { currentStep.cleanup(); - currentStep.start(this.startNextStep); + currentStep.start(this.onFinish); } }