Support S3 delete

This commit is contained in:
2020-12-12 14:45:26 -06:00
parent 7e0f06ba56
commit 54bc306fb0
5 changed files with 99 additions and 89 deletions

View File

@@ -159,8 +159,8 @@ exports.IPC_Install_Upgrade_Reply = 'install_upgrade_reply';
exports.IPC_Mount_Drive = 'mount_drive'; exports.IPC_Mount_Drive = 'mount_drive';
exports.IPC_Mount_Drive_Reply = 'mount_drive_reply'; exports.IPC_Mount_Drive_Reply = 'mount_drive_reply';
exports.IPC_Remove_Remote_Mount = 'remove_remote_mount'; exports.IPC_Remove_Mount = 'remove_mount';
exports.IPC_Remove_Remote_Mount_Reply = 'remove_remote_mount_reply'; exports.IPC_Remove_Mount_Reply = 'remove_mount_reply';
exports.IPC_Reboot_System = 'reboot_system'; exports.IPC_Reboot_System = 'reboot_system';

View File

@@ -10,7 +10,7 @@ import configureImage from '../../../assets/images/configure.png';
import RootElem from '../../../components/UI/RootElem/RootElem'; import RootElem from '../../../components/UI/RootElem/RootElem';
import { import {
displayConfiguration, displayConfiguration,
removeRemoteMount, removeMount,
setProviderState setProviderState
} from '../../../redux/actions/mount_actions'; } from '../../../redux/actions/mount_actions';
import { import {
@@ -34,7 +34,7 @@ const mapDispatchToProps = dispatch => {
displayConfiguration: (provider, remote, s3) => dispatch(displayConfiguration(provider, remote, s3)), displayConfiguration: (provider, remote, s3) => dispatch(displayConfiguration(provider, remote, s3)),
displaySkynetExport: display => dispatch(displaySkynetExport(display)), displaySkynetExport: display => dispatch(displaySkynetExport(display)),
displaySkynetImport: display => dispatch(displaySkynetImport(display)), displaySkynetImport: display => dispatch(displaySkynetImport(display)),
removeRemoteMount: provider => dispatch(removeRemoteMount(provider)), removeMount: provider => dispatch(removeMount(provider)),
setProviderState: (provider, state) => dispatch(setProviderState(provider, state)), setProviderState: (provider, state) => dispatch(setProviderState(provider, state)),
} }
}; };
@@ -155,14 +155,14 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => {
); );
let removeControl; let removeControl;
if (props.remote) { if (props.allowRemove) {
const removeDisabled = !props.MState.AllowMount || props.MState.Mounted; const removeDisabled = !props.MState.AllowMount || props.MState.Mounted;
const removeStyle = { const removeStyle = {
cursor: removeDisabled ? 'no-drop' : 'pointer' cursor: removeDisabled ? 'no-drop' : 'pointer'
}; };
const handleRemoveMount = () => { const handleRemoveMount = () => {
if (!removeDisabled) { if (!removeDisabled) {
props.removeRemoteMount(props.provider); props.removeMount(props.provider);
} }
}; };
removeControl = ( removeControl = (

View File

@@ -95,31 +95,36 @@ export const displayConfiguration = (provider, remote, s3) => {
}; };
}; };
export const removeRemoteMount = provider => { export const removeMount = provider => {
return dispatch => { return dispatch => {
dispatch(confirmYesNo('Delete [' + provider.substr(6) + ']?')) const isRemote = provider.startsWith('Remote');
dispatch(confirmYesNo('Delete [' + provider.substr(isRemote ? 6 : 2) + ']?'))
.then(confirmed => { .then(confirmed => {
if (confirmed) { if (confirmed) {
dispatch(removeRemoteMount2(provider)); dispatch(removeMount2(provider));
} }
}); });
}; };
}; };
const removeRemoteMount2 = provider => { const removeMount2 = provider => {
return dispatch => { return dispatch => {
const ipcRenderer = getIPCRenderer(); const ipcRenderer = getIPCRenderer();
ipcRenderer.once(Constants.IPC_Remove_Remote_Mount_Reply, (_, arg) => { ipcRenderer.once(Constants.IPC_Remove_Mount_Reply, (_, arg) => {
if (arg.data.Success) { if (arg.data.Success) {
dispatch(removeRemoteMount3(provider)); dispatch(removeMount3(provider));
dispatch(saveState()); dispatch(saveState());
} }
}); });
ipcRenderer.send(Constants.IPC_Remove_Remote_Mount, provider.substr(6)); const isRemote = provider.startsWith('Remote');
ipcRenderer.send(Constants.IPC_Remove_Mount, {
Remote: isRemote,
Name: provider.substr(isRemote ? 6 : 2)
});
}; };
}; };
export const removeRemoteMount3 = createAction('mounts/removeRemoteMount3'); export const removeMount3 = createAction('mounts/removeMount3');
export const RESET_MOUNTS_STATE = 'mounts/resetMountsState'; export const RESET_MOUNTS_STATE = 'mounts/resetMountsState';
export const resetMountsState = () => { export const resetMountsState = () => {

View File

@@ -5,7 +5,7 @@ import {
addRemoteMount2, addRemoteMount2,
addS3Mount2, addS3Mount2,
DISPLAY_CONFIGURATION, DISPLAY_CONFIGURATION,
removeRemoteMount3, removeMount3,
RESET_MOUNTS_STATE, RESET_MOUNTS_STATE,
SET_ALLOW_MOUNT, SET_ALLOW_MOUNT,
SET_AUTO_MOUNT_PROCESSED, SET_AUTO_MOUNT_PROCESSED,
@@ -126,7 +126,7 @@ export const createMountReducer = state => {
DisplayS3Configuration: action.payload.s3, DisplayS3Configuration: action.payload.s3,
}; };
}, },
[removeRemoteMount3]: (state, action) => { [removeMount3]: (state, action) => {
let mountState = {...state.MountState}; let mountState = {...state.MountState};
delete mountState[action.payload]; delete mountState[action.payload];
@@ -138,12 +138,15 @@ export const createMountReducer = state => {
const remoteMounts = const remoteMounts =
state.RemoteMounts.filter(i => i !== action.payload); state.RemoteMounts.filter(i => i !== action.payload);
const s3Mounts =
state.S3Mounts.filter(i => i !== action.payload);
return { return {
...state, ...state,
AutoMountProcessed: autoMountProcessed, AutoMountProcessed: autoMountProcessed,
MountState: mountState, MountState: mountState,
ProviderState: providerState, ProviderState: providerState,
RemoteMounts: remoteMounts, RemoteMounts: remoteMounts,
S3Mounts: s3Mounts,
}; };
}, },
[RESET_MOUNTS_STATE]: (state, action) => { [RESET_MOUNTS_STATE]: (state, action) => {

View File

@@ -20,29 +20,29 @@ const clearManualMountDetection = provider => {
const monitorMount = (sender, provider, providerList, version, pid, location) => { const monitorMount = (sender, provider, providerList, version, pid, location) => {
manualMountDetection[provider] = setInterval(() => { manualMountDetection[provider] = setInterval(() => {
helpers helpers
.detectRepertoryMounts(version, providerList) .detectRepertoryMounts(version, providerList)
.then(result => { .then(result => {
if (result[provider].PID !== pid) { if (result[provider].PID !== pid) {
if (result[provider].PID === -1) { if (result[provider].PID === -1) {
clearManualMountDetection(provider); clearManualMountDetection(provider);
sender.send(Constants.IPC_Unmount_Drive_Reply, { sender.send(Constants.IPC_Unmount_Drive_Reply, {
data: { data: {
Expected: expectedUnmount[provider], Expected: expectedUnmount[provider],
Location: location, Location: location,
Provider: provider, Provider: provider,
Error: Error(provider + ' Unmounted').toString(), Error: Error(provider + ' Unmounted').toString(),
Success: false, Success: false,
} }
}); });
} else { } else {
pid = result[provider].PID; pid = result[provider].PID;
}
} }
}) }
.catch(e => { })
console.log(e); .catch(e => {
}); console.log(e);
},6000); });
}, 6000);
}; };
const unmountAllDrives = () => { const unmountAllDrives = () => {
@@ -149,52 +149,52 @@ const addListeners = (ipcMain, {setTrayImage, standardIPCReply}) => {
}; };
helpers helpers
.detectRepertoryMounts(data.Version, providerList) .detectRepertoryMounts(data.Version, providerList)
.then((results) => { .then((results) => {
let storageData = {}; let storageData = {};
let locations = {}; let locations = {};
for (const provider of providerList) { for (const provider of providerList) {
storageData[provider] = results[provider] ? results[provider] : { storageData[provider] = results[provider] ? results[provider] : {
Active: false, Active: false,
Location: '', Location: '',
PID: -1, PID: -1,
}; };
locations[provider] = storageData[provider].Location; locations[provider] = storageData[provider].Location;
if (storageData[provider].PID !== -1) { if (storageData[provider].PID !== -1) {
expectedUnmount[provider] = false; expectedUnmount[provider] = false;
if (firstMountCheck) { if (firstMountCheck) {
monitorMount(event.sender, provider, providerList, data.Version, storageData[provider].PID, storageData[provider].Location); monitorMount(event.sender, provider, providerList, data.Version, storageData[provider].PID, storageData[provider].Location);
}
} }
} }
}
if (os.platform() === 'win32') { if (os.platform() === 'win32') {
grabDriveLetters(locations); grabDriveLetters(locations);
} }
setImage(locations); setImage(locations);
if (firstMountCheck) { if (firstMountCheck) {
firstMountCheck = false; firstMountCheck = false;
} }
standardIPCReply(event, Constants.IPC_Detect_Mount_Reply, { standardIPCReply(event, Constants.IPC_Detect_Mount_Reply, {
Active: storageData[provider].Active, Active: storageData[provider].Active,
DriveLetters: driveLetters[provider], DriveLetters: driveLetters[provider],
Location: locations[provider], Location: locations[provider],
PID: storageData[provider].PID, PID: storageData[provider].PID,
Provider: provider, Provider: provider,
});
})
.catch(error => {
if (os.platform() === 'win32') {
grabDriveLetters({});
}
setImage({});
standardIPCReply(event, Constants.IPC_Detect_Mount_Reply, {
DriveLetters: driveLetters[provider],
Provider: provider,
}, error);
}); });
})
.catch(error => {
if (os.platform() === 'win32') {
grabDriveLetters({});
}
setImage({});
standardIPCReply(event, Constants.IPC_Detect_Mount_Reply, {
DriveLetters: driveLetters[provider],
Provider: provider,
}, error);
});
}); });
ipcMain.on(Constants.IPC_Mount_Drive, (event, data) => { ipcMain.on(Constants.IPC_Mount_Drive, (event, data) => {
@@ -241,15 +241,17 @@ const addListeners = (ipcMain, {setTrayImage, standardIPCReply}) => {
} }
}); });
ipcMain.on(Constants.IPC_Remove_Remote_Mount, (event, data) => { ipcMain.on(Constants.IPC_Remove_Mount, (event, data) => {
data = data.replace(':', '_'); if (data.Remote) {
const dataDirectory = path.resolve(path.join(helpers.getDataDirectory(), '..', 'remote', data)); data.Name = data.Name.replace(':', '_');
}
const dataDirectory = path.resolve(path.join(helpers.getDataDirectory(), '..', data.Remote ? 'remote' : 's3', data.Name));
try { try {
helpers.removeDirectoryRecursively(dataDirectory); helpers.removeDirectoryRecursively(dataDirectory);
standardIPCReply(event, Constants.IPC_Remove_Remote_Mount_Reply, {DataDirectory: dataDirectory}); standardIPCReply(event, Constants.IPC_Remove_Mount_Reply, {DataDirectory: dataDirectory});
} catch (e) { } catch (e) {
standardIPCReply(event, Constants.IPC_Remove_Remote_Mount_Reply, {DataDirectory: dataDirectory}, e); standardIPCReply(event, Constants.IPC_Remove_Mount_Reply, {DataDirectory: dataDirectory}, e);
} }
}); });
@@ -264,12 +266,12 @@ const addListeners = (ipcMain, {setTrayImage, standardIPCReply}) => {
expectedUnmount[data.Provider] = true; expectedUnmount[data.Provider] = true;
helpers helpers
.stopMountProcess(data.Version, data.Provider, data.Remote, data.S3) .stopMountProcess(data.Version, data.Provider, data.Remote, data.S3)
.then(result => { .then(result => {
console.log(result); console.log(result);
}) })
.catch(e => { .catch(e => {
console.log(e); console.log(e);
}); });
}); });
}; };