summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdeprecated/make_desktop.sh (renamed from make_desktop.sh)0
-rwxr-xr-xdeprecated/prepare_desktop.sh (renamed from prepare_desktop.sh)0
-rw-r--r--electron_js/icons/icon.icnsbin0 -> 111298 bytes
-rw-r--r--electron_js/icons/icon.icobin0 -> 370070 bytes
-rw-r--r--electron_js/main.js4
-rwxr-xr-xelectron_js/sync_versions.sh16
-rw-r--r--package.json72
-rw-r--r--[-rwxr-xr-x]www/js/DataModel.js9
-rwxr-xr-xwww/js/app.js137
9 files changed, 185 insertions, 53 deletions
diff --git a/make_desktop.sh b/deprecated/make_desktop.sh
index 2d2b3134..2d2b3134 100755
--- a/make_desktop.sh
+++ b/deprecated/make_desktop.sh
diff --git a/prepare_desktop.sh b/deprecated/prepare_desktop.sh
index 86d28945..86d28945 100755
--- a/prepare_desktop.sh
+++ b/deprecated/prepare_desktop.sh
diff --git a/electron_js/icons/icon.icns b/electron_js/icons/icon.icns
new file mode 100644
index 00000000..55c2c9af
--- /dev/null
+++ b/electron_js/icons/icon.icns
Binary files differ
diff --git a/electron_js/icons/icon.ico b/electron_js/icons/icon.ico
new file mode 100644
index 00000000..36a0e09d
--- /dev/null
+++ b/electron_js/icons/icon.ico
Binary files differ
diff --git a/electron_js/main.js b/electron_js/main.js
index efac0235..9e2a9028 100644
--- a/electron_js/main.js
+++ b/electron_js/main.js
@@ -71,8 +71,10 @@ const mx = globalShortcut.register('CommandOrControl+Alt+F', () => {
y: mainWindowState.y,
width: mainWindowState.width,
height: mainWindowState.height,
+ icon: path.join(__dirname, '/../icon.png'),
webPreferences:{nodeIntegration:false}});
//
+ console.log (__dirname+'/../icon.png');
@@ -149,7 +151,7 @@ const mx = globalShortcut.register('CommandOrControl+Alt+F', () => {
role: 'window',
submenu: [
{role: 'minimize'},
- {role: 'close'}
+ {role: 'quit'}
]
},
{
diff --git a/electron_js/sync_versions.sh b/electron_js/sync_versions.sh
new file mode 100755
index 00000000..6a02f924
--- /dev/null
+++ b/electron_js/sync_versions.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+APPVER=`cat config.xml | grep "widget " | sed 's/.* version=\"\([^\"]*\)\" xmlns.*/\1/'`
+
+echo "Config.xml: App version: ${APPVER}"
+echo "Syncing package.json and DataModel.js with this version..."
+
+cat www/js/DataModel.js | sed s/"var zmAppVersion =.*"/"var zmAppVersion = \"${APPVER}\";"/g > www/js/DataModel.js.tmp
+
+cat ./package.json | sed s/"\"version\":.*"/"\"version\":\"${APPVER}\","/g > package.json.tmp
+
+rm package.json
+mv package.json.tmp package.json
+
+rm www/js/DataModel.js
+mv www/js/DataModel.js.tmp www/js/DataModel.js
+echo "Done!"
diff --git a/package.json b/package.json
index 7914af94..5d6c70b5 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
- "name": "com.pliablepixels.zmninjapro",
+ "name": "zmninjapro",
"description": "Home security mobile app for ZoneMinder",
- "version": "1.4.1",
+ "version":"1.3.018",
"displayName": "zmNinja",
"author": "Pliable Pixels",
"license": "custom see LICENSE.md",
@@ -114,25 +114,75 @@
},
"scripts": {
"electron": "electron .",
- "pack": "electron-builder -mw --dir",
- "dist": "electron-builder -mw"
+ "dist-mac": "./electron_js/sync_versions.sh && electron-builder -m",
+ "dist-win": "./electron_js/sync_versions.sh && electron-builder -w",
+ "dist-lin": "./electron_js/sync_versions.sh && electron-builder -l",
+ "dist-all": "./electron_js/sync_versions.sh && electron-builder -mwl"
+
},
"main": "electron_js/main.js",
+
+
"build": {
- "asar": true,
- "appId": "com.pliablepixels.zmninja_pro",
+ "appId": "com.pliablepixels.zmninjapro",
+ "productName":"zmninjapro",
+ "compression": "normal",
+ "asar":true,
+ "directories": {
+ "buildResources": "electron_js/icons"
+ },
"files": [
"electron_js/main.js",
- "www/**/*"
+ "www/**/*",
+ "!node_modules/**/*"
+ ],
+ "extraResources": [
+ "node_modules/electron-window-state/**/*",
+ "node_modules/jsonfile/**/*",
+ "node_modules/mkdirp/**/*",
+ "node_modules/deep-equal/**/*",
+ "node_modules/minimist/**/*",
+ "node_modules/menu/**/*",
+ "node_modules/clivas/**/*",
+ "node_modules/keypress/**/*"
+
],
+
+ "extraFiles": [
+ {
+ "from":"resources/",
+ "to": "resources/app",
+ "filter": "icon.png"
+ }],
+
"mac": {
"category": "productivity",
- "icon": "resources/icon.png",
- "target": "zip"
+ "target": "dmg",
+ "icon": "icon.png"
},
"win": {
- "icon": "resources/icon.png",
- "target": "portable"
+ "icon": "icon.ico",
+ "target": [{
+ "target": "nsis",
+ "arch": [
+ "x64",
+ "ia32"
+ ]
+ }]
+ },
+ "linux": {
+ "category": "Utility",
+ "target": [{
+ "target": "AppImage",
+
+ "arch": [
+ "x64",
+ "ia32",
+ "armv7l"
+
+ ]}
+
+ ]
}
}
}
diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index eb5cd7d7..acda8119 100755..100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -16,7 +16,11 @@ angular.module('zmApp.controllers')
var currentServerMultiPortSupported = false;
- var zmAppVersion = "unknown";
+ /*
+ DO NOT TOUCH zmAppVersion
+ It is changed by sync_version.sh
+ */
+ var zmAppVersion = "1.3.018";
var isBackground = false;
var justResumed = false;
var timeSinceResumed = -1;
@@ -2838,7 +2842,8 @@ angular.module('zmApp.controllers')
debug("Logging out using API method");
$http.get(loginData.apiurl + '/host/logout.json', {
- timeout: 7000
+ timeout: 7000,
+ transformResponse: undefined
})
.then(function (s) {
debug("Logout returned... ");
diff --git a/www/js/app.js b/www/js/app.js
index 3b907780..42aa1671 100755
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -1063,7 +1063,7 @@ angular.module('zmApp', [
url: loginAPI,
timeout:httpDelay,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
-
+ transformResponse: undefined,
transformRequest: function(obj) {
var str = [];
for(var p in obj)
@@ -1073,17 +1073,70 @@ angular.module('zmApp', [
data: {user: loginData.username, pass: loginData.password}
})
//$http.get(loginAPI)
- .then(function (succ) {
+ .then(function (textsucc) {
$ionicLoading.hide();
- if (!succ.data.version) {
- NVRDataModel.debug ("API login returned fake success, going back to webscrape");
- var ld = NVRDataModel.getLogin();
+ var succ;
+
+
+ try {
+
+ succ = JSON.parse(textsucc.data);
+
+ if (!succ.version) {
+ NVRDataModel.debug ("API login returned fake success, going back to webscrape");
+ var ld = NVRDataModel.getLogin();
+ ld.loginAPISupported = false;
+ NVRDataModel.setLogin(ld);
+
+ loginWebScrape()
+ .then ( function (succ) {
+ d.resolve("Login Success");
+ return d.promise;
+ },
+ function (err) {
+ $ionicLoading.hide();
+ d.reject("Login Error");
+ return (d.promise);
+ });
+ return d.promise;
+ }
+ NVRDataModel.debug ("API based login returned... ");
+ NVRDataModel.setCurrentServerVersion(succ.version);
+ $ionicLoading.hide();
+ //$rootScope.loggedIntoZm = 1;
+ $rootScope.authSession = '';
+
+ if (succ.credentials) {
+ $rootScope.authSession = "&" + succ.credentials;
+ if (succ.append_password == '1') {
+ $rootScope.authSession = $rootScope.authSession +
+ loginData.password;
+ }
+ }
+
+ var ldg = NVRDataModel.getLogin();
+ ldg.loginAPISupported = true;
+ NVRDataModel.setLogin(ldg);
+
+ NVRDataModel.log("Stream authentication construction: " +
+ $rootScope.authSession);
+
+ NVRDataModel.log("zmAutologin successfully logged into Zoneminder via API");
+
+
+
+ d.resolve("Login Success");
+
+ $rootScope.$broadcast('auth-success', succ);
+ }
+ catch (e) {
+ NVRDataModel.debug ("Login API approach did not work...");
+ var ld = NVRDataModel.getLogin();
ld.loginAPISupported = false;
NVRDataModel.setLogin(ld);
-
- loginWebScrape()
+ loginWebScrape()
.then ( function (succ) {
d.resolve("Login Success");
return d.promise;
@@ -1094,35 +1147,10 @@ angular.module('zmApp', [
return (d.promise);
});
return d.promise;
- }
- NVRDataModel.debug ("API based login returned... ");
- NVRDataModel.setCurrentServerVersion(succ.data.version);
- $ionicLoading.hide();
- //$rootScope.loggedIntoZm = 1;
- $rootScope.authSession = '';
-
- if (succ.data.credentials) {
- $rootScope.authSession = "&" + succ.data.credentials;
- if (succ.data.append_password == '1') {
- $rootScope.authSession = $rootScope.authSession +
- loginData.password;
- }
- }
-
- var ldg = NVRDataModel.getLogin();
- ldg.loginAPISupported = true;
- NVRDataModel.setLogin(ldg);
-
- NVRDataModel.log("Stream authentication construction: " +
- $rootScope.authSession);
-
- NVRDataModel.log("zmAutologin successfully logged into Zoneminder via API");
-
-
- d.resolve("Login Success");
+ }
- $rootScope.$broadcast('auth-success', succ);
+
},
function (err) {
@@ -1458,10 +1486,14 @@ angular.module('zmApp', [
NVRDataModel.debug("**EXCEPTION**" + error.reason + " caused by " + error.cause);
};
- if ($rootScope.platformOS == 'desktop') {
+
+ if ($rootScope.platformOS == 'desktop' && 0) {
window.addEventListener('beforeunload', function (ev) {
+ // I don't think this works on windows
+ // the callback is not called, it seems
+
// This was causing android reload issues - holy palooza
/* if ($rootScope.platformOS != 'desktop') {
ev.returnValue = "true";
@@ -1480,7 +1512,7 @@ angular.module('zmApp', [
});
});
- }
+ }
// DPAD Handler - disabled for now
// when ready add ionic cordova plugin add https://github.com/pliablepixels/cordova-plugin-android-tv.git
@@ -1707,7 +1739,7 @@ angular.module('zmApp', [
$rootScope.dpadId = 0;
- //console.log("HERE");
+
if ($rootScope.apiValid == false && toState.name != 'app.invalidapi' && toState.data.requireLogin == true) {
event.preventDefault();
@@ -1717,8 +1749,15 @@ angular.module('zmApp', [
}
+
+
if (NVRDataModel.hasLoginInfo() || toState.data.requireLogin == false) {
//console.log("State transition is authorized");
+ NVRDataModel.debug ("Setting last-desktop-state to:"+JSON.stringify(toState));
+ localforage.setItem('last-desktop-state', {
+ 'name': toState.name,
+ 'params': toState.params
+ });
$rootScope.dpadState = toState.name.replace("app.", "");
return;
} else {
@@ -1745,6 +1784,16 @@ angular.module('zmApp', [
return;
}
+ // right about now, store last-state as the callback doesn't seem
+ // to work in Windows
+
+
+ NVRDataModel.debug ("Setting last-desktop-state to:"+JSON.stringify(toState));
+ localforage.setItem('last-desktop-state', {
+ 'name': toState,
+ 'params': toParams
+ });
+
return;
});
@@ -2000,20 +2049,30 @@ angular.module('zmApp', [
localforage.getItem('last-desktop-state')
.then(function (succ) {
- //console.log ("FOUND STATE" + JSON.stringify(succ) + ":"+succ);
+ console.log ("FOUND STATE" + JSON.stringify(succ) + ":"+succ);
+
+ // sanitize this
+ if (!succ.name || typeof succ.name !== 'string') {succ.name = "app.montage"};
+
+ if (!succ.params) {succ.params = {}};
if (succ) {
- if (succ.name == 'app.invalidapi' || succ.name == 'app.refresh' || succ.name == 'app.importantmessage') {
+ if (succ.name == 'app.invalidapi' || succ.name == 'app.refresh' || succ.name == 'app.importantmessage' || succ.name == "app.first-use" || !succ.name) {
succ.name = 'app.montage';
+ localforage.setItem('last-desktop-state', succ.name);
}
$rootScope.lastState = succ.name;
if ($rootScope.lastState.indexOf("app.") == -1) {
$rootScope.lastState = "app." + $rootScope.lastState;
+
+
}
$rootScope.lastStateParam = succ.params;
NVRDataModel.debug("last state=" + $rootScope.lastState + " param=" + $rootScope.lastStateParam);
+
+
}
loadServices();
}, function (err) {