This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.1 KiB
85 lines
2.1 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
'use strict'; |
|
|
|
const filterPlatformAssetScales = require('./filterPlatformAssetScales'); |
|
const fs = require('fs'); |
|
const getAssetDestPathAndroid = require('./getAssetDestPathAndroid'); |
|
const getAssetDestPathIOS = require('./getAssetDestPathIOS'); |
|
const log = require('../util/log').out('bundle'); |
|
const mkdirp = require('mkdirp'); |
|
const path = require('path'); |
|
|
|
function saveAssets( |
|
assets, |
|
platform, |
|
assetsDest |
|
) { |
|
if (!assetsDest) { |
|
console.warn('Assets destination folder is not set, skipping...'); |
|
return Promise.resolve(); |
|
} |
|
|
|
const getAssetDestPath = platform === 'android' |
|
? getAssetDestPathAndroid |
|
: getAssetDestPathIOS; |
|
|
|
const filesToCopy = Object.create(null); // Map src -> dest |
|
assets |
|
.forEach(asset => { |
|
const validScales = new Set(filterPlatformAssetScales(platform, asset.scales)); |
|
asset.scales.forEach((scale, idx) => { |
|
if (!validScales.has(scale)) { |
|
return; |
|
} |
|
const src = asset.files[idx]; |
|
const dest = path.join(assetsDest, getAssetDestPath(asset, scale)); |
|
filesToCopy[src] = dest; |
|
}); |
|
}); |
|
|
|
return copyAll(filesToCopy); |
|
} |
|
|
|
function copyAll(filesToCopy) { |
|
const queue = Object.keys(filesToCopy); |
|
if (queue.length === 0) { |
|
return Promise.resolve(); |
|
} |
|
|
|
log('Copying ' + queue.length + ' asset files'); |
|
return new Promise((resolve, reject) => { |
|
const copyNext = (error) => { |
|
if (error) { |
|
return reject(error); |
|
} |
|
if (queue.length === 0) { |
|
log('Done copying assets'); |
|
resolve(); |
|
} else { |
|
const src = queue.shift(); |
|
const dest = filesToCopy[src]; |
|
copy(src, dest, copyNext); |
|
} |
|
}; |
|
copyNext(); |
|
}); |
|
} |
|
|
|
function copy(src, dest, callback) { |
|
const destDir = path.dirname(dest); |
|
mkdirp(destDir, err => { |
|
if (err) { |
|
return callback(err); |
|
} |
|
fs.createReadStream(src) |
|
.pipe(fs.createWriteStream(dest)) |
|
.on('finish', callback); |
|
}); |
|
} |
|
|
|
module.exports = saveAssets;
|
|
|