Skip to content

Commit

Permalink
HFP-1779 Move video state variables to video object
Browse files Browse the repository at this point in the history
Some video state variables were stored with the xAPI object, not with the
the video object. This was step 1 in moving some of the duplicate logic
within the video handlers to video.js
  • Loading branch information
otacke committed Mar 14, 2018
1 parent 94aa8c2 commit 40db1c3
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 32 deletions.
24 changes: 12 additions & 12 deletions scripts/html5.js
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ H5P.VideoHtml5 = (function ($) {
};

// Set duration used for xAPI statements.
videoXAPI.duration = video.duration;
self.duration = video.duration;

/**
* Helps registering events.
Expand All @@ -194,11 +194,11 @@ H5P.VideoHtml5 = (function ($) {
}

if (arg === H5P.Video.PLAYING) {
if (videoXAPI.seeking === true) {
extraArg = videoXAPI.getArgsXAPISeeked(videoXAPI.seekedTo);
if (self.seeking === true) {
extraArg = videoXAPI.getArgsXAPISeeked(self.seekedTo);
extraTrigger = 'seeked';
lastSend = 'seeked';
videoXAPI.seeking = false;
self.seeking = false;
}
else if (lastSend !== 'play') {
extraArg = videoXAPI.getArgsXAPIPlayed(video.currentTime);
Expand All @@ -209,7 +209,7 @@ H5P.VideoHtml5 = (function ($) {

if (arg === H5P.Video.PAUSED) {
// Put together extraArg for sending to xAPI statement.
if (!video.seeking && videoXAPI.seeking === false && video.currentTime !== video.duration) {
if (!video.seeking && self.seeking === false && video.currentTime !== video.duration) {
extraTrigger = 'paused';
extraArg = videoXAPI.getArgsXAPIPaused(video.currentTime, video.duration);
lastSend = 'paused';
Expand Down Expand Up @@ -241,14 +241,14 @@ H5P.VideoHtml5 = (function ($) {
lastSend = 'volumechange';
break;
case 'play':
if (videoXAPI.seeking === false && lastSend !== h5p) {
if (self.seeking === false && lastSend !== h5p) {
arg = videoXAPI.getArgsXAPIPlayed(video.currentTime);
lastSend = h5p;
}
else {
arg = videoXAPI.getArgsXAPISeeked(videoXAPI.seekedTo);
arg = videoXAPI.getArgsXAPISeeked(self.seekedTo);
lastSend = 'seeked';
videoXAPI.seeking = false;
self.seeking = false;
h5p = 'seeked';
}
break;
Expand Down Expand Up @@ -523,12 +523,12 @@ H5P.VideoHtml5 = (function ($) {
video.play();
video.pause();
}
if (videoXAPI.seeking === false) {
videoXAPI.previousTime = video.currentTime;
if (self.seeking === false) {
self.previousTime = video.currentTime;
}
video.currentTime = time;
videoXAPI.seeking = true;
videoXAPI.seekedTo = time;
self.seeking = true;
self.seekedTo = time;
};

/**
Expand Down
9 changes: 8 additions & 1 deletion scripts/video.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ H5P.Video = (function ($, ContentCopyrights, MediaCopyright, handlers) {
// Ref youtube.js - ipad & youtube - issue
self.pressToPlay = false;

// Values needed for xAPI triggering
self.previousTime = 0;
self.seeking = false;
self.seekedTo = 0;
self.duration = 0;

// Initialize event inheritance
H5P.EventDispatcher.call(self);

Expand Down Expand Up @@ -134,7 +140,8 @@ H5P.Video = (function ($, ContentCopyrights, MediaCopyright, handlers) {
self.triggerXAPI('played', event.data);
});
self.on('xAPIloaded', function (event){
self.triggerXAPI('initialized',event.data);
self.duration = self.getDuration();
self.triggerXAPI('initialized', event.data);
});
self.on('paused', function (event) {
self.triggerXAPI('paused', event.data);
Expand Down
8 changes: 2 additions & 6 deletions scripts/x-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ H5P.VideoXAPI = (function ($) {
*
* @public
*/
self.previousTime = 0;
self.seeking = false;
self.seekedTo = 0;
self.duration = 0;

/**
* Variables to track internal video state.
Expand Down Expand Up @@ -195,14 +191,14 @@ H5P.VideoXAPI = (function ($) {
*/
self.getArgsXAPISeeked = function (currentTime) {
var resultExtTime = formatFloat(currentTime);
endPlayingSegment(formatFloat(self.previousTime));
endPlayingSegment(formatFloat(instance.previousTime));
playingSegmentStart = resultExtTime;

return self.getArgsXAPI({
verb: 'seeked',
result: {
extensions: {
'https://w3id.org/xapi/video/extensions/time-from': formatFloat(self.previousTime),
'https://w3id.org/xapi/video/extensions/time-from': formatFloat(instance.previousTime),
'https://w3id.org/xapi/video/extensions/time-to': playingSegmentStart
}
},
Expand Down
26 changes: 13 additions & 13 deletions scripts/youtube.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,28 +126,28 @@ H5P.VideoYouTube = (function ($) {
// Calls for xAPI events.
if (state.data === 1) {
// Get and send play call when not seeking.
if (videoXAPI.seeking === false) {
if (self.seeking === false) {
self.trigger('play', videoXAPI.getArgsXAPIPlayed(player.getCurrentTime()));
}
else {
self.trigger('seeked', videoXAPI.getArgsXAPISeeked(videoXAPI.seekedTo));
videoXAPI.seeking = false;
self.trigger('seeked', videoXAPI.getArgsXAPISeeked(self.seekedTo));
self.seeking = false;
}
}
else if (state.data === 2) {
// This is a paused event.
if (videoXAPI.seeking === false) {
self.trigger('paused', videoXAPI.getArgsXAPIPaused(player.getCurrentTime(), player.getDuration()));
if (self.seeking === false) {
self.trigger('paused', videoXAPI.getArgsXAPIPaused(player.getCurrentTime(), self.duration));
}
}
else if (state.data === 0) {
// Send xapi trigger if video progress indicates finished.
var length = player.getDuration();
var length = self.duration;
if (length > 0) {
// Length passed in as current time, because at end of video when this is fired currentTime reset to 0 if on loop
var progress = videoXAPI.getProgress(length, length);
if (progress >= 1) {
var arg = videoXAPI.getArgsXAPICompleted(player.getCurrentTime(), player.getDuration(), progress);
var arg = videoXAPI.getArgsXAPICompleted(player.getCurrentTime(), self.duration, progress);
self.trigger('finished', arg);
}
}
Expand Down Expand Up @@ -193,7 +193,7 @@ H5P.VideoYouTube = (function ($) {
* @param {string} Which dimension to return ('width' or 'height')
*/
var getWidthOrHeight = function (returnType) {
var quality = player.getPlaybackQuality();
var quality = self.getQuality();
var width = '';
var height = '';
switch (quality) {
Expand Down Expand Up @@ -240,7 +240,7 @@ H5P.VideoYouTube = (function ($) {
ccLanguage = player.getOptions('cc', 'track').languageCode;
}

return videoXAPI.getArgsXAPIInitialized(width, height, player.getPlaybackRate(), player.getVolume(), ccEnabled, ccLanguage, player.getPlaybackQuality());
return videoXAPI.getArgsXAPIInitialized(width, height, self.getPlaybackRate(), self.getVolume(), ccEnabled, ccLanguage, self.getQuality());

};

Expand Down Expand Up @@ -360,12 +360,12 @@ H5P.VideoYouTube = (function ($) {
return;
}

if (videoXAPI.seeking === false) {
videoXAPI.previousTime = player.getCurrentTime();
if (self.seeking === false) {
self.previousTime = player.getCurrentTime();
}
player.seekTo(time, true);
videoXAPI.seekedTo = time;
videoXAPI.seeking = true;
self.seekedTo = time;
self.seeking = true;
};

/**
Expand Down

0 comments on commit 40db1c3

Please sign in to comment.