/* 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) {
$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
});
};
// 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) {
console.log("Open Monitor Modal");
$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.modal.show();
});
};
$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();
});
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');
});
};
}]);