Fixed: Restoring a backup with a different API didn't reload properly

Fixes #2042

(cherry picked from commit 13ff2d4c70bc564525842c31d184127a3934e178)
This commit is contained in:
Mark McDowall 2021-02-27 12:10:20 -08:00 committed by Qstick
parent 55372f554f
commit fa569f85b2
2 changed files with 72 additions and 1 deletions

View File

@ -1,7 +1,9 @@
import _ from 'lodash';
import { createAction } from 'redux-actions';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import getSectionState from 'Utilities/State/getSectionState';
import updateSectionState from 'Utilities/State/updateSectionState';
import { createThunk, handleThunks } from 'Store/thunks';
import createHandleActions from './Creators/createHandleActions';
function getDimensions(width, height) {
@ -22,6 +24,8 @@ function getDimensions(width, height) {
export const section = 'app';
const messagesSection = 'app.messages';
let abortPingServer = null;
let pingTimeout = null;
//
// State
@ -50,6 +54,8 @@ export const SET_VERSION = 'app/setVersion';
export const SET_APP_VALUE = 'app/setAppValue';
export const SET_IS_SIDEBAR_VISIBLE = 'app/setIsSidebarVisible';
export const PING_SERVER = 'app/pingServer';
//
// Action Creators
@ -59,6 +65,70 @@ export const setIsSidebarVisible = createAction(SET_IS_SIDEBAR_VISIBLE);
export const setAppValue = createAction(SET_APP_VALUE);
export const showMessage = createAction(SHOW_MESSAGE);
export const hideMessage = createAction(HIDE_MESSAGE);
export const pingServer = createThunk(PING_SERVER);
//
// Helpers
function pingServerAfterTimeout(getState, dispatch) {
if (abortPingServer) {
abortPingServer();
abortPingServer = null;
}
if (pingTimeout) {
clearTimeout(pingTimeout);
pingTimeout = null;
}
pingTimeout = setTimeout(() => {
if (!getState().isRestarting && getState().isConnected) {
return;
}
const ajaxOptions = {
url: '/system/status',
method: 'GET',
contentType: 'application/json'
};
const { request, abortRequest } = createAjaxRequest(ajaxOptions);
abortPingServer = abortRequest;
request.done(() => {
abortPingServer = null;
pingTimeout = null;
dispatch(setAppValue({
isRestarting: false
}));
});
request.fail((xhr) => {
abortPingServer = null;
pingTimeout = null;
// Unauthorized, but back online
if (xhr.status === 401) {
dispatch(setAppValue({
isRestarting: false
}));
} else {
pingServerAfterTimeout(getState, dispatch);
}
});
}, 5000);
}
//
// Action Handlers
export const actionHandlers = handleThunks({
[PING_SERVER]: function(getState, payload, dispatch) {
pingServerAfterTimeout(getState, dispatch);
}
});
//
// Reducers
@ -132,4 +202,3 @@ export const reducers = createHandleActions({
}
}, defaultState, section);

View File

@ -4,6 +4,7 @@ import { setAppValue } from 'Store/Actions/appActions';
import { createThunk, handleThunks } from 'Store/thunks';
import createAjaxRequest from 'Utilities/createAjaxRequest';
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
import { pingServer } from './appActions';
import { set } from './baseActions';
import createFetchHandler from './Creators/createFetchHandler';
import createHandleActions from './Creators/createHandleActions';
@ -351,6 +352,7 @@ export const actionHandlers = handleThunks({
promise.done(() => {
dispatch(setAppValue({ isRestarting: true }));
dispatch(pingServer());
});
},