filefive
Version:
SFTP/FTP/Amazon S3 client and dual-panel file manager for macOS and Linux
53 lines (52 loc) • 2.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSettings = getSettings;
exports.default = default_1;
const Local_1 = require("../Local");
const URI_1 = require("../utils/URI");
const Local_2 = require("../Local");
const ramda_1 = require("ramda");
const promises_1 = require("node:fs/promises");
const Password_1 = __importDefault(require("../Password"));
function getSettings(settings) {
return {
columns: settings.columns.filter((0, ramda_1.whereEq)({ visible: true })).map(({ name, width }) => ({ name, width })),
sort: settings.sort,
history: settings.history,
filter: settings.filter
};
}
async function default_1(path, settings) {
const content = (0, Local_2.stat)(path) ? await (0, Local_1.read)(path) : null;
if ((0, Local_2.stat)(path) && !content) {
throw new Error(`Cant read connection file: ${path} ${typeof content}`);
}
let config = content ? JSON.parse(content) : {};
if ('scheme' in settings) {
const id = (0, URI_1.connectionID)(settings.scheme, settings.user, settings.host, settings.port);
config = { ...config, ...(0, ramda_1.omit)(['password', 'savePassword'], settings) };
Password_1.default.delete(id, true);
if (settings.password && !settings.privatekey) {
Password_1.default.set(id, settings.password, true, settings.savePassword);
}
}
else {
if (settings.local) {
config.local = getSettings(settings.local);
}
if (settings.remote) {
config.remote = getSettings(settings.remote);
}
if (settings.path) {
config.path = settings.path;
}
config.sync = settings.sync;
}
if (!config) {
throw new Error(`Save invalid config into ${path}`);
}
await (0, promises_1.writeFile)(path, JSON.stringify(config));
}