touhou-tagger
Version:
从 THBWiki 自动填写东方 Project CD 曲目信息.
38 lines (37 loc) • 1.39 kB
JavaScript
import { closeSync, existsSync, ftruncateSync, mkdirSync, openSync, readFileSync, writeFileSync, writeSync, } from 'fs';
import { homedir } from 'os';
import { dirname, join } from 'path';
export const legacyFilePath = join(homedir(), '.thtag.json');
export const filePath = (() => {
switch (process.platform) {
case 'win32':
return join(process.env.APPDATA ?? join(homedir(), 'AppData', 'Roaming'), 'Touhou Tagger', 'config.json');
case 'darwin':
return join(homedir(), 'Library', 'Application Support', 'Touhou Tagger', 'config.json');
default:
return join(process.env.XDG_CONFIG_HOME ?? join(homedir(), '.config'), 'touhou-tagger', 'config.json');
}
})();
export const loadConfigFile = () => {
const configPath = existsSync(filePath) ? filePath : legacyFilePath;
if (!existsSync(configPath)) {
return null;
}
return JSON.parse(readFileSync(configPath, { encoding: 'utf8' }));
};
export const saveConfigFile = (config) => {
const content = JSON.stringify(config, undefined, 2);
mkdirSync(dirname(filePath), { recursive: true });
if (!existsSync(filePath)) {
writeFileSync(filePath, content);
return;
}
const fd = openSync(filePath, 'r+');
try {
ftruncateSync(fd, 0);
writeSync(fd, content);
}
finally {
closeSync(fd);
}
};