diff options
| -rwxr-xr-x | deprecated/make_desktop.sh (renamed from make_desktop.sh) | 0 | ||||
| -rwxr-xr-x | deprecated/prepare_desktop.sh (renamed from prepare_desktop.sh) | 0 | ||||
| -rw-r--r-- | electron_js/icons/icon.icns | bin | 0 -> 111298 bytes | |||
| -rw-r--r-- | electron_js/icons/icon.ico | bin | 0 -> 370070 bytes | |||
| -rw-r--r-- | electron_js/main.js | 4 | ||||
| -rwxr-xr-x | electron_js/sync_versions.sh | 16 | ||||
| -rw-r--r-- | package.json | 72 | ||||
| -rw-r--r--[-rwxr-xr-x] | www/js/DataModel.js | 9 | ||||
| -rwxr-xr-x | www/js/app.js | 137 |
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 Binary files differnew file mode 100644 index 00000000..55c2c9af --- /dev/null +++ b/electron_js/icons/icon.icns diff --git a/electron_js/icons/icon.ico b/electron_js/icons/icon.ico Binary files differnew file mode 100644 index 00000000..36a0e09d --- /dev/null +++ b/electron_js/icons/icon.ico 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) { |
