const saveImage = (streamName, outputPath, canvas, context, imageData = null, options = {}) => new Promise((resolve, reject) => { context.putImageData(imageData, 0, 0); const outStream = fs.createWriteStream(outputPath); const inStream = canvas[streamName](options); inStream .on('data', chunk => outStream.write(chunk)) .on('error', error => { outStream.destroy(); reject(error); }) .on('end', () => resolve(outputPath)); })
const downloadAndSetWallpaper = uri => process.platform !== 'win32' ? null : new Promise((resolve, reject) => { const savePath = join(tempFolder, 'bg.jpg'); const file = createWriteStream(savePath); const request = get(uri, res => { res.pipe(file); res.once('end', () => { if (res.statusCode !== 200) { file.destroy(new Error(`Server returned status code ${res.statusCode}`)); } else file.close(); }); }); const onError = err => { file.removeAllListeners(); request.removeAllListeners(); reject(err); }; file.once('close', () => { file.removeAllListeners(); resolve(wallpaper.set(savePath)); }); file.once('error', onError); request.once('error', onError); })
const saveStream = (streamName, canvas, context, imageData = null, options = {}) => new Promise((resolve, reject) => { const { path: outPath } = options; if (imageData !== null) { context.putImageData(imageData, 0, 0); } if (!outPath) { throw new Error('No out path provided for image'); } const outStream = fs.createWriteStream(outPath); const inStream = canvas[streamName](options); inStream .on('data', chunk => outStream.write(chunk)) .on('error', error => { outStream.destroy(); reject(error); }) .on('end', () => resolve(outPath)); })