/
githubmirror
/
nativefier
Обзор
Документация
Войти
/
githubmirror
/
nativefier
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/helpers/iconShellHelpers.ts
100 строк
3 KB
Fabian Wolf
macOS: Fix crash when using --tray (fix #527), and invisible icon (fix #942, fix #668) (#1156)
29 апр 2021, 03:25
Не верифицирован
29 апр 2021, 03:25
cf8e51e
Код
Авторство
О чём код?
import * as path from 'path'; import { spawnSync } from 'child_process'; import { isWindows, isOSX, getTempDir } from './helpers'; import * as log from 'loglevel'; const SCRIPT_PATHS = { singleIco: path.join(__dirname, '../..', 'icon-scripts/singleIco'), convertToPng: path.join(__dirname, '../..', 'icon-scripts/convertToPng'), convertToIco: path.join(__dirname, '../..', 'icon-scripts/convertToIco'), convertToIcns: path.join(__dirname, '../..', 'icon-scripts/convertToIcns'), convertToTrayIcon: path.join( __dirname, '../..', 'icon-scripts/convertToTrayIcon', ), }; /** * Executes a shell script with the form "./pathToScript param1 param2" */ function iconShellHelper( shellScriptPath: string, icoSource: string, icoDestination: string, ): string { if (isWindows()) { throw new Error( 'Icon conversion only supported on macOS or Linux. ' + 'If building for Windows, download/create a .ico and pass it with --icon favicon.ico . ' + 'If building for macOS/Linux, do it from macOS/Linux', ); } const shellCommand = `"${shellScriptPath}" "${icoSource}" "${icoDestination}"`; log.debug( `Converting icon ${icoSource} to ${icoDestination}.`, `Calling shell command: ${shellCommand}`, ); const { stdout, stderr, status } = spawnSync( shellScriptPath, [icoSource, icoDestination], { timeout: 10000 }, ); if (status) { throw new Error( `Icon conversion failed with status code ${status}.\nstdout: ${stdout.toString()}\nstderr: ${stderr.toString()}`, ); } log.debug(`Conversion succeeded and produced icon at ${icoDestination}`); return icoDestination; } export function singleIco(icoSrc: string): string { return iconShellHelper( SCRIPT_PATHS.singleIco, icoSrc, `${getTempDir('iconconv')}/icon.ico`, ); } export function convertToPng(icoSrc: string): string { return iconShellHelper( SCRIPT_PATHS.convertToPng, icoSrc, `${getTempDir('iconconv')}/icon.png`, ); } export function convertToIco(icoSrc: string): string { return iconShellHelper( SCRIPT_PATHS.convertToIco, icoSrc, `${getTempDir('iconconv')}/icon.ico`, ); } export function convertToIcns(icoSrc: string): string { if (!isOSX()) { throw new Error('macOS is required to convert to a .icns icon'); } return iconShellHelper( SCRIPT_PATHS.convertToIcns, icoSrc, `${getTempDir('iconconv')}/icon.icns`, ); } export function convertToTrayIcon(icoSrc: string): string { if (!isOSX()) { throw new Error('macOS is required to convert from a .icns icon'); } return iconShellHelper( SCRIPT_PATHS.convertToTrayIcon, icoSrc, `${path.dirname(icoSrc)}/tray-icon.png`, ); }