changeset 837:31d02b334ba8

Feature #1266: Checks for fragments fully played implemented
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Wed, 02 Dec 2015 12:05:08 +0000
parents 1640c08ae2e8
children 0920172d9478
files ape.js core.js
diffstat 2 files changed, 54 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ape.js	Wed Dec 02 11:26:45 2015 +0000
+++ b/ape.js	Wed Dec 02 12:05:08 2015 +0000
@@ -571,9 +571,8 @@
 				break;
 			case  'fragmentFullPlayback':
 				// Check all fragments have been played to their full length
-				var checkState = interfaceContext.checkAllPlayed();
+				var checkState = interfaceContext.checkFragmentsFullyPlayed();
 				if (checkState == false) {canContinue = false;}
-				console.log('NOTE: fragmentFullPlayback not currently implemented, performing check fragmentPlayed instead');
 				break;
 			case 'fragmentMoved':
 				// Check all fragment sliders have been moved.
--- a/core.js	Wed Dec 02 11:26:45 2015 +0000
+++ b/core.js	Wed Dec 02 12:05:08 2015 +0000
@@ -2186,4 +2186,57 @@
 		}
 		return true;
 	};
+	
+	this.checkFragmentsFullyPlayed = function ()
+	{
+		// Checks the entire file has been played back
+		// NOTE ! This will return true IF playback is Looped!!!
+		if (audioEngineContext.loopPlayback)
+		{
+			console.log("WARNING - Looped source: Cannot check fragments are fully played");
+			return true;
+		}
+		var check_pass = true;
+		var error_obj = [];
+		for (var i = 0; i<audioEngineContext.audioObjects.length; i++)
+		{
+			var object = audioEngineContext.audioObjects[i];
+			var time = object.buffer.duration;
+			var metric = object.metric;
+			var passed = false;
+			for (var j=0; j<metric.listenTracker.length; j++)
+			{
+				var bt = metric.listenTracker[j].getElementsByTagName('buffertime');
+				var start_time = Number(bt[0].getAttribute('start'));
+				var stop_time = Number(bt[0].getAttribute('stop'));
+				var delta = stop_time - start_time;
+				if (delta >= time)
+				{
+					passed = true;
+					break;
+				}
+			}
+			if (passed == false)
+			{
+				check_pass = false;
+				console.log("Continue listening to track-"+i);
+				error_obj.push(i);
+			}
+		}
+		if (check_pass == false)
+		{
+			var str_start = "You have not listened to fragments ";
+			for (var i=0; i<error_obj.length; i++)
+			{
+				str_start += error_obj[i];
+				if (i != error_obj.length-1)
+				{
+					str_start += ', ';
+				}
+			}
+			str_start += ". Please keep listening";
+			console.log("[ALERT]: "+str_start);
+			alert(str_start);
+		}
+	};
 }
\ No newline at end of file