From 261d04bd79edd9174a1b2f3709ce22b100a2e3a4 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Thu, 26 Apr 2018 16:26:20 -0400 Subject: I tried, I failed, I succeeded, I failed, I gave up :-p #606 --- www/js/DevOptionsCtrl.js | 18 ++- www/js/MenuController.js | 26 +++- www/js/MontageCtrl.js | 269 +++++++++++++++++++----------------------- www/js/MontageHistoryCtrl.js | 25 ++-- www/js/PortalLoginCtrl.js | 2 +- www/js/app.js | 4 +- www/lang/locale-en.json | 4 +- www/templates/devoptions.html | 2 +- www/templates/menu.html | 39 +++--- www/templates/montage.html | 4 +- 10 files changed, 204 insertions(+), 189 deletions(-) diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js index 92c1e2c0..9ae1ba39 100644 --- a/www/js/DevOptionsCtrl.js +++ b/www/js/DevOptionsCtrl.js @@ -54,10 +54,18 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope' // reset power state on exit as if it is called after we enter another // state, that effectively overwrites current view power management needs //------------------------------------------------------------------------ - $scope.$on('$ionicView.enter', function() + $scope.$on('$ionicView.beforeEnter', function() { //console.log("**VIEW ** DevOptions Ctrl Entered"); $scope.loginData = NVRDataModel.getLogin(); + $scope.isMultiPort = false; + + NVRDataModel.getZmsMultiPortSupport() + .then (function (data) { + $scope.isMultiPort = (data == 0) ? false:true; + NVRDataModel.debug ("Multiport report:"+$scope.isMultiPort); + }); + NVRDataModel.setAwake(false); }); @@ -73,8 +81,8 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope' }; $scope.checkMultiPortToggle = function() { - if ($rootScope.platformOS == 'ios') - $scope.loginData.disableSimulStreaming = true; + // if ($rootScope.platformOS == 'ios') + // $scope.loginData.disableSimulStreaming = true; }; //------------------------------------------------------------------ // Perform the login action when the user submits the login form @@ -113,9 +121,7 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope' $scope.loginData.singleImageQuality = zm.safeImageQuality.toString(); } - if (!$scope.loginData.disableSimulStreaming && $rootScope.platformOS=='ios') { - $scope.loginData.disableSimulStreaming = true; - } + NVRDataModel.debug("SaveDevOptions: Saving to disk"); NVRDataModel.setLogin($scope.loginData); NVRDataModel.getMonitors(1); diff --git a/www/js/MenuController.js b/www/js/MenuController.js index c7e96604..e353d310 100644 --- a/www/js/MenuController.js +++ b/www/js/MenuController.js @@ -2,7 +2,7 @@ /* jslint browser: true*/ /* global cordova,StatusBar,angular,console */ -angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'NVRDataModel', '$rootScope', '$ionicPopup', '$translate', function($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, NVRDataModel, $rootScope, $ionicPopup, $translate) +angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$ionicSideMenuDelegate', 'zm', '$stateParams', '$ionicHistory', '$state', 'NVRDataModel', '$rootScope', '$ionicPopup', '$translate', '$timeout', function($scope, $ionicSideMenuDelegate, zm, $stateParams, $ionicHistory, $state, NVRDataModel, $rootScope, $ionicPopup, $translate, $timeout) { $scope.openMenu = function() { @@ -13,6 +13,30 @@ angular.module('zmApp.controllers').controller('MenuController', ['$scope', '$io // This controller sits along with the main app to bring up // the language menu from the main menu //---------------------------------------------------------------- + + + + $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);}); + + });*/ + + }; + + $scope.switchLang = function() { $scope.lang = NVRDataModel.getLanguages(); diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js index 28f74f04..16bf149a 100644 --- a/www/js/MontageCtrl.js +++ b/www/js/MontageCtrl.js @@ -30,7 +30,13 @@ angular.module('zmApp.controllers') var randToAvoidCacheMem; - var areStreamsStopped = true; // first load snapshot + var streamState = { + SNAPSHOT:1, + ACTIVE:2, + STOPPED:3 + }; + + var currentStreamState = streamState.SNAPSHOT; // first load snapshot $scope.isModalStreamPaused = false; // used in Monitor Modal //var reloadPage = 30; @@ -41,6 +47,8 @@ angular.module('zmApp.controllers') var as = $scope.$on("auth-success", function () { + // do nothing, we are reloading here anyway? + /* if ($scope.singleMonitorModalOpen) { NVRDataModel.debug("Montage: Not creating streams, as modal is open"); return; @@ -49,7 +57,7 @@ angular.module('zmApp.controllers') NVRDataModel.debug("Montage Re-auth handler"); - areStreamsStopped = true; + //streamState = true; $timeout(function () { // after render if (simulStreaming) { @@ -67,6 +75,7 @@ angular.module('zmApp.controllers') }); broadcastHandles.push(as); //console.log (">>>>>>>>>>>>>>>>>>>>>>>>>>>AS="+as); + */ }); //-------------------------------------------------------------------------------------- @@ -218,7 +227,7 @@ angular.module('zmApp.controllers') duration: zm.loadingTimeout });*/ - areStreamsStopped = true; + currentStreamState = streamState.SNAPSHOT; $scope.areImagesLoading = true; var progressCalled = false; @@ -303,10 +312,19 @@ angular.module('zmApp.controllers') imagesLoaded(elem).on('always', function () { //console.log ("******** ALL IMAGES LOADED"); // $scope.$digest(); - NVRDataModel.debug("All images loaded, switching to streaming if applicable"); + NVRDataModel.debug("All images loaded, switching to snapshot..."); $scope.areImagesLoading = false; - areStreamsStopped = false; + currentStreamState = streamState.SNAPSHOT; + + if (simulStreaming) { + + $timeout (function() { + NVRDataModel.debug ("Switching mode to active..."); + currentStreamState = streamState.ACTIVE; + },100); + } + $ionicLoading.hide(); @@ -575,6 +593,7 @@ angular.module('zmApp.controllers') function randEachTime() { randToAvoidCacheMem = new Date().getTime(); + //$scope.randToAvoidCacheMem = "1"; //console.log ("Generating:"+$scope.randToAvoidCacheMem); } @@ -585,7 +604,7 @@ angular.module('zmApp.controllers') function loadNotifications() { if (simulStreaming) { - // console.log ("Skipping timer as simulStreaming"); + console.log ("Skipping timer as simulStreaming"); return; } @@ -613,32 +632,26 @@ angular.module('zmApp.controllers') } $scope.cancelReorder = function () { - areStreamsStopped = false; $scope.modal.remove(); + finishReorder(); }; $scope.saveReorder = function () { NVRDataModel.debug("Saving monitor hide/unhide"); - // redo packery as monitor status has changed - // DOM may need reloading if you've hidden/unhidden stuff - - - // The montage screens might change here so we need - // to destroy/re-create - $scope.modal.remove(); - - - // assign new arrangement $scope.MontageMonitors = $scope.copyMontage; + finishReorder(); + + }; + function finishReorder() { - // manually recreate connkeys in new copy for (var i = 0; i < $scope.MontageMonitors.length; i++) { $scope.MontageMonitors[i].Monitor.connKey = (Math.floor((Math.random() * 999999) + 1)).toString(); } - areStreamsStopped = false; + currentStreamState = streamState.STOPPED; + // don't call initPackery - we need to savePackeryOrder $timeout(function () // after render { draggies.forEach(function (drag) { @@ -651,7 +664,7 @@ angular.module('zmApp.controllers') pckry.layout(); }, zm.packeryTimer); - }; + } function savePackeryOrder() { $timeout(function () { @@ -678,6 +691,18 @@ angular.module('zmApp.controllers') //$scope.MontageMonitors = angular.copy(NVRDataModel.getMonitorsNow()); //$scope.MontageMonitors = NVRDataModel.getMonitorsNow(); pckry.layout(); + + + $scope.areImagesLoading = false; + currentStreamState = streamState.SNAPSHOT; + + if (simulStreaming) { + + $timeout (function() { + NVRDataModel.debug ("Switching mode to active..."); + currentStreamState = streamState.ACTIVE; + },100); + } }, 20); } @@ -714,20 +739,34 @@ angular.module('zmApp.controllers') // make a copy of the current list and work on that // this is to avoid packery screw ups while you are hiding/unhiding + $scope.copyMontage = angular.copy($scope.MontageMonitors); + if (simulStreaming) { NVRDataModel.debug("Killing all streams in montage to save memory/nw..."); - areStreamsStopped = true; - $timeout(function () { - - // remove old monitors + currentStreamState = streamState.STOPPED; + NVRDataModel.stopNetwork() + .then (function (succ) { for (var i = 0; i < $scope.MontageMonitors.length; i++) { if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL); } + // in context of timeout + $ionicModal.fromTemplateUrl('templates/reorder-modal.html', { + scope: $scope, + animation: 'slide-in-up', + id: 'reorder', + }) + .then(function (modal) { + $scope.modal = modal; + $scope.reOrderActive = true; + $scope.modal.show(); + }); + }); - } - $scope.copyMontage = angular.copy($scope.MontageMonitors); - $ionicModal.fromTemplateUrl('templates/reorder-modal.html', { + + } + else { + $ionicModal.fromTemplateUrl('templates/reorder-modal.html', { scope: $scope, animation: 'slide-in-up', id: 'reorder', @@ -737,6 +776,9 @@ angular.module('zmApp.controllers') $scope.reOrderActive = true; $scope.modal.show(); }); + + } + }; @@ -1063,7 +1105,7 @@ angular.module('zmApp.controllers') $scope.openModal = function (mid, controllable, controlid, connKey, monitor) { - areStreamsStopped = true; + currentStreamState = streamState.STOPPED; $scope.isModalStreamPaused = true; // we stop montage and start modal stream in snapshot first $timeout(function () { // after render @@ -1213,7 +1255,7 @@ angular.module('zmApp.controllers') } // we need to do this as we hide the view for snapshot as well - //areStreamsStopped = false; + //streamState = false; $timeout(function () // after render { initPackery(); @@ -1265,26 +1307,22 @@ angular.module('zmApp.controllers') broadcastHandles = []; - areStreamsStopped = true; - - $timeout(function () { - if (!$scope.singleMonitorModalOpen && simulStreaming) { - NVRDataModel.debug("Killing all streams in montage to save memory/nw..."); - - if (0 && $rootScope.platformOS == 'ios') { - NVRDataModel.debug("Webkit hack, hammering window.stop();"); - NVRDataModel.stopNetwork(); - } else { - for (i = 0; i < $scope.MontageMonitors.length; i++) { - if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL); + currentStreamState = streamState.STOPPED; + $timeout(function () { + if (!$scope.singleMonitorModalOpen && simulStreaming) { + NVRDataModel.debug("Killing all streams in montage to save memory/nw..."); - } + for (i = 0; i < $scope.MontageMonitors.length; i++) { + if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL); + + } + } + + }); + - - } - - }); + @@ -1294,6 +1332,7 @@ angular.module('zmApp.controllers') NVRDataModel.debug("MontageCtrl: onpause called"); viewCleanup(); viewCleaned = true; + } function onResume() { @@ -1421,7 +1460,7 @@ angular.module('zmApp.controllers') //console.log ("NEW POS="+ld.packeryPositions); NVRDataModel.setLogin(ld); - areStreamsStopped = true; + currentStreamState = streamState.STOPPED; $timeout(function () { // after render @@ -1431,6 +1470,8 @@ angular.module('zmApp.controllers') if ($rootScope.platformOS == 'ios') { + NVRDataModel.stopNetwork(); + } else { for (var i = 0; i < $scope.MontageMonitors.length; i++) { @@ -1438,12 +1479,18 @@ angular.module('zmApp.controllers') } } - NVRDataModel.regenConnKeys(); - $scope.monitors = NVRDataModel.getMonitorsNow(); - $scope.MontageMonitors = angular.copy($scope.monitors); - $timeout(function () { - initPackery(); - }, zm.packeryTimer); + // in timeout for iOS as we call stopNetwork + $timeout (function() { + + NVRDataModel.regenConnKeys(); + $scope.monitors = NVRDataModel.getMonitorsNow(); + $scope.MontageMonitors = angular.copy($scope.monitors); + $timeout(function () { + initPackery(); + }, zm.packeryTimer); + + }); + } @@ -1630,77 +1677,47 @@ angular.module('zmApp.controllers') function getMode() { - var mode = (simulStreaming && !areStreamsStopped) ? 'jpeg' : 'single'; + var mode = (simulStreaming && currentStreamState!=streamState.SNAPSHOT && currentStreamState != streamState.STOPPED) ? 'jpeg' : 'single'; //console.log ("mode="+mode); return mode; } - // only for testing - $scope.killAllImages = function () { - areStreamsStopped = !areStreamsStopped; // inside timeout, because we need DOM to hide - $timeout(function () { - if (simulStreaming && areStreamsStopped) { - NVRDataModel.debug("Killing all streams in montage to save memory/nw..."); - for (var i = 0; i < $scope.MontageMonitors.length; i++) { - if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show') NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL); - } - } - - }); - - - if (simulStreaming && !areStreamsStopped) { - NVRDataModel.debug("Re-creating all streams in montage to save memory/nw..."); - NVRDataModel.regenConnKeys(); - - $scope.monitors = NVRDataModel.getMonitorsNow(); - $scope.MontageMonitors = angular.copy($scope.monitors); - - $timeout(function () { - initPackery(); - }, zm.packeryTimer); - - - } - - - - }; $scope.constructStream = function (monitor) { var stream; - if (areStreamsStopped || monitor.Monitor.listDisplay == 'noshow') return ""; + if (currentStreamState == streamState.STOPPED || monitor.Monitor.listDisplay == 'noshow' || $rootScope.authSession == 'undefined') { + // console.log ("STREAM=empty"); + return ""; + } + stream = monitor.Monitor.streamingURL + "/nph-zms?mode=" + getMode() + "&monitor=" + monitor.Monitor.Id + "&scale=" + $scope.LoginData.montageQuality + + "&rand=" + randToAvoidCacheMem + + "&buffer=1000" + $rootScope.authSession + - "&rand=" + randToAvoidCacheMem; + appendConnKey(monitor.Monitor.connKey); +//"&rand=" + randToAvoidCacheMem; //"&rand="+$scope.randToAvoidCacheMem + - appendConnKey(monitor.Monitor.connKey); - //console.log("STREAM=" + stream); + + + // console.log("STREAM=" + stream); return stream; }; function appendConnKey(ck) { - if (simulStreaming) + if (simulStreaming && currentStreamState != streamState.SNAPSHOT) return "&connkey=" + ck; else return ""; } - // using connkey in snapshot results in error - $scope.appendConnKey = function (ck) { - if (simulStreaming && !areStreamsStopped) - return "&connkey=" + ck; - else - return ""; - }; - + $scope.toggleSubMenuFunction = function () { $scope.toggleSubMenu = !$scope.toggleSubMenu; @@ -1717,7 +1734,7 @@ angular.module('zmApp.controllers') broadcastHandles = []; randToAvoidCacheMem = new Date().getTime(); - areStreamsStopped = true; + currentStreamState = streamState.SNAPSHOT; // NVRDataModel.regenConnKeys(); $scope.monitors = NVRDataModel.getMonitorsNow(); $scope.MontageMonitors = angular.copy($scope.monitors); @@ -1740,10 +1757,10 @@ angular.module('zmApp.controllers') //console.log ("****** MULTIPORT="+multiPortZms); NVRDataModel.debug("Multiport=" + data); - if ($rootScope.platformOS == 'ios') { + /* if ($rootScope.platformOS == 'ios') { simulStreaming = false; NVRDataModel.debug("IOS detected, DISABLING simul streaming"); - } + }*/ if (ld.disableSimulStreaming) { simulStreaming = false; @@ -1777,7 +1794,7 @@ angular.module('zmApp.controllers') }; $scope.$on('$ionicView.afterEnter', function () { - NVRDataModel.debug("Setting image mode to snapshot, will change to image when packery is all done"); + // NVRDataModel.debug("Setting image mode to snapshot, will change to image when packery is all done"); $scope.areImagesLoading = true; $scope.isDragabillyOn = false; $scope.reOrderActive = false; @@ -1875,15 +1892,6 @@ angular.module('zmApp.controllers') ld = NVRDataModel.getLogin(); - $rootScope.authSession = "undefined"; - $ionicLoading.show({ - template: $translate.instant('kNegotiatingStreamAuth'), - animation: 'fade-in', - showBackdrop: true, - duration: zm.loadingTimeout, - maxWidth: 300, - showDelay: 0 - }); NVRDataModel.log("Inside Montage Ctrl:We found " + $scope.monitors.length + " monitors"); @@ -1896,30 +1904,10 @@ angular.module('zmApp.controllers') } - $rootScope.validMonitorId = $scope.monitors[0].Monitor.Id; - NVRDataModel.getAuthKey($rootScope.validMonitorId, (Math.floor((Math.random() * 999999) + 1)).toString()) - .then(function (success) { - $ionicLoading.hide(); - //console.log(success); - $rootScope.authSession = success; - NVRDataModel.log("Stream authentication construction: " + - $rootScope.authSession); - $timeout(function () { - initPackery(); - }, zm.packeryTimer); - - }, - function (error) { - - $ionicLoading.hide(); - NVRDataModel.debug("MontageCtrl: Error in authkey retrieval " + error); - //$rootScope.authSession=""; - NVRDataModel.log("MontageCtrl: Error returned Stream authentication construction. Retaining old value of: " + $rootScope.authSession); - $timeout(function () { - initPackery(); - }, zm.packeryTimer); - }); + $timeout(function () { + initPackery(); + }, zm.packeryTimer); //console.log("**VIEW ** Montage Ctrl AFTER ENTER"); window.addEventListener("resize", orientationChanged, false); @@ -1930,21 +1918,10 @@ angular.module('zmApp.controllers') $scope.$on('$ionicView.beforeLeave', function () { - if ($rootScope.platformOS == 'ios') { - // we need to force a window stop thanks to the webkit streaming bug - areStreamsStopped = true; - $timeout (function() {NVRDataModel.stopNetwork();viewCleaned = true;}); - - - } else { - - areStreamsStopped = true; + currentStreamState = streamState.STOPPED; viewCleanup(); viewCleaned = true; - - } - }); $scope.$on('$ionicView.unloaded', function () { diff --git a/www/js/MontageHistoryCtrl.js b/www/js/MontageHistoryCtrl.js index 87907380..5333581e 100644 --- a/www/js/MontageHistoryCtrl.js +++ b/www/js/MontageHistoryCtrl.js @@ -804,15 +804,16 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc areStreamsStopped = true; - $timeout(function () { - - NVRDataModel.debug("Killing all streams in montage to save memory/nw..."); - for (var i = 0; i < $scope.MontageMonitors.length; i++) { - if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show' && $scope.MontageMonitors[i].Monitor.eventUrl != 'img/noevent.png') NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL,$scope.MontageMonitors[i].Monitor.Name); + $timeout(function () { - } + NVRDataModel.debug("Killing all streams in montage to save memory/nw..."); + for (var i = 0; i < $scope.MontageMonitors.length; i++) { + if ($scope.MontageMonitors[i].Monitor.listDisplay == 'show' && $scope.MontageMonitors[i].Monitor.eventUrl != 'img/noevent.png') NVRDataModel.killLiveStream($scope.MontageMonitors[i].Monitor.connKey, $scope.MontageMonitors[i].Monitor.controlURL,$scope.MontageMonitors[i].Monitor.Name); + + } + + }); - }); } function onResume() { @@ -861,7 +862,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc pckry.destroy(); window.removeEventListener("resize", orientationChanged, false); //NVRDataModel.log("Forcing a window.stop() here"); - NVRDataModel.stopNetwork("MontageHistory-beforeLeave"); + //NVRDataModel.stopNetwork("MontageHistory-beforeLeave"); }); $scope.$on('$ionicView.unloaded', function () {}); @@ -1071,7 +1072,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc // $scope.MontageMonitors = message; - isMultiPort = NVRDataModel.getCurrentServerMultiPortSupported(); + isMultiPort = NVRDataModel.getCurrentServerMultiPortSupported() && !NVRDataModel.getLogin().disableSimulStreaming; // don't do this - we are simulstreaming in this view @@ -1351,7 +1352,9 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc $scope.LoginData = NVRDataModel.getLogin(); $scope.monLimit = $scope.LoginData.maxMontage; $scope.currentLimit = $scope.LoginData.maxMontage; - if (!isMultiPort) { + ld = NVRDataModel.getLogin(); + + if (!isMultiPort || ld.disableSimulStreaming) { NVRDataModel.log("Limiting montage to 5, thanks to max connection per domain limit"); $scope.currentLimit = 5; @@ -1361,7 +1364,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageHistoryCtrl', ['$sc NVRDataModel.log("You have multiport on, so no montage limits"); } - ld = NVRDataModel.getLogin(); + $timeout(function () { // initPackery(); diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js index bdc3fffe..ef02c99a 100644 --- a/www/js/PortalLoginCtrl.js +++ b/www/js/PortalLoginCtrl.js @@ -238,7 +238,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic NVRDataModel.hrsSinceChecked("zmVersion") .then (function (val) { - if (val >=24) { + if (val >=zm.zmVersionCheckNag) { NVRDataModel.updateHrsSinceChecked("zmVersion"); $state.go('app.importantmessage', { diff --git a/www/js/app.js b/www/js/app.js index 0d1aa741..1258464f 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -107,7 +107,7 @@ angular.module('zmApp', [ thumbWidth:200, alarmStatusTime: 10000, eventServerErrorDelay:5000, // time to wait till I report initial connect errors - + zmVersionCheckNag: 15 * 24 // in hrs }) @@ -916,7 +916,7 @@ angular.module('zmApp', [ function doLogoutAndLogin(str) { return NVRDataModel.logout() - .finally(function(ans) { + .then(function(ans) { doLogin(str); }); diff --git a/www/lang/locale-en.json b/www/lang/locale-en.json index 0de81d90..4cb432a3 100644 --- a/www/lang/locale-en.json +++ b/www/lang/locale-en.json @@ -67,8 +67,8 @@ "kDisableNativeSub" :"Enable if the menu is freezing", "kDisablePush" :"disable APNS/GCM", "kDisableSamsung" :"If you are on a samsung device and are facing input issues, please temporarily disable auto-correction", - "kDisableSimulStreaming" :"Disable Montage real-time streaming", - "kDisableSimulStreamingNote" :"(always disabled in iOS)", + "kDisableSimulStreaming" :"Ignore ZM 1.32.0 multi-port", + "kDisableSimulStreamingNote" :"(disabling in iOS may cause issues)", "kDiscovering" :"discovering", "kDiscoveringAPI" :"discovering api", "kDiscoveringCGI" :"discovering cgi", diff --git a/www/templates/devoptions.html b/www/templates/devoptions.html index 61076042..c7a132d8 100644 --- a/www/templates/devoptions.html +++ b/www/templates/devoptions.html @@ -155,7 +155,7 @@ -