|
|
@@ -11,6 +11,8 @@ angular.module('syncthing.core')
|
|
|
var navigatingAway = false;
|
|
|
var online = false;
|
|
|
var restarting = false;
|
|
|
+ var restartExpectedFrom = 0;
|
|
|
+ var restartExpectedUntil = 0;
|
|
|
|
|
|
function initController() {
|
|
|
LocaleService.autoConfigLocale();
|
|
|
@@ -33,6 +35,34 @@ angular.module('syncthing.core')
|
|
|
Events.start();
|
|
|
}
|
|
|
|
|
|
+ function clearRestartExpectation() {
|
|
|
+ restartExpectedFrom = 0;
|
|
|
+ restartExpectedUntil = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function setRestartExpectation(delayS) {
|
|
|
+ var delay = delayS > 0 ? delayS : 60;
|
|
|
+ var delayMs = delay * 1000;
|
|
|
+ var earlyMs = 5 * 1000;
|
|
|
+ var graceMs = 60 * 1000;
|
|
|
+ var now = Date.now();
|
|
|
+
|
|
|
+ restartExpectedFrom = now + Math.max(0, delayMs - earlyMs);
|
|
|
+ restartExpectedUntil = now + delayMs + graceMs;
|
|
|
+ }
|
|
|
+
|
|
|
+ function restartExpectedNow() {
|
|
|
+ if (!restartExpectedUntil) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ var now = Date.now();
|
|
|
+ if (now > restartExpectedUntil) {
|
|
|
+ clearRestartExpectation();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return now >= restartExpectedFrom;
|
|
|
+ }
|
|
|
+
|
|
|
// public/scope definitions
|
|
|
|
|
|
// window.metadata is set in /meta.js which requires authentication
|
|
|
@@ -204,6 +234,7 @@ angular.module('syncthing.core')
|
|
|
|
|
|
online = true;
|
|
|
restarting = false;
|
|
|
+ clearRestartExpectation();
|
|
|
hideModal('#networkError');
|
|
|
hideModal('#restarting');
|
|
|
hideModal('#shutdown');
|
|
|
@@ -218,8 +249,24 @@ angular.module('syncthing.core')
|
|
|
console.log('UIOffline');
|
|
|
online = false;
|
|
|
if (!restarting) {
|
|
|
- showModal('#networkError');
|
|
|
+ if (restartExpectedNow()) {
|
|
|
+ restarting = true;
|
|
|
+ showModal('#restarting');
|
|
|
+ } else {
|
|
|
+ showModal('#networkError');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ $scope.$on(Events.UPGRADE_RESTART_SCHEDULED, function (_event, arg) {
|
|
|
+ var delayS = 0;
|
|
|
+ if (arg && arg.data && arg.data.delayS !== undefined) {
|
|
|
+ delayS = parseInt(arg.data.delayS, 10);
|
|
|
+ if (isNaN(delayS) || delayS < 0) {
|
|
|
+ delayS = 0;
|
|
|
+ }
|
|
|
}
|
|
|
+ setRestartExpectation(delayS);
|
|
|
});
|
|
|
|
|
|
$scope.$on('HTTPError', function (event, arg) {
|