Procházet zdrojové kódy

Fixes #22 Media version

isundil před 1 rokem
rodič
revize
524dad9269
3 změnil soubory, kde provedl 23 přidání a 3 odebrání
  1. 10 1
      model/mediaItem.js
  2. 10 2
      model/mediaService.js
  3. 3 0
      router/api.js

+ 10 - 1
model/mediaItem.js

@@ -7,6 +7,8 @@ function MediaFileModel() {
     this.md5sum = "";
     this.fixedSum = "";
     this.date = null;
+    this.version = 0;
+    this.updateVersion();
 }
 
 MediaFileModel.prototype = Object.create(DatabaseModel.prototype);
@@ -21,6 +23,7 @@ MediaFileModel.prototype.createOrUpdateBase = async function(dbHelper) {
         md5sum varchar(32) NOT NULL,
         fixedSum varchar(32) NOT NULL,
         date DateTime NOT NULL,
+        version integer NOT NULL,
         PRIMARY KEY (path, md5sum))`);
 }
 
@@ -29,7 +32,8 @@ MediaFileModel.prototype.describe = function() {
         "path": this.path,
         "md5sum": this.md5sum,
         "fixedSum": this.fixedSum,
-        "date": this.date?.getTime()
+        "date": this.date?.getTime(),
+        "version": this.version
     };
 }
 
@@ -40,6 +44,11 @@ MediaFileModel.prototype.fromDb = function(dbObj) {
     this.md5sum = dbObj["md5sum"];
     this.fixedSum = dbObj["fixedSum"];
     this.date = new Date(dbObj["date"]);
+    this.version = dbObj["fixedSum"];
+}
+
+MediaFileModel.prototype.updateVersion = function() {
+    this.version = Date.now();
 }
 
 module.exports.MediaFileModel = MediaFileModel;

+ 10 - 2
model/mediaService.js

@@ -1,6 +1,7 @@
 
 const path = require('path');
 const fs = require('fs');
+const MediaFileModel = require('./mediaItem.js').MediaFileModel;
 const { AccessModel, ACCESS_TYPE, ACCESS_TO, ACCESS_GRANT } = require('./access.js');
 
 function Media()
@@ -17,6 +18,7 @@ function MediaStruct(i) {
     this.tags = [];
     this.fixedTags = [];
     this.accessType = -1;
+    this.version = i.version;
 }
 
 MediaStruct.prototype.pushMeta = function(key, value) {
@@ -133,7 +135,8 @@ module.exports.fetchMultiple = async function(app, md5sums, accessList) {
     let result = ((await app.databaseHelper.runSql(`
         select mediaFile.path, mediaFile.md5sum, mediaFile.date, mediaFile.fixedSum,
         mediaMeta.key as metaKey, mediaMeta.value as metaValue,
-        mediaTag.tag as mediaTag, (mediaTag.fromMeta or mediaTag.fromAutotag) as isFixedTag
+        mediaTag.tag as mediaTag, (mediaTag.fromMeta or mediaTag.fromAutotag) as isFixedTag,
+        mediaFile.version
         from mediaFile
         left join mediaMeta on mediaMeta.md5sum=mediaFile.fixedSum
         left join mediaTag on mediaTag.md5sum=mediaFile.fixedSum
@@ -211,7 +214,8 @@ module.exports.fetchMedias = async function(app, startTs, count, access) {
     let result = ((await app.databaseHelper.runSql(`
         select mediaFile.path, mediaFile.md5sum, mediaFile.date, mediaFile.fixedSum,
         mediaMeta.key as metaKey, mediaMeta.value as metaValue,
-        mediaTag.tag as mediaTag, (mediaTag.fromMeta or mediaTag.fromAutotag) as isFixedTag
+        mediaTag.tag as mediaTag, (mediaTag.fromMeta or mediaTag.fromAutotag) as isFixedTag,
+        mediaFile.version
         from mediaFile
         left join mediaMeta on mediaMeta.md5sum=mediaFile.fixedSum
         left join mediaTag on mediaTag.md5sum=mediaFile.fixedSum
@@ -239,6 +243,10 @@ module.exports.fetchMediasWithAccess = async function(app, startTs, count, acces
     return result.slice(0, count);
 };
 
+module.exports.updateVersionInDb = function(app, fixedSum) {
+    return app.databaseHelper.rawUpdate(MediaFileModel.prototype, { fixedSum: fixedSum }, { version: Date.now() });
+}
+
 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 ];

+ 3 - 0
router/api.js

@@ -57,6 +57,7 @@ module.exports = { register: app => {
 
         let data = await MediaService.fetchMultiple(app, checksum, req.sessionObj?.accessList);
         data = Object.keys(data).map(x => data[x]).filter(x => x.ACCESS_TYPE != ACCESS_GRANT.write);
+        await Promise.all(data.map(x => x.updateVersionInDb(app.databaseHelper)));
 
         await app.databaseHelper.remove(MediaFileTagModel, { md5sum: data.map(x => x.fixedSum), tag: decodeURIComponent(req.params.tag), fromMeta: 0 });
         const allMedias = await MediaService.fetchMultiple(app, checksum, req.sessionObj?.accessList);
@@ -87,6 +88,7 @@ module.exports = { register: app => {
                     }
                 }
             });
+        await Promise.all(data.map(x => x.updateVersionInDb(app.databaseHelper)));
 
         let tag = data.map(x => new MediaFileTagModel(x.fixedSum, requestedTag, false));
         await app.databaseHelper.insertMultipleSameTable(tag);
@@ -109,6 +111,7 @@ module.exports = { register: app => {
         data = Object.keys(data)
             .map(x => data[x])
             .filter(x => x.ACCESS_TYPE != ACCESS_GRANT.write);
+        await Promise.all(data.map(x => MediaService.updateVersionInDb(app, x.fixedSum)));
 
         if (!req.body.value) {
             await app.databaseHelper.remove(MediaFileMetaModel, { md5sum: data.map(x => x.fixedSum), key: req.params.key, fromFile: 0 });