frontend: fix crazy events

This commit is contained in:
nemunaire 2018-01-23 02:26:55 +01:00
parent 3c8f9e55b6
commit 1b6587de24
2 changed files with 32 additions and 31 deletions

View File

@ -7,6 +7,12 @@ String.prototype.capitalize = function() {
);
}
Array.prototype.inArray = function(v) {
return this.reduce(function(presence, current) {
return presence || current == v;
}, false);
}
angular.module("FICApp")
.directive('autofocus', ['$timeout', function($timeout) {
return {

View File

@ -64,45 +64,40 @@ angular.module("FICApp")
.controller("EventsController", function($scope, $http, $interval) {
$scope.events = [];
var refreshEvents = function() {
// Update times
var now = new Date().getTime();
$scope.events.forEach(function(ev) {
ev.since = now - ev.time;
});
$http.get("/events.json").then(function(response) {
// Don't make anything if the page hasn't changed
if ($scope.lasteventsetag != undefined && $scope.lasteventsetag == response.headers().etag)
return;
$scope.lasteventsetag = response.headers().etag;
var events = response.data;
var now = new Date();
var key = 0;
angular.forEach($scope.events, function(event) {
event.keep = 0;
var kEvents = {};
events.forEach(function(ev) {
kEvents[ev.id] = ev;
});
angular.forEach(events, function(event) {
var kxEvents = {}
$scope.events.forEach(function(ev) {
kxEvents[ev.id] = ev;
});
var oldEvents = $(Object.keys(kxEvents)).not(Object.keys(kEvents)).get();
var newEvents = $(Object.keys(kEvents)).not(Object.keys(kxEvents)).get();
$scope.events.filter(function(val) {
return !oldEvents.inArray(val.id);
});
newEvents.forEach(function(ev) {
var event = kEvents[ev];
event.time = Date.parse(event.time);
//event.since = now.getTime() - now.getTimezoneOffset() * 60000 - event.time;
event.since = now.getTime() - event.time;
event.keep = 1;
while (key <= $scope.events.length) {
if (key >= $scope.events.length) {
$scope.events.push(event);
break;
} else if (event.id == $scope.events[key].id) {
$scope.events[key].txt = event.txt;
$scope.events[key].time = event.time;
$scope.events[key].kind = event.kind;
$scope.events[key].since = event.since;
$scope.events[key].keep = 1;
break;
} else if (event.time > $scope.events[key].time) {
$scope.events.unshift(event);
break;
} else {
key += 1;
}
}
});
angular.forEach($scope.events, function(event, i) {
if (event.keep == 0) {
$scope.events.splice(i, 1);
}
event.since = now - event.time;
$scope.events.unshift(event);
});
});
}