summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--www/js/MomentCtrl.js114
-rw-r--r--www/lang/locale-en.json1
-rw-r--r--www/templates/moment-popover.html5
-rw-r--r--www/templates/moment.html2
4 files changed, 118 insertions, 4 deletions
diff --git a/www/js/MomentCtrl.js b/www/js/MomentCtrl.js
index f1e1d283..582d4343 100644
--- a/www/js/MomentCtrl.js
+++ b/www/js/MomentCtrl.js
@@ -43,6 +43,57 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
}
};
+ // credit https://stackoverflow.com/a/17265125/1361529
+ function objSort() {
+ var args = arguments,
+ array = args[0],
+ case_sensitive, keys_length, key, desc, a, b, i;
+
+ if (typeof arguments[arguments.length - 1] === 'boolean') {
+ case_sensitive = arguments[arguments.length - 1];
+ keys_length = arguments.length - 1;
+ } else {
+ case_sensitive = false;
+ keys_length = arguments.length;
+ }
+
+ return array.sort(function (obj1, obj2) {
+
+ // console.log ("obj1="+JSON.stringify(obj1));
+ // console.log ("obj2="+JSON.stringify(obj2));
+ for (i = 1; i < keys_length; i++) {
+ key = args[i];
+ if (typeof key !== 'string') {
+ // console.log ("ARGS I 0"+args[i][0]);
+ desc = key[1];
+ key = key[0];
+ a = obj1["Event"][args[i][0]];
+ b = obj2["Event"][args[i][0]];
+ } else {
+ desc = false;
+ a = obj1["Event"][args[i]];
+ b = obj2["Event"][args[i]];
+ }
+ // console.log ("a="+a);
+ // console.log ("b="+b);
+
+ if (case_sensitive === false && typeof a === 'string') {
+ a = a.toLowerCase();
+ b = b.toLowerCase();
+ }
+
+ if (! desc) {
+ if (a < b) return -1;
+ if (a > b) return 1;
+ } else {
+ if (a > b) return -1;
+ if (a < b) return 1;
+ }
+ }
+ return 0;
+ });
+ } //end of objSort() function
+
function getMonitorDimensions(mid) {
for (var i=0; i < monitors.length; i++) {
@@ -50,7 +101,8 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
if (mid==monitors[i].Monitor.Id) {
return {
width: monitors[i].Monitor.Width,
- height:monitors[i].Monitor.Height
+ height:monitors[i].Monitor.Height,
+ orientation:monitors[i].Monitor.Orientation
}
}
}
@@ -226,6 +278,8 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
$scope.type = $translate.instant('kMomentMenuByScore');
else if (sortCondition == 'StartTime')
$scope.type = $translate.instant('kMomentMenuByTime');
+ else if (sortCondition == 'MonitorId')
+ $scope.type = $translate.instant('kMomentMenuByMonitor');
$scope.apiurl = NVRDataModel.getLogin().apiurl;
moments.length = 0;
@@ -242,10 +296,12 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
//https:///zm/api/events/index/AlarmFrames%20%3E=:1/StartTime%20%3E=:2017-12-16%2009:08:50.json?sort=TotScore&direction=desc
var ld = NVRDataModel.getLogin();
- var myurl = ld.apiurl + "/events/index/AlarmFrames >=:1/StartTime >=:"+timeFrom+".json?sort="+sortCondition+"direction=desc";
+
+ // in API, always sort by StartTime so all monitors are represented
+ var myurl = ld.apiurl + "/events/index/AlarmFrames >=:1/StartTime >=:"+timeFrom+".json?sort="+"StartTime"+"&direction=desc";
NVRDataModel.debug ("Retrieving "+ myurl);
- $http.get(myurl+'/&page='+page)
+ $http.get(myurl+'&page='+page)
.then (function (rawdata) {
@@ -259,6 +315,38 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
if (d) {
data.events[i].Event.width = d.width;
data.events[i].Event.height= d.height;
+
+
+ var ratio;
+ var mw = d.width;
+ var mh = d.height;
+ var mo = d.orientation;
+
+ // scale by X if width > height
+ if (mw > mh ) {
+ ratio = mw / zm.thumbWidth;
+ data.events[i].Event.thumbWidth = 200;
+ data.events[i].Event.thumbHeight = Math.round(mh/ratio);
+ }
+ else {
+
+ ratio = mh / zm.thumbWidth;
+ data.events[i].Event.thumbHeight = 200;
+ data.events[i].Event.thumbWidth = Math.round(mw/ratio);
+
+ }
+ if (mo != 0) {
+
+ /*myevents[i].Event.Rotation = {
+ 'transform' : 'rotate('+mo+'deg'+')'
+ }; */
+
+ var tmp = data.events[i].Event.thumbHeight;
+ data.events[i].Event.thumbHeight =data.events[i].Event.thumbWidth;
+ data.events[i].Event.thumbWidth = tmp;
+
+ } // swap
+
//console.log (d.width+"*"+d.height);
}
@@ -274,6 +362,9 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
var mid = data.events[i].Event.MonitorId;
data.events[i].Event.order = i;
+
+
+ // console.log ("---> PUSHING "+data.events[i].Event.StartTime);
moments.push (data.events[i]);
}
@@ -286,6 +377,23 @@ angular.module('zmApp.controllers').controller('zmApp.MomentCtrl', ['$scope', '$
return da>db ? -1 : da<db ? 1 : 0;
});
}
+
+ // if we use any other condition, we need to first sort by cond and then time
+ if (sortCondition != "StartTime") {
+ console.log ("SORTING BY "+sortCondition);
+ moments = objSort(moments,[sortCondition, true],["dateObject", true]);
+ }
+
+
+ /* if (sortCondition == "MonitorId") {
+ moments.sort(function(a, b) {
+ var da = a.Event.MonitorId;
+ var db = b.Event.MonitorId;
+ return da>db ? -1 : da<db ? 1 : 0;
+ });
+ }*/
+
+
$scope.moments = moments;
diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json
index be205729..da29411b 100644
--- a/www/lang/locale-en.json
+++ b/www/lang/locale-en.json
@@ -212,6 +212,7 @@
"kMode" :"Mode",
"kMoment24Heading" : "24hr Preview",
"kMomentLoadError" : "Error retrieving moments",
+ "kMomentMenuByMonitor" : "by camera",
"kMomentMenuByTime" : "by time",
"kMomentMenuByScore" : "by score",
"kMonAlarmed" :"alarmed",
diff --git a/www/templates/moment-popover.html b/www/templates/moment-popover.html
index 49dbea89..1d77483d 100644
--- a/www/templates/moment-popover.html
+++ b/www/templates/moment-popover.html
@@ -4,7 +4,12 @@
<a class="item" ng-href="" ng-click="popover.hide();getMoments('StartTime');">
{{'kMomentMenuByTime' | translate}}
+
</a>
+
+ <a class="item" ng-href="" ng-click="popover.hide();getMoments('MonitorId');">{{'kMomentMenuByMonitor' | translate}}</a>
+
+
<a class="item" ng-href="" ng-click="popover.hide();getMoments('MaxScore');">{{'kMomentMenuByScore' | translate}}</a>
</div>
diff --git a/www/templates/moment.html b/www/templates/moment.html
index 40881ae2..a4da87d4 100644
--- a/www/templates/moment.html
+++ b/www/templates/moment.html
@@ -23,7 +23,7 @@
<figure class="grid-item" ng-repeat="moment in moments | onlyEnabledMoments">
<figcaption class="normal-figheader">{{moment.Event.monitorName}}<span style="float:right"><button class="button button-small button-icon icon {{moment.Event.icon}}" ng-click="toggleCollapse(moment.Event.MonitorId, moment.Event.Id)"></button>{{moment.Event.collapseCount}}&nbsp;</span></figcaption>
- <img image-spinner-src="{{moment.Event.baseURL}}/index.php?view=image&fid={{moment.Event.MaxScoreFrameId}}" img-spinner-w="{{moment.Event.width}}"
+ <img image-spinner-src="{{moment.Event.baseURL}}/index.php?view=image&fid={{moment.Event.MaxScoreFrameId}}&width={{moment.Event.thumbWidth*2}}&height={{moment.Event.thumbHeight*2}}" img-spinner-w="{{moment.Event.width}}"
img-spinner-h="{{moment.Event.height}}" image-spinner-loader="lines"
on-tap="showThumbnail(moment.Event.baseURL,moment.Event.MaxScoreFrameId)"/>
<figcaption class="normal-figcaption">{{moment.Event.humanizeTime}}<span style="float:right">{{hourmin(moment.Event.StartTime)}}</span></figcaption>