Actor tiles maintain aspect ratio.

This commit is contained in:
2020-04-27 02:37:30 +02:00
parent a223f933ce
commit f684923a8a
4 changed files with 46 additions and 17 deletions

View File

@@ -334,7 +334,7 @@ async function fetchSource(source, baseMedia) {
}
const { pathname } = new URL(source.src);
const mimetype = mime.getType(pathname);
const mimetype = res.headers['content-type'] || mime.getType(pathname);
const extension = mime.getExtension(mimetype);
const type = mimetype?.split('/')[0] || 'image';
@@ -342,7 +342,9 @@ async function fetchSource(source, baseMedia) {
hasher.setEncoding('hex');
const hashStream = new PassThrough();
const metaStream = type === 'image' ? sharp() : new PassThrough();
const metaStream = type === 'image'
? sharp()
: new PassThrough();
const tempFilePath = path.join(config.media.path, 'temp', `${baseMedia.id}.${extension}`);
const tempThumbPath = path.join(config.media.path, 'temp', `${baseMedia.id}_thumb.${extension}`);
@@ -353,6 +355,8 @@ async function fetchSource(source, baseMedia) {
hashStream.on('data', chunk => hasher.write(chunk));
if (type === 'image') {
// generate thumbnail
/*
metaStream
.clone()
.resize({
@@ -362,16 +366,16 @@ async function fetchSource(source, baseMedia) {
.jpeg({ quality: config.media.thumbnailQuality })
.pipe(tempThumbTarget)
.on('error', error => logger.error(error));
*/
}
// pipeline destroys streams
// const infoPromise = type === 'image' ? once(metaStream, 'info') : Promise.resolve([{}]);
const infoPromise = once(metaStream, 'info');
// pipeline destroys streams, so attach info event first
const infoPromise = type === 'image' ? once(metaStream, 'info') : Promise.resolve([{}]);
const metaPromise = type === 'image' ? metaStream.stats() : Promise.resolve();
await pipeline(
res.originalRes,
metaStream,
// metaStream,
hashStream,
tempFileTarget,
);
@@ -385,7 +389,7 @@ async function fetchSource(source, baseMedia) {
peakMemoryUsage = Math.max(getMemoryUsage(), peakMemoryUsage);
logger.silly(`Fetched media from ${source.src}`);
logger.silly(`Fetched media from ${source.src}, memory usage ${peakMemoryUsage.toFixed(2)} MB`);
return {
...source,
@@ -431,14 +435,14 @@ async function trySource(baseSource, existingMedias, baseMedia) {
const extractedSource = await extractSource(baseSource, existingMedias);
const existingSourceMedia = existingMedias.existingSourceMediaByUrl[extractedSource.src];
if (extractedSource.entry) {
if (!argv.force && extractedSource.entry) {
logger.silly(`Media page URL already in database, not extracting ${baseSource.url}`);
// media entry found during extraction, don't fetch
return extractedSource;
}
if (existingSourceMedia) {
if (!argv.force && existingSourceMedia) {
logger.silly(`Media source URL already in database, skipping ${baseSource.src}`);
// media entry found by source URL, don't fetch
@@ -529,7 +533,6 @@ async function storeMedias(baseMedias) {
const savedMedias = await Promise.map(
baseMedias,
async baseMedia => fetchMedia(baseMedia, { existingSourceMediaByUrl, existingExtractMediaByUrl }),
{ concurrency: 10 },
);
const [uniqueHashMedias, existingHashMedias] = await findHashDuplicates(savedMedias);