/* jshint -W041 */ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console */ // controller for Monitor View // refer to comments in EventCtrl for the modal stuff. They are almost the same angular.module('zmApp.controllers').controller('zmApp.MonitorCtrl', ['$ionicPopup', '$scope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', function ($ionicPopup, $scope, ZMDataModel, message, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope, $timeout) { //FIXME:curl http://server/zm/api/monitors/daemonStatus/id:5/daemon:zmc.json to check if daemon is alive // but reutrns true for pending $scope.monitors = []; $scope.openMenu = function () { $ionicSideMenuDelegate.toggleLeft(); }; $scope.reloadView = function () { console.log("*** Refreshing Modal view ***"); $scope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; $ionicLoading.show({ template: "refreshed view", noBackdrop: true, duration: 2000 }); }; $scope.radialMenuOptions = { content: '', background: '#2F4F4F', isOpen: false, toggleOnClick: false, button: { cssClass: "fa fa-arrows-alt", }, items: [ { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'Down'); } }, { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'DownLeft'); } }, { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'Left'); } }, { content: 'D', empty: true, onclick: function () { console.log('About'); } }, { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'UpLeft'); } }, { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'Up'); } }, { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'UpRight'); } }, { content: 'H', empty: true, onclick: function () { console.log('About'); } }, { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'Right'); } }, { content: '', cssClass: 'fa fa-chevron-circle-up', empty: false, onclick: function () { controlPTZ($scope.monitorId, 'DownRight'); } }, { content: 'K', empty: true, onclick: function () { console.log('About'); } }, ] }; // This function takes care of changing function parameters // For now, I've only limited it to enable/disable and change monitor mode $scope.changeConfig = function (monitorName, monitorId, enabled, func) { var checked = "false"; console.log("called with " + monitorId + ":" + enabled + ":" + func); if (enabled == '1') checked = "true"; $scope.monFunctions = [ { text: "Modect", value: "Modect" }, { text: "Mocord", value: "Mocord" }, { text: "Record", value: "Record" }, { text: "Nodect", value: "Nodect" }, { text: "Monitor", value: "Monitor" }, { text: "None", value: "None" } ]; //$scope.monFunctions = monFunctions; $scope.monfunc = { myfunc: func, myenabled: checked }; var getConfig = $ionicPopup.show({ scope: $scope, template: 'Enabled {{item.text}} ', title: 'Change Settings for ' + monitorName, buttons: [ { text: 'Cancel', }, { text: 'Save', onTap: function (e) { console.log("YOU SELECTED " + $scope.monfunc.myenabled + $scope.monfunc.myfunc); var loginData = ZMDataModel.getLogin(); var apiRestart = loginData.apiurl + "/states/change/restart.json"; var apiMon = loginData.apiurl + "/monitors/" + monitorId + ".json"; console.log("VARS: " + apiRestart + ">>" + apiMon); var isEnabled = ""; isEnabled = ($scope.monfunc.myenabled == true) ? '1' : '0'; $http({ url: apiMon, method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*', }, transformRequest: function (obj) { var str = []; for (var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); var foo = str.join("&"); console.log("****RETURNING " + foo); return foo; }, data: { 'Monitor[Function]': $scope.monfunc.myfunc, 'Monitor[Enabled]': isEnabled, } }) // I am restarting ZM after monitor change // do I need this? FIXME: Ask Kyle .success(function () { $ionicLoading.show({ template: "Successfully changed Monitor. Please wait, restarting ZoneMinder...", noBackdrop: true, duration: 60000, }); $http.post(apiRestart) .then(function (success) { $ionicLoading.hide(); var refresh = ZMDataModel.getMonitors(1); refresh.then(function (data) { $scope.monitors = data; $scope.$broadcast('scroll.refreshComplete'); }); }, function (error) { $ionicLoading.hide(); } ); }) .error(function (data, status, headers, config) { $ionicLoading.show({ template: "Error changing Monitor. Please check ZM logs...", noBackdrop: true, duration: 3000, }); }); } }, ] }); }; $scope.isSimulated = function () { return ZMDataModel.isSimulated(); }; // same logic as EventCtrl.js $scope.finishedLoadingImage = function () { console.log("***Monitor image FINISHED Loading***"); $ionicLoading.hide(); /* $ionicLoading.show({ template: "loading, please wait...", noBackdrop: true, });*/ }; $scope.$on('$ionicView.loaded', function () { console.log("**VIEW ** Monitor Ctrl Loaded"); }); $scope.$on('$ionicView.enter', function () { console.log("**VIEW ** Monitor Ctrl Entered"); }); $scope.$on('$ionicView.leave', function () { console.log("**VIEW ** Monitor Ctrl Left"); }); $scope.$on('$ionicView.unloaded', function () { console.log("**VIEW ** Monitor Ctrl Unloaded"); }); $scope.openModal = function (mid, controllable) { console.log("Open Monitor Modal with monitod Id=" + mid + " and Controllable:" + controllable); $scope.monitorId = mid; $scope.LoginData = ZMDataModel.getLogin(); $scope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111; // This is a modal to show the monitor footage $ionicModal.fromTemplateUrl('templates/monitors-modal.html', { scope: $scope, animation: 'slide-in-up' }) .then(function (modal) { $scope.modal = modal; $ionicLoading.show({ template: "please wait...", noBackdrop: true, duration: 15000 }); $scope.isControllable = controllable; $scope.showPTZ = false; $scope.modal.show(); }); // do a post login for PTZ var loginData = ZMDataModel.getLogin(); console.log("*** MODAL PORTAL LOGIN ****"); $http({ method: 'POST', url: loginData.url + '/index.php', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', }, transformRequest: function (obj) { var str = []; for (var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); var foo = str.join("&"); console.log("****RETURNING " + foo); return foo; }, data: { username: loginData.username, password: loginData.password, action: "login", view: "console" } }) .success(function (data) { console.log("**** PORTAL LOGIN OK"); }) .error(function (error) { console.log("**** PORTAL LOGIN FAILED"); }); }; $scope.closeModal = function () { console.log("Close & Destroy Monitor Modal"); $scope.modal.remove(); }; //Cleanup the modal when we're done with it! $scope.$on('$destroy', function () { console.log("Destroy Monitor Modal"); $scope.modal.remove(); }); $scope.togglePTZ = function () { $scope.showPTZ = !$scope.showPTZ; }; function controlPTZ(monitorId, cmd) { // curl -X POST "http://arjunrc.ddns.net:9898/zm/index.php" -d "view=request&request=control&user=admin&passwd=indiglo&id=4&control=moveConLeft" //curl -X POST "http://server.com/zm/index.php?view=request" -d "request=control&user=admin&passwd=xx&id=4&control=moveConLeft" console.log("Command value " + cmd + " with MID=" + monitorId); if (ZMDataModel.isSimulated()) { var str = "simulation mode. no action taken"; $ionicLoading.show({ template: str, noBackdrop: true, duration: 3000 }); return; } $ionicLoading.hide(); $ionicLoading.show({ template: "please wait...", noBackdrop: true, duration: 15000, }); var loginData = ZMDataModel.getLogin(); /* $http({ method:'POST', url:loginData.url + '/index.php', headers:{ 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', }, transformRequest: function (obj) { var str = []; for (var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); var foo = str.join("&"); console.log("****RETURNING " + foo); return foo; }, data: { username:loginData.username, password:loginData.password, action:"login", view:"console" } }) .success (function(data,status,header,config) {*/ $ionicLoading.hide(); $ionicLoading.show({ template: "Sending PTZ..", noBackdrop: true, duration: 15000, }); // console.log ("ANGULAR VERSION: "+JSON.stringify(angular.version)); // console.log('Set-Cookie'+ header('Set-Cookie')); // var req = $http({ method: 'POST', /*timeout: 15000,*/ url: loginData.url + '/index.php', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', }, transformRequest: function (obj) { var str = []; for (var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); var foo = str.join("&"); console.log("****RETURNING " + foo); return foo; }, data: { view: "request", request: "control", id: monitorId, //connkey: $scope.connKey, control: "moveCon" + cmd, xge: "30", yge: "30", //user: loginData.username, //pass: loginData.password } }); req.success(function (resp) { $ionicLoading.hide(); console.log("SUCCESS: " + JSON.stringify(resp)); // $ionicLoading.hide(); }); req.error(function (resp) { $ionicLoading.hide(); console.log("ERROR: " + JSON.stringify(resp)); }); //}); } console.log("***EVENTS: Waiting for Monitors to load before I proceed"); $scope.monitors = message; $scope.doRefresh = function () { console.log("***Pull to Refresh"); $scope.monitors = []; var refresh = ZMDataModel.getMonitors(1); refresh.then(function (data) { $scope.monitors = data; $scope.$broadcast('scroll.refreshComplete'); }); }; }]);