| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- const path = require('path');
- const { AutotagModel, AUTOTAG_TYPE } = require("../model/autotag.js");
- const MediaFileModel = require('../model/mediaItem.js').MediaFileModel;
- const MediaFileTagModel = require('../model/mediaItemTag.js').MediaFileTagModel;
- class AutoTagBuilder
- {
- #initialized = false;
- #pathTags = [];
- #metaTags = [];
- constructor()
- {
- }
- #normalizePath(p) {
- p = path.normalize(p);
- if (!p.endsWith('/'))
- p = p + '/';
- return p;
- }
- async reloadRules(app) {
- this.#pathTags = [];
- this.#metaTags = [];
- for (let proto of await app.databaseHelper.fetch(AutotagModel)) {
- switch (proto.type) {
- case AUTOTAG_TYPE.path:
- this.#pathTags.push({ path: this.#normalizePath(proto.typeData), tag: proto.tag }); break;
- case AUTOTAG_TYPE.meta:
- this.#metaTags.push({ meta: proto.typeData, tag: proto.tag }); break;
- }
- }
- this.#initialized = true;
- }
- async rebuildPathTags(app) {
- if (!this.#initialized)
- await this.reloadRules(app);
- await app.databaseHelper.remove(MediaFileTagModel, { fromAutotag: true });
- let entities = [];
- for (let proto of this.#pathTags) {
- for (let matchingFiles of await app.databaseHelper.runSql("select * from `"+MediaFileModel.prototype.getTableName.call(null) +"` where path like '" +proto.path +"%'")) {
- let entity = new MediaFileTagModel(matchingFiles.fixedSum, proto.tag, false, true);
- entities.push(entity);
- if (entities.length >= 100) {
- await app.databaseHelper.insertMultipleSameTable(entities);
- entities = [];
- }
- }
- }
- await app.databaseHelper.insertMultipleSameTable(entities);
- console.log("Done proccessing autotags");
- }
- }
- module.exports = new AutoTagBuilder();
|