summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPliable Pixels <pliablepixels@gmail.com>2020-09-08 18:57:29 -0400
committerPliable Pixels <pliablepixels@gmail.com>2020-09-08 18:57:29 -0400
commit7dfe1929c106caf71b00caa81fd4dcd8c92887a9 (patch)
treed567298a7a474978fc471fa924fae5da72f57b7b
parentcc58763cf182ec18efeb374bee0d9091dfb647df (diff)
#970 reset event loadMore and getInitialEvents code, keep delta and maxEventsToLoad
-rw-r--r--www/js/EventCtrl.js307
-rw-r--r--www/templates/events.html3
2 files changed, 304 insertions, 6 deletions
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index 909830c3..2a75cccc 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -62,7 +62,7 @@ angular.module('zmApp.controllers')
var currentPageLength = 0;
var currentPageData;
var loadMoreTime;
- var maxEventsToLoad = 5; //limit to 5 to minimise memory usage when displaying gifs
+ var maxEventsToLoad = 50;
$scope.typeOfFrames = $translate.instant('kShowTimeDiffFrames');
$scope.outlineMotion = false;
@@ -250,6 +250,12 @@ angular.module('zmApp.controllers')
$scope.rowHeight = $scope.rowHeightRegular;
$scope.mid = '';
+ if (ld.eventViewThumbs != 'objdetect_gif') {
+ maxEventsToLoad = 50;
+ } else {
+ maxEventsToLoad = 5;//limit to 5 to minimise memory usage when displaying gifs
+ }
+
$scope.$on ("alarm", function() {
NVR.debug ("EventCtrl: new event notification, doing an immediate reload");
@@ -450,6 +456,170 @@ angular.module('zmApp.controllers')
function getInitialEvents() {
NVR.debug("getInitialEvents called");
+ var lData = NVR.getLogin();
+ loadMoreTime = Date.now();
+
+
+ // If you came from Monitors, disregard hidden monitors in montage
+ /* if (lData.persistMontageOrder && stackState != "Monitors") {
+ var tempMon = message;
+ $scope.monitors = NVR.applyMontageMonitorPrefs(tempMon, 2)[0];
+ } else*/
+ $scope.monitors = message;
+ currEventsPage = 1;
+ maxEventsPage = 1;
+
+ if ($scope.monitors.length == 0) {
+ var pTitle = $translate.instant('kNoMonitors');
+ $ionicPopup.alert({
+ title: pTitle,
+ template: "{{'kCheckCredentials' | translate }}",
+ okText: $translate.instant('kButtonOk'),
+ cancelText: $translate.instant('kButtonCancel'),
+ });
+ $ionicHistory.nextViewOptions({
+ disableBack: true
+ });
+ $state.go("app.login", {
+ "wizard": false
+ });
+ return;
+ }
+
+ $scope.events = [];
+
+ // First get total pages and then
+ // start from the latest. If this fails, nothing displays
+
+ NVR.debug("EventCtrl: grabbing # of event pages");
+ nolangFrom = "";
+ nolangTo = "";
+ if ($rootScope.fromString)
+ nolangFrom = moment($rootScope.fromString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+ if ($rootScope.toString)
+ nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+
+ //NVR.debug ("GETTING EVENTS USING "+$scope.id+" "+nolangFrom+" "+ nolangTo);
+
+
+ NVR.debug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString +
+ "-" + $rootScope.toString);
+ nolangFrom = "";
+ nolangTo = "";
+ if ($rootScope.fromString)
+ nolangFrom = moment($rootScope.fromString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+ if ($rootScope.toString)
+ nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+
+ NVR.getEvents($scope.id, currEventsPage, "", nolangFrom, nolangTo, false, $rootScope.monitorsFilter)
+ .then(function (data) {
+
+ pageLoaded = true;
+ //$scope.viewTitle.title = data.pagination.count;
+
+ // console.log(JSON.stringify(data.pagination));
+ if (data.pagination && data.pagination.pageCount)
+ maxEventsPage = data.pagination.pageCount;
+
+ NVR.debug("We have a total of " + maxEventsPage + " and are at page=" + currEventsPage);
+
+ // console.log ("WE GOT EVENTS="+JSON.stringify(data));
+ var myevents = data.events;
+
+ NVR.debug("EventCtrl: success, got " + myevents.length + " events");
+ var loginData = NVR.getLogin();
+
+ //console.log ("-------->MON LEN"+$scope.monitors.length);
+
+ for (var i = 0; i < myevents.length; i++) {
+
+ var idfound = true;
+ if (loginData.persistMontageOrder) {
+ idfound = false;
+ for (var ii = 0; ii < $scope.monitors.length; ii++) {
+ if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId && (NVR.isNotHidden(myevents[i].Event.MonitorId) || showHiddenMonitors)) {
+ // console.log ("FOUND IT");
+
+ idfound = true;
+ break;
+ }
+ }
+ }
+
+ //console.log ("IDFOUND="+idfound + " AND MON LEN="+$scope.monitors.length);
+
+ myevents[i].Event.humanizeTime = humanizeTime(myevents[i].Event.StartTime);
+ myevents[i].Event.streamingURL = NVR.getStreamingURL(myevents[i].Event.MonitorId);
+ myevents[i].Event.recordingURL = NVR.getRecordingURL(myevents[i].Event.MonitorId);
+ myevents[i].Event.imageMode = NVR.getImageMode(myevents[i].Event.MonitorId);
+
+ //console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL);
+
+ // console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.recordingURL);
+
+ myevents[i].Event.MonitorName = NVR.getMonitorName(myevents[i].Event.MonitorId);
+ myevents[i].Event.ShowScrub = false;
+ myevents[i].Event.rowHeight = $scope.rowHeightRegular;
+ // now construct base path
+
+
+ // get thumbW/H
+
+ var tempMon = NVR.getMonitorObject(myevents[i].Event.MonitorId);
+ if (tempMon != undefined) {
+
+ var mw = parseInt(tempMon.Monitor.Width);
+ var mh = parseInt(tempMon.Monitor.Height);
+
+
+ var mo = parseInt(tempMon.Monitor.Orientation);
+ myevents[i].Event.Rotation = '';
+
+ var th = computeThumbnailSize(mw, mh, mo);
+ myevents[i].Event.thumbWidth = th.w;
+ myevents[i].Event.thumbHeight = th.h;
+ }
+
+ // in multiserver BasePath is login url for frames
+ // http://login.url/index.php?view=frame&eid=19696772&fid=21
+
+ // console.log ("COMPARING "+NVR.getLogin().url+ " TO " +myevents[i].Event.recordingURL);
+
+
+
+ myevents[i].Event.videoPath = myevents[i].Event.recordingURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id;
+
+ // if (idfound)
+ if (idfound) {
+
+ //NVR.debug ("PUSHING "+JSON.stringify(myevents[i]));
+ $scope.events.push(myevents[i]);
+ //console.log ("SCOPE EVENTS LEN="+$scope.events.length);
+ } else {
+ //NVR.debug ("Skipping Event MID = " + myevents[i].Event.MonitorId);
+ }
+
+ } //for
+
+ //$scope.events = myevents;
+ // we only need to stop the template from loading when the list is empty
+ // so this can be false once we have _some_ content
+ // FIXME: check reload
+ $scope.eventsBeingLoaded = false;
+ // to avoid only few events being displayed
+ // if last page has less events
+ //console.log("**Loading Next Page ***");
+ if (myevents.length < maxEventsToLoad) {
+ //console.log ("EVENTS LOADED="+JSON.stringify($scope.events));
+ NVR.debug("EventCtrl:loading one more page just in case we don't have enough to display");
+ loadMore();
+ }
+ });
+
+ }
+
+ function getInitiaNew() {
+ NVR.debug("getInitialEvents called");
$scope.eventsBeingLoaded = true;
$ionicScrollDelegate.$getByHandle("mainScroll").scrollTop();
var lData = NVR.getLogin();
@@ -459,6 +629,7 @@ angular.module('zmApp.controllers')
var tempMon = message;
$scope.monitors = NVR.applyMontageMonitorPrefs(tempMon, 2)[0];
} else*/
+ moreEvents = false;
$scope.monitors = message;
currEventsPage = 1;
maxEventsPage = 1;
@@ -515,7 +686,7 @@ angular.module('zmApp.controllers')
maxEventsToLoad = 50; //limit to 5 to minimise memory usage when displaying gifs
}
NVR.debug("maxEventsToLoad: " + maxEventsToLoad);
-
+
NVR.getEvents($scope.id, currEventsPage, "", nolangFrom, nolangTo, false, $rootScope.monitorsFilter)
.then(function (data) {
// console.log(JSON.stringify(data.pagination));
@@ -535,6 +706,7 @@ angular.module('zmApp.controllers')
// so this can be false once we have _some_ content
$scope.eventsBeingLoaded = false;
moreEvents = true;
+
// to avoid only few events being displayed
// if last page has less events
//console.log("**Loading Next Page ***");
@@ -2829,6 +3001,132 @@ angular.module('zmApp.controllers')
// except greater page limits than reported
//console.log("***** LOADING MORE INFINITE SCROLL ****");
+
+ if ((currEventsPage >= maxEventsPage) && (pageLoaded)) {
+ moreEvents = false;
+ NVR.debug("No more - We have a total of " + maxEventsPage + " and are at page=" + currEventsPage);
+
+ // console.log("*** At Page " + currEventsPage + " of " + maxEventsPage + ", not proceeding");
+ $ionicLoading.hide();
+ return;
+ }
+
+ currEventsPage++;
+ if (!enableLoadMore) {
+ $ionicLoading.hide();
+ moreEvents = false; // Don't ion-scroll till enableLoadMore is true;
+ $scope.$broadcast('scroll.infiniteScrollComplete');
+
+ // console.log("**** LOADMORE ARTIFICALLY DISABLED");
+ return;
+ }
+
+ var loadingStr = "";
+ if ($scope.search.text != "") {
+
+ var toastStr = $translate.instant('kPleaseWait') +'...'+ currEventsPage;
+ // console.log ("SHOW " + toastStr );
+ $ionicLoading.show({
+ maxwidth: 100,
+ noBackdrop:true,
+ scope: $scope,
+ template: toastStr,
+ //template: '<button class="button button-clear icon-left ion-close-circled button-text-wrap" ng-click="cancelSearch()" >' + toastStr + '</button>'
+ });
+
+ loadingStr = "none";
+ }
+
+ nolangFrom = "";
+ nolangTo = "";
+ if ($rootScope.fromString)
+ nolangFrom = moment($rootScope.fromString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+ if ($rootScope.toString)
+ nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss");
+
+ NVR.getEvents($scope.id, currEventsPage, loadingStr, nolangFrom, nolangTo, false,$rootScope.monitorsFilter)
+ .then(function (data) {
+ var loginData = NVR.getLogin();
+ // console.log("Got new page of events with Page=" + eventsPage);
+ var myevents = data.events;
+
+
+ for (var i = 0; i < myevents.length; i++) {
+
+ var idfound = true;
+ var ld = NVR.getLogin();
+
+ if (ld.persistMontageOrder) {
+ idfound = false;
+ for (var ii = 0; ii < $scope.monitors.length; ii++) {
+ if ($scope.monitors[ii].Monitor.Id == myevents[i].Event.MonitorId && (NVR.isNotHidden(myevents[i].Event.MonitorId) || showHiddenMonitors)) {
+
+ //console.log ( $scope.monitors[ii].Monitor.Id + " MATCHES " + myevents[i].Event.MonitorId);
+ idfound = true;
+
+ break;
+ }
+ }
+ }
+
+ myevents[i].Event.humanizeTime = humanizeTime(myevents[i].Event.StartTime);
+ myevents[i].Event.MonitorName = NVR.getMonitorName(myevents[i].Event.MonitorId);
+ // now construct base path
+
+ myevents[i].Event.streamingURL = NVR.getStreamingURL(myevents[i].Event.MonitorId);
+ myevents[i].Event.recordingURL = NVR.getRecordingURL(myevents[i].Event.MonitorId);
+ myevents[i].Event.imageMode = NVR.getImageMode(myevents[i].Event.MonitorId);
+ // console.log ("***** MULTISERVER STREAMING URL FOR EVENTS " + myevents[i].Event.streamingURL);
+
+ // console.log ("***** MULTISERVER BASE URL FOR EVENTS " + myevents[i].Event.recordingURL);
+
+ myevents[i].Event.ShowScrub = false;
+ myevents[i].Event.rowHeight = $scope.rowHeightRegular;
+
+
+ // get thumbW/H
+
+ var tempMon = NVR.getMonitorObject(myevents[i].Event.MonitorId);
+ if (tempMon != undefined) {
+ var mw = parseInt(tempMon.Monitor.Width);
+ var mh = parseInt(tempMon.Monitor.Height);
+ var mo = parseInt(tempMon.Monitor.Orientation);
+
+ myevents[i].Event.Rotation = '';
+
+
+ var th = computeThumbnailSize(mw, mh, mo);
+ myevents[i].Event.thumbWidth = th.w;
+ myevents[i].Event.thumbHeight = th.h;
+
+ }
+
+
+
+ myevents[i].Event.videoPath = myevents[i].Event.recordingURL + "/index.php?view=view_video&eid=" + myevents[i].Event.Id;
+
+ if (idfound) $scope.events.push(myevents[i]);
+ }
+
+ //console.log("Got new page of events");
+ moreEvents = true;
+ $scope.$broadcast('scroll.infiniteScrollComplete');
+ },
+
+ function (error) {
+ // console.log("*** No More Events to Load, Stop Infinite Scroll ****");
+ moreEvents = false;
+ $ionicLoading.hide();
+ $scope.$broadcast('scroll.infiniteScrollComplete');
+
+ });
+ }
+
+ function loadMoreNew() {
+ // the events API does not return an error for anything
+ // except greater page limits than reported
+
+ //console.log("***** LOADING MORE INFINITE SCROLL ****");
loadMoreTime = Date.now();
if (currentPagePosition > 0 && currentPagePosition >= currentPageLength) {
@@ -2908,6 +3206,7 @@ angular.module('zmApp.controllers')
}
$scope.loadMore = function () {
+
var now = Date.now();
if (now - loadMoreTime > 1500) {
NVR.debug("$scope.loadMore > loadMore() ... delta: " + (now - loadMoreTime));
@@ -3222,7 +3521,7 @@ angular.module('zmApp.controllers')
//--------------------------------------------------------
$scope.dummyDoRefresh = function () {
- $scope.$broadcast('scroll.refreshComplete');
+ // $scope.$broadcast('scroll.refreshComplete');
};
$scope.doRefresh = function () {
@@ -3257,7 +3556,7 @@ angular.module('zmApp.controllers')
moreEvents = true;
});
- $scope.$broadcast('scroll.refreshComplete');
+ //$scope.$broadcast('scroll.refreshComplete');
}
}]);
diff --git a/www/templates/events.html b/www/templates/events.html
index 73b79fd0..f349b00c 100644
--- a/www/templates/events.html
+++ b/www/templates/events.html
@@ -25,8 +25,7 @@
</div>
<!-- collection repeat forces js scrolling, thing to remember -->
<ion-content class="notch-ready" ng-cloak on-tap="tapped();" delegate-handle="mainScroll" mouse-wheel-scroll on-scroll="scrolling();" >
- <ion-refresher pulling-text="Pull to refresh..." on-refresh="doRefresh()">
- </ion-refresher>
+
<!-- needed for header-shrink so first item doesn't go below header-->
<!-- <div style="height: 64px;"></div>-->
<!-- lets make sure the events list is not empty as collection repeat needs height -->