diff options
Diffstat (limited to 'www/js/DataModel.js')
| -rw-r--r-- | www/js/DataModel.js | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/www/js/DataModel.js b/www/js/DataModel.js new file mode 100644 index 00000000..cd5e411f --- /dev/null +++ b/www/js/DataModel.js @@ -0,0 +1,235 @@ +angular.module('zmApp.controllers').service('ZMDataModel', ['$http', '$q', '$ionicLoading', function ($http, $q, $ionicLoading) { + // var deferred=''; + var monitorsLoaded = 0; + var simulationMode = 0; // make 1 for simulation + var simSize = 30; + var montageSize = 3; + var monitors = []; + var oldevents = []; + var loginData = { + 'username': '', + 'password': '', + 'url': '', + 'apiurl': '' + }; + //greeas + + var simulation = + { + fillSimulatedMonitors: function(cnt) + { + var simmonitors = []; + console.log ("*** Returning "+cnt+" simulated monitors"); + for (var i=0; i < cnt; i++) + { + + + simmonitors.push( + { + "Monitor": + { + "Id":i.toString(), + "Name":"Monitor Simulation "+i.toString(), + "Type":"Remote", + "Function":"Modect", + "Enabled":"1", + "Width":"1280", + "Height":"960", + "Colours":"4", + "MaxFPS":"10.00", + "AlarmMaxFPS":"10.00", + "AlarmFrameCount":"10.00" + } + } + ); + + } + console.log ("Simulated: "+JSON.stringify(simmonitors)); + return simmonitors; + }, + }; + + return { + + init: function () { + console.log("****** DATAMODEL INIT SERVICE CALLED ********"); + var montageSize = 2; + + if (window.localStorage.getItem("username") != undefined) { + loginData.username = + window.localStorage.getItem("username"); + + } + if (window.localStorage.getItem("password") != undefined) { + loginData.password = + window.localStorage.getItem("password"); + + } + + if (window.localStorage.getItem("url") != undefined) { + loginData.url = + window.localStorage.getItem("url"); + + } + + if (window.localStorage.getItem("apiurl") != undefined) { + loginData.apiurl = + window.localStorage.getItem("apiurl"); + + } + + monitorsLoaded = 0; + console.log("Getting out of ZMDataModel init"); + + }, + + + + getLogin: function () { + return loginData; + }, + setLogin: function (newLogin) { + loginData = newLogin; + window.localStorage.setItem("username", loginData.username); + window.localStorage.setItem("password", loginData.password); + window.localStorage.setItem("url", loginData.url); + window.localStorage.setItem("apiurl", loginData.apiurl); + + }, + + getMonitors: function (forceReload) { + console.log("** Inside ZMData getMonitors with forceReload=" + forceReload); + var d = $q.defer(); + if (((monitorsLoaded == 0) || (forceReload == 1)) && (simulationMode !=1) ) // monitors are empty or force reload + { + console.log("ZMDataModel: Invoking HTTP Factory to load monitors"); + var apiurl = loginData.apiurl; + var myurl = apiurl + "/monitors.json"; + $http.get(myurl) + .success(function (data) { + console.log ("HTTP success got " + JSON.stringify(data.monitors)); + monitors = data.monitors; + console.log("promise resolved inside HTTP success"); + monitorsLoaded = 1; + d.resolve(monitors); + }) + .error(function (err) { + console.log("HTTP Error " + err); + monitors = []; + console.log("promise resolved inside HTTP fail"); + d.resolve(monitors); + }); + return d.promise; + + } else // monitors are loaded + { + if (simulationMode == 1) + { + monitors = simulation.fillSimulatedMonitors(simSize); + //fillSimulatedMonitors + } + console.log("Returning pre-loaded list of " + monitors.length + " monitors"); + d.resolve(monitors); + return d.promise; + } + + }, + setMonitors: function (mon) { + console.log("ZMData setMonitors called with " + mon.length + " monitors"); + monitors = mon; + }, + + getAllPreexistingEvents: function() + { + console.log ("returning "+oldevents.length+" preexisting events"); + return oldevents; + }, + + + getEvents: function (monitorId) { + + $ionicLoading.show({ + template: 'Loading ZoneMinder Events...', + animation: 'fade-in', + showBackdrop: true, + maxWidth: 200, + showDelay: 0 + }); + + console.log("ZMData getEvents called with ID="+monitorId); + var d = $q.defer(); + var myevents = []; + var apiurl = loginData.apiurl; + var myurl = (monitorId == 0) ? apiurl + "/events.json" : apiurl + "/events/index/MonitorId:"+monitorId+".json"; + console.log ("Constructed URL is " + myurl); + $http.get(myurl) + .success(function (data) { + $ionicLoading.hide(); + myevents = data.events.reverse(); + if (monitorId == 0) + { + oldevents = myevents; + } + //console.log (JSON.stringify(data)); + console.log("Returning " + myevents.length + "events"); + d.resolve(myevents); + return d.promise; + + }) + .error(function (err) { + $ionicLoading.hide(); + console.log("HTTP Events error " + err); + d.resolve(myevents); + if (monitorId ==0) + { + oldevents = []; + } + return d.promise; + }) + return d.promise; + + }, + + getMontageSize: function () { + return montageSize; + }, + setMontageSize: function (montage) { + montageSize = montage; + }, + + getMonitorsLoaded: function () { + console.log("**** Inside promise function "); + var deferred = $q.defer(); + if (monitorsLoaded != 0) { + deferred.resolve(monitorsLoaded); + } + + return deferred.promise; + }, + setMonitorsLoaded: function (loaded) { + console.log("ZMData.setMonitorsLoaded=" + loaded); + monitorsLoaded = loaded; + }, + + getMonitorName: function (id) { + var idnum = parseInt(id); + // console.log ("I have " + monitors.length + " monitors to match"); + + //console.log (JSON.stringify(monitors)); + for (var i = 0; i < monitors.length; i++) { + // console.log ("Searching for:"+idnum+"& got:"+monitors[i].Monitor.Id); + //console.log ("Searching for monitors id:"+monitors[i].Mo + // console.log ("Iteration #"+i+" " +monitors[i].Monitor.Id + " " + monitors[i].Monitor.Name); + if (parseInt(monitors[i].Monitor.Id) == idnum) { + // console.log ("Matched, exiting getMonitorname"); + return monitors[i].Monitor.Name; + } + + } + return "(Unknown)"; + }, + + + + }; +}]);
\ No newline at end of file |
