diff --git a/src/App.js b/src/App.js
index a8c636e..22f0072 100644
--- a/src/App.js
+++ b/src/App.js
@@ -23,6 +23,7 @@ import {
setAllowDownload
} from './redux/actions/download_actions';
import {
+ checkInstalled,
installDependency,
installRelease,
installUpgrade,
@@ -41,13 +42,6 @@ const Constants = require('./constants');
const Scheduler = require('node-schedule');
class App extends IPCContainer {
- constructor(props) {
- super(props);
-
- this.setRequestHandler(Constants.IPC_Check_Installed_Reply, this.onCheckInstalledReply);
- this.setRequestHandler(Constants.IPC_Get_State_Reply, this.onGetStateReply);
- }
-
checkVersionInstalled = () => {
this.props.setAllowDownload(false);
const selectedVersion = this.getSelectedVersion();
@@ -57,18 +51,15 @@ class App extends IPCContainer {
dependencies = this.props.LocationsLookup[selectedVersion].dependencies;
}
- this.sendRequest(Constants.IPC_Check_Installed, {
- Dependencies: dependencies,
- Version: selectedVersion,
- });
+ this.props.checkInstalled(dependencies, selectedVersion);
} else {
this.props.setInstalledVersion('none');
}
};
componentDidMount() {
- this.sendRequest(Constants.IPC_Get_State);
this.scheduledUpdateJob = Scheduler.scheduleJob('23 11 * * *', this.updateCheckScheduledJob);
+ this.detectUpgrades();
}
componentDidUpdate(prevProps) {
@@ -143,34 +134,6 @@ class App extends IPCContainer {
this.props.installUpgrade(result.Destination, sha256, signature, !!result.SkipVerification, this.onInstallUpgradeComplete);
}
};
-
- onCheckInstalledReply = (event, arg) => {
- const action = () => {
- const installedVersion = arg.data.Success && arg.data.Exists ? arg.data.Version : 'none';
-
- let upgradeAvailable = false;
- if (installedVersion !== 'none') {
- const latestVersion = this.props.VersionLookup[Constants.RELEASE_TYPES[this.props.Release]].length - 1;
- let version = this.props.ReleaseVersion;
- if (version === -1) {
- version = latestVersion;
- this.props.setActiveRelease(this.props.Release, version);
- } else {
- upgradeAvailable = version !== latestVersion;
- }
- }
- this.props.setReleaseUpgradeAvailable(upgradeAvailable);
- this.props.setAllowDownload(true);
- this.props.setInstalledVersion(installedVersion);
- this.props.setMissingDependencies(arg.data.Dependencies);
- };
-
- if (arg.data.Success) {
- action();
- } else {
- this.props.notifyError(arg.data.Error, false, action);
- }
- };
onDownloadFileComplete = (name, type, url, result) => {
if (this.isMounted()) {
@@ -191,25 +154,6 @@ class App extends IPCContainer {
}
};
- onGetStateReply = (event, arg) => {
- if (arg.data) {
- this.props.setActiveRelease(arg.data.Release, arg.data.Version);
-
- for (const provider of Constants.PROVIDER_LIST) {
- let data = arg.data[provider] || this.props.ProviderState[provider];
- if (data.AutoMount === undefined) {
- data['AutoMount'] = false;
- }
- if (data.AutoRestart === undefined) {
- data['AutoRestart'] = false;
- }
- this.props.setProviderState(provider, data);
- }
- }
-
- this.detectUpgrades();
- };
-
onInstallDependencyComplete = (source, url, result) => {
if (this.isMounted()) {
if (result.Success && source.toLowerCase().endsWith('.dmg')) {
@@ -458,6 +402,7 @@ const mapStateToProps = state => {
const mapDispatchToProps = dispatch => {
return {
+ checkInstalled: (dependencies, version) => dispatch(checkInstalled(dependencies, version)),
detectUIUpgrade: () => dispatch(detectUIUpgrade()),
downloadItem: (name, type, url, completedCallback) => dispatch(downloadItem(name, type, url, completedCallback)),
installDependency: (source, url, completedCallback) => dispatch(installDependency(source, url, completedCallback)),
diff --git a/src/index.js b/src/index.js
index b477baa..a986f74 100644
--- a/src/index.js
+++ b/src/index.js
@@ -6,6 +6,8 @@ import createAppStore from './redux/store/createAppStore';
import {getIPCRenderer} from './utils';
import packageJson from '../package.json';
import {Provider} from 'react-redux';
+import {setActiveRelease} from './redux/actions/release_version_actions';
+import {setProviderState} from './redux/actions/mount_actions';
import * as serviceWorker from './serviceWorker';
const Constants = require('./constants');
@@ -19,12 +21,29 @@ if (ipcRenderer) {
}
const store = createAppStore(arg.Platform, arg.AppPlatform, packageJson.version);
- ReactDOM.render((
-
-
-
- ), document.getElementById('root'));
- serviceWorker.unregister();
+ ipcRenderer.on(Constants.IPC_Get_State_Reply, (event, arg) => {
+ if (arg.data) {
+ store.dispatch(setActiveRelease(arg.data.Release, arg.data.Version));
+
+ for (const provider of Constants.PROVIDER_LIST) {
+ let state = arg.data[provider] || this.props.ProviderState[provider];
+ if (state.AutoMount === undefined) {
+ state['AutoMount'] = false;
+ }
+ if (state.AutoRestart === undefined) {
+ state['AutoRestart'] = false;
+ }
+ store.dispatch(setProviderState(provider, state));
+ }
+ }
+ ReactDOM.render((
+
+
+
+ ), document.getElementById('root'));
+ serviceWorker.unregister();
+ });
+ ipcRenderer.send(Constants.IPC_Get_State);
});
ipcRenderer.send(Constants.IPC_Get_Platform);
}
diff --git a/src/redux/actions/install_actions.js b/src/redux/actions/install_actions.js
index f8176bc..7a53898 100644
--- a/src/redux/actions/install_actions.js
+++ b/src/redux/actions/install_actions.js
@@ -1,9 +1,57 @@
import * as Constants from '../../constants';
import {createAction} from 'redux-starter-kit';
import {getIPCRenderer} from '../../utils';
+import {notifyError} from './error_actions';
+import {setAllowDownload} from './download_actions';
+import {
+ setActiveRelease,
+ setInstalledVersion,
+ setReleaseUpgradeAvailable
+} from './release_version_actions';
const ipcRenderer = getIPCRenderer();
+export const checkInstalled = (dependencies, version) => {
+ return (dispatch, getState) => {
+ const checkInstalledComplete = (event, arg) => {
+ ipcRenderer.removeListener(Constants.IPC_Check_Installed_Reply, checkInstalledComplete);
+ const result = arg.data;
+ const updateState = () => {
+ const installedVersion = result.Success && result.Exists ? result.Version : 'none';
+ const state = getState();
+
+ let upgradeAvailable = false;
+ if (installedVersion !== 'none') {
+ const latestVersion = state.relver.VersionLookup[Constants.RELEASE_TYPES[state.relver.Release]].length - 1;
+ let version = state.relver.ReleaseVersion;
+ if (version === -1) {
+ version = latestVersion;
+ dispatch(setActiveRelease(state.relver.Release, version));
+ } else {
+ upgradeAvailable = version !== latestVersion;
+ }
+ }
+ dispatch(setReleaseUpgradeAvailable(upgradeAvailable));
+ dispatch(setAllowDownload(true));
+ dispatch(setInstalledVersion(installedVersion));
+ dispatch(setMissingDependencies(result.Dependencies));
+ };
+
+ if (result.Success) {
+ updateState();
+ } else {
+ dispatch(notifyError(result.Error, false, updateState));
+ }
+ };
+
+ ipcRenderer.on(Constants.IPC_Check_Installed_Reply, checkInstalledComplete);
+ ipcRenderer.send(Constants.IPC_Check_Installed, {
+ Dependencies: dependencies,
+ Version: version,
+ });
+ };
+};
+
export const installDependency = (source, url, completedCallback) => {
return (dispatch, getState) => {
if (ipcRenderer && !getState().install.InstallActive) {