#40: Support for remote Windows mounts - partial
This commit is contained in:
@@ -39,8 +39,8 @@
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject",
|
||||
"electron-dev": "cross-env ELECTRON_START_URL=http://localhost:3001 electron .",
|
||||
"electron-dev-unix": "cross-env ELECTRON_START_URL=http://localhost:3001 electron .",
|
||||
"electron-dev": "cross-env ELECTRON_START_URL=http://localhost:3000 electron .",
|
||||
"electron-dev-unix": "cross-env ELECTRON_START_URL=http://localhost:3000 electron .",
|
||||
"pack": "npm run build && electron-builder --dir --x64",
|
||||
"dist": "npm run build && electron-builder --x64",
|
||||
"dist-all": "npm run build && electron-builder --x64 --win --linux --mac",
|
||||
|
||||
@@ -20,7 +20,7 @@ const mapStateToProps = (state, ownProps) => {
|
||||
|
||||
const mapDispatchToProps = dispatch => {
|
||||
return {
|
||||
displayConfiguration: provider => dispatch(displayConfiguration(provider)),
|
||||
displayConfiguration: (provider, remote) => dispatch(displayConfiguration(provider, remote)),
|
||||
setProviderState: (provider, state) => dispatch(setProviderState(provider, state)),
|
||||
}
|
||||
};
|
||||
@@ -51,7 +51,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => {
|
||||
rowSpan={6}>
|
||||
<img alt=''
|
||||
height={'16px'}
|
||||
onClick={props.MState.AllowMount ? ()=>props.displayConfiguration(props.provider) : e=>{e.preventDefault();}}
|
||||
onClick={props.MState.AllowMount ? ()=>props.displayConfiguration(props.provider, props.remote) : e=>{e.preventDefault();}}
|
||||
src={configureImage}
|
||||
style={{padding: 0, border: 0, margin: 0, ...pointer}}
|
||||
width={'16px'}/>
|
||||
@@ -108,7 +108,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => {
|
||||
width='19px'/>;
|
||||
|
||||
const actionsDisplay = (
|
||||
<Button clicked={()=>props.clicked(props.provider, !props.MState.Mounted, props.PState.MountLocation)}
|
||||
<Button clicked={()=>props.clicked(props.provider, props.remote, !props.MState.Mounted, props.PState.MountLocation)}
|
||||
col={inputColumnSpan + 2}
|
||||
colSpan={21}
|
||||
disabled={!props.MState.AllowMount}
|
||||
@@ -146,7 +146,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => {
|
||||
<Text
|
||||
col={configButton ? 6 : 0}
|
||||
rowSpan={5}
|
||||
text={props.provider}
|
||||
text={props.remote ? props.provider.substr(6) : props.provider}
|
||||
type={'Heading1'}/>
|
||||
{inputControls}
|
||||
{actionsDisplay}
|
||||
|
||||
@@ -70,6 +70,7 @@ class Configuration extends IPCContainer {
|
||||
this.setRequestHandler(Constants.IPC_Set_Config_Values_Reply, this.onSetConfigValuesReply);
|
||||
this.sendRequest(Constants.IPC_Get_Config_Template, {
|
||||
Provider: this.props.DisplayConfiguration,
|
||||
Remote: this.props.DisplayRemoteConfiguration,
|
||||
Version: this.props.version,
|
||||
});
|
||||
}
|
||||
@@ -161,6 +162,7 @@ class Configuration extends IPCContainer {
|
||||
}, ()=> {
|
||||
this.sendRequest(Constants.IPC_Get_Config, {
|
||||
Provider: this.props.DisplayConfiguration,
|
||||
Remote: this.props.DisplayRemoteConfiguration,
|
||||
Version: this.props.version,
|
||||
});
|
||||
});
|
||||
@@ -203,6 +205,7 @@ class Configuration extends IPCContainer {
|
||||
this.sendRequest(Constants.IPC_Set_Config_Values, {
|
||||
Items: changedItems,
|
||||
Provider: this.props.DisplayConfiguration,
|
||||
Remote: this.props.DisplayRemoteConfiguration,
|
||||
Version: this.props.version,
|
||||
});
|
||||
});
|
||||
@@ -215,7 +218,7 @@ class Configuration extends IPCContainer {
|
||||
(item.label !== 'IsRemoteMount')) {
|
||||
const isRemoteMount = JSON.parse(itemList.find(s=>s.label === 'IsRemoteMount').value);
|
||||
const enableRemoteMount = JSON.parse(itemList.find(s=>s.label === 'EnableRemoteMount').value);
|
||||
return (item.label === 'RemoteHostNameOrIp') ?
|
||||
return (item.label === 'RemoteHostNameOrIp') || (item.label === 'RemotePort') || (item.label === 'RemoteToken') ?
|
||||
isRemoteMount :
|
||||
(item.label === 'EnableRemoteMount') ?
|
||||
!isRemoteMount :
|
||||
@@ -291,7 +294,10 @@ class Configuration extends IPCContainer {
|
||||
<b style={{cursor: 'pointer'}}
|
||||
onClick={this.checkSaveRequired}>X</b>
|
||||
</div>
|
||||
<h1 style={{width: '100%', textAlign: 'center'}}>{this.props.DisplayConfiguration + ' Configuration'}</h1>
|
||||
<h1 style={{width: '100%', textAlign: 'center'}}>{(
|
||||
this.props.DisplayRemoteConfiguration ?
|
||||
this.props.DisplayConfiguration.substr(6) :
|
||||
this.props.DisplayConfiguration) + ' Configuration'}</h1>
|
||||
<div style={{overflowY: 'auto', height: '90%'}}>
|
||||
{objectItems}
|
||||
{(configurationItems.length > 0) ? <h1>Settings</h1> : null}
|
||||
@@ -306,13 +312,14 @@ class Configuration extends IPCContainer {
|
||||
const mapStateToProps = state => {
|
||||
return {
|
||||
DisplayConfiguration: state.mounts.DisplayConfiguration,
|
||||
DisplayRemoteConfiguration: state.mounts.DisplayRemoteConfiguration,
|
||||
}
|
||||
};
|
||||
|
||||
const mapDispatchToProps = dispatch => {
|
||||
return {
|
||||
notifyError: (msg, critical, callback) => dispatch(notifyError(msg, critical, callback)),
|
||||
hideConfiguration: () => dispatch(displayConfiguration(null)),
|
||||
hideConfiguration: () => dispatch(displayConfiguration(null, false)),
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -72,12 +72,13 @@ class MountItems extends IPCContainer {
|
||||
if (!this.state.DisplayRetry) {
|
||||
this.props.setMountsBusy(true);
|
||||
this.sendRequest(Constants.IPC_Detect_Mounts, {
|
||||
RemoteMounts: this.props.RemoteMounts,
|
||||
Version: this.props.InstalledVersion,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
displayRetryMount = (provider, mountLocation, msg) => {
|
||||
displayRetryMount = (provider, remote, mountLocation, msg) => {
|
||||
if (!this.state.RetryItems[provider]) {
|
||||
let retryItems = {
|
||||
...this.state.RetryItems
|
||||
@@ -104,7 +105,7 @@ class MountItems extends IPCContainer {
|
||||
const retrySeconds = retryItems[provider].RetrySeconds - 1;
|
||||
if (retrySeconds === 0) {
|
||||
this.cancelRetryMount(provider, () => {
|
||||
this.handleMountUnMount(provider, true, mountLocation);
|
||||
this.handleMountUnMount(provider, remote,true, mountLocation);
|
||||
});
|
||||
} else {
|
||||
retryItems[provider].RetrySeconds = retrySeconds;
|
||||
@@ -139,16 +140,20 @@ class MountItems extends IPCContainer {
|
||||
this.props.setProviderState(provider, state);
|
||||
};
|
||||
|
||||
handleMountUnMount = (provider, mount, location) => {
|
||||
handleMountUnMount = (provider, remote, mount, location) => {
|
||||
console.log(provider, remote, mount, location);
|
||||
if (!location || (location.trim().length === 0)) {
|
||||
this.props.notifyError('Mount location is not set');
|
||||
} else {
|
||||
let allowAction = true;
|
||||
if (mount) {
|
||||
let result = this.sendSyncRequest(Constants.IPC_Check_Daemon_Version, {
|
||||
Provider: provider,
|
||||
Version: this.props.InstalledVersion
|
||||
}).data;
|
||||
let result = remote ?
|
||||
{Valid: true, Success: true} :
|
||||
this.sendSyncRequest(Constants.IPC_Check_Daemon_Version, {
|
||||
Provider: provider,
|
||||
Remote: remote,
|
||||
Version: this.props.InstalledVersion
|
||||
}).data;
|
||||
if (result.Success) {
|
||||
if (result.Valid) {
|
||||
if (this.props.Platform !== 'win32') {
|
||||
@@ -163,11 +168,11 @@ class MountItems extends IPCContainer {
|
||||
} else {
|
||||
allowAction = false;
|
||||
if ((result.Code === new Uint32Array([-1])[0]) || (result.Code === new Uint8Array([-1])[0])) {
|
||||
this.displayRetryMount(provider, location, 'Failed to connect to ' + provider + ' daemon');
|
||||
this.displayRetryMount(provider, remote, location, 'Failed to connect to ' + provider + ' daemon');
|
||||
} else if ((result.Code === new Uint32Array([-3])[0]) || (result.Code === new Uint8Array([-3])[0])) {
|
||||
this.displayRetryMount(provider, location, 'Incompatible ' + provider + ' daemon. Please upgrade ' + provider + '.');
|
||||
this.displayRetryMount(provider, remote, location, 'Incompatible ' + provider + ' daemon. Please upgrade ' + provider + '.');
|
||||
} else {
|
||||
this.displayRetryMount(provider, location, 'Version check failed: ' + result.Error);
|
||||
this.displayRetryMount(provider, remote, location, 'Version check failed: ' + result.Error);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -175,7 +180,7 @@ class MountItems extends IPCContainer {
|
||||
if (this.props.Platform === 'win32') {
|
||||
this.props.notifyError('Failed to launch repertory. Please install Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019.');
|
||||
} else {
|
||||
this.displayRetryMount(provider, location, 'Version check failed: ' + result.Error);
|
||||
this.displayRetryMount(provider, remote, location, 'Version check failed: ' + result.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -189,12 +194,14 @@ class MountItems extends IPCContainer {
|
||||
Location: location,
|
||||
NoConsoleSupported: this.props.noConsoleSupported,
|
||||
Provider: provider,
|
||||
Remote: remote,
|
||||
Version: this.props.InstalledVersion,
|
||||
});
|
||||
} else {
|
||||
this.sendRequest(Constants.IPC_Unmount_Drive, {
|
||||
Location: location,
|
||||
Provider: provider,
|
||||
Remote: remote,
|
||||
Version: this.props.InstalledVersion,
|
||||
});
|
||||
}
|
||||
@@ -202,11 +209,19 @@ class MountItems extends IPCContainer {
|
||||
}
|
||||
};
|
||||
|
||||
getProviderList = () => {
|
||||
return [
|
||||
...Constants.PROVIDER_LIST,
|
||||
...this.props.RemoteMounts,
|
||||
];
|
||||
};
|
||||
|
||||
onDetectMountsReply = (event, arg) => {
|
||||
if (!this.state.DisplayRetry && arg.data.Success) {
|
||||
let mountsBusy = false;
|
||||
let mountStates = {};
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
|
||||
for (const provider of this.getProviderList()) {
|
||||
const mountState = {
|
||||
AllowMount: true,
|
||||
DriveLetters: (arg.data.DriveLetters[provider]),
|
||||
@@ -238,11 +253,11 @@ class MountItems extends IPCContainer {
|
||||
this.props.ProviderState[provider].AutoMount &&
|
||||
!mountStates[provider].Mounted &&
|
||||
(location.length > 0)) {
|
||||
this.handleMountUnMount(provider, true, location);
|
||||
this.handleMountUnMount(provider, this.props.RemoteMounts.includes(provider),true, location);
|
||||
}
|
||||
};
|
||||
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of this.getProviderList()) {
|
||||
updateMountLocation(arg.data, provider);
|
||||
}
|
||||
|
||||
@@ -259,7 +274,7 @@ class MountItems extends IPCContainer {
|
||||
|
||||
onUnmountDriveReply = (event, arg) => {
|
||||
if (arg && arg.data && !arg.data.Expected && arg.data.Location && this.props.ProviderState[arg.data.Provider].AutoRestart) {
|
||||
this.displayRetryMount(arg.data.Provider, arg.data.Location);
|
||||
this.displayRetryMount(arg.data.Provider, arg.data.Remote, arg.data.Location);
|
||||
} else {
|
||||
this.detectMounts();
|
||||
}
|
||||
@@ -296,6 +311,12 @@ class MountItems extends IPCContainer {
|
||||
}
|
||||
|
||||
let items = [];
|
||||
if (this.props.remoteSupported) {
|
||||
items.push(<AddRemoteMount key={'mi_' + items.length}/>);
|
||||
items.push(<div key={'di_' + items.length}
|
||||
style={{paddingTop: '4px'}} />)
|
||||
}
|
||||
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
items.push((
|
||||
<MountItem allowConfig={this.props.allowConfig}
|
||||
@@ -319,13 +340,15 @@ class MountItems extends IPCContainer {
|
||||
changed={e => this.handleMountLocationChanged(provider, e.target.value)}
|
||||
clicked={this.handleMountUnMount}
|
||||
key={'mi_' + items.length}
|
||||
provider={provider}/>
|
||||
provider={provider}
|
||||
remote/>
|
||||
));
|
||||
items.push(<div key={'di_' + items.length}
|
||||
style={{paddingTop: '4px'}}/>)
|
||||
}
|
||||
|
||||
items.push(<AddRemoteMount key={'mia_' + items.length + 1}/>);
|
||||
if (this.props.RemoteMounts.length > 0) {
|
||||
items.splice(items.length - 1, 1);
|
||||
}
|
||||
} else {
|
||||
items.splice(items.length - 1, 1)
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ module.exports.createSignatureFiles = (signature, publicKey) => {
|
||||
};
|
||||
};
|
||||
|
||||
module.exports.detectRepertoryMounts = version => {
|
||||
module.exports.detectRepertoryMounts = (version, providerList) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const processOptions = {
|
||||
detached: true,
|
||||
@@ -155,7 +155,7 @@ module.exports.detectRepertoryMounts = version => {
|
||||
|
||||
process.on('exit', () => {
|
||||
let defaultData = {};
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of providerList) {
|
||||
defaultData[provider] = {
|
||||
Active: false,
|
||||
Location: '',
|
||||
@@ -320,7 +320,7 @@ module.exports.executeScript = script => {
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.executeMount = (version, provider, location, noConsoleSupported, exitCallback) => {
|
||||
module.exports.executeMount = (version, provider, remote, location, noConsoleSupported, exitCallback) => {
|
||||
return new Promise((resolve) => {
|
||||
const processOptions = {
|
||||
detached: false,
|
||||
@@ -330,7 +330,10 @@ module.exports.executeMount = (version, provider, location, noConsoleSupported,
|
||||
|
||||
const command = path.join(_getDataDirectory(), version, (os.platform() === 'win32') ? 'repertory.exe' : 'repertory');
|
||||
const args = [];
|
||||
if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
if (remote) {
|
||||
args.push('-rm');
|
||||
args.push(provider.substr(6));
|
||||
} else if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
args.push(Constants.PROVIDER_ARG[provider.toLowerCase()]);
|
||||
}
|
||||
|
||||
@@ -365,7 +368,7 @@ module.exports.executeMount = (version, provider, location, noConsoleSupported,
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.getConfig = (version, provider) => {
|
||||
module.exports.getConfig = (version, provider, remote) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const processOptions = {
|
||||
detached: true,
|
||||
@@ -376,7 +379,10 @@ module.exports.getConfig = (version, provider) => {
|
||||
const command = path.join(_getDataDirectory(), version, (os.platform() === 'win32') ? 'repertory.exe' : 'repertory');
|
||||
const args = [];
|
||||
args.push('-dc');
|
||||
if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
if (remote) {
|
||||
args.push('-rm');
|
||||
args.push(provider.substr(6));
|
||||
} else if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
args.push(Constants.PROVIDER_ARG[provider.toLowerCase()]);
|
||||
}
|
||||
|
||||
@@ -411,7 +417,7 @@ module.exports.getConfig = (version, provider) => {
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.getConfigTemplate = (version, provider) => {
|
||||
module.exports.getConfigTemplate = (version, provider, remote) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const processOptions = {
|
||||
detached: true,
|
||||
@@ -422,7 +428,10 @@ module.exports.getConfigTemplate = (version, provider) => {
|
||||
const command = path.join(_getDataDirectory(), version, (os.platform() === 'win32') ? 'repertory.exe' : 'repertory');
|
||||
const args = [];
|
||||
args.push('-gt');
|
||||
if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
if (remote) {
|
||||
args.push('-rm');
|
||||
args.push(provider.substr(6));
|
||||
} else if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
args.push(Constants.PROVIDER_ARG[provider.toLowerCase()]);
|
||||
}
|
||||
|
||||
@@ -625,7 +634,7 @@ module.exports.removeDirectoryRecursively = (p) => {
|
||||
|
||||
module.exports.resolvePath = _resolvePath;
|
||||
|
||||
module.exports.setConfigValue = (name, value, provider, version) => {
|
||||
module.exports.setConfigValue = (name, value, provider, remote, version) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const processOptions = {
|
||||
detached: true,
|
||||
@@ -638,7 +647,10 @@ module.exports.setConfigValue = (name, value, provider, version) => {
|
||||
args.push('-set');
|
||||
args.push(name);
|
||||
args.push(value);
|
||||
if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
if (remote) {
|
||||
args.push('-rm');
|
||||
args.push(provider.substr(6));
|
||||
} else if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
args.push(Constants.PROVIDER_ARG[provider.toLowerCase()]);
|
||||
}
|
||||
|
||||
@@ -656,7 +668,7 @@ module.exports.setConfigValue = (name, value, provider, version) => {
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.stopMountProcess = (version, provider) => {
|
||||
module.exports.stopMountProcess = (version, provider, remote) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const processOptions = {
|
||||
detached: os.platform() === 'darwin',
|
||||
@@ -666,7 +678,10 @@ module.exports.stopMountProcess = (version, provider) => {
|
||||
|
||||
const command = path.join(_getDataDirectory(), version, (os.platform() === 'win32') ? 'repertory.exe' : 'repertory');
|
||||
const args = ['-unmount'];
|
||||
if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
if (remote) {
|
||||
args.push('-rm');
|
||||
args.push(provider.substr(6));
|
||||
} else if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
args.push(Constants.PROVIDER_ARG[provider.toLowerCase()]);
|
||||
}
|
||||
|
||||
@@ -688,7 +703,7 @@ module.exports.stopMountProcess = (version, provider) => {
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.stopMountProcessSync = (version, provider) => {
|
||||
module.exports.stopMountProcessSync = (version, provider, remote) => {
|
||||
const processOptions = {
|
||||
detached: true,
|
||||
shell: os.platform() !== 'darwin',
|
||||
@@ -697,7 +712,10 @@ module.exports.stopMountProcessSync = (version, provider) => {
|
||||
|
||||
const command = path.join(_getDataDirectory(), version, (os.platform() === 'win32') ? 'repertory.exe' : 'repertory');
|
||||
const args = ['-unmount'];
|
||||
if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
if (remote) {
|
||||
args.push('-rm');
|
||||
args.push(provider.substr(6));
|
||||
} else if (Constants.PROVIDER_ARG[provider.toLowerCase()].length > 0) {
|
||||
args.push(Constants.PROVIDER_ARG[provider.toLowerCase()]);
|
||||
}
|
||||
|
||||
|
||||
24
src/index.js
24
src/index.js
@@ -16,19 +16,22 @@ const ipcRenderer = getIPCRenderer();
|
||||
let store;
|
||||
|
||||
if (ipcRenderer) {
|
||||
ipcRenderer.on(Constants.IPC_Get_Platform_Reply, (event, arg) => {
|
||||
if (arg.Platform === 'linux') {
|
||||
ipcRenderer.on(Constants.IPC_Get_Platform_Reply, (event, platformInfo) => {
|
||||
if (platformInfo.Platform === 'linux') {
|
||||
const root = document.documentElement;
|
||||
root.style.setProperty('--default_font_size', '15.3px');
|
||||
}
|
||||
|
||||
store = createAppStore(arg.Platform, arg.AppPlatform, packageJson.version);
|
||||
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] || store.getState().mounts.ProviderState[provider];
|
||||
ipcRenderer.on(Constants.IPC_Get_State_Reply, (event, result) => {
|
||||
if (result.data) {
|
||||
store = createAppStore(platformInfo, packageJson.version, result.data);
|
||||
store.dispatch(setActiveRelease(result.data.Release, result.data.Version));
|
||||
const providerList = [
|
||||
...Constants.PROVIDER_LIST,
|
||||
...store.getState().mounts.RemoteMounts,
|
||||
];
|
||||
for (const provider of providerList) {
|
||||
let state = result.data[provider] || store.getState().mounts.ProviderState[provider];
|
||||
if (state.AutoMount === undefined) {
|
||||
state['AutoMount'] = false;
|
||||
}
|
||||
@@ -37,7 +40,10 @@ if (ipcRenderer) {
|
||||
}
|
||||
store.dispatch(setProviderState(provider, state));
|
||||
}
|
||||
} else {
|
||||
store = createAppStore(platformInfo, packageJson.version, {});
|
||||
}
|
||||
|
||||
ReactDOM.render((
|
||||
<Provider store={store}>
|
||||
<App/>
|
||||
|
||||
@@ -68,10 +68,15 @@ export const saveState = () => {
|
||||
if (state.common.AppReady) {
|
||||
let currentState = {
|
||||
Release: state.relver.Release,
|
||||
RemoteMounts: state.mounts.RemoteMounts,
|
||||
Version: state.relver.Version,
|
||||
};
|
||||
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
const providerList = [
|
||||
...Constants.PROVIDER_LIST,
|
||||
...state.mounts.RemoteMounts,
|
||||
];
|
||||
for (const provider of providerList) {
|
||||
currentState[provider] = state.mounts.ProviderState[provider];
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,16 @@ import * as Constants from '../../constants';
|
||||
import {createAction} from 'redux-starter-kit';
|
||||
import {getIPCRenderer} from '../../utils';
|
||||
|
||||
export const displayConfiguration = createAction('mounts/displayConfiguration');
|
||||
export const DISPLAY_CONFIGURATION = 'mounts/displayConfiguration';
|
||||
export const displayConfiguration = (provider, remote) => {
|
||||
return {
|
||||
type: DISPLAY_CONFIGURATION,
|
||||
payload: {
|
||||
provider,
|
||||
remote,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export const RESET_MOUNTS_STATE = 'mounts/resetMountsState';
|
||||
export const resetMountsState = () => {
|
||||
|
||||
@@ -7,13 +7,13 @@ import {
|
||||
SET_DISPLAY_SELECT_APPPLATFORM
|
||||
} from '../actions/common_actions';
|
||||
|
||||
export const createCommonReducer = (platform, appPlatform, version) => {
|
||||
export const createCommonReducer = (platformInfo, version) => {
|
||||
return createReducer({
|
||||
AllowMount: false,
|
||||
AppPlatform: appPlatform,
|
||||
AppPlatform: platformInfo.AppPlatform,
|
||||
AppReady: false,
|
||||
DisplaySelectAppPlatform: false,
|
||||
Platform: platform,
|
||||
Platform: platformInfo.Platform,
|
||||
RebootRequired: false,
|
||||
Version: version,
|
||||
}, {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import * as Constants from '../../constants';
|
||||
import {createReducer} from 'redux-starter-kit';
|
||||
import {
|
||||
displayConfiguration,
|
||||
DISPLAY_CONFIGURATION,
|
||||
RESET_MOUNTS_STATE,
|
||||
SET_ALLOW_MOUNT,
|
||||
setAutoMountProcessed,
|
||||
@@ -11,115 +11,123 @@ import {
|
||||
SET_PROVIDER_STATE
|
||||
} from '../actions/mount_actions';
|
||||
|
||||
const providerState = Constants.PROVIDER_LIST.map(provider=> {
|
||||
return {
|
||||
[provider]: {
|
||||
AutoMount: false,
|
||||
AutoRestart: false,
|
||||
MountLocation: '',
|
||||
export const createMountReducer = state => {
|
||||
let providerList = [
|
||||
...Constants.PROVIDER_LIST,
|
||||
...(state.RemoteMounts||['Remotelocalhost:20000']),
|
||||
];
|
||||
const providerState = providerList.map(provider=> {
|
||||
return {
|
||||
[provider]: {
|
||||
AutoMount: false,
|
||||
AutoRestart: false,
|
||||
MountLocation: '',
|
||||
}
|
||||
}
|
||||
}
|
||||
}).reduce((map, obj) => {
|
||||
return {
|
||||
...map,
|
||||
...obj
|
||||
}
|
||||
});
|
||||
}).reduce((map, obj) => {
|
||||
return {
|
||||
...map,
|
||||
...obj
|
||||
}
|
||||
});
|
||||
|
||||
const mountState = Constants.PROVIDER_LIST.map(provider => {
|
||||
return {
|
||||
[provider]: {
|
||||
AllowMount: false,
|
||||
DriveLetters: [],
|
||||
Mounted: false,
|
||||
const mountState = providerList.map(provider => {
|
||||
return {
|
||||
[provider]: {
|
||||
AllowMount: false,
|
||||
DriveLetters: [],
|
||||
Mounted: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
}).reduce((map, obj) => {
|
||||
return {
|
||||
...map,
|
||||
...obj
|
||||
}
|
||||
});
|
||||
}).reduce((map, obj) => {
|
||||
return {
|
||||
...map,
|
||||
...obj
|
||||
}
|
||||
});
|
||||
|
||||
export const mountReducer = createReducer({
|
||||
AutoMountProcessed: false,
|
||||
DisplayConfiguration: null,
|
||||
MountsBusy: false,
|
||||
MountState: mountState,
|
||||
ProviderState: providerState,
|
||||
RemoteMounts: [],
|
||||
}, {
|
||||
[displayConfiguration]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
DisplayConfiguration: action.payload
|
||||
};
|
||||
},
|
||||
[RESET_MOUNTS_STATE]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
MountsBusy: false,
|
||||
MountState: mountState,
|
||||
return createReducer({
|
||||
AutoMountProcessed: false,
|
||||
DisplayConfiguration: null,
|
||||
DisplayRemoteConfiguration: false,
|
||||
MountsBusy: false,
|
||||
MountState: mountState,
|
||||
ProviderState: providerState,
|
||||
RemoteMounts: state.RemoteMounts ? state.RemoteMounts : ['Remotelocalhost:20000'],
|
||||
}, {
|
||||
[DISPLAY_CONFIGURATION]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
DisplayConfiguration: action.payload.provider,
|
||||
DisplayRemoteConfiguration: action.payload.remote,
|
||||
};
|
||||
},
|
||||
[RESET_MOUNTS_STATE]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
MountsBusy: false,
|
||||
MountState: mountState,
|
||||
}
|
||||
},
|
||||
[setAutoMountProcessed]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
AutoMountProcessed: action.payload
|
||||
};
|
||||
},
|
||||
[SET_ALLOW_MOUNT]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
MountState: {
|
||||
...state.MountState,
|
||||
[action.payload.provider]: {
|
||||
...state.MountState[action.payload.provider],
|
||||
AllowMount: action.payload.allow,
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
[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
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
[setAutoMountProcessed]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
AutoMountProcessed: action.payload
|
||||
};
|
||||
},
|
||||
[SET_ALLOW_MOUNT]: (state, action) => {
|
||||
return {
|
||||
...state,
|
||||
MountState: {
|
||||
...state.MountState,
|
||||
[action.payload.provider]: {
|
||||
...state.MountState[action.payload.provider],
|
||||
AllowMount: action.payload.allow,
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
[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
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
@@ -3,16 +3,16 @@ import {createCommonReducer} from '../reducers/common_reducer';
|
||||
import {downloadReducer} from '../reducers/download_reducer';
|
||||
import {errorReducer} from '../reducers/error_reducer';
|
||||
import {installReducer} from '../reducers/install_reducer';
|
||||
import {mountReducer} from '../reducers/mount_reducer';
|
||||
import {createMountReducer} from '../reducers/mount_reducer';
|
||||
import {releaseVersionReducer} from '../reducers/release_version_reducer';
|
||||
|
||||
export default function createAppStore(platform, appPlatform, version) {
|
||||
export default function createAppStore(platformInfo, version, state) {
|
||||
const reducer = {
|
||||
common: createCommonReducer(platform, appPlatform, version),
|
||||
common: createCommonReducer(platformInfo, version),
|
||||
download: downloadReducer,
|
||||
error: errorReducer,
|
||||
install: installReducer,
|
||||
mounts: mountReducer,
|
||||
mounts: createMountReducer(state),
|
||||
relver: releaseVersionReducer,
|
||||
};
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ const helpers = require('../../helpers');
|
||||
const addListeners = (ipcMain, standardIPCReply) => {
|
||||
ipcMain.on(Constants.IPC_Get_Config, (event, data) => {
|
||||
helpers
|
||||
.getConfig(data.Version, data.Provider)
|
||||
.getConfig(data.Version, data.Provider, data.Remote)
|
||||
.then((data) => {
|
||||
if (data.Code === 0) {
|
||||
standardIPCReply(event, Constants.IPC_Get_Config_Reply, {
|
||||
@@ -21,7 +21,7 @@ const addListeners = (ipcMain, standardIPCReply) => {
|
||||
|
||||
ipcMain.on(Constants.IPC_Get_Config_Template, (event, data) => {
|
||||
helpers
|
||||
.getConfigTemplate(data.Version, data.Provider)
|
||||
.getConfigTemplate(data.Version, data.Provider, data.Remote)
|
||||
.then((data) => {
|
||||
standardIPCReply(event, Constants.IPC_Get_Config_Template_Reply, {
|
||||
Template: data,
|
||||
@@ -36,7 +36,7 @@ const addListeners = (ipcMain, standardIPCReply) => {
|
||||
const setConfigValue = (i) => {
|
||||
if (i < data.Items.length) {
|
||||
helpers
|
||||
.setConfigValue(data.Items[i].Name, data.Items[i].Value, data.Provider, data.Version)
|
||||
.setConfigValue(data.Items[i].Name, data.Items[i].Value, data.Provider, data.Remote, data.Version)
|
||||
.then(() => {
|
||||
setConfigValue(++i);
|
||||
})
|
||||
|
||||
@@ -16,10 +16,10 @@ const clearManualMountDetection = provider => {
|
||||
}
|
||||
};
|
||||
|
||||
const monitorMount = (sender, provider, version, pid, location) => {
|
||||
const monitorMount = (sender, provider, providerList, version, pid, location) => {
|
||||
manualMountDetection[provider] = setInterval(() => {
|
||||
helpers
|
||||
.detectRepertoryMounts(version)
|
||||
.detectRepertoryMounts(version, providerList)
|
||||
.then(result => {
|
||||
if (result[provider].PID !== pid) {
|
||||
if (result[provider].PID === -1) {
|
||||
@@ -46,7 +46,7 @@ const monitorMount = (sender, provider, version, pid, location) => {
|
||||
|
||||
const unmountAllDrives = () => {
|
||||
// Reset mount states
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of Object.keys(manualMountDetection)) {
|
||||
clearManualMountDetection(provider);
|
||||
expectedUnmount[provider] = true;
|
||||
}
|
||||
@@ -54,7 +54,7 @@ const unmountAllDrives = () => {
|
||||
// Unmount all items
|
||||
for (const i in mountedLocations) {
|
||||
const data = mountedData[mountedLocations[i]];
|
||||
helpers.stopMountProcessSync(data.Version, data.Provider);
|
||||
helpers.stopMountProcessSync(data.Version, data.Provider, data.Remote);
|
||||
}
|
||||
|
||||
mountedLocations = [];
|
||||
@@ -87,7 +87,11 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
|
||||
ipcMain.on(Constants.IPC_Detect_Mounts, (event, data) => {
|
||||
let driveLetters = {};
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
const providerList = [
|
||||
...Constants.PROVIDER_LIST,
|
||||
data.RemoteMounts,
|
||||
];
|
||||
for (const provider of providerList) {
|
||||
driveLetters[provider] = [];
|
||||
}
|
||||
|
||||
@@ -96,7 +100,7 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
const drive = (String.fromCharCode(i) + ':').toUpperCase();
|
||||
let driveInUse;
|
||||
if (Object.keys(locations).length > 0) {
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of providerList) {
|
||||
driveInUse = locations[provider].startsWith(drive);
|
||||
if (driveInUse)
|
||||
break;
|
||||
@@ -105,7 +109,7 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
if (!driveInUse) {
|
||||
try {
|
||||
if (!fs.existsSync(drive)) {
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of providerList) {
|
||||
driveLetters[provider].push(drive);
|
||||
}
|
||||
}
|
||||
@@ -115,7 +119,7 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
}
|
||||
|
||||
if (Object.keys(locations).length > 0) {
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of providerList) {
|
||||
if (locations[provider].length > 0) {
|
||||
if (!driveLetters[provider].find((driveLetter) => {
|
||||
return driveLetter === locations[provider];
|
||||
@@ -130,7 +134,7 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
const setImage = (locations) => {
|
||||
let driveInUse;
|
||||
if (Object.keys(locations).length > 0) {
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of providerList) {
|
||||
driveInUse = locations[provider].length > 0;
|
||||
if (driveInUse)
|
||||
break;
|
||||
@@ -141,11 +145,11 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
};
|
||||
|
||||
helpers
|
||||
.detectRepertoryMounts(data.Version)
|
||||
.detectRepertoryMounts(data.Version, providerList)
|
||||
.then((results) => {
|
||||
let storageData = {};
|
||||
let locations = {};
|
||||
for (const provider of Constants.PROVIDER_LIST) {
|
||||
for (const provider of providerList) {
|
||||
storageData[provider] = results[provider] ? results[provider] : {
|
||||
Active: false,
|
||||
Location: '',
|
||||
@@ -156,7 +160,7 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
if (storageData[provider].PID !== -1) {
|
||||
expectedUnmount[provider] = false;
|
||||
if (firstMountCheck) {
|
||||
monitorMount(event.sender, provider, data.Version, storageData[provider].PID, storageData[provider].Location);
|
||||
monitorMount(event.sender, provider, providerList, data.Version, storageData[provider].PID, storageData[provider].Location);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -193,8 +197,9 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
} else {
|
||||
mountedLocations.push(data.Location);
|
||||
mountedData[data.Location] = {
|
||||
Version: data.Version,
|
||||
Provider: data.Provider,
|
||||
Remote: data.Remote,
|
||||
Version: data.Version,
|
||||
};
|
||||
const errorHandler = (pid, error) => {
|
||||
if (mountedLocations.indexOf(data.Location) !== -1) {
|
||||
@@ -206,15 +211,17 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
Expected: expectedUnmount[data.Provider],
|
||||
Location: data.Location,
|
||||
Provider: data.Provider,
|
||||
Remote: data.Remote,
|
||||
}, error || Error(data.Provider + ' Unmounted'));
|
||||
};
|
||||
helpers
|
||||
.executeMount(data.Version, data.Provider, data.Location, data.NoConsoleSupported, (error, pid) => {
|
||||
.executeMount(data.Version, data.Provider, data.Remote, data.Location, data.NoConsoleSupported, (error, pid) => {
|
||||
errorHandler(pid, error);
|
||||
})
|
||||
.then(() => {
|
||||
standardIPCReply(event, Constants.IPC_Mount_Drive_Reply, {
|
||||
Provider: data.Provider,
|
||||
Remote: data.Remote,
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
@@ -233,7 +240,7 @@ const addListeners = (ipcMain, setTrayImage, standardIPCReply) => {
|
||||
|
||||
expectedUnmount[data.Provider] = true;
|
||||
helpers
|
||||
.stopMountProcess(data.Version, data.Provider)
|
||||
.stopMountProcess(data.Version, data.Provider, data.Remote)
|
||||
.then(result => {
|
||||
console.log(result);
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user