This repository has been archived on 2025-09-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
repertory-ui/src/redux/actions/release_version_actions.js

219 lines
6.9 KiB
JavaScript

import axios from 'axios';
import * as Constants from '../../constants';
import {createAction} from '@reduxjs/toolkit';
import {notifyError} from './error_actions';
import {
saveState,
setAllowMount,
setApplicationReady,
showWindow
} from './common_actions';
import {
checkVersionInstalled,
setDismissDependencies
} from './install_actions';
import {unmountAll} from './mount_actions';
import {
getIPCRenderer,
getNewReleases
} from '../../utils';
export const CLEAR_UI_UPGRADE = 'relver/clearUIUpgrade';
export const clearUIUpgrade = () => {
return {
type: CLEAR_UI_UPGRADE,
payload: null,
};
};
const cleanupOldReleases = versionList => {
return dispatch => {
const ipcRenderer = getIPCRenderer();
if (ipcRenderer) {
ipcRenderer.sendSync(Constants.IPC_Cleanup_Releases + '_sync', {
version_list: versionList
});
}
};
};
export const detectUIUpgrade = () => {
return (dispatch, getState) => {
axios
.get(Constants.UI_RELEASES_URL)
.then(response => {
const state = getState();
const appPlatform = state.common.AppPlatform;
const version = state.common.Version;
const data = response.data;
if (data.Versions &&
data.Versions[appPlatform] &&
(data.Versions[appPlatform].length > 0) &&
(data.Versions[appPlatform][0] !== version)) {
dispatch(setUIUpgradeData(data.Locations[appPlatform][data.Versions[appPlatform][0]], data.Versions[appPlatform][0]));
if (!state.relver.UpgradeDismissed) {
dispatch(showWindow());
}
} else {
dispatch(clearUIUpgrade());
}
}).catch(() => {
dispatch(clearUIUpgrade());
});
};
};
export const loadReleases = () => {
return (dispatch, getState) => {
const dispatchActions = (locationsLookup, versionLookup)=> {
const state = getState().relver;
let release = state.Release;
if (release >= Constants.RELEASE_TYPES.length) {
release = state.ReleaseDefault;
}
let latestVersion = versionLookup[Constants.RELEASE_TYPES[release]].length - 1;
let version = state.Version;
if (versionLookup[Constants.RELEASE_TYPES[release]][0] === 'unavailable') {
release = state.ReleaseDefault;
version = latestVersion = versionLookup[Constants.RELEASE_TYPES[release]].length - 1
} else if ((version === -1) || !versionLookup[Constants.RELEASE_TYPES[release]][version]) {
version = latestVersion;
}
dispatch(setReleaseData(locationsLookup, versionLookup));
const dispatchActions = (processAllowDismiss = true) => {
dispatch(setReleaseUpgradeAvailable((version !== latestVersion)));
dispatch(setApplicationReady(true));
dispatch(detectUIUpgrade());
if (processAllowDismiss) {
dispatch(setAllowDismissDependencies(versionLookup[Constants.RELEASE_TYPES[release]].length > 1));
}
dispatch(checkVersionInstalled());
let versionList = [];
for (const key of Object.keys(locationsLookup)) {
versionList.push(key);
}
dispatch(cleanupOldReleases(versionList))
};
if ((version !== state.Version) || (release !== state.Release)) {
dispatch(unmountAll(() => {
dispatch(setActiveRelease(release, version));
dispatchActions(false);
dispatch(showWindow());
dispatch(saveState());
}));
} else {
dispatchActions();
}
};
axios
.get(Constants.RELEASES_URL)
.then(response => {
const appPlatform = getState().common.AppPlatform;
const versionLookup = {
Release: response.data.Versions.Release[appPlatform],
RC: response.data.Versions.RC[appPlatform],
Beta: response.data.Versions.Beta[appPlatform],
Alpha: response.data.Versions.Alpha[appPlatform],
};
const locationsLookup = {
...response.data.Locations[appPlatform],
};
const storedReleases = localStorage.getItem('releases');
let newReleases = [];
if (storedReleases && (storedReleases.length > 0)) {
newReleases = getNewReleases(JSON.parse(storedReleases).VersionLookup, versionLookup);
}
localStorage.setItem('releases', JSON.stringify({
LocationsLookup: locationsLookup,
VersionLookup: versionLookup
}));
dispatchActions(locationsLookup, versionLookup);
dispatch(setNewReleasesAvailable(newReleases));
if (getState().relver.NewReleasesAvailable.length > 0) {
dispatch(showWindow());
}
}).catch(error => {
const releases = localStorage.getItem('releases');
if (releases && (releases.length > 0)) {
const obj = JSON.parse(releases);
const locationsLookup = obj.LocationsLookup;
const versionLookup = obj.VersionLookup;
dispatchActions(locationsLookup, versionLookup);
} else {
dispatch(notifyError(error, true));
}
});
};
};
export const NOTIFY_ACTIVE_RELEASE = 'relver/notifyActiveRelease';
export const notifyActiveRelease = (release, version) => {
return {
type: NOTIFY_ACTIVE_RELEASE,
payload: {
release: release,
version: version
},
};
};
export const setActiveRelease = (release, version) => {
return (dispatch, getState) => {
dispatch(setAllowMount(false));
const relver = getState().relver;
const common = getState().common;
if (release >= Constants.RELEASE_TYPES.length) {
release = relver.ReleaseDefault;
version = -1;
}
const versions = relver.VersionLookup[Constants.RELEASE_TYPES[release]];
dispatch(setAllowDismissDependencies(versions && (versions.length > 1)));
dispatch(setDismissDependencies(false));
dispatch(notifyActiveRelease(release, version));
if (common.AppReady) {
dispatch(checkVersionInstalled());
}
};
};
export const setAllowDismissDependencies = createAction('relver/setAllowDismissDependencies');
export const setDismissNewReleasesAvailable = createAction('relver/setDismissNewReleasesAvailable');
export const setDismissUIUpgrade = createAction('relver/setDismissUIUpgrade');
export const setInstalledVersion = createAction('relver/setInstalledVersion');
export const setNewReleasesAvailable = createAction('relver/setNewReleasesAvailable');
export const SET_RELEASE_DATA = 'relver/setReleaseData';
export const setReleaseData = (locationsLookup, versionLookup)=> {
return {
type: SET_RELEASE_DATA,
payload: {
locations: locationsLookup,
versions: versionLookup,
}
}
};
export const setReleaseUpgradeAvailable = createAction('relver/setReleaseUpgradeAvailable');
export const SET_UI_UPGRADE_DATA = 'relver/setUIUpgradeData';
export const setUIUpgradeData = (upgradeData, version) => {
return {
type: SET_UI_UPGRADE_DATA,
payload: {
upgrade_data: upgradeData,
version: version,
}
}
};