@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
JavaScript
;
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/';