koerseadmin/js/controllers/viewer.js

241 lines
7.7 KiB
JavaScript

var mod = angular.module('bananaraceApp.controllers');
mod.controller('PouleViewerCtrl', ['$scope', '$timeout', '$location', '$cookies', '$routeParams', 'ViewerService', 'PouleService', '$interval',
function($scope, $timeout, $location, $cookies, $routeParams, ViewerService, PouleService, $interval) {
//store all the teams
$scope.teamsInPoule = [];
$scope.currentTier = $routeParams.tier;
$scope.currentPoule = $routeParams.poule;
//init cycletime
$scope.setCyclingPouleView = function(currentCyclingSetting) {
// console.log('SETTING CYCLING POULE VIEW'+currentCyclingSetting);
$cookies.put('cyclingpouleview', currentCyclingSetting);
// console.log('SETCYCLINGPOULE VIEW after set:'+$cookies.get('cyclingpouleview'));
if(currentCyclingSetting===false) {
// console.log('SETCYCLINGPOULE VIEW cancelling the timer');
$timeout.cancel($scope.cyclingTimer);
} else if(currentCyclingSetting === true){
// console.log('SETCYCLINGPOULE VIEW setting the timer! ');
setCyclingTimer($scope.nextViewerLink, $scope.cycletime);
} else {
// console.log('wtf mate');
}
};
$scope.getCyclingPouleView = function() {
if($cookies.get('cyclingpouleview')!=undefined) {
// console.log('defined in bookies, returning: '+$cookies.get('cyclingpouleview'));
return $cookies.get('cyclingpouleview')=='true';
} else {
// console.log('returning default: false');
return false;
}
};
$scope.getCyclingPouleTime = function() {
if($cookies.get('cyclingpouletime')!=undefined) {
return parseInt($cookies.get('cyclingpouletime'));
} else {
return 10;
}
};
$scope.cyclingPouleTimeChanged = function(cycletime) {
//set the time in the service
$cookies.put('cyclingpouletime',cycletime);
// console.log('poule time changed');
//reset the cycle timer if necessary
if($scope.getCyclingPouleView()) {
$timeout.cancel($scope.cyclingTimer);
setCyclingTimer($scope.nextViewerLink, cycletime);
}
};
$scope.refreshTeamsForPoule = function() {
var idchampionship = $routeParams.idchampionship;
var tier = $routeParams.tier;
var poule = $routeParams.poule;
ViewerService.getTeamsForPoule(idchampionship, tier, poule).
success(function(data, status, headers, config) {
// console.log('getTeamsForPoule successful...');
// console.log(data);
if (data['ok'] == true) {
$scope.teamsInPoule = data.teams;
} else {
console.log('call returned but wasnt ok: ' + data.error);
}
}).
error(function(data, status, headers, config) {
console.log('getTeamsForPoule failed...');
});
};
var setCyclingTimer = function(link, time) {
if(time == undefined) {
console.log('cant set a timer without time you fool...'+time);
return;
}
// console.log('-- SET CYCLING TIMER ('+time+') enabling cycle timer'+time+' '+(time*1000)+link);
$scope.cyclingTimer = $timeout(function() {
$interval.cancel($scope.refreshTimer);
//go to next page
// $location.url('http://google.com');
$location.url(link);
}, (time*1000));
};
$scope.setNextPouleLink = function() {
//load all poules of the current tier
PouleService.getPoules($routeParams.idchampionship).
success(function(data, status, headers, config) {
// console.log('getTeamsForPoule successful...');
console.log(data);
var tier = $routeParams.tier;
var currentPoule = $routeParams.poule;
var idchampionship = $routeParams.idchampionship;
if (data['ok'] == true) {
//get all the poules of this tier in one array
var poules = [];
for (var i = 0; i < data.poules.length; i++) {
if(data.poules[i].tier == tier)
poules.push(data.poules[i].poule);
}
//set up the next poule to be loaded
poules.sort();
//look up the currentpoule
var nextIndex = -1;
if(poules.indexOf(currentPoule) == poules.length-1) {
nextIndex = 0;
} else {
nextIndex=poules.indexOf(currentPoule)+1;
}
//set the link
$scope.nextViewerLink = "/viewer/championship/"+idchampionship+"/poule/"+tier+"/"+poules[nextIndex]+"/overview";
// /viewer/championship/16/poule/1/1/overview
//http://localhost/bananarace/#/viewer/championship/16/poule/1/1/overview
// console.log('built next viewer link:'+$scope.nextViewerLink);
if($scope.getCyclingPouleView()) {
console.log('jus fetched data, gonna enable cycle timer!');
setCyclingTimer($scope.nextViewerLink, $scope.cycletime);
}
} else {
console.log('call returned but wasnt ok: ' + data.error);
}
})
};
$scope.average = function(times) {
console.log('average got called: '+times);
var sum = 0;
for (var i = 0; i < times.length; i++) {
console.log(times[i]);
sum+=times[i];
}
sum/=times.length;
return sum;
};
$scope.getAverageOfBestOfTwo = function(races) {
// console.log('getting avg of best of two');
// console.log(races);
//collect sum laptimes
var sumlaptimes = [];
for (var i = 0; i < races.length; i++) {
if(races[i].sumlaptime!=undefined)
sumlaptimes.push(races[i].sumlaptime);
}
//sort the avglaptimes
sumlaptimes.sort();
sumlaptimes.reverse();
//cut off everything but two
var removeThisMany = 2;
sumlaptimes.splice(removeThisMany, sumlaptimes.length-removeThisMany);
// console.log(sumlaptimes);
if(sumlaptimes.length==2) {
return (parseFloat(sumlaptimes[0])+parseFloat(sumlaptimes[1]))/2;
} else {
return undefined;
}
};
$scope.bestOfTwo = function(race, races) {
//can't do anything if you don't give me the arrrrrs
if(races.length<2)
return 'unknown';
if(race == null)
return 'unknown';
if(races == null)
return 'unknown';
//collect sum laptimes
var sumlaptimes = [];
for (var i = 0; i < races.length; i++) {
sumlaptimes.push(races[i].sumlaptime);
}
//sort the avglaptimes
sumlaptimes.sort();
sumlaptimes.reverse();
//cut off everything but two
var removeThisMany = 2;
sumlaptimes.splice(removeThisMany, sumlaptimes.length-removeThisMany);
var laptimesok = sumlaptimes.indexOf(race.sumlaptime)!=-1;
//are there enough laptimes present?
var oklaptimescount = 0;
for (var i = 0; i < races.length; i++) {
if(races[i].laptimes.length>0)
oklaptimescount++;
}
var laptimesarethere = oklaptimescount>1;
if(laptimesarethere && laptimesok) {
return 'best';
}
if(!laptimesarethere) {
return 'unknown';
}
return 'notthebest';
};
//cycle settings
$scope.currentCyclingSetting = $scope.getCyclingPouleView();
$scope.cycletime = $scope.getCyclingPouleTime();
//refresh data: initial init
$scope.refreshTeamsForPoule();
//do times things: keep refreshing
//TODO this refresh shouldn't just reset the variable, it should overwrite team's times cleverly...
$scope.refreshTimer = $interval($scope.refreshTeamsForPoule, 2000);
// Cancel timer on destroying controller
$scope.$on('$destroy', function() {
$interval.cancel($scope.refreshTimer);
});
$scope.$on('$destroy', function() {
$timeout.cancel($scope.cyclingTimer);
});
$scope.setNextPouleLink();
}
]);