From 39409495c4604d1ff07b46220a726796b72fd99e Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 21 Feb 2020 15:35:16 -0600 Subject: [PATCH] #38: Enhance new repertory release available notification --- .../NewReleases/NewRelease/NewRelease.js | 10 ++++- src/components/NewReleases/NewReleases.js | 3 +- src/redux/actions/install_actions.js | 39 +++++++++++++++++-- src/redux/reducers/install_reducer.js | 8 ++++ src/utils.js | 8 ++-- 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js index 4aafd30..0ad4fec 100644 --- a/src/components/NewReleases/NewRelease/NewRelease.js +++ b/src/components/NewReleases/NewRelease/NewRelease.js @@ -7,16 +7,22 @@ import { notifyError, notifyInfo } from '../../../redux/actions/error_actions'; +import {installReleaseByVersion} from '../../../redux/actions/install_actions'; const mapDispatchToProps = dispatch => { return { + installReleaseByVersion: (release, version) => dispatch(installReleaseByVersion(release, version)), notifyError: msg => dispatch(notifyError(msg)), notifyInfo: (title, msg) => dispatch(notifyInfo(title, msg)), }; }; -export default connect(null, mapDispatchToProps)(({release, lastItem, notifyError, notifyInfo}) => { +export default connect(null, mapDispatchToProps)(({dismiss, release, lastItem, notifyError, notifyInfo, installReleaseByVersion}) => { const title = '[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display; + const installReleaseVersion = () => { + dismiss(); + installReleaseByVersion(release.Release, release.Version); + }; const displayChanges = async () => { try { const lines = await getChangesForRepertoryVersion(release.VersionString); @@ -40,7 +46,7 @@ export default connect(null, mapDispatchToProps)(({release, lastItem, notifyErro
- + {lastItem ? null : } diff --git a/src/components/NewReleases/NewReleases.js b/src/components/NewReleases/NewReleases.js index 5c4638c..4c4656e 100644 --- a/src/components/NewReleases/NewReleases.js +++ b/src/components/NewReleases/NewReleases.js @@ -20,7 +20,8 @@ const mapDispatchToProps = dispatch => { export default connect(mapStateToProps, mapDispatchToProps)(props => { const newReleases = props.NewReleasesAvailable.map((i, idx) => { - return ; }); diff --git a/src/redux/actions/install_actions.js b/src/redux/actions/install_actions.js index b8eaf77..5b28fff 100644 --- a/src/redux/actions/install_actions.js +++ b/src/redux/actions/install_actions.js @@ -5,7 +5,7 @@ import { getSelectedVersionFromState } from '../../utils'; import {notifyError} from './error_actions'; -import {setAllowDownload} from './download_actions'; +import {downloadItem, setAllowDownload} from './download_actions'; import { loadReleases, setActiveRelease, @@ -32,13 +32,15 @@ export const checkInstalled = (dependencies, version) => { const installedVersion = result.Success && result.Exists ? result.Version : 'none'; const state = getState(); + const release = state.relver.Release; + let version = state.relver.Version; + let upgradeAvailable = false; if (installedVersion !== 'none') { - const latestVersion = state.relver.VersionLookup[Constants.RELEASE_TYPES[state.relver.Release]].length - 1; - let version = state.relver.Version; + const latestVersion = state.relver.VersionLookup[Constants.RELEASE_TYPES[release]].length - 1; if (version === -1) { version = latestVersion; - dispatch(setActiveRelease(state.relver.Release, version)); + dispatch(setActiveRelease(release, version)); } else { upgradeAvailable = version !== latestVersion; } @@ -48,8 +50,18 @@ export const checkInstalled = (dependencies, version) => { dispatch(setMissingDependencies(result.Dependencies)); dispatch(setAllowDownload(true)); dispatch(setAllowMount(true)); + + const autoInstallRelease = getState().install.AutoInstallRelease; + dispatch(setAutoInstallRelease(false)); + if (result.Dependencies && (result.Dependencies.length > 0)) { dispatch(showWindow()); + } else if ((installedVersion === 'none') && autoInstallRelease) { + dispatch(setAllowMount(false)); + const versionString = getState().relver.VersionLookup[Constants.RELEASE_TYPES[release]][version]; + const urls = getState().relver.LocationsLookup[versionString].urls; + const fileName = versionString + '.zip'; + dispatch(downloadItem(fileName, Constants.INSTALL_TYPES.Release, urls)); } }; @@ -174,6 +186,24 @@ export const installAndTestRelease = (source, version, appPlatform) => { }; }; +export const installReleaseByVersion = (release, version) => { + return (dispatch, getState) => { + let allowInstall = !getState().mounts.MountsBusy; + if (!allowInstall) { + // TODO: prompt to unmount + } + + if (allowInstall) { + if (getState().download.AllowDownload && !getState().download.DownloadActive) { + dispatch(setAutoInstallRelease(true)); + dispatch(setActiveRelease(release, version)); + } else { + notifyError('Download is active. Unable to install release.'); + } + } + }; +}; + export const installRelease = source => { return (dispatch, getState) => { if (ipcRenderer && !getState().install.InstallActive) { @@ -231,6 +261,7 @@ export const installUpgrade = (source, sha256, signature, skipVerification) => { }; }; +export const setAutoInstallRelease = createAction('install/setAutoInstallRelease'); export const setDismissDependencies = createAction('install/setDismissDependencies'); export const setInstallActive = createAction('install/setInstallActive'); export const setInstallTestActive = createAction('install/setInstallTestActive'); diff --git a/src/redux/reducers/install_reducer.js b/src/redux/reducers/install_reducer.js index cdcca1a..8ec65f7 100644 --- a/src/redux/reducers/install_reducer.js +++ b/src/redux/reducers/install_reducer.js @@ -1,5 +1,6 @@ import {createReducer} from '@reduxjs/toolkit'; import { + setAutoInstallRelease, setDismissDependencies, setInstallActive, setInstallComplete, @@ -8,6 +9,7 @@ import { } from '../actions/install_actions'; export const installReducer = createReducer({ + AutoInstallRelease: false, DismissDependencies: false, InstallActive: false, InstallResult: null, @@ -15,6 +17,12 @@ export const installReducer = createReducer({ InstallType: null, MissingDependencies: [], }, { + [setAutoInstallRelease]: (state, action) => { + return { + ...state, + AutoInstallRelease: action.payload, + } + }, [setDismissDependencies]: (state, action) => { return { ...state, diff --git a/src/utils.js b/src/utils.js index 0c33989..2448039 100644 --- a/src/utils.js +++ b/src/utils.js @@ -85,12 +85,12 @@ export const getNewReleases = (existingReleases, newReleases) => { }); } - ret.push({ + /*ret.push({ Display: '1.2.2-release', - Release: 1, - Version: 2, + Release: 0, + Version: 3, VersionString: '1.2.2-release', - }); + });*/ return ret; };