Update thumbnail requests.

This commit is contained in:
Lars Jung 2015-05-05 21:01:30 +02:00
parent 7c4f9d574c
commit 808b1bf657

View file

@ -9,25 +9,10 @@ modulejs.define('ext/thumbnails', ['_', 'core/event', 'core/server', 'core/setti
size: 100, size: 100,
exif: false exif: false
}, allsettings.thumbnails); }, allsettings.thumbnails);
var landscapeRatio = 4 / 3;
function requestThumb(type, href, ratio, callback) { function queueItem(queue, item) {
server.request({
action: 'get',
thumbs: [{
type: type,
href: href,
width: Math.round(settings.size * ratio),
height: settings.size
}]
}, function (json) {
callback(json && json.thumbs && json.thumbs[0] ? json.thumbs[0] : null);
});
}
function checkItem(item) {
var type = null; var type = null;
@ -37,31 +22,80 @@ modulejs.define('ext/thumbnails', ['_', 'core/event', 'core/server', 'core/setti
type = 'mov'; type = 'mov';
} else if (_.contains(settings.doc, item.type)) { } else if (_.contains(settings.doc, item.type)) {
type = 'doc'; type = 'doc';
} else {
return;
} }
if (type) { if (item.thumbSquare) {
if (item.thumbSquare) { item.$view.find('.icon.square img').addClass('thumb').attr('src', item.thumbSquare);
item.$view.find('.icon.square img').addClass('thumb').attr('src', item.thumbSquare); } else {
} else { queue.push({
requestThumb(type, item.absHref, 1, function (src) { type: type,
href: item.absHref,
ratio: 1,
callback: function (src) {
if (src && item.$view) { if (src && item.$view) {
item.thumbSquare = src; item.thumbSquare = src;
item.$view.find('.icon.square img').addClass('thumb').attr('src', src); item.$view.find('.icon.square img').addClass('thumb').attr('src', src);
} }
}); }
} });
if (item.thumbRational) { }
item.$view.find('.icon.landscape img').addClass('thumb').attr('src', item.thumbRational);
} else { if (item.thumbRational) {
requestThumb(type, item.absHref, 4 / 3, function (src) { item.$view.find('.icon.landscape img').addClass('thumb').attr('src', item.thumbRational);
} else {
queue.push({
type: type,
href: item.absHref,
ratio: landscapeRatio,
callback: function (src) {
if (src && item.$view) { if (src && item.$view) {
item.thumbRational = src; item.thumbRational = src;
item.$view.find('.icon.landscape img').addClass('thumb').attr('src', src); item.$view.find('.icon.landscape img').addClass('thumb').attr('src', src);
} }
}); }
} });
}
}
function requestQueue(queue) {
var thumbs = _.map(queue, function (req) {
return {
type: req.type,
href: req.href,
width: Math.round(settings.size * req.ratio),
height: settings.size
};
});
server.request({
action: 'get',
thumbs: thumbs
}, function (json) {
_.each(queue, function (req, idx) {
req.callback(json && json.thumbs ? json.thumbs[idx] : null);
});
});
}
function handleItems(items) {
var queue = [];
_.each(items, function (item) {
queueItem(queue, item);
});
if (queue.length) {
requestQueue(queue);
} }
} }
@ -69,13 +103,13 @@ modulejs.define('ext/thumbnails', ['_', 'core/event', 'core/server', 'core/setti
setTimeout(function () { setTimeout(function () {
_.each(item.content, checkItem); handleItems(item.content);
}, settings.delay); }, settings.delay);
} }
function onLocationRefreshed(item, added) { function onLocationRefreshed(item, added) {
_.each(added, checkItem); handleItems(added);
} }
function init() { function init() {