108 lines
2.6 KiB
JavaScript
108 lines
2.6 KiB
JavaScript
const {each, map, includes} = require('../util');
|
|
const server = require('../server');
|
|
const event = require('../core/event');
|
|
const allsettings = require('../core/settings');
|
|
|
|
const settings = Object.assign({
|
|
enabled: false,
|
|
img: ['img-bmp', 'img-gif', 'img-ico', 'img-jpg', 'img-png'],
|
|
mov: ['vid-avi', 'vid-flv', 'vid-mkv', 'vid-mov', 'vid-mp4', 'vid-mpg', 'vid-webm'],
|
|
doc: ['x-pdf', 'x-ps'],
|
|
delay: 1,
|
|
size: 100,
|
|
exif: false
|
|
}, allsettings.thumbnails);
|
|
const landscapeRatio = 4 / 3;
|
|
|
|
|
|
const queueItem = (queue, item) => {
|
|
let type = null;
|
|
|
|
if (includes(settings.img, item.type)) {
|
|
type = 'img';
|
|
} else if (includes(settings.mov, item.type)) {
|
|
type = 'mov';
|
|
} else if (includes(settings.doc, item.type)) {
|
|
type = 'doc';
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
if (item.thumbSquare) {
|
|
item.$view.find('.icon.square img').addCls('thumb').attr('src', item.thumbSquare);
|
|
} else {
|
|
queue.push({
|
|
type,
|
|
href: item.absHref,
|
|
ratio: 1,
|
|
callback: src => {
|
|
if (src && item.$view) {
|
|
item.thumbSquare = src;
|
|
item.$view.find('.icon.square img').addCls('thumb').attr('src', src);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
if (item.thumbRational) {
|
|
item.$view.find('.icon.landscape img').addCls('thumb').attr('src', item.thumbRational);
|
|
} else {
|
|
queue.push({
|
|
type,
|
|
href: item.absHref,
|
|
ratio: landscapeRatio,
|
|
callback: src => {
|
|
if (src && item.$view) {
|
|
item.thumbRational = src;
|
|
item.$view.find('.icon.landscape img').addCls('thumb').attr('src', src);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
const requestQueue = queue => {
|
|
const thumbs = map(queue, req => {
|
|
return {
|
|
type: req.type,
|
|
href: req.href,
|
|
width: Math.round(settings.size * req.ratio),
|
|
height: settings.size
|
|
};
|
|
});
|
|
|
|
server.request({
|
|
action: 'get',
|
|
thumbs
|
|
}).then(json => {
|
|
each(queue, (req, idx) => {
|
|
req.callback(json && json.thumbs ? json.thumbs[idx] : null);
|
|
});
|
|
});
|
|
};
|
|
|
|
const handleItems = items => {
|
|
const queue = [];
|
|
|
|
each(items, item => queueItem(queue, item));
|
|
|
|
if (queue.length) {
|
|
requestQueue(queue);
|
|
}
|
|
};
|
|
|
|
const onViewChanged = added => {
|
|
setTimeout(() => handleItems(added), settings.delay);
|
|
};
|
|
|
|
const init = () => {
|
|
if (!settings.enabled) {
|
|
return;
|
|
}
|
|
|
|
event.sub('view.changed', onViewChanged);
|
|
};
|
|
|
|
|
|
init();
|