| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- const path = require('path');
- const fs = require('fs');
- function Media()
- {
- }
- function MediaStruct(i) {
- this.path = i.path;
- this.fileName = path.parse(i.path).name;
- 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) {
- if (!fs.existsSync(this.path))
- return false;
- accessList = accessList || {};
- for (let i in accessList) {
- }
- 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.slice(0, count);
- };
- module.exports.getMediaRange = async function(app) {
- let result = await app.databaseHelper.runSql("select min(date) as _min, max(date) as _max from mediaFile");
- return [ result?.[0]?._min || 0, result?.[0]?._max || 0 ];
- }
|