render in queue
This commit is contained in:
parent
16a700fe56
commit
5eb5413d10
|
@ -4,3 +4,4 @@ export const MAX_SCALE = 40; // 52 in log2
|
|||
export const TILE_SIZE = 256;
|
||||
export const TILE_ZOOM_LEVEL = 2;
|
||||
export const BACKGROUND_CLR_RGB = [ 196, 196, 196 ];
|
||||
export const QUEUE_LIMIT = 3;
|
||||
|
|
|
@ -2,6 +2,7 @@ import fetch from 'node-fetch';
|
|||
|
||||
import canvases from './canvases.js';
|
||||
import renderCanvas from './renderCanvas.js';
|
||||
import { QUEUE_LIMIT } from './constants.js';
|
||||
|
||||
const linkRegExp = /(#[a-z]*,-?[0-9]*,-?[0-9]*(,-?[0-9]+)?)/gi;
|
||||
const linkRegExpFilter = (val, ind) => ((ind % 3) !== 2);
|
||||
|
@ -17,8 +18,50 @@ function compArray(arr1, arr2) {
|
|||
return true;
|
||||
}
|
||||
|
||||
export async function parseCanvasLinks(text) {
|
||||
/*
|
||||
* render canvas snapshots sequentially in a queue,
|
||||
* don't repeat most recent render
|
||||
*/
|
||||
const queue = [];
|
||||
let rendering = false;
|
||||
let lastTitle = '';
|
||||
|
||||
async function render() {
|
||||
if (!queue.length) {
|
||||
rendering = false;
|
||||
return;
|
||||
}
|
||||
rendering = true;
|
||||
const [args, resolve, reject] = queue.shift();
|
||||
try {
|
||||
const ret = await renderCanvas(...args);
|
||||
resolve(ret);
|
||||
setTimeout(render, 100);
|
||||
} catch (err) {
|
||||
reject(err)
|
||||
}
|
||||
}
|
||||
|
||||
function renderCanvasQueue(...args) {
|
||||
if (queue.length >= QUEUE_LIMIT || args[0] === lastTitle) {
|
||||
return null;
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
lastTitle = args[0];
|
||||
queue.push([args, resolve, reject]);
|
||||
if (!rendering) {
|
||||
setImmediate(render);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* check if canvas link is in message and return screenshot of the
|
||||
* current canvas if so
|
||||
* @param text message text
|
||||
* @return object with image, name, type, w, h, size
|
||||
*/
|
||||
export async function parseCanvasLinks(text) {
|
||||
if (!text || !canvases) {
|
||||
return null;
|
||||
}
|
||||
|
@ -50,9 +93,10 @@ export async function parseCanvasLinks(text) {
|
|||
) {
|
||||
return;
|
||||
}
|
||||
console.log(`Fetch canvas ${canvas.title} on ${x}/${y} with zoom ${z}`);
|
||||
|
||||
const imageData = await renderCanvas(canvas, x, y, z);
|
||||
|
||||
const title = `${canvas.title}_${x}_${y}_${z}`;
|
||||
console.log(`Fetch canvas ${title}`);
|
||||
const imageData = await renderCanvasQueue(title, canvas, x, y, z);
|
||||
|
||||
return imageData;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user