/* jshint -W041 */
/* jslint browser: true*/
/* global cordova,StatusBar,angular,console */
angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'NVRDataModel', '$rootScope', '$ionicPopup', '$translate', '$timeout', '$location','EventServer', 'zmAutoLogin','$http',function ($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, NVRDataModel, $rootScope, $ionicPopup, $translate, $timeout, $location, EventServer, zmAutoLogin, $http) {
$scope.openMenu = function () {
$ionicSideMenuDelegate.toggleLeft();
};
//----------------------------------------------------------------
// This controller sits along with the main app to bring up
// the language menu from the main menu
//----------------------------------------------------------------
$scope.go = function(p) {
$ionicHistory.nextViewOptions({
historyRoot: true,
disableAnimate: true,
expire: 300
});
$ionicSideMenuDelegate.toggleLeft();
$location.path(p);
};
$scope.navigateView = function (view, args) {
if (view == $state.current.name) return;
NVRDataModel.debug("Navigating view to: " + view);
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go(view, args);
/* $timeout (function() {
window.stop();
// after window stop executes, in next cycle
// this _should_ ensure stop concludes before
// exit/entry lifecycles kick in?
$timeout (function() {$state.go(view,args);});
});*/
};
function switchToServer(s) {
$rootScope.alarmCount = 0;
$rootScope.isAlarm = false;
// First lets kill current stuf
NVRDataModel.debug ("** Resetting existing server");
var cld = NVRDataModel.getLogin();
if (cld.isUseEventServer) {
NVRDataModel.debug ("Stopping Event server");
EventServer.disconnect();
}
NVRDataModel.debug ("**Switching to new server...");
NVRDataModel.clearZmsMultiPortSupport();
var zmServers = NVRDataModel.getServerGroups();
var loginData = zmServers[s];
NVRDataModel.debug("Retrieved state for this profile:" + JSON.stringify(loginData));
NVRDataModel.setLogin(loginData);
if (!loginData.isUseBasicAuth) {
$rootScope.basicAuthHeader = '';
$rootScope.basicAuthToken = '';
// console.log ("CLEARING AUTH");
} else {
$rootScope.basicAuthToken = btoa(loginData.basicAuthUser + ':' + loginData.basicAuthPassword);
$rootScope.basicAuthHeader = 'Basic ' + $rootScope.basicAuthToken;
}
if (loginData.isUseEventServer) {
EventServer.init();
if ($rootScope.apnsToken && loginData.disablePush != true) {
NVRDataModel.log("Making sure we get push notifications");
EventServer.sendMessage('push', {
type: 'token',
platform: $rootScope.platformOS,
token: $rootScope.apnsToken,
state: "enabled"
}, 1);
}
EventServer.sendMessage("control", {
type: 'filter',
monlist: loginData.eventServerMonitors,
intlist: loginData.eventServerInterval
});
}
var apiurl = loginData.apiurl + '/host/getVersion.json';
var portalurl = loginData.url + '/index.php';
zmAutoLogin.doLogin("")
// Do the happy menu only if authentication works
// if it does not work, there is an emitter for auth
// fail in app.js that will be called to show an error
// box
.then(function (data) {
// possible image digits changed between servers
NVRDataModel.getKeyConfigParams(0);
NVRDataModel.log("Validating APIs at " + apiurl);
$http.get(apiurl)
.success(function (data) {
NVRDataModel.getTimeZone(true);
var loginStatus = $translate.instant('kExploreEnjoy') + " " + $rootScope.appName + "!";
EventServer.refresh();
// now grab and report PATH_ZMS
NVRDataModel.getPathZms()
.then(function (data) {
var ld = NVRDataModel.getLogin();
var zm_cgi = data.toLowerCase();
var user_cgi = (ld.streamingurl).toLowerCase();
NVRDataModel.log("ZM relative cgi-path: " + zm_cgi + ", you entered: " + user_cgi);
$http.get(ld.streamingurl + "/zms")
.success(function (data) {
NVRDataModel.debug("Urk! cgi-path returned success, but it should not have come here");
loginStatus = $translate.instant('kLoginStatusNoCgi');
NVRDataModel.debug("refreshing API version...");
NVRDataModel.getAPIversion()
.then(function (data) {
$rootScope.apiVersion = data;
var refresh = NVRDataModel.getMonitors(1)
.then (function () {
$ionicHistory.nextViewOptions({
disableBack: true
});
console.log ("+++ state go after getMonitors force");
$state.go('app.refresh', {
"view": $state.current.name
});
return;
});
},
function (error) {
var refresh = NVRDataModel.getMonitors(1)
.then (function() {
console.log ("+++ state go after API version error: "+error);
$rootScope.apiVersion = "0.0.0";
NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go('app.refresh', {
"view": $state.current.name
});
return;
});
});
})
.error(function (error, status) {
// If its 5xx, then the cgi-bin path is valid
// if its 4xx then the cgi-bin path is not valid
if (status < 500) {
loginStatus = $translate.instant('kLoginStatusNoCgiAlt');
}
NVRDataModel.displayBanner((status < 500) ? 'error' : 'info', [loginStatus]);
NVRDataModel.debug("refreshing API version...");
NVRDataModel.getAPIversion()
.then(function (data) {
var refresh = NVRDataModel.getMonitors(1)
.then (function () {
$rootScope.apiVersion = data;
$ionicHistory.nextViewOptions({
disableBack: true
});
console.log ("+++ state go after 5xx");
$state.go('app.refresh', {
"view": $state.current.name
});
return;
});
},
function (error) {
var refresh = NVRDataModel.getMonitors(1)
.then (function() {
$rootScope.apiVersion = "0.0.0";
NVRDataModel.debug("Error, failed API version, setting to " + $rootScope.apiVersion);
$ionicHistory.nextViewOptions({
disableBack: true
});
console.log ("+++ state go after API version force");
$state.go('app.refresh', {
"view": $state.current.name
});
return;
});
});
});
});
})
.error(function (error) {
NVRDataModel.displayBanner('error', [$translate.instant('kBannerAPICheckFailed'), $translate.instant('kBannerPleaseCheck')]);
NVRDataModel.log("API login error " + JSON.stringify(error));
$rootScope.zmPopup = SecuredPopups.show('alert', {
title: $translate.instant('kLoginValidAPIFailedTitle'),
template: $translate.instant('kBannerPleaseCheck'),
okText: $translate.instant('kButtonOk'),
cancelText: $translate.instant('kButtonCancel'),
});
});
});
}
$scope.switchProfiles = function () {
$scope.newServer = {
val:""
};
$scope.avs = Object.keys(NVRDataModel.getServerGroups());
$scope.avs = $scope.avs.filter(function() { return true; });
if ($scope.avs.length <= 1) {
return;
}
$rootScope.zmPopup = $ionicPopup.show({
scope: $scope,
template: ' {{item}} ',
title: $translate.instant('kSelect'),
buttons: [{
text: $translate.instant('kButtonCancel'),
onTap: function (e) {
if ($ionicSideMenuDelegate.isOpen()) {
$ionicSideMenuDelegate.toggleLeft();
}
}
},
{
text: $translate.instant('kButtonOk'),
onTap: function (e) {
NVRDataModel.log("Server selected:" + $scope.newServer.val);
if ($ionicSideMenuDelegate.isOpen()) {
$ionicSideMenuDelegate.toggleLeft();
}
if (NVRDataModel.getLogin().serverName != $scope.newServer.val)
switchToServer($scope.newServer.val);
//$rootScope.$broadcast('server-changed');
//return "OK";
}
}
]
});
};
$scope.switchLang = function () {
$scope.lang = NVRDataModel.getLanguages();
$scope.myopt = {
lang: ""
};
$rootScope.zmPopup = $ionicPopup.show({
scope: $scope,
template: ' {{item.text}} ',
title: $translate.instant('kSelectLanguage'),
buttons: [{
text: $translate.instant('kButtonCancel'),
onTap: function (e) {
//return "CANCEL";
}
},
{
text: $translate.instant('kButtonOk'),
onTap: function (e) {
NVRDataModel.log("Language selected:" + $scope.myopt.lang);
NVRDataModel.setDefaultLanguage($scope.myopt.lang, true);
$rootScope.$broadcast('language-changed');
//return "OK";
}
}
]
});
};
}]);