From cf3eb270a3c2fdad743a200e62e0be083941b628 Mon Sep 17 00:00:00 2001 From: TheBeastLT Date: Sat, 16 Dec 2023 14:53:52 +0200 Subject: [PATCH] resolve infoHash for offcloud and premiumize debrid metas --- addon/moch/offcloud.js | 4 +++- addon/moch/premiumize.js | 10 +++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/addon/moch/offcloud.js b/addon/moch/offcloud.js index 239af42..2036e68 100644 --- a/addon/moch/offcloud.js +++ b/addon/moch/offcloud.js @@ -1,4 +1,5 @@ import OffcloudClient from 'offcloud-api'; +import magnet from 'magnet-uri'; import { Type } from '../lib/types.js'; import { isVideo } from '../lib/extension.js'; import StaticResponse from './static.js'; @@ -45,7 +46,6 @@ export async function getCatalog(apiKey, offset = 0) { return OC.cloud.history() .then(torrents => torrents) .then(torrents => (torrents || []) - .filter(torrent => torrent && statusReady(torrent)) .map(torrent => ({ id: `${KEY}:${torrent.requestId}`, type: Type.OTHER, @@ -58,12 +58,14 @@ export async function getItemMeta(itemId, apiKey, ip) { const OC = new OffcloudClient(apiKey, options); const torrents = await OC.cloud.history(); const torrent = torrents.find(torrent => torrent.requestId === itemId) + const infoHash = torrent && magnet.decode(torrent.originalLink).infoHash const createDate = torrent ? new Date(torrent.createdOn) : new Date(); return _getFileUrls(OC, torrent) .then(files => ({ id: `${KEY}:${itemId}`, type: Type.OTHER, name: torrent.name, + infoHash: infoHash, videos: files .filter(file => isVideo(file)) .map((file, index) => ({ diff --git a/addon/moch/premiumize.js b/addon/moch/premiumize.js index 3aa639d..f2f2611 100644 --- a/addon/moch/premiumize.js +++ b/addon/moch/premiumize.js @@ -61,11 +61,13 @@ export async function getItemMeta(itemId, apiKey, ip) { const options = await getDefaultOptions(); const PM = new PremiumizeClient(apiKey, options); const rootFolder = await PM.folder.list(itemId, null); + const infoHash = await _findInfoHash(PM, itemId); return getFolderContents(PM, itemId, ip) .then(contents => ({ id: `${KEY}:${itemId}`, type: Type.OTHER, name: rootFolder.name, + infoHash: infoHash, videos: contents .map((file, index) => ({ id: `${KEY}:${file.id}:${index}`, @@ -96,7 +98,7 @@ export async function resolve({ ip, isBrowser, apiKey, infoHash, cachedEntryInfo return _getCachedLink(PM, infoHash, cachedEntryInfo, fileIndex, ip, isBrowser) .catch(() => _resolve(PM, infoHash, cachedEntryInfo, fileIndex, ip, isBrowser)) .catch(error => { - if (error && error.message && error.message.includes('Account not premium.')) { + if (error?.message?.includes('Account not premium.')) { console.log(`Access denied to Premiumize ${infoHash} [${fileIndex}]`); return StaticResponse.FAILED_ACCESS; } @@ -151,6 +153,12 @@ async function _findTorrent(PM, infoHash) { return foundTorrent || Promise.reject('No recent torrent found'); } +async function _findInfoHash(PM, itemId) { + const torrents = await PM.transfer.list().then(response => response.transfers); + const foundTorrent = torrents.find(torrent => `${torrent.file_id}` === itemId || `${torrent.folder_id}` === itemId); + return foundTorrent?.src ? magnet.decode(foundTorrent.src).infoHash : undefined; +} + async function _createTorrent(PM, infoHash) { const magnetLink = await getMagnetLink(infoHash); return PM.transfer.create(magnetLink).then(() => _findTorrent(PM, infoHash));