| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- function Media()
- {
- }
- function MediaStruct(i) {
- this.path = i.path;
- this.md5sum = i.md5sum;
- this.date = i.date;
- this.meta = {};
- this.tags = [];
- }
- MediaStruct.prototype.pushMeta = function(key, value) {
- if (key && value && !this.meta[key])
- this.meta[key] = value;
- }
- MediaStruct.prototype.pushTag = function(tag) {
- if (tag && this.tags.indexOf(tag) === -1)
- this.tags.push(tag);
- }
- MediaStruct.prototype.HaveAccess = function(accessList) {
- // FIXME
- return true;
- }
- function reduceReqToMediaStruct(acc, i) {
- let obj = acc[i.md5sum] = acc[i.md5sum] || new MediaStruct(i);
- obj.pushMeta(i.metaKey, i.metaValue);
- obj.pushTag(i.mediaTag);
- return acc;
- }
- module.exports.fetchOne = async function(app, md5sum, accessList) {
- let result = ((await app.databaseHelper.runSql(`
- select mediaFile.path, mediaFile.md5sum, mediaFile.date,
- mediaMeta.key as metaKey, mediaMeta.value as metaValue,
- mediaTag.tag as mediaTag
- from mediaFile
- left join mediaMeta on mediaMeta.md5sum=mediaFile.md5sum
- left join mediaTag on mediaTag.md5sum=mediaFile.md5sum
- where mediaFile.md5sum=?`, md5sum)) || []).reduce(reduceReqToMediaStruct, {})[md5sum] || null;
- return result.HaveAccess(accessList) ? result : null;
- }
- module.exports.fetchMedias = async function(app, startTs, count) {
- let result = ((await app.databaseHelper.runSql(`
- select mediaFile.path, mediaFile.md5sum, mediaFile.date,
- mediaMeta.key as metaKey, mediaMeta.value as metaValue,
- mediaTag.tag as mediaTag
- from mediaFile
- left join mediaMeta on mediaMeta.md5sum=mediaFile.md5sum
- left join mediaTag on mediaTag.md5sum=mediaFile.md5sum
- where mediaFile.md5sum in
- (select md5sum from mediaFile `
- +(startTs ? "where date <? " : "")
- +"order by date desc limit ?)", startTs ? [startTs, count] : [count])) || [])
- .reduce(reduceReqToMediaStruct, {});
- result = Object.keys(result).map(i => result[i]).sort((a, b) => b.date-a.date);
- return result;
- };
- module.exports.fetchMediasWithAccess = async function(app, startTs, count, access) {
- let result = [];
- let lastTs = startTs;
- while (result.length < count) {
- let tmp = await module.exports.fetchMedias(app, lastTs, 25);
- if (!tmp.length)
- return result;
- lastTs = tmp[tmp.length-1].date;
- tmp = tmp.filter(i => i.HaveAccess(access));
- if (tmp.length)
- result = result.concat(tmp);
- }
- return result;
- };
|