Nativefier/src/build/iconBuild.js

93 lines
2.2 KiB
JavaScript
Raw Normal View History

import path from 'path';
2016-01-29 07:09:36 +01:00
import helpers from './../helpers/helpers';
2016-03-10 08:50:45 +01:00
import convertToIcns from './../helpers/convertToIcns';
import singleIco from './../helpers/singleIco';
const isOSX = helpers.isOSX;
/**
* @callback augmentIconsCallback
* @param error
* @param options
*/
/**
* Will check and convert a `.png` to `.icns` if necessary and augment
* options.icon with the result
*
* @param options will need options.platform and options.icon
* @param {augmentIconsCallback} callback
*/
function iconBuild(options, callback) {
const returnCallback = () => {
callback(null, options);
};
if (!options.icon) {
returnCallback();
return;
}
if (options.platform === 'win32') {
if (!iconIsIco(options.icon)) {
2016-03-10 06:09:10 +01:00
console.warn('Icon should be an .ico to package for Windows');
returnCallback();
return;
}
singleIco(options.icon)
.then(outPath => {
options.icon = outPath;
returnCallback();
})
.catch(error => {
2016-03-10 06:09:10 +01:00
console.warn('Skipping process to make .ico icon contain only a single image:', error);
returnCallback();
});
return;
}
if (options.platform === 'linux') {
2016-01-28 04:47:40 +01:00
if (iconIsPng(options.icon)) {
returnCallback();
} else {
console.warn('Icon should be a .png to package for Linux');
returnCallback();
}
2016-01-28 04:47:40 +01:00
return;
}
if (iconIsIcns(options.icon)) {
returnCallback();
return;
}
if (!isOSX()) {
console.warn('Conversion of `.png` to `.icns` for OSX app is only supported on OSX');
returnCallback();
return;
}
2016-03-10 08:50:45 +01:00
convertToIcns(options.icon, (error, icnsPath) => {
options.icon = icnsPath;
if (error) {
console.warn('Skipping icon conversion from `.png` to `.icns`: ', error);
}
returnCallback();
});
}
function iconIsIco(iconPath) {
return path.extname(iconPath) === '.ico';
}
function iconIsPng(iconPath) {
return path.extname(iconPath) === '.png';
}
function iconIsIcns(iconPath) {
return path.extname(iconPath) === '.icns';
}
export default iconBuild;