Files
Pake/script/app_config.mjs
2023-08-26 17:17:42 +08:00

174 lines
5.1 KiB
JavaScript
Executable File
Vendored

import pakeJson from '../src-tauri/pake.json' assert { type: 'json' };
import tauriJson from '../src-tauri/tauri.conf.json' assert { type: 'json' };
import windowsJson from '../src-tauri/tauri.windows.conf.json' assert { type: 'json' };
import macosJson from '../src-tauri/tauri.macos.conf.json' assert { type: 'json' };
import linuxJson from '../src-tauri/tauri.linux.conf.json' assert { type: 'json' };
import { writeFileSync, existsSync, copyFileSync } from 'fs';
import os from 'os';
const desktopEntry = `[Desktop Entry]
Encoding=UTF-8
Categories=Office
Exec=com-pake-${process.env.NAME}
Icon=com-pake-${process.env.NAME}
Name=com-pake-${process.env.NAME}
Name[zh_CN]=${process.env.NAME_ZH}
StartupNotify=true
Terminal=false
Type=Application
`;
const variables = {
url: process.env.URL,
name: process.env.NAME,
title: process.env.TITLE,
nameZh: process.env.NAME_ZH,
pakeConfigPath: 'src-tauri/pake.json',
tauriConfigPath: 'src-tauri/tauri.conf.json',
identifier: `com.pake.${process.env.NAME}`,
linux: {
configFilePath: 'src-tauri/tauri.linux.conf.json',
iconPath: `src-tauri/png/${process.env.NAME}_512.png`,
productName: `com-pake-${process.env.NAME}`,
defaultIconPath: 'src-tauri/png/icon_512.png',
icon: [`png/${process.env.NAME}_512.png`],
desktopEntry,
desktopEntryPath: `src-tauri/assets/com-pake-${process.env.NAME}.desktop`,
desktopEntryConfig: {
configKey: `/usr/share/applications/com-pake-${process.env.NAME}.desktop`,
configValue: `assets/com-pake-${process.env.NAME}.desktop`,
},
},
macos: {
configFilePath: 'src-tauri/tauri.macos.conf.json',
iconPath: `src-tauri/icons/${process.env.NAME}.icns`,
defaultPath: 'src-tauri/icons/icon.icns',
icon: [`icons/${process.env.NAME}.icns`],
},
windows: {
configFilePath: 'src-tauri/tauri.windows.conf.json',
iconPath: `src-tauri/png/${process.env.NAME}_32.ico`,
defaultPath: 'src-tauri/png/icon_32.ico',
hdIconPath: `src-tauri/png/${process.env.NAME}_256.ico`,
hdDefaultPath: 'src-tauri/png/icon_256.ico',
icon: [`png/${process.env.NAME}_256.ico`, `png/${process.env.NAME}_32.ico`],
resources: [`png/${process.env.NAME}_32.ico`]
},
};
validate();
updatePakeJson();
updateTauriJson();
let platformVariables;
let platformConfig;
switch (os.platform()) {
case 'linux':
platformVariables = variables.linux;
platformConfig = linuxJson;
updateDesktopEntry();
break;
case 'darwin':
platformVariables = variables.macos;
platformConfig = macosJson;
break;
case 'win32':
platformConfig = windowsJson;
platformVariables = variables.windows;
updateResources()
updateIconFile(platformVariables.hdIconPath, platformVariables.hdDefaultPath);
break;
}
updateIconFile(platformVariables.iconPath, platformVariables.defaultIconPath);
updatePlatformConfig(platformConfig, platformVariables);
save();
function validate() {
if ('URL' in process.env === false) {
console.log('URL is not set');
process.exit(1);
}
console.log(`URL: ${process.env.URL}`);
if ('NAME' in process.env === false) {
console.log('NAME is not set');
process.exit(1);
}
console.log(`NAME: ${process.env.NAME}`);
if ('TITLE' in process.env === false) {
console.log('TITLE is not set');
process.exit(1);
}
console.log(`TITLE: ${process.env.TITLE}`);
if ('NAME_ZH' in process.env === false) {
console.log('NAME_ZH is not set');
process.exit(1);
}
console.log(`NAME_ZH: ${process.env.NAME_ZH}`);
}
function updatePakeJson() {
pakeJson.windows[0].url = variables.url;
}
function updateTauriJson() {
const url = new URL(variables.url);
tauriJson.tauri.security.dangerousRemoteDomainIpcAccess[0].domain = url.hostname;
tauriJson.package.productName = variables.title;
writeFileSync('src-tauri/tauri.conf.json', JSON.stringify(tauriJson, null, 2));
}
function updateIconFile(iconPath, defaultIconPath) {
if (!existsSync(iconPath)) {
console.warn(`Icon for ${process.env.NAME} not found, will use default icon`);
copyFileSync(defaultIconPath, iconPath);
}
}
function updatePlatformConfig(platformConfig, platformVariables) {
platformConfig.tauri.bundle['icon'] = platformVariables.icon;
platformConfig.tauri.bundle['identifier'] = variables.identifier;
}
function save() {
writeFileSync(variables.pakeConfigPath, JSON.stringify(pakeJson, null, 2));
writeFileSync(variables.tauriConfigPath, JSON.stringify(tauriJson, null, 2));
writeFileSync(variables.linux.configFilePath, JSON.stringify(linuxJson, null, 2));
writeFileSync(platformVariables.configFilePath, JSON.stringify(platformConfig, null, 2));
writeFileSync(variables.macos.configFilePath, JSON.stringify(macosJson, null, 2));
writeFileSync(variables.windows.configFilePath, JSON.stringify(windowsJson, null, 2));
}
function updateDesktopEntry() {
linuxJson.tauri.bundle.deb.files = {};
linuxJson.tauri.bundle.deb.files[variables.linux.desktopEntryConfig.configKey] =
variables.linux.desktopEntryConfig.configValue;
writeFileSync(variables.linux.desktopEntryPath, variables.linux.desktopEntry);
}
function updateResources(){
windowsJson.tauri.bundle.resources = variables.windows.resources;
}