Skip to content

Commit

Permalink
new MF adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
Xziy committed Jul 20, 2023
1 parent 38ec4ea commit bb3b21e
Show file tree
Hide file tree
Showing 35 changed files with 657 additions and 507 deletions.
13 changes: 6 additions & 7 deletions adapters/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import RMSAdapter, { ConfigRMSAdapter } from "./rms/RMSAdapter";
import MapAdapter from "./map/MapAdapter";
import CaptchaAdapter from "./captcha/CaptchaAdapter";
import OTPAdapter from "./otp/OneTimePasswordAdapter";
import MediaFileAdapter from "./mediafile/MediaFileAdapter";
import MediaFileAdapter, { ConfigMediaFileAdapter } from "./mediafile/MediaFileAdapter";
import PaymentAdapter from "./payment/PaymentAdapter";
import { DiscountAdapter } from "./discount/default/discountAdapter";
import BonusProgramAdapter from "./bonusprogram/BonusProgramAdapter";
Expand All @@ -18,12 +18,6 @@ export declare class RMS {
export declare class Map {
static getAdapter(adapterName: string): Promise<typeof MapAdapter>;
}
/**
* retruns MediaFile-adapter
*/
export declare class Media {
static getAdapter(adapterName: string): Promise<typeof MediaFileAdapter>;
}
/**
* retruns Payment-adapter
*/
Expand All @@ -45,6 +39,7 @@ export declare class OTP {
/** TODO: move other Adapters to one class adapter */
export declare class Adapter {
private static instanceRMS;
private static instanceMF;
static getDiscountAdapter(adapterName?: string, initParams?: {
[key: string]: string | number | boolean;
}): Promise<DiscountAdapter>;
Expand All @@ -58,4 +53,8 @@ export declare class Adapter {
* retruns RMS-adapter
*/
static getRMSAdapter(adapter?: string | RMSAdapter, initParams?: ConfigRMSAdapter): Promise<RMSAdapter>;
/**
* retruns MediaFile-adapter
*/
static getMediaFileAdapter(adapter?: string | MediaFileAdapter, initParams?: ConfigMediaFileAdapter): Promise<MediaFileAdapter>;
}
78 changes: 45 additions & 33 deletions adapters/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Adapter = exports.OTP = exports.Captcha = exports.Payment = exports.Media = exports.Map = exports.RMS = void 0;
exports.Adapter = exports.OTP = exports.Captcha = exports.Payment = exports.Map = exports.RMS = void 0;
const RMSAdapter_1 = require("./rms/RMSAdapter");
const pow_1 = require("./captcha/default/pow");
const defaultOTP_1 = require("./otp/default/defaultOTP");
const MediaFileAdapter_1 = require("./mediafile/MediaFileAdapter");
const fs = require("fs");
const discountAdapter_1 = require("./discount/default/discountAdapter");
const path = require("path");
// import DiscountAdapter from "./discount/AbstractDiscountAdapter";
const WEBRESTO_MODULES_PATH = process.env.WEBRESTO_MODULES_PATH === undefined ? "@webresto" : process.env.WEBRESTO_MODULES_PATH;
/**
Expand Down Expand Up @@ -58,38 +60,6 @@ class Map {
}
}
exports.Map = Map;
/**
* retruns MediaFile-adapter
*/
class Media {
static async getAdapter(adapterName) {
// if(!Boolean(adapterName)) {
// sails.log.warn(`MediaFile adapter not defined: ${adapterName}`);
// return
// }
if (!adapterName) {
adapterName = await Settings.get("MEDIAFILE_ADAPTER");
}
let adapter;
// Use default adapter local Imagemagick
if (!adapterName || "imagemagick-local") {
adapter = require("./mediafile/default/im-local");
}
else {
let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-image-adapter";
adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-image-adapter";
try {
adapter = require(adapterLocation);
}
catch (e) {
sails.log.error("CORE > getAdapter MediaFileA > error; ", e);
throw new Error("Module " + adapterLocation + " not found");
}
}
return adapter.default;
}
}
exports.Media = Media;
/**
* retruns Payment-adapter
*/
Expand Down Expand Up @@ -243,5 +213,47 @@ class Adapter {
throw new Error("Module " + adapterLocation + " not found");
}
}
/**
* retruns MediaFile-adapter
*/
static async getMediaFileAdapter(adapter, initParams) {
// Return the singleon
if (this.instanceMF) {
return this.instanceMF;
}
let adapterName;
if (adapter) {
if (typeof adapter === "string") {
adapterName = adapter;
}
else if (adapter instanceof MediaFileAdapter_1.default) {
this.instanceMF = adapter;
return this.instanceMF;
}
else {
throw new Error("Adapter should be a string or instance of rmsadapter");
}
}
let adapterLocation = "";
if (!adapterName) {
adapterName = await Settings.get("DEFAULT_MEDIAFILE_ADAPTER");
if (!adapterName) {
adapterLocation = path.resolve(__dirname, "mediafile/default/local");
}
}
if (!adapterLocation) {
adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-mediafile-adapter";
adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-mediafile-adapter";
}
try {
const adapterModule = require(adapterLocation);
this.instanceMF = new adapterModule.MediaFileAdapter(initParams);
return this.instanceMF;
}
catch (e) {
sails.log.error("CORE > getAdapter MediaFile > error; ", e);
throw new Error("Module " + adapterLocation + " not found");
}
}
}
exports.Adapter = Adapter;
81 changes: 47 additions & 34 deletions adapters/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import RMSAdapter, { ConfigRMSAdapter } from "./rms/RMSAdapter";
import MapAdapter from "./map/MapAdapter";
import CaptchaAdapter from "./captcha/CaptchaAdapter";
import { POW } from "./captcha/default/pow";
import * as LocalMediaFileAdapter from "./mediafile/default/im-local"
import { DefaultOTP } from "./otp/default/defaultOTP";
import OTPAdapter from "./otp/OneTimePasswordAdapter"
import MediaFileAdapter from "./mediafile/MediaFileAdapter";
import MediaFileAdapter, { ConfigMediaFileAdapter } from "./mediafile/MediaFileAdapter";
import PaymentAdapter from "./payment/PaymentAdapter";
import * as fs from "fs";
import { DiscountAdapter } from "./discount/default/discountAdapter";
import BonusProgramAdapter from "./bonusprogram/BonusProgramAdapter";
import path = require("path");
// import DiscountAdapter from "./discount/AbstractDiscountAdapter";
const WEBRESTO_MODULES_PATH = process.env.WEBRESTO_MODULES_PATH === undefined ? "@webresto" : process.env.WEBRESTO_MODULES_PATH;

Expand Down Expand Up @@ -71,38 +71,6 @@ export class Map {
}
}

