Files
atom/src/atom-paths.js
2019-05-31 18:33:56 +02:00

71 lines
1.9 KiB
JavaScript

const fs = require('fs-plus');
const path = require('path');
const hasWriteAccess = dir => {
const testFilePath = path.join(dir, 'write.test');
try {
fs.writeFileSync(testFilePath, new Date().toISOString(), { flag: 'w+' });
fs.unlinkSync(testFilePath);
return true;
} catch (err) {
return false;
}
};
const getAppDirectory = () => {
switch (process.platform) {
case 'darwin':
return process.execPath.substring(
0,
process.execPath.indexOf('.app') + 4
);
case 'linux':
case 'win32':
return path.join(process.execPath, '..');
}
};
module.exports = {
setAtomHome: homePath => {
// When a read-writeable .atom folder exists above app use that
const portableHomePath = path.join(getAppDirectory(), '..', '.atom');
if (fs.existsSync(portableHomePath)) {
if (hasWriteAccess(portableHomePath)) {
process.env.ATOM_HOME = portableHomePath;
} else {
// A path exists so it was intended to be used but we didn't have rights, so warn.
console.log(
`Insufficient permission to portable Atom home "${portableHomePath}".`
);
}
}
// Check ATOM_HOME environment variable next
if (process.env.ATOM_HOME !== undefined) {
return;
}
// Fall back to default .atom folder in users home folder
process.env.ATOM_HOME = path.join(homePath, '.atom');
},
setUserData: app => {
const electronUserDataPath = path.join(
process.env.ATOM_HOME,
'electronUserData'
);
if (fs.existsSync(electronUserDataPath)) {
if (hasWriteAccess(electronUserDataPath)) {
app.setPath('userData', electronUserDataPath);
} else {
// A path exists so it was intended to be used but we didn't have rights, so warn.
console.log(
`Insufficient permission to Electron user data "${electronUserDataPath}".`
);
}
}
},
getAppDirectory: getAppDirectory
};