summaryrefslogtreecommitdiff
path: root/www/js/TimelineCtrl.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/js/TimelineCtrl.js')
-rw-r--r--www/js/TimelineCtrl.js712
1 files changed, 387 insertions, 325 deletions
diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js
index 0f67b085..101e7166 100644
--- a/www/js/TimelineCtrl.js
+++ b/www/js/TimelineCtrl.js
@@ -9,40 +9,48 @@
// I've disabled pan and zoom and used buttons instead
// also limits # of items to maxItems
-
// FIXME: too much redundant code between EventCtrl and Timeline
// Move to ModalCtrl and see if it works
-angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPlatform', '$scope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', 'message', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', '$ionicContentBanner', '$ionicHistory', '$sce', '$stateParams', '$translate', '$ionicPopup', '$interval', function($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, message, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, $ionicContentBanner, $ionicHistory, $sce, $stateParams, $translate, $ionicPopup, $interval) {
+angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPlatform', '$scope', 'zm', 'NVRDataModel', '$ionicSideMenuDelegate', '$rootScope', '$http', '$q', 'message', '$state', '$ionicLoading', '$ionicPopover', '$ionicScrollDelegate', '$ionicModal', '$timeout', '$ionicContentBanner', '$ionicHistory', '$sce', '$stateParams', '$translate', '$ionicPopup', '$interval', function($ionicPlatform, $scope, zm, NVRDataModel, $ionicSideMenuDelegate, $rootScope, $http, $q, message, $state, $ionicLoading, $ionicPopover, $ionicScrollDelegate, $ionicModal, $timeout, $ionicContentBanner, $ionicHistory, $sce, $stateParams, $translate, $ionicPopup, $interval)
+{
//console.log("Inside Timeline controller");
- $scope.openMenu = function() {
+ $scope.openMenu = function()
+ {
$ionicSideMenuDelegate.toggleLeft();
};
//---------------------------------------f-------------------------
// Alarm notification handling
//----------------------------------------------------------------
- $scope.handleAlarms = function() {
+ $scope.handleAlarms = function()
+ {
$rootScope.isAlarm = !$rootScope.isAlarm;
- if (!$rootScope.isAlarm) {
+ if (!$rootScope.isAlarm)
+ {
$rootScope.alarmCount = "0";
- $ionicHistory.nextViewOptions({
+ $ionicHistory.nextViewOptions(
+ {
disableBack: true
});
- $state.go("events", {
+ $state.go("events",
+ {
"id": 0,
"playEvent": false
- }, {
+ },
+ {
reload: true
});
return;
}
};
- $scope.leftButtons = [{
+ $scope.leftButtons = [
+ {
type: 'button-icon icon ion-navicon',
- tap: function(e) {
+ tap: function(e)
+ {
$scope.toggleMenu();
}
}];
@@ -50,7 +58,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//-----------------------------------------------------------
// Used to display date range for timeline
//-----------------------------------------------------------
- $scope.prettify = function(str) {
+ $scope.prettify = function(str)
+ {
if (NVRDataModel.getLogin().useLocalTimeZone)
return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format('MMMM Do YYYY, ' + NVRDataModel.getTimeFormat());
else
@@ -60,7 +69,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//-----------------------------------------------------------
// used for playback when you tap on a timeline event
//-----------------------------------------------------------
- $scope.calcMsTimer = function(frames, len) {
+ $scope.calcMsTimer = function(frames, len)
+ {
var myframes, mylen;
myframes = parseFloat(frames);
mylen = parseFloat(len);
@@ -69,8 +79,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
return (Math.round(1000 / (myframes / mylen)));
};
-
- $scope.toggleMinAlarmFrameCount = function() {
+ $scope.toggleMinAlarmFrameCount = function()
+ {
// console.log("Toggling");
var ld = NVRDataModel.getLogin();
@@ -78,7 +88,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
NVRDataModel.setLogin(ld);
-
drawGraph(curFromDate, curToDate, curCount);
};
@@ -86,11 +95,13 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//-----------------------------------------------------------
// Move/Zoom are used to move the timeline around
//-----------------------------------------------------------
- function move(percentage) {
+ function move(percentage)
+ {
var range = timeline.getWindow();
var interval = range.end - range.start;
- timeline.setWindow({
+ timeline.setWindow(
+ {
start: range.start.valueOf() - interval * percentage,
end: range.end.valueOf() - interval * percentage
});
@@ -101,19 +112,19 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$scope.gotoNow = function()
{
timeline.moveTo(timeline.getCurrentTime());
- };
+ };
- $scope.move = function(percentage) {
+ $scope.move = function(percentage)
+ {
move(percentage);
};
-
-
//-----------------------------------------
// Move by X days
//-----------------------------------------
- $scope.moveDays = function(d) {
+ $scope.moveDays = function(d)
+ {
var range = timeline.getWindow();
var ds = moment(range.start);
if (d > 0)
@@ -127,7 +138,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
fromDate = ds.format("YYYY-MM-DD HH:mm:ss");
toDate = es.format("YYYY-MM-DD HH:mm:ss");
-
$scope.fromDate = fromDate;
$scope.toDate = toDate;
$rootScope.customTimelineRange = false;
@@ -136,35 +146,34 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
};
-
- function eventDetails(ev) {
+ function eventDetails(ev)
+ {
$scope.event = ev;
- $ionicModal.fromTemplateUrl('templates/timeline-modal.html', {
+ $ionicModal.fromTemplateUrl('templates/timeline-modal.html',
+ {
scope: $scope, // give ModalCtrl access to this scope
animation: 'slide-in-up',
id: 'analyze',
})
- .then(function(modal) {
+ .then(function(modal)
+ {
$scope.modal = modal;
-
-
-
$scope.modal.show();
});
}
-
-
//--------------------------------------------------------
// To show a modal dialog with the event tapped on in timeline
// FIXME : code repeat from Events
//--------------------------------------------------------
- function openModal(event) {
+ function openModal(event)
+ {
- if ($scope.modalFromTimelineIsOpen == true) {
+ if ($scope.modalFromTimelineIsOpen == true)
+ {
// don't know why but some conflict from angular to timeline lib
// results in double modals at times
NVRDataModel.log(">>-- duplicate modal detected, preventing");
@@ -182,15 +191,18 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//prepareModalEvent(event.Event.Id);
- $ionicModal.fromTemplateUrl('templates/events-modal.html', {
+ $ionicModal.fromTemplateUrl('templates/events-modal.html',
+ {
scope: $scope, // give ModalCtrl access to this scope
animation: 'slide-in-up',
id: 'footage'
})
- .then(function(modal) {
+ .then(function(modal)
+ {
$scope.modal = modal;
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kPleaseWait') + "...",
noBackdrop: true,
duration: 10000,
@@ -201,8 +213,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
var ld = NVRDataModel.getLogin();
-
-
});
}
@@ -211,14 +221,16 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//We need to destroy because we are instantiating
// it on open
//--------------------------------------------------------
- $scope.closeModal = function() {
+ $scope.closeModal = function()
+ {
$scope.modalFromTimelineIsOpen = false;
// $interval.cancel(eventsInterval);
//$interval.cancel(segmentHandle);
NVRDataModel.debug("TimelineCtrl:Close & Destroy Modal");
NVRDataModel.stopNetwork("TimelineCtrl: closeModal");
NVRDataModel.setAwake(false);
- if ($scope.modal !== undefined) {
+ if ($scope.modal !== undefined)
+ {
$scope.modal.remove();
}
@@ -232,11 +244,11 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
};*/
-
//-------------------------------------------------------------------------
// called when user switches to background
//-------------------------------------------------------------------------
- function onPause() {
+ function onPause()
+ {
NVRDataModel.debug("TimelineCtrl:onpause called");
$interval.cancel(updateInterval);
// console.log("*** Moving to Background ***"); // Handle the pause event
@@ -245,37 +257,39 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
-
//--------------------------------------------------------
// This function is called by the graph ontapped function
// which in turn calls openModal
//--------------------------------------------------------
- function showEvent(event) {
+ function showEvent(event)
+ {
// in context of angular
- $timeout(function() {
+ $timeout(function()
+ {
openModal(event);
});
}
- $rootScope.$on('tz-updated', function() {
+ $rootScope.$on('tz-updated', function()
+ {
$scope.tzAbbr = NVRDataModel.getTimeZoneNow();
NVRDataModel.debug("Timezone API updated timezone to " + NVRDataModel.getTimeZoneNow());
});
-
-
//-------------------------------------------------
// Make sure we delete the timeline
// This may be redundant as the root view gets
// destroyed but no harm
//-------------------------------------------------
- $scope.$on('$ionicView.leave', function() {
+ $scope.$on('$ionicView.leave', function()
+ {
- if (timeline) {
+ if (timeline)
+ {
$interval.cancel(updateInterval);
timeline.destroy();
console.log("**Destroying Timeline");
@@ -283,7 +297,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
});
-
/*$scope.$on('$ionicView.enter', function() {
@@ -291,7 +304,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
});*/
- $scope.$on('$ionicView.beforeEnter', function() {
+ $scope.$on('$ionicView.beforeEnter', function()
+ {
//$ionicHistory.clearCache();
//$ionicHistory.clearHistory();
@@ -310,16 +324,19 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// graph range
//-------------------------------------------------
- $scope.$on('$ionicView.afterEnter', function() {
+ $scope.$on('$ionicView.afterEnter', function()
+ {
- $scope.monitors = message;
+ $scope.monitors = message;
//console.log("***AFTER ENTER");
- $scope.follow = { 'time': NVRDataModel.getLogin().followTimeLine };
+ $scope.follow = {
+ 'time': NVRDataModel.getLogin().followTimeLine
+ };
$interval.cancel(updateInterval);
- // Make sure sliding for menu is disabled so it
+ // Make sure sliding for menu is disabled so it
// does not interfere with graph panning
$ionicSideMenuDelegate.canDragContent(false);
var ld = NVRDataModel.getLogin();
@@ -338,11 +355,13 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$scope.modalFromTimelineIsOpen = false;
//var tempMon = message;
-
// lets timeline.onget the abbreviated version of TZ to display
- if (NVRDataModel.getLogin().useLocalTimeZone) {
+ if (NVRDataModel.getLogin().useLocalTimeZone)
+ {
$scope.tzAbbr = moment().tz(moment.tz.guess()).zoneAbbr();
- } else {
+ }
+ else
+ {
$scope.tzAbbr = moment().tz(NVRDataModel.getTimeZoneNow()).zoneAbbr();
}
@@ -355,80 +374,91 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$scope.monitors = iMon[0];
} else*/
-
-
-
//console.log ("MONITORS:"+JSON.stringify($scope.monitors));
- if ($rootScope.customTimelineRange) {
+ if ($rootScope.customTimelineRange)
+ {
$scope.currentMode = 'custom';
- //console.log("***** CUSTOM RANGE");
+ //console.log("***** CUSTOM RANGE");
if (moment($rootScope.fromString).isValid() &&
- moment($rootScope.toString).isValid()) {
+ moment($rootScope.toString).isValid())
+ {
// console.log("FROM & TO IS CUSTOM");
fromDate = $rootScope.fromString;
toDate = $rootScope.toString;
$scope.fromDate = fromDate;
$scope.toDate = toDate;
drawGraph(fromDate, toDate, maxItems);
- } else {
- console.log ("From:"+$rootScope.fromString + " To:"+$rootScope.toString);
+ }
+ else
+ {
+ console.log("From:" + $rootScope.fromString + " To:" + $rootScope.toString);
//console.log("FROM & TO IS CUSTOM INVALID");
if (NVRDataModel.getLogin().useLocalTimeZone)
{
fromDate = moment().startOf('day').format("YYYY-MM-DD HH:mm:ss");
- toDate = moment().endOf('day').format("YYYY-MM-DD HH:mm:ss");
+ toDate = moment().endOf('day').format("YYYY-MM-DD HH:mm:ss");
}
else
{
fromDate = moment().tz(NVRDataModel.getTimeZoneNow()).startOf('day').format("YYYY-MM-DD HH:mm:ss");
- toDate = moment().tz(NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
+ toDate = moment().tz(NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
}
-
+
drawGraph(fromDate, toDate, maxItems);
}
- } else {
+ }
+ else
+ {
$scope.currentMode = 'day';
if (NVRDataModel.getLogin().useLocalTimeZone)
- {
- fromDate = moment().startOf('day').format("YYYY-MM-DD HH:mm:ss");
- toDate = moment().endOf('day').format("YYYY-MM-DD HH:mm:ss");
- }
- else
- {
- fromDate = moment().tz(NVRDataModel.getTimeZoneNow()).startOf('day').format("YYYY-MM-DD HH:mm:ss");
- toDate = moment().tz(NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
- }
+ {
+ fromDate = moment().startOf('day').format("YYYY-MM-DD HH:mm:ss");
+ toDate = moment().endOf('day').format("YYYY-MM-DD HH:mm:ss");
+ }
+ else
+ {
+ fromDate = moment().tz(NVRDataModel.getTimeZoneNow()).startOf('day').format("YYYY-MM-DD HH:mm:ss");
+ toDate = moment().tz(NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
+ }
drawGraph(fromDate, toDate, maxItems);
}
- $ionicPopover.fromTemplateUrl('templates/timeline-popover.html', {
+ $ionicPopover.fromTemplateUrl('templates/timeline-popover.html',
+ {
scope: $scope,
- }).then(function(popover) {
+ }).then(function(popover)
+ {
$scope.popover = popover;
});
-
// --------------------------------------------------------
// Handling of back button in case modal is open should
// close the modal
// --------------------------------------------------------
- $ionicPlatform.registerBackButtonAction(function(e) {
+ $ionicPlatform.registerBackButtonAction(function(e)
+ {
e.preventDefault();
- if ($scope.modal != undefined && $scope.modal.isShown()) {
+ if ($scope.modal != undefined && $scope.modal.isShown())
+ {
// switch off awake, as liveview is finished
NVRDataModel.debug("Modal is open, closing it");
NVRDataModel.setAwake(false);
$scope.modal.remove();
- } else {
+ }
+ else
+ {
NVRDataModel.debug("Modal is closed, so toggling or exiting");
- if (!$ionicSideMenuDelegate.isOpenLeft()) {
+ if (!$ionicSideMenuDelegate.isOpenLeft())
+ {
$ionicSideMenuDelegate.toggleLeft();
- } else {
+ }
+ else
+ {
navigator.app.exitApp();
}
@@ -436,14 +466,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}, 1000);
-
});
//-------------------------------------------------
// Controller main
//-------------------------------------------------
-
var graphIndex;
var updateInterval;
var lastTimeForEvent;
@@ -460,40 +488,28 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
var curFromDate, curToDate, curCount;
-
document.addEventListener("pause", onPause, false);
// FIXME: Timeline awake to avoid graph redrawing
NVRDataModel.setAwake(NVRDataModel.getKeepAwake());
-
-
-
-
-
// fromDate and toDate will be used to plot the range for the graph
// We start in day mode
//
var fromDate, toDate;
-
- fromDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow()).startOf('day').format("YYYY-MM-DD HH:mm:ss");
- toDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
-
-
+ fromDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow()).startOf('day').format("YYYY-MM-DD HH:mm:ss");
+ toDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
$scope.fromDate = fromDate;
$scope.toDate = toDate;
-
// maxItems will be ignored during timeline draw if its desktop
var maxItemsConf;
var ld = NVRDataModel.getLogin();
var maxItems;
-
-
//flat colors for graph - https://flatuicolors.com http://www.flatuicolorpicker.com
var colors = ['#3498db', '#E57373', '#EB974E', '#95A5A6', '#e74c3c', '#03C9A9', ];
@@ -501,8 +517,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
container = angular.element(document.getElementById('visualization'));
var timeline;
-
-
//console.log ("RETURNING MONITORS " + JSON.stringify($scope.monitors));
//$scope.monitors = message;
@@ -511,8 +525,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$scope.navControls = false;
var navControls = false;
-
-
//drawGraph(fromDate, toDate, maxItems);
//dummyDrawGraph(fromDate, toDate,maxItems);
@@ -520,42 +532,53 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// Rest graph to sane state after you went
// wild zooming and panning :-)
//-------------------------------------------------
- $scope.fit = function() {
+ $scope.fit = function()
+ {
timeline.fit();
};
- $scope.toggleNav = function() {
- if (navControls == true) {
+ $scope.toggleNav = function()
+ {
+ if (navControls == true)
+ {
navControls = !navControls;
// $scope.navControls = navControls;
// give out animation time
- $timeout(function() {
+ $timeout(function()
+ {
$scope.navControls = navControls;
}, 2000);
- } else {
+ }
+ else
+ {
navControls = !navControls;
$scope.navControls = navControls;
}
var element = angular.element(document.getElementById("timeline-ctrl"));
- if (navControls) {
+ if (navControls)
+ {
element.removeClass("animated bounceOutLeft");
element.addClass("animated bounceInRight");
- } else {
+ }
+ else
+ {
element.removeClass("animated bounceInRight");
element.addClass("animated bounceOutLeft");
}
};
- function shortenTime(str) {
+ function shortenTime(str)
+ {
if (NVRDataModel.getLogin().useLocalTimeZone)
return moment.tz(str, NVRDataModel.getTimeZoneNow()).tz(moment.tz.guess()).format(NVRDataModel.getTimeFormat());
else
return moment(str).format(NVRDataModel.getTimeFormat());
}
- $scope.toggleFollowTime = function() {
+ $scope.toggleFollowTime = function()
+ {
/*if ($scope.currentMode != 'day') {
$rootScope.zmPopup = $ionicPopup.alert({
title: $translate.instant('kError'),
@@ -573,8 +596,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// so we can redraw the graph
//-------------------------------------------------
-
- $scope.buttonClicked = function(index) {
+ $scope.buttonClicked = function(index)
+ {
//console.log (index);
if (index == 0) //month
{
@@ -588,30 +611,33 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$scope.fromDate = fromDate;
$scope.toDate = toDate;
drawGraph(fromDate, toDate, maxItems);
- } else if (index == 1) //week
+ }
+ else if (index == 1) //week
{
$scope.follow.time = NVRDataModel.getLogin().followTimeLine;
$scope.currentMode = "week";
$rootScope.customTimelineRange = false;
NVRDataModel.log("Week view");
- toDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow()).format("YYYY-MM-DD HH:mm:ss");
- fromDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow()).subtract(1, 'week').startOf('day').format("YYYY-MM-DD HH:mm:ss");
+ toDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow()).format("YYYY-MM-DD HH:mm:ss");
+ fromDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow()).subtract(1, 'week').startOf('day').format("YYYY-MM-DD HH:mm:ss");
$scope.fromDate = fromDate;
$scope.toDate = toDate;
drawGraph(fromDate, toDate, maxItems);
- } else if (index == 2) //day
+ }
+ else if (index == 2) //day
{
$scope.currentMode = "day";
$rootScope.customTimelineRange = false;
NVRDataModel.log("Day view");
//toDate = moment().format("YYYY-MM-DD HH:mm:ss");
- fromDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow()).startOf('day').format("YYYY-MM-DD HH:mm:ss");
- toDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
+ fromDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow()).startOf('day').format("YYYY-MM-DD HH:mm:ss");
+ toDate = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow()).endOf('day').format("YYYY-MM-DD HH:mm:ss");
$scope.fromDate = fromDate;
$scope.toDate = toDate;
drawGraph(fromDate, toDate, maxItems);
- } else // custom
+ }
+ else // custom
{
$scope.follow.time = NVRDataModel.getLogin().followTimeLine;
$scope.currentMode = "custom";
@@ -622,12 +648,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
};
-
/**
* [processNewEvents is called every X seconds when dynamic update is on. X = 10 for now]
* @return {[type]}
*/
- function processNewEvents() {
+ function processNewEvents()
+ {
//safeguard in the event http calls are still going on
if (!$scope.follow.time || isProcessNewEventsWaiting) return;
@@ -636,7 +662,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// check for last 2 minutes to account for late DB updates and what not. 5 mins was likely enough
//
-
// make sure these are server time
var from = moment(lastTimeForEvent).tz(NVRDataModel.getTimeZoneNow());
@@ -645,7 +670,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
var to = moment(lastTimeForEvent).tz(NVRDataModel.getTimeZoneNow());
to = to.locale('en').format("YYYY-MM-DD HH:mm:ss");
- lastTimeForEvent = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow());
+ lastTimeForEvent = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow());
// FIXME: totally ignoring event pages - hoping it wont be more than 100 or 150 whatever
// the events per page limit is. Why? laziness.
@@ -660,15 +685,14 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// as it turns out various events get stored withn null and never recover
// so, lets limiy to 15 m
//
-
+
var st = moment(lastTimeForEvent).tz(NVRDataModel.getTimeZoneNow());
- st = st.subtract (10,'minutes').locale('en').format("YYYY-MM-DD HH:mm:ss");
- var ongoingEvents = ld.apiurl + '/events/index/StartTime >=:'+st+'/EndTime =:.json';
+ st = st.subtract(10, 'minutes').locale('en').format("YYYY-MM-DD HH:mm:ss");
+ var ongoingEvents = ld.apiurl + '/events/index/StartTime >=:' + st + '/EndTime =:.json';
//NVRDataModel.debug("Getting incremental events using: " + completedEvents);
-
- NVRDataModel.debug ("Completed events API:"+completedEvents);
- NVRDataModel.debug ("Ongoing events API:+"+ongoingEvents);
+ NVRDataModel.debug("Completed events API:" + completedEvents);
+ NVRDataModel.debug("Ongoing events API:+" + ongoingEvents);
isProcessNewEventsWaiting = true;
@@ -676,32 +700,36 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
var $httpOngoing = $http.get(ongoingEvents);
$q.all([$httpApi, $httpOngoing])
- .then(function(dataarray) {
+ .then(function(dataarray)
+ {
var myevents = dataarray[0].data.events;
- if (dataarray.length > 1) {
+ if (dataarray.length > 1)
+ {
myevents = myevents.concat(dataarray[1].data.events);
-
+
}
$scope.newEvents = '';
var localNewEvents = '';
//console.log ("GOT "+JSON.stringify(data));
- for (var j = 0; j < myevents.length; j++) {
+ for (var j = 0; j < myevents.length; j++)
+ {
// these are all in server timezone but no TZ
-
+
myevents[j].Event.StartTime = moment.tz(myevents[j].Event.StartTime, NVRDataModel.getTimeZoneNow()).format('YYYY-MM-DD HH:mm:ss');
myevents[j].Event.EndTime = moment.tz(myevents[j].Event.EndTime, NVRDataModel.getTimeZoneNow()).format('YYYY-MM-DD HH:mm:ss');
-
+
var itm = graphData.get(myevents[j].Event.Id);
- if (itm) {
- // console.log(myevents[j].Event.Id + " already exists, updating params");
+ if (itm)
+ {
+ // console.log(myevents[j].Event.Id + " already exists, updating params");
- var content = "<span class='my-vis-font'>" + "("+myevents[j].Event.Id+")"+myevents[j].Event.Notes + " " + $translate.instant('kRecordingProgress') + "</span>";
+ var content = "<span class='my-vis-font'>" + "(" + myevents[j].Event.Id + ")" + myevents[j].Event.Notes + " " + $translate.instant('kRecordingProgress') + "</span>";
var style;
var recordingInProgress = false;
@@ -710,16 +738,17 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
{
//console.log ("EVENT "+myevents[j].Event.Id+" emded at "+myevents[j].Event.EndTime);
- content = "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[j].Event.AlarmFrames + ") " + " ("+myevents[j].Event.Id+") "+ myevents[j].Event.Notes + "</span>";
+ content = "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[j].Event.AlarmFrames + ") " + " (" + myevents[j].Event.Id + ") " + myevents[j].Event.Notes + "</span>";
style = "background-color:" + colors[parseInt(myevents[j].Event.MonitorId) % colors.length] +
";border-color:" + colors[parseInt(myevents[j].Event.MonitorId) % colors.length];
- } else // still recording
+ }
+ else // still recording
{
- var tze;
+ var tze;
tze = moment().tz(NVRDataModel.getTimeZoneNow());
-
+
myevents[j].Event.EndTime = tze.format('YYYY-MM-DD HH:mm:ss');
//console.log ("END TIME = "+ myevents[j].Event.EndTime);
@@ -729,42 +758,44 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
-
-
// right at this point we need to decide if we keep or remove this event
//
- if (ld.enableAlarmCount && ld.minAlarmCount > myevents[j].Event.AlarmFrames && !recordingInProgress) {
+ if (ld.enableAlarmCount && ld.minAlarmCount > myevents[j].Event.AlarmFrames && !recordingInProgress)
+ {
// remove
NVRDataModel.debug("Removing Event:" + myevents[j].Event.Id + "as it doesn't have " + myevents[j].Event.AlarmFrames + " alarm frames");
- // var old = timeline.getWindow();
+ // var old = timeline.getWindow();
graphData.remove(myevents[j].Event.Id);
- // timeline.setWindow (old.start, old.end);
- } else {
+ // timeline.setWindow (old.start, old.end);
+ }
+ else
+ {
var tzs1, tze1;
if (NVRDataModel.getLogin().useLocalTimeZone)
{
- tzs1 = moment.tz(myevents[j].Event.StartTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
- tze1 = moment.tz(myevents[j].Event.EndTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tzs1 = moment.tz(myevents[j].Event.StartTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tze1 = moment.tz(myevents[j].Event.EndTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
}
else
{
- tzs1 = moment.tz(myevents[j].Event.StartTime,NVRDataModel.getTimeZoneNow());
- tze1 = moment.tz(myevents[j].Event.EndTime,NVRDataModel.getTimeZoneNow());
+ tzs1 = moment.tz(myevents[j].Event.StartTime, NVRDataModel.getTimeZoneNow());
+ tze1 = moment.tz(myevents[j].Event.EndTime, NVRDataModel.getTimeZoneNow());
}
//tzs1 = tzs1.format("YYYY-MM-DD HH:mm:ss");
//tze1 = tze1.format("YYYY-MM-DD HH:mm:ss");
- NVRDataModel.debug("Updating Event:" + myevents[j].Event.Id + "StartTime:"+tzs1.format()+" EndTime:" + tze1.format());
- graphData.update({
+ NVRDataModel.debug("Updating Event:" + myevents[j].Event.Id + "StartTime:" + tzs1.format() + " EndTime:" + tze1.format());
+ graphData.update(
+ {
id: myevents[j].Event.Id,
content: content,
- start:tzs1,
- // start: myevents[j].Event.StartTime,
- // end: myevents[j].Event.EndTime,
- end:tze1,
+ start: tzs1,
+ // start: myevents[j].Event.StartTime,
+ // end: myevents[j].Event.EndTime,
+ end: tze1,
//group: myevents[j].Event.MonitorId,
//type: "range",
style: style,
@@ -783,33 +814,33 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//console.log ("Focus EID="+myevents[j].Event.Id);
localNewEvents = localNewEvents + NVRDataModel.getMonitorName(myevents[j].Event.MonitorId) + '@' + shortenTime(myevents[j].Event.StartTime) + ' (' + myevents[j].Event.Id + '),';
-
}
-
-
- } else { // event is new
+ }
+ else
+ { // event is new
var isBeingRecorded = false;
var idfound = false;
- for (var ii = 0; ii < $scope.monitors.length; ii++) {
- if ($scope.monitors[ii].Monitor.Id == myevents[j].Event.MonitorId && NVRDataModel.isNotHidden(myevents[j].Event.MonitorId)) {
+ for (var ii = 0; ii < $scope.monitors.length; ii++)
+ {
+ if ($scope.monitors[ii].Monitor.Id == myevents[j].Event.MonitorId && NVRDataModel.isNotHidden(myevents[j].Event.MonitorId))
+ {
idfound = true;
break;
}
}
- if (idfound) {
-
-
+ if (idfound)
+ {
myevents[j].Event.MonitorName = NVRDataModel.getMonitorName(myevents[j].Event.MonitorId);
-
myevents[j].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[j].Event.MonitorId);
myevents[j].Event.baseURL = NVRDataModel.getBaseURL(myevents[j].Event.MonitorId);
myevents[j].Event.imageMode = NVRDataModel.getImageMode(myevents[j].Event.MonitorId);
- if (NVRDataModel.getLogin().url != myevents[j].Event.baseURL) {
+ if (NVRDataModel.getLogin().url != myevents[j].Event.baseURL)
+ {
myevents[j].Event.baseURL = NVRDataModel.getLogin().url;
}
@@ -818,8 +849,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// console.log (JSON.stringify(myevents[j]));
myevents[j].Event.DefaultVideo = "";
-
-
// now lets make sure we don't infinitely increase
if (graphIndex >= curCount)
@@ -827,7 +856,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
{
var mv = graphData.min('id');
//console.log("MIN="+JSON.stringify(mv));
- if (mv) {
+ if (mv)
+ {
graphData.remove(mv.id);
graphIndex--;
NVRDataModel.debug("Removed Event " + mv.id + " to make space");
@@ -836,26 +866,24 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
// since this is a new add its possible dates are not defined
- if (!moment(myevents[j].Event.StartTime).isValid()) {
+ if (!moment(myevents[j].Event.StartTime).isValid())
+ {
NVRDataModel.log("Event:" + myevents[j].Event.Id + "-Invalid Start time - this should really not happen ");
}
-
- if (!moment(myevents[j].Event.EndTime).isValid()) {
- var t1 = moment().tz(NVRDataModel.getTimeZoneNow());
-
-
+ if (!moment(myevents[j].Event.EndTime).isValid())
+ {
+ var t1 = moment().tz(NVRDataModel.getTimeZoneNow());
myevents[j].Event.EndTime = t1.format('YYYY-MM-DD HH:mm:ss');
- NVRDataModel.debug ("Event:" + myevents[j].Event.Id +"-End time is invalid, setting to current time");
-
+ NVRDataModel.debug("Event:" + myevents[j].Event.Id + "-End time is invalid, setting to current time");
+
isBeingRecorded = true;
}
-
// if range doesn't allow for current time, we need to fix that
/*if (moment(options.max).isBefore(moment())) {
// console.log("Adjusting Range to fit in new event");
@@ -865,41 +893,43 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
var eventText = "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + (myevents[j].Event.AlarmFrames || ' unknown ') + ") " + myevents[j].Event.Notes + "</span>";
- if (isBeingRecorded) {
- eventText = "<span class='my-vis-font'>" + "("+myevents[j].Event.Id+") "+ myevents[j].Event.Notes + " " + $translate.instant('kRecordingProgress') + "</span>";
+ if (isBeingRecorded)
+ {
+ eventText = "<span class='my-vis-font'>" + "(" + myevents[j].Event.Id + ") " + myevents[j].Event.Notes + " " + $translate.instant('kRecordingProgress') + "</span>";
}
// since we concated, its possible events may be repeated
- if (!graphData.get(myevents[j].Event.Id)) {
-
+ if (!graphData.get(myevents[j].Event.Id))
+ {
localNewEvents = localNewEvents + NVRDataModel.getMonitorName(myevents[j].Event.MonitorId) + '@' + shortenTime(myevents[j].Event.StartTime) + ' (' + myevents[j].Event.Id + '),';
var tzs2, tze2;
if (NVRDataModel.getLogin().useLocalTimeZone)
{
- tzs2 = moment.tz(myevents[j].Event.StartTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
- tze2 = moment.tz(myevents[j].Event.EndTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tzs2 = moment.tz(myevents[j].Event.StartTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tze2 = moment.tz(myevents[j].Event.EndTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
}
else
{
- tzs2 = moment.tz(myevents[j].Event.StartTime,NVRDataModel.getTimeZoneNow());
- tze2 = moment.tz(myevents[j].Event.EndTime,NVRDataModel.getTimeZoneNow());
+ tzs2 = moment.tz(myevents[j].Event.StartTime, NVRDataModel.getTimeZoneNow());
+ tze2 = moment.tz(myevents[j].Event.EndTime, NVRDataModel.getTimeZoneNow());
}
//tzs2 = tzs2.format("YYYY-MM-DD HH:mm:ss");
//tze2 = tze2.format("YYYY-MM-DD HH:mm:ss");
-
- NVRDataModel.debug(">>> "+myevents[j].Event.Id + " New event updating graph " + " from:" + tzs2.format()+" to:"+tze2.format() );
-
- graphData.add({
+
+ NVRDataModel.debug(">>> " + myevents[j].Event.Id + " New event updating graph " + " from:" + tzs2.format() + " to:" + tze2.format());
+
+ graphData.add(
+ {
id: myevents[j].Event.Id,
content: eventText,
- start:tzs2,
+ start: tzs2,
//start: myevents[j].Event.StartTime,
- // end: myevents[j].Event.EndTime,
- end:tze2,
+ // end: myevents[j].Event.EndTime,
+ end: tze2,
group: myevents[j].Event.MonitorId,
style: "background-color:orange",
//type: "range",
@@ -914,22 +944,20 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
});
graphIndex++;
//timeline.focus(myevents[j].Event.Id);
- timeline.moveTo(timeline.getCurrentTime());
+ timeline.moveTo(timeline.getCurrentTime());
}
//options.max = moment(fromDate).locale('en').format("YYYY-MM-DD HH:mm:ss");
-
-
} //idfound
-
} // new event
} // for j
// At this stage, see if we need to display new events
- if (localNewEvents.length > 0) {
+ if (localNewEvents.length > 0)
+ {
localNewEvents = $translate.instant('kLatestEvents') + ':' + localNewEvents;
localNewEvents = localNewEvents.slice(0, -1);
$scope.newEvents = localNewEvents;
@@ -937,28 +965,25 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
isProcessNewEventsWaiting = false;
},
- function(err) {
+ function(err)
+ {
NVRDataModel.debug("Error getting incremental timeline data");
isProcessNewEventsWaiting = false;
});
-
-
-
// check all events that started 10+10 seconds ago
-
}
-
//-------------------------------------------------
// This function draws the graph
//-------------------------------------------------
- function drawGraph(fromDate, toDate, count) {
+ function drawGraph(fromDate, toDate, count)
+ {
- console.log ("INSIDE DRAW");
+ console.log("INSIDE DRAW");
$scope.newEvents = "";
// we only need this for day mode
@@ -968,7 +993,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
curToDate = toDate;
curCount = count;
-
var isFirstItem = true;
var fromDateNoLang = moment(fromDate).locale('en').format("YYYY-MM-DD HH:mm:ss");
@@ -976,7 +1000,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//latestDateDrawn =toDateNoLang;
- $ionicLoading.show({
+ $ionicLoading.show(
+ {
template: $translate.instant('kLoadingGraph') + "...",
animation: 'fade-in',
showBackdrop: true,
@@ -989,30 +1014,29 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
$scope.graphLoaded = false;
NVRDataModel.debug("TimelineCtrl/drawgraph: graphLoaded:" + $scope.graphLoaded);
- if (timeline) {
+ if (timeline)
+ {
NVRDataModel.debug("TimelineCtrl/drawgraph: destroying timeline as it exists");
timeline.destroy();
}
-
groups = new vis.DataSet();
graphData = new vis.DataSet();
//console.log ("AFTER VIS");
-
var tzs, tze;
// lets scope the time graph to either local or remote time zone
-
+
if (NVRDataModel.getLogin().useLocalTimeZone)
{
- tzs = moment.tz(fromDate, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
- tze = moment.tz(toDate, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tzs = moment.tz(fromDate, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tze = moment.tz(toDate, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
}
else
{
- tzs = moment.tz(fromDate,NVRDataModel.getTimeZoneNow());
- tze = moment.tz(toDate,NVRDataModel.getTimeZoneNow());
+ tzs = moment.tz(fromDate, NVRDataModel.getTimeZoneNow());
+ tze = moment.tz(toDate, NVRDataModel.getTimeZoneNow());
}
//tzs = tzs.format("YYYY-MM-DD HH:mm:ss");
@@ -1022,15 +1046,16 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
showCurrentTime: true,
editable: false,
- moment: function (date) {
+ moment: function(date)
+ {
//var t;
if (NVRDataModel.getLogin().useLocalTimeZone)
//if (0)
- return moment.tz(date,NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ return moment.tz(date, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
else
- // typecast to server time zone - its in server time anyway
- return moment.tz(date,NVRDataModel.getTimeZoneNow());
+ // typecast to server time zone - its in server time anyway
+ return moment.tz(date, NVRDataModel.getTimeZoneNow());
},
//throttleRedraw: 100,
moveable: true,
@@ -1043,13 +1068,16 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//max: tze,
zoomMin: 5 * 60 * 1000, // 1 min
stack: false,
- format: {
- minorLabels: {
+ format:
+ {
+ minorLabels:
+ {
minute: NVRDataModel.getTimeFormat(),
hour: NVRDataModel.getTimeFormat(),
second: 's',
},
- majorLabels: {
+ majorLabels:
+ {
second: "D MMM " + NVRDataModel.getTimeFormat(),
}
},
@@ -1058,11 +1086,11 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
graphIndex = 1; // will be used for graph ID
-
//console.log ("**NOLANG" + fromDateNoLang + " " + toDateNoLang);
NVRDataModel.getEventsPages(0, fromDateNoLang, toDateNoLang)
- .then(function(data) {
+ .then(function(data)
+ {
var pages = data.pageCount || 1;
var itemsPerPage = parseInt(data.limit);
var iterCount;
@@ -1076,7 +1104,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// for dynamic binding which was easier, but due to performance reasons
// I am waiting for the full data to load before I draw
var promises = [];
- while ((pages > 0) && (iterCount > 0)) {
+ while ((pages > 0) && (iterCount > 0))
+ {
var promise = NVRDataModel.getEvents(0, pages, "none", fromDateNoLang, toDateNoLang);
promises.push(promise);
pages--;
@@ -1085,13 +1114,16 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
$q.all(promises)
- .then(function(data) {
+ .then(function(data)
+ {
NVRDataModel.debug("TimelineCtrl/drawgraph: all pages of graph data received");
graphIndex = 0;
NVRDataModel.log("Creating " + $scope.monitors.length + " groups for the graph");
// create groups
- for (var g = 0; g < $scope.monitors.length; g++) {
- groups.add({
+ for (var g = 0; g < $scope.monitors.length; g++)
+ {
+ groups.add(
+ {
id: $scope.monitors[g].Monitor.Id,
//mid: $scope.monitors[g].Monitor.Id,
content: NVRDataModel.getMonitorName($scope.monitors[g].Monitor.Id),
@@ -1101,28 +1133,32 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
NVRDataModel.getMonitorName($scope.monitors[g].Monitor.Id));
}
-
-
- for (var j = 0; j < data.length; j++) {
+ for (var j = 0; j < data.length; j++)
+ {
var myevents = data[j];
- if (graphIndex > count) {
+ if (graphIndex > count)
+ {
NVRDataModel.log("Exiting page count graph - reached limit of " + count);
break;
}
- for (var i = 0; i < myevents.length; i++) {
+ for (var i = 0; i < myevents.length; i++)
+ {
// make sure group id exists before adding
var idfound = true;
var ld = NVRDataModel.getLogin();
- if (ld.persistMontageOrder) {
+ if (ld.persistMontageOrder)
+ {
idfound = false;
- for (var ii = 0; ii < $scope.monitors.length; ii++) {
- if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId && NVRDataModel.isNotHidden(myevents[i].Event.MonitorId)) {
+ for (var ii = 0; ii < $scope.monitors.length; ii++)
+ {
+ if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId && NVRDataModel.isNotHidden(myevents[i].Event.MonitorId))
+ {
idfound = true;
//console.log ("****************** ID MATCH " + graphIndex);
@@ -1137,7 +1173,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
myevents[i].Event.streamingURL = NVRDataModel.getStreamingURL(myevents[i].Event.MonitorId);
myevents[i].Event.baseURL = NVRDataModel.getBaseURL(myevents[i].Event.MonitorId);
myevents[i].Event.imageMode = NVRDataModel.getImageMode(myevents[i].Event.MonitorId);
- if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL) {
+ if (NVRDataModel.getLogin().url != myevents[i].Event.baseURL)
+ {
//NVRDataModel.debug ("Multi server, changing base");
myevents[i].Event.baseURL = NVRDataModel.getLogin().url;
@@ -1146,10 +1183,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.baseURL);
-
-
-
- if (idfound) {
+ if (idfound)
+ {
if (typeof myevents[i].Event.DefaultVideo === 'undefined')
// console.log (JSON.stringify(myevents[i]));
@@ -1160,25 +1195,26 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
var tzs, tze;
if (NVRDataModel.getLogin().useLocalTimeZone)
{
- tzs = moment.tz(myevents[i].Event.StartTime,NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
- tze = moment.tz(myevents[i].Event.EndTime,NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tzs = moment.tz(myevents[i].Event.StartTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
+ tze = moment.tz(myevents[i].Event.EndTime, NVRDataModel.getTimeZoneNow()).tz(NVRDataModel.getLocalTimeZoneNow());
}
else
{
- tzs = moment.tz(myevents[i].Event.StartTime,NVRDataModel.getTimeZoneNow());
- tze = moment.tz(myevents[i].Event.EndTime,NVRDataModel.getTimeZoneNow());
+ tzs = moment.tz(myevents[i].Event.StartTime, NVRDataModel.getTimeZoneNow());
+ tze = moment.tz(myevents[i].Event.EndTime, NVRDataModel.getTimeZoneNow());
}
//console.log ("ADDED "+tzs+" " +tze);
- graphData.add({
+ graphData.add(
+ {
//id: graphIndex,
id: myevents[i].Event.Id,
- content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") "+ "("+myevents[j].Event.Id+") " + myevents[i].Event.Notes + "</span>",
+ content: "<span class='my-vis-font'>" + "( <i class='ion-android-notifications'></i>" + myevents[i].Event.AlarmFrames + ") " + "(" + myevents[j].Event.Id + ") " + myevents[i].Event.Notes + "</span>",
- start:tzs,
+ start: tzs,
//start: myevents[i].Event.StartTime,
//end: myevents[i].Event.EndTime,
- end:tze,
+ end: tze,
group: myevents[i].Event.MonitorId,
//type: "range",
style: "background-color:" + colors[parseInt(myevents[i].Event.MonitorId) % colors.length] +
@@ -1192,13 +1228,14 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
});
graphIndex++;
- } else {
+ }
+ else
+ {
//console.log ("SKIPPED GRAPH ID " + graphIndex);
}
-
-
- if (graphIndex > count) {
+ if (graphIndex > count)
+ {
NVRDataModel.log("Exiting event graph - reached limit of " + count);
break;
@@ -1207,7 +1244,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
}
- console.log(">>>>> CREATING NEW TIMELINE with "+JSON.stringify(options));
+ console.log(">>>>> CREATING NEW TIMELINE with " + JSON.stringify(options));
timeline = new vis.Timeline(container[0], null, options);
// console.log ("GRAPH DATA");
timeline.setItems(graphData);
@@ -1217,14 +1254,14 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
if (NVRDataModel.getLogin().timelineScale == -1)
{
- // console.log ("SCALE NOT FOUND");
-
- timeline.fit();
+ // console.log ("SCALE NOT FOUND");
+
+ timeline.fit();
}
else
{
- timeline.fit();
-
+ timeline.fit();
+
/*var d = NVRDataModel.getLogin().timelineScale;
console.log ("SCALE FOUND "+d+" SECONDS");
var w = timeline.getWindow();
@@ -1241,13 +1278,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
console.log ("Start="+s+" End="+e);
$timeout (function() {timeline.setWindow(s,e);},1000);*/
-
}
-
- lastTimeForEvent = moment().tz(NVRDataModel.getLogin().useLocalTimeZone?NVRDataModel.getLocalTimeZoneNow():NVRDataModel.getTimeZoneNow());
- updateInterval = $interval(function() {
+ lastTimeForEvent = moment().tz(NVRDataModel.getLogin().useLocalTimeZone ? NVRDataModel.getLocalTimeZoneNow() : NVRDataModel.getTimeZoneNow());
+ updateInterval = $interval(function()
+ {
processNewEvents();
}.bind(this), 10 * 1000);
@@ -1272,8 +1308,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
});*/
- timeline.on('rangechanged', function(s)
- {
+ timeline.on('rangechanged', function(s)
+ {
///console.log ("Range Changed:"+JSON.stringify(s));
if (s.byUser)
{
@@ -1282,24 +1318,25 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
//console.log ("start:"+w.start+" end:"+w.end);
var a = moment(w.start);
var b = moment(w.end);
- var d = b.diff(a,'seconds');
+ var d = b.diff(a, 'seconds');
var ld = NVRDataModel.getLogin();
ld.timelineScale = d;
NVRDataModel.setLogin(ld);
//console.log ("Stored user scale of "+d+" seconds");
}
-
-
- });
-
- timeline.on('click', function(prop) {
+ });
+ timeline.on('click', function(prop)
+ {
- $timeout(function() {
- if (dblclick) {
+ $timeout(function()
+ {
+ if (dblclick)
+ {
//console.log ("IGNORING CLICK AS DBL CLICK");
- $timeout(function() {
+ $timeout(function()
+ {
dblclick = false;
}, 400);
return;
@@ -1311,25 +1348,31 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
// console.log ( "I GOT " + properties);
var itm = prop.item;
//console.log ("ITEM CLICKED " + itm);
- if (itm && !isNaN(itm)) {
+ if (itm && !isNaN(itm))
+ {
NVRDataModel.debug("TimelineCtrl/drawGraph:You clicked on item " + itm);
var item = graphData.get(itm);
NVRDataModel.debug("TimelineCtrl/drawGraph: clicked item details:" + JSON.stringify(item));
showEvent(item.myevent);
-
- } else {
+ }
+ else
+ {
NVRDataModel.debug("exact match not found, guessing item with co-ordinates X=" + prop.x + " group=" + prop.group);
- if (prop.group) {
+ if (prop.group)
+ {
var visible = timeline.getVisibleItems();
NVRDataModel.debug("Visible items=" + JSON.stringify(visible));
var closestItem = null;
var minDist = 99999;
var _item;
- for (var x = 0; x < visible.length; x++) {
+ for (var x = 0; x < visible.length; x++)
+ {
_item = timeline.itemSet.items[x];
- if (_item.data.group == prop.group) {
- if (Math.abs(_item.left - prop.x) < minDist) {
+ if (_item.data.group == prop.group)
+ {
+ if (Math.abs(_item.left - prop.x) < minDist)
+ {
closestItem = _item;
minDist = Math.abs(_item.left - prop.x);
NVRDataModel.debug("Temporary closest " + _item.left);
@@ -1339,13 +1382,17 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
- if (closestItem != null) {
+ if (closestItem != null)
+ {
NVRDataModel.log("Closest item " + closestItem.left + " group: " + closestItem.data.group);
showEvent(closestItem.data.myevent);
- } else {
+ }
+ else
+ {
NVRDataModel.log("Did not find a visible item match");
}
- } else // no group row tapped, do nothing
+ }
+ else // no group row tapped, do nothing
{
/*$ionicLoading.show({
@@ -1363,31 +1410,38 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
});
- timeline.on('doubleClick', function(prop) {
+ timeline.on('doubleClick', function(prop)
+ {
//console.log ("DOUBLE");
dblclick = true;
var itm = prop.item;
//console.log ("ITEM CLICKED " + itm);
- if (itm && !isNaN(itm)) {
+ if (itm && !isNaN(itm))
+ {
NVRDataModel.debug("TimelineCtrl/drawGraph:You clicked on item " + itm);
var item = graphData.get(itm);
NVRDataModel.debug("TimelineCtrl/drawGraph: clicked item details:" + JSON.stringify(item));
eventDetails(item.myevent);
-
- } else {
+ }
+ else
+ {
NVRDataModel.debug("exact match not found, guessing item with co-ordinates X=" + prop.x + " group=" + prop.group);
- if (prop.group) {
+ if (prop.group)
+ {
var visible = timeline.getVisibleItems();
NVRDataModel.debug("Visible items=" + JSON.stringify(visible));
var closestItem = null;
var minDist = 99999;
var _item;
- for (var x = 0; x < visible.length; x++) {
+ for (var x = 0; x < visible.length; x++)
+ {
_item = timeline.itemSet.items[x];
- if (_item.data.group == prop.group) {
- if (Math.abs(_item.left - prop.x) < minDist) {
+ if (_item.data.group == prop.group)
+ {
+ if (Math.abs(_item.left - prop.x) < minDist)
+ {
closestItem = _item;
minDist = Math.abs(_item.left - prop.x);
NVRDataModel.debug("Temporary closest " + _item.left);
@@ -1397,10 +1451,13 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
}
NVRDataModel.log("Closest item " + closestItem.left + " group: " + closestItem.data.group);
- if (closestItem != null) {
+ if (closestItem != null)
+ {
NVRDataModel.log("Closest item " + closestItem.left + " group: " + closestItem.data.group);
showEvent(closestItem.data.myevent);
- } else {
+ }
+ else
+ {
NVRDataModel.log("Did not find a visible item match");
}
}
@@ -1410,7 +1467,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
});
},
- function(error) {
+ function(error)
+ {
NVRDataModel.displayBanner('error', 'Timeline error', 'Please try again');
}
@@ -1419,7 +1477,6 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
});
}
-
$scope.radialMenuOptions = {
content: '',
//size: 'small',
@@ -1427,19 +1484,23 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
background: '#982112',
isOpen: true,
toggleOnClick: false,
- button: {
+ button:
+ {
cssClass: 'fa fa-compress fa-2x',
size: 'small',
- onclick: function() {
+ onclick: function()
+ {
//console.log("fitting");
timeline.fit();
}
},
- items: [{
+ items: [
+ {
content: '',
cssClass: 'fa fa-minus-circle',
empty: false,
- onclick: function() {
+ onclick: function()
+ {
//zoom(0.2);
timeline.zoomOut(0.2);
}
@@ -1459,16 +1520,18 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
cssClass: 'fa fa-chevron-circle-up',
empty: false,
- onclick: function() {
-
+ onclick: function()
+ {
move(0.2);
}
- }, {
+ },
+ {
content: 'D',
empty: true,
- onclick: function() {
+ onclick: function()
+ {
// console.log('About');
}
},
@@ -1486,7 +1549,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
content: '',
cssClass: 'fa fa-plus-circle',
empty: false,
- onclick: function() {
+ onclick: function()
+ {
//zoom(-0.2);
timeline.zoomIn(0.2);
@@ -1505,7 +1569,8 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
{
content: 'H',
empty: true,
- onclick: function() {
+ onclick: function()
+ {
// console.log('About');
}
},
@@ -1514,12 +1579,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
content: '',
cssClass: 'fa fa-chevron-circle-up',
empty: false,
- onclick: function() {
+ onclick: function()
+ {
move(-0.2);
}
},
-
{
content: '',
cssClass: 'fa fa-chevron-circle-up',
@@ -1532,15 +1597,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla
{
content: 'K',
empty: true,
- onclick: function() {
+ onclick: function()
+ {
//console.log('About');
}
},
]
};
-
-
-
-
}]);