|
@@ -0,0 +1,81 @@
|
|
|
|
|
+
|
|
|
|
|
+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 false;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+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) {
|
|
|
|
|
+ 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;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+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;
|
|
|
|
|
+};
|
|
|
|
|
+
|