Partial S3 support

This commit is contained in:
2020-08-15 13:14:44 -05:00
parent 3846c85500
commit 27aa0ae8dc
17 changed files with 588 additions and 385 deletions

View File

@@ -1,10 +1,9 @@
import * as Constants from '../../constants';
import {createAction} from '@reduxjs/toolkit';
import * as Constants from '../../constants';
import {getIPCRenderer} from '../../utils';
import {
confirmYesNo,
saveState
} from './common_actions';
import {confirmYesNo, saveState} from './common_actions';
import {notifyError} from './error_actions';
export const addRemoteMount = (hostNameOrIp, port, token) => {
@@ -23,7 +22,8 @@ export const addRemoteMount = (hostNameOrIp, port, token) => {
Version: getState().relver.InstalledVersion,
});
} else {
dispatch(notifyError('Failed to set \'RemoteToken\': ' + arg.data.Error));
dispatch(
notifyError('Failed to set \'RemoteToken\': ' + arg.data.Error));
dispatch(setBusy(false));
}
});
@@ -42,15 +42,53 @@ export const addRemoteMount = (hostNameOrIp, port, token) => {
};
};
export const addS3Mount = (name, accessKey, secretKey, region, bucketName) => {
return (dispatch, getState) => {
const ipcRenderer = getIPCRenderer();
const provider = 'S3' + name;
dispatch(addS3Mount2(provider));
dispatch(setBusy(true));
ipcRenderer.once(Constants.IPC_Set_Config_Values_Reply, (_, arg) => {
if (arg.data.Success) {
ipcRenderer.send(Constants.IPC_Detect_Mount, {
Provider: provider,
S3Mounts: getState().mounts.S3Mounts,
Version: getState().relver.InstalledVersion,
});
} else {
dispatch(
notifyError('Failed to create S3 instance: ' + arg.data.Error));
dispatch(setBusy(false));
}
});
ipcRenderer.send(Constants.IPC_Set_Config_Values, {
Items: [
{Name: 'S3Config.AccessKey', Value: accessKey},
{Name: 'S3Config.SecretKey', Value: secretKey},
{Name: 'S3Config.Region', Value: region},
{Name: 'S3Config.BucketName', Value: bucketName},
],
Provider: provider,
S3: true,
Version: getState().relver.InstalledVersion,
});
};
};
export const addRemoteMount2 = createAction('mounts/addRemoteMount2');
export const addS3Mount2 = createAction('mounts/addS3Mount2');
export const DISPLAY_CONFIGURATION = 'mounts/displayConfiguration';
export const displayConfiguration = (provider, remote) => {
export const displayConfiguration = (provider, remote, s3) => {
return {
type: DISPLAY_CONFIGURATION,
payload: {
provider,
remote,
s3,
},
};
};
@@ -58,11 +96,11 @@ export const displayConfiguration = (provider, remote) => {
export const removeRemoteMount = provider => {
return dispatch => {
dispatch(confirmYesNo('Delete [' + provider.substr(6) + ']?'))
.then(confirmed => {
if (confirmed) {
dispatch(removeRemoteMount2(provider));
}
});
.then(confirmed => {
if (confirmed) {
dispatch(removeRemoteMount2(provider));
}
});
};
};
@@ -83,67 +121,40 @@ export const removeRemoteMount3 = createAction('mounts/removeRemoteMount3');
export const RESET_MOUNTS_STATE = 'mounts/resetMountsState';
export const resetMountsState = () => {
return {
type: RESET_MOUNTS_STATE,
payload: null,
}
return {type: RESET_MOUNTS_STATE, payload: null,}
};
export const SET_ALLOW_MOUNT = 'mounts/setAllowMount';
export const setAllowMount = (provider, allow) => {
return {
type: SET_ALLOW_MOUNT,
payload: {
provider,
allow
}
export const setAllowMount =
(provider,
allow) => {
return {type: SET_ALLOW_MOUNT, payload: {provider, allow}};
};
};
export const SET_AUTO_MOUNT_PROCESSED = 'mounts/setAutoMountProcessed';
export const setAutoMountProcessed = (provider, processed) => {
return {
type: SET_AUTO_MOUNT_PROCESSED,
payload: {
provider,
processed
}
};
return {type: SET_AUTO_MOUNT_PROCESSED, payload: {provider, processed}};
};
export const setBusy = createAction('mounts/setBusy');
export const SET_MOUNT_STATE = 'mounts/setMountState';
export const setMountState = (provider, state) => {
return {
type: SET_MOUNT_STATE,
payload: {
provider,
state
}
export const setMountState =
(provider,
state) => {
return {type: SET_MOUNT_STATE, payload: {provider, state}};
};
};
export const SET_MOUNTED = 'mounts/setMounted';
export const setMounted = (provider, mounted) => {
return {
type: SET_MOUNTED,
payload: {
provider,
mounted
}
export const setMounted =
(provider,
mounted) => {
return {type: SET_MOUNTED, payload: {provider, mounted}};
};
};
export const SET_PROVIDER_STATE = 'mounts/setProviderState';
export const setProviderState = (provider, state) => {
return {
type: SET_PROVIDER_STATE,
payload: {
provider,
state
}
}
return {type: SET_PROVIDER_STATE, payload: {provider, state}}
};
export const unmountAll = completedCallback => {

View File

@@ -1,24 +1,28 @@
import * as Constants from '../../constants';
import {createReducer} from '@reduxjs/toolkit';
import * as Constants from '../../constants';
import {
addRemoteMount2,
addS3Mount2,
DISPLAY_CONFIGURATION,
removeRemoteMount3,
RESET_MOUNTS_STATE,
SET_ALLOW_MOUNT,
SET_AUTO_MOUNT_PROCESSED,
setBusy,
SET_MOUNT_STATE,
SET_MOUNTED,
SET_PROVIDER_STATE
SET_PROVIDER_STATE,
setBusy
} from '../actions/mount_actions';
export const createMountReducer = state => {
let providerList = [
...Constants.PROVIDER_LIST,
...(state.RemoteMounts||[]),
...(state.RemoteMounts || []),
...(state.S3Mounts || []),
];
const providerState = providerList.map(provider=> {
const providerState = providerList
.map(provider => {
return {
[provider]: {
AutoMount: false,
@@ -26,14 +30,13 @@ export const createMountReducer = state => {
MountLocation: '',
}
}
}).reduce((map, obj) => {
return {
...map,
...obj
}
})
.reduce((map, obj) => {
return {...map, ...obj}
});
const mountState = providerList.map(provider => {
const mountState = providerList
.map(provider => {
return {
[provider]: {
AllowMount: false,
@@ -41,154 +44,172 @@ export const createMountReducer = state => {
Mounted: false,
}
}
}).reduce((map, obj) => {
return {
...map,
...obj
}
})
.reduce((map, obj) => {
return {...map, ...obj}
});
const autoMountProcessed = providerList.map(provider => {
return {
[provider]: false,
}
}).reduce((map, obj) => {
return {
...map,
...obj
}
});
const autoMountProcessed =
providerList.map(provider => {
return {[provider]: false,}
})
.reduce((map, obj) => {
return {...map, ...obj}
});
return createReducer({
AutoMountProcessed: autoMountProcessed,
DisplayConfiguration: null,
DisplayRemoteConfiguration: false,
MountsBusy: false,
MountState: mountState,
ProviderState: providerState,
RemoteMounts: state.RemoteMounts ? state.RemoteMounts : [],
}, {
[addRemoteMount2]: (state, action) => {
let mountState = {...state.MountState};
mountState[action.payload] = {
AllowMount: false,
DriveLetters: [],
Mounted: false,
};
let providerState = {...state.ProviderState};
providerState[action.payload] = {
AutoMount: false,
AutoRestart: false,
MountLocation: '',
};
let autoMountProcessed = {...state.AutoMountProcessed};
autoMountProcessed[action.payload] = true;
return {
...state,
AutoMountProcessed: autoMountProcessed,
MountState: mountState,
ProviderState: providerState,
RemoteMounts: [...state.RemoteMounts, action.payload],
}
return createReducer(
{
AutoMountProcessed: autoMountProcessed,
DisplayConfiguration: null,
DisplayRemoteConfiguration: false,
DisplayS3Configuration: false,
MountsBusy: false,
MountState: mountState,
ProviderState: providerState,
RemoteMounts: state.RemoteMounts ? state.RemoteMounts : [],
S3Mounts: state.S3Mounts ? state.S3Mounts : [],
},
[DISPLAY_CONFIGURATION]: (state, action) => {
return {
...state,
DisplayConfiguration: action.payload.provider,
DisplayRemoteConfiguration: action.payload.remote,
};
},
[removeRemoteMount3]: (state, action) => {
let mountState = {...state.MountState};
delete mountState[action.payload];
{
[addRemoteMount2]: (state, action) => {
let mountState = {...state.MountState};
mountState[action.payload] = {
AllowMount: false,
DriveLetters: [],
Mounted: false,
};
let providerState = {...state.ProviderState};
delete providerState[action.payload];
let providerState = {...state.ProviderState};
providerState[action.payload] = {
AutoMount: false,
AutoRestart: false,
MountLocation: '',
};
let autoMountProcessed = {...state.AutoMountProcessed};
delete autoMountProcessed[action.payload];
let autoMountProcessed = {...state.AutoMountProcessed};
autoMountProcessed[action.payload] = true;
const remoteMounts = state.RemoteMounts.filter(i => i !== action.payload);
return {
...state,
AutoMountProcessed: autoMountProcessed,
MountState: mountState,
ProviderState: providerState,
RemoteMounts: remoteMounts,
};
},
[RESET_MOUNTS_STATE]: (state, action) => {
return {
...state,
MountsBusy: false,
MountState: mountState,
}
},
[SET_AUTO_MOUNT_PROCESSED]: (state, action) => {
return {
...state,
AutoMountProcessed: {
...state.AutoMountProcessed,
[action.payload.provider]: action.payload.processed,
return {
...state, AutoMountProcessed: autoMountProcessed,
MountState: mountState, ProviderState: providerState,
RemoteMounts: [...state.RemoteMounts, action.payload],
}
};
},
[SET_ALLOW_MOUNT]: (state, action) => {
return {
...state,
MountState: {
...state.MountState,
[action.payload.provider]: {
...state.MountState[action.payload.provider],
AllowMount: action.payload.allow,
},
[addS3Mount2]: (state, action) => {
let mountState = {...state.MountState};
mountState[action.payload] = {
AllowMount: false,
DriveLetters: [],
Mounted: false,
};
let providerState = {...state.ProviderState};
providerState[action.payload] = {
AutoMount: false,
AutoRestart: false,
MountLocation: '',
};
let autoMountProcessed = {...state.AutoMountProcessed};
autoMountProcessed[action.payload] = true;
return {
...state, AutoMountProcessed: autoMountProcessed,
MountState: mountState, ProviderState: providerState,
S3Mounts: [...state.S3Mounts, action.payload],
}
},
[DISPLAY_CONFIGURATION]: (state, action) => {
return {
...state,
DisplayConfiguration: action.payload.provider,
DisplayRemoteConfiguration: action.payload.remote,
DisplayS3Configuration: action.payload.s3,
};
},
[removeRemoteMount3]: (state, action) => {
let mountState = {...state.MountState};
delete mountState[action.payload];
let providerState = {...state.ProviderState};
delete providerState[action.payload];
let autoMountProcessed = {...state.AutoMountProcessed};
delete autoMountProcessed[action.payload];
const remoteMounts =
state.RemoteMounts.filter(i => i !== action.payload);
return {
...state,
AutoMountProcessed: autoMountProcessed,
MountState: mountState,
ProviderState: providerState,
RemoteMounts: remoteMounts,
};
},
[RESET_MOUNTS_STATE]: (state, action) => {
return {...state, MountsBusy: false, MountState: mountState,}
},
[SET_AUTO_MOUNT_PROCESSED]: (state, action) => {
return {
...state,
AutoMountProcessed: {
...state.AutoMountProcessed,
[action.payload.provider]: action.payload.processed,
}
}
};
},
[setBusy]: (state, action) => {
return {
...state,
MountsBusy: action.payload
};
},
[SET_MOUNT_STATE]: (state, action) => {
return {
...state,
MountState: {
...state.MountState,
[action.payload.provider]: {
...state.MountState[action.payload.provider],
...action.payload.state
},
}
};
},
[SET_MOUNTED]: (state, action) => {
return {
...state,
MountState: {
...state.MountState,
[action.payload.provider]: {
...state.MountState[action.payload.provider],
Mounted: action.payload.mounted,
};
},
[SET_ALLOW_MOUNT]: (state, action) => {
return {
...state,
MountState: {
...state.MountState,
[action.payload.provider]: {
...state.MountState[action.payload.provider],
AllowMount: action.payload.allow,
}
}
}
};
},
[SET_PROVIDER_STATE]: (state, action) => {
return {
...state,
ProviderState: {
...state.ProviderState,
[action.payload.provider]: {
...state.ProviderState[action.payload.provider],
...action.payload.state
},
}
};
}
});
};
},
[setBusy]:
(state,
action) => {
return {...state, MountsBusy: action.payload};
},
[SET_MOUNT_STATE]: (state, action) => {
return {
...state,
MountState: {
...state.MountState,
[action.payload.provider]: {
...state.MountState[action.payload.provider],
...action.payload.state
},
}
};
},
[SET_MOUNTED]: (state, action) => {
return {
...state,
MountState: {
...state.MountState,
[action.payload.provider]: {
...state.MountState[action.payload.provider],
Mounted: action.payload.mounted,
}
}
};
},
[SET_PROVIDER_STATE]: (state, action) => {
return {
...state,
ProviderState: {
...state.ProviderState,
[action.payload.provider]: {
...state.ProviderState[action.payload.provider],
...action.payload.state
},
}
};
}
});
};