2016-01-28 02:00:28 +00:00
|
|
|
import path from 'path';
|
2016-01-29 06:09:36 +00:00
|
|
|
import helpers from './../helpers/helpers';
|
2016-03-10 15:36:00 +00:00
|
|
|
import iconShellHelpers from './../helpers/iconShellHelpers';
|
|
|
|
|
|
|
|
const {isOSX} = helpers;
|
2016-03-10 18:11:28 +00:00
|
|
|
const {convertToPng, convertToIcns} = iconShellHelpers;
|
2016-01-28 02:00:28 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @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;
|
|
|
|
}
|
|
|
|
|
2016-03-09 06:45:08 +00:00
|
|
|
if (options.platform === 'win32') {
|
|
|
|
if (!iconIsIco(options.icon)) {
|
2016-03-10 05:09:10 +00:00
|
|
|
console.warn('Icon should be an .ico to package for Windows');
|
2016-03-09 06:45:08 +00:00
|
|
|
}
|
|
|
|
|
2016-03-10 16:03:28 +00:00
|
|
|
returnCallback();
|
2016-03-09 06:45:08 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (options.platform === 'linux') {
|
2016-01-28 03:47:40 +00:00
|
|
|
if (iconIsPng(options.icon)) {
|
2016-01-28 02:00:28 +00:00
|
|
|
returnCallback();
|
2016-03-10 15:36:00 +00:00
|
|
|
return;
|
2016-01-28 02:00:28 +00:00
|
|
|
}
|
2016-03-10 15:36:00 +00:00
|
|
|
|
|
|
|
convertToPng(options.icon)
|
|
|
|
.then(outPath => {
|
|
|
|
options.icon = outPath;
|
|
|
|
returnCallback();
|
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
console.warn('Skipping icon conversion to .png', error);
|
|
|
|
returnCallback();
|
|
|
|
});
|
2016-01-28 03:47:40 +00:00
|
|
|
return;
|
2016-01-28 02:00:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (iconIsIcns(options.icon)) {
|
|
|
|
returnCallback();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-03-08 15:58:38 +00:00
|
|
|
if (!isOSX()) {
|
2016-03-10 15:36:00 +00:00
|
|
|
console.warn('Skipping icon conversion to .icns, conversion is only supported on OSX');
|
2016-03-08 15:58:38 +00:00
|
|
|
returnCallback();
|
|
|
|
return;
|
|
|
|
}
|
2016-01-28 02:00:28 +00:00
|
|
|
|
2016-03-10 15:36:00 +00:00
|
|
|
convertToIcns(options.icon)
|
|
|
|
.then(outPath => {
|
|
|
|
options.icon = outPath;
|
|
|
|
returnCallback();
|
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
console.warn('Skipping icon conversion to .icns', error);
|
|
|
|
returnCallback();
|
|
|
|
});
|
2016-01-28 02:00:28 +00:00
|
|
|
}
|
|
|
|
|
2016-03-09 06:45:08 +00:00
|
|
|
function iconIsIco(iconPath) {
|
|
|
|
return path.extname(iconPath) === '.ico';
|
|
|
|
}
|
|
|
|
|
2016-01-28 02:00:28 +00:00
|
|
|
function iconIsPng(iconPath) {
|
|
|
|
return path.extname(iconPath) === '.png';
|
|
|
|
}
|
|
|
|
|
|
|
|
function iconIsIcns(iconPath) {
|
|
|
|
return path.extname(iconPath) === '.icns';
|
|
|
|
}
|
|
|
|
|
|
|
|
export default iconBuild;
|