summaryrefslogtreecommitdiff
path: root/www/js/DataModel.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/js/DataModel.js')
-rw-r--r--www/js/DataModel.js235
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