/**
* retruns MediaFile-adapter
*/
export class Media {
public static async getAdapter(adapterName: string): Promise<typeof MediaFileAdapter> {

// if(!Boolean(adapterName)) {
// sails.log.warn(`MediaFile adapter not defined: ${adapterName}`);
// return
// }

if(!adapterName) {
adapterName = await Settings.get("MEDIAFILE_ADAPTER") as string;
}
let adapter: {default: typeof MediaFileAdapter}
// Use default adapter local Imagemagick
if (!adapterName || "imagemagick-local") {
adapter = require("./mediafile/default/im-local");
} else {
let adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-image-adapter";
adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-image-adapter";
try {
adapter = require(adapterLocation);
} catch (e) {
sails.log.error("CORE > getAdapter MediaFileA > error; ", e);
throw new Error("Module " + adapterLocation + " not found");
}
}
return adapter.default;
}
}

/**
* retruns Payment-adapter
*/
Expand Down Expand Up @@ -192,6 +160,7 @@ export class Adapter {

// Singletons
private static instanceRMS: RMSAdapter;
private static instanceMF: MediaFileAdapter;

public static async getDiscountAdapter(adapterName?: string, initParams?: {[key: string]:string | number | boolean}): Promise<DiscountAdapter> {

Expand Down Expand Up @@ -278,5 +247,49 @@ export class Adapter {
}
}

/**
* retruns MediaFile-adapter
*/
public static async getMediaFileAdapter(adapter?: string | MediaFileAdapter, initParams?: ConfigMediaFileAdapter): Promise<MediaFileAdapter> {
// Return the singleon
if (this.instanceMF) {
return this.instanceMF;
}

let adapterName: string;
if(adapter) {
if(typeof adapter === "string") {
adapterName = adapter;
} else if(adapter instanceof MediaFileAdapter) {
this.instanceMF = adapter;
return this.instanceMF;
} else {
throw new Error("Adapter should be a string or instance of rmsadapter");
}

}

let adapterLocation: string = "";

if(!adapterName) {
adapterName = await Settings.get("DEFAULT_MEDIAFILE_ADAPTER") as string;
if (!adapterName) {
adapterLocation = path.resolve(__dirname, "mediafile/default/local")
}
}

if (!adapterLocation) {
adapterLocation = WEBRESTO_MODULES_PATH + "/" + adapterName.toLowerCase() + "-mediafile-adapter";
adapterLocation = fs.existsSync(adapterLocation) ? adapterLocation : "@webresto/" + adapterName.toLowerCase() + "-mediafile-adapter";
}

try {
const adapterModule = require(adapterLocation);
this.instanceMF = new adapterModule.MediaFileAdapter(initParams);
return this.instanceMF;
} catch (e) {
sails.log.error("CORE > getAdapter MediaFile > error; ", e);
throw new Error("Module " + adapterLocation + " not found");
}
}
}
13 changes: 0 additions & 13 deletions adapters/mediafile/MediaFile.d.ts

