UNPKG

@subtitles/providers

Version:

Providers are the core of applications, where the subtitles are collected. Each provider exports a unique strategy for gathering data. From legendastv's web scraping from opensubtitle API usage, you can collect subtitles from your favorite tv shows and mo

52 lines (51 loc) 3.31 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _CacheProvider_hash, _CacheProvider_provider, _CacheProvider_cache, _CacheProvider_deserializer; Object.defineProperty(exports, "__esModule", { value: true }); const crypto_1 = require("crypto"); const flat_cache_1 = __importDefault(require("flat-cache")); class CacheProvider { constructor(cache, provider, deserializer) { _CacheProvider_hash.set(this, void 0); _CacheProvider_provider.set(this, void 0); _CacheProvider_cache.set(this, void 0); _CacheProvider_deserializer.set(this, void 0); __classPrivateFieldSet(this, _CacheProvider_hash, (0, crypto_1.createHash)('md5'), "f"); __classPrivateFieldSet(this, _CacheProvider_provider, provider, "f"); __classPrivateFieldSet(this, _CacheProvider_cache, Object.defineProperty(cache, 'namespace', { value: cache.namespace, writable: false, }), "f"); __classPrivateFieldSet(this, _CacheProvider_deserializer, deserializer, "f"); } async search(filter) { const file = __classPrivateFieldGet(this, _CacheProvider_hash, "f").update(filter.keyword.toLowerCase()).digest('hex'); const cache = flat_cache_1.default.load(file + '.json', CacheProvider.CACHE_PATH + '/' + __classPrivateFieldGet(this, _CacheProvider_cache, "f").namespace); const cachedResult = cache.getKey('keyword'); if (cachedResult) { if (__classPrivateFieldGet(this, _CacheProvider_deserializer, "f")) return __classPrivateFieldGet(this, _CacheProvider_deserializer, "f").call(this, cachedResult); return cachedResult; } const result = await __classPrivateFieldGet(this, _CacheProvider_provider, "f").search(filter); cache.setKey('keyword', result); cache.save(); return result; } } exports.default = CacheProvider; _CacheProvider_hash = new WeakMap(), _CacheProvider_provider = new WeakMap(), _CacheProvider_cache = new WeakMap(), _CacheProvider_deserializer = new WeakMap(); CacheProvider.CACHE_PATH = '/tmp/subtitle-finder/cache/';