This file was deleted.

14 changes: 0 additions & 14 deletions adapters/mediafile/MediaFile.js

This file was deleted.

17 changes: 0 additions & 17 deletions adapters/mediafile/MediaFile.ts

This file was deleted.

28 changes: 23 additions & 5 deletions adapters/mediafile/MediaFileAdapter.d.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
import MediaFileConfig from "./MediaFileConfig";
import MediaFile from "../../models/MediaFile";
export type BaseConfigProperty = BaseConfig | BaseConfig[] | number | boolean | string | null | undefined;
export interface BaseConfig {
[key: string]: BaseConfigProperty;
}
export type ConfigMediaFileAdapter = BaseConfig;
export type MediaFileTypes = 'image' | 'video' | 'sound' | '3d';
export default abstract class MediaFileAdapter {
protected readonly config: MediaFileConfig;
protected constructor(config: MediaFileConfig);
abstract load(url: string, key: string): Promise<{
private config;
private initializationPromise;
UUID_NAMESPACE: string;
constructor(config: ConfigMediaFileAdapter);
/**
* Async constructor
*/
private initialize;
/**
* Waiting for initialization
*/
wait(): Promise<void>;
toDownload(url: string, target: string, type: MediaFileTypes, force?: boolean): Promise<MediaFile>;
abstract load(url: string, type: MediaFileTypes, config: BaseConfigProperty): Promise<{
origin: string;
small: string;
large: string;
}>;
abstract uploadMediaFile(uploadFile: any, key: string): Promise<any>;
}
48 changes: 44 additions & 4 deletions adapters/mediafile/MediaFileAdapter.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,52 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const uuid_1 = require("uuid");
;
class MediaFileAdapter {
constructor(config) {
config.dish.path = config.dish.path || "";
config.group.path = config.group.path || "";
config.dish.format = config.dish.format || "png";
config.group.format = config.group.format || "png";
this.config = config;
this.initializationPromise = this.initialize();
}
/**
* Async constructor
*/
async initialize() {
this.UUID_NAMESPACE = await Settings.get("UUID_NAMESPACE") ?? "9dbceb30-26c3-11ee-be56-0242ac120002";
}
/**
* Waiting for initialization
*/
async wait() {
await this.initializationPromise;
}
async toDownload(url, target, type, force = false) {
await this.wait();
let imageId = (0, uuid_1.v5)(url, this.UUID_NAMESPACE);
const mediaFile = await MediaFile.findOne({ id: imageId });
let loadConfig;
if (target && this.config[target]) {
loadConfig = this.config[target];
}
// image
if (mediaFile === undefined || force) {
switch (type) {
case "image":
mediaFile.images = this.load(url, "image", loadConfig);
break;
case "video":
// mediaFile.video = ???
break;
case "sound":
// mediaFile.sound = ???
break;
default:
throw `mediaFile type not known ${type}`;
break;
}
// DOWNLOAD
}
return mediaFile;
}
;
}
exports.default = MediaFileAdapter;
Loading

0 comments on commit bb3b21e

Please sign in to comment.