diff --git a/Find Unique Titles/dist/find.unique.titles.user.js b/Find Unique Titles/dist/find.unique.titles.user.js index cd48572..536b1f3 100644 --- a/Find Unique Titles/dist/find.unique.titles.user.js +++ b/Find Unique Titles/dist/find.unique.titles.user.js @@ -944,16 +944,17 @@ }); var _utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/utils/utils.ts"); var _tracker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/trackers/tracker.ts"); - var common_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../common/dist/dom/index.mjs"); - var common_http__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../common/dist/http/index.mjs"); + var common_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../common/dist/dom/index.mjs"); var common_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../common/dist/logger/index.mjs"); + var common_searcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../common/dist/searcher/index.mjs"); + var common_trackers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../common/dist/trackers/index.mjs"); const isExclusive = element => { const exclusiveLink = element.querySelector('a[href="/browse.php?exclusive=1"]'); return null != exclusiveLink; }; function parseTorrent(element) { const size = (0, _utils_utils__WEBPACK_IMPORTED_MODULE_0__.parseSize)(element.querySelector("td:nth-child(6)")?.textContent); - const title = element.querySelector(".browse_td_name_cell a")?.textContent.trim(); + const title = element.querySelector(".browse_td_name_cell a")?.textContent?.trim(); const resolution = (0, _utils_utils__WEBPACK_IMPORTED_MODULE_0__.parseResolution)(title); const tags = (0, _utils_utils__WEBPACK_IMPORTED_MODULE_0__.parseTags)(title); return { @@ -964,7 +965,7 @@ }; } function parseCategory(element) { - const category = element.querySelector(".catcell a").getAttribute("href").replace("?cat=", ""); + const category = element.querySelector(".catcell a")?.getAttribute("href")?.replace("?cat=", ""); switch (category) { case "1": return _tracker__WEBPACK_IMPORTED_MODULE_1__.Category.MOVIE; @@ -1007,7 +1008,7 @@ yield null; } const imdbId = (0, _utils_utils__WEBPACK_IMPORTED_MODULE_0__.parseImdbId)(element.querySelector("a[data-imdb-link]")?.getAttribute("data-imdb-link")); - const {title, year} = (0, _utils_utils__WEBPACK_IMPORTED_MODULE_0__.parseYearAndTitle)(element.children[2].querySelector("a").textContent); + const {title, year} = (0, _utils_utils__WEBPACK_IMPORTED_MODULE_0__.parseYearAndTitle)(element.children[2].querySelector("a")?.textContent); yield { torrents: [ parseTorrent(element) ], dom: [ element ], @@ -1018,7 +1019,7 @@ }; } catch (e) { console.trace(e); - common_logger__WEBPACK_IMPORTED_MODULE_2__.logger.info("{0} Error occurred while parsing torrent: " + e, this.name()); + common_logger__WEBPACK_IMPORTED_MODULE_2__.logger.info("[{0}] Error occurred while parsing torrent: " + e, this.name()); yield null; } } @@ -1027,13 +1028,19 @@ } async search(request) { if (!request.imdbId) return _tracker__WEBPACK_IMPORTED_MODULE_1__.SearchResult.NOT_CHECKED; - const queryUrl = "https://hdbits.org/browse.php?c3=1&c1=1&c2=1&tagsearchtype=or&imdb=" + request.imdbId + "&sort=size&h=8&d=DESC"; - const result = await (0, common_http__WEBPACK_IMPORTED_MODULE_3__.fetchAndParseHtml)(queryUrl); - return result.querySelector("#resultsarea").textContent.includes("Nothing here!") ? _tracker__WEBPACK_IMPORTED_MODULE_1__.SearchResult.NOT_EXIST : _tracker__WEBPACK_IMPORTED_MODULE_1__.SearchResult.EXIST; + const result = await (0, common_searcher__WEBPACK_IMPORTED_MODULE_3__.search)(common_trackers__WEBPACK_IMPORTED_MODULE_4__.HDb, { + movie_title: "", + movie_imdb_id: request.imdbId + }); + if (result == common_searcher__WEBPACK_IMPORTED_MODULE_3__.SearchResult.LOGGED_OUT) return _tracker__WEBPACK_IMPORTED_MODULE_1__.SearchResult.NOT_LOGGED_IN; + return result == common_searcher__WEBPACK_IMPORTED_MODULE_3__.SearchResult.NOT_FOUND ? _tracker__WEBPACK_IMPORTED_MODULE_1__.SearchResult.NOT_EXIST : _tracker__WEBPACK_IMPORTED_MODULE_1__.SearchResult.EXIST; } insertTrackersSelect(select) { - document.querySelector("#moresearch3 > td:nth-child(2)").innerHTML += "

Find unique for:
"; - (0, common_dom__WEBPACK_IMPORTED_MODULE_4__.addChild)(document.querySelector("#moresearch3 > td:nth-child(2)"), select); + const targetElement = document.querySelector("#moresearch3 > td:nth-child(2)"); + if (targetElement) { + targetElement.innerHTML += "

Find unique for:
"; + (0, common_dom__WEBPACK_IMPORTED_MODULE_5__.addChild)(targetElement, select); + } else common_logger__WEBPACK_IMPORTED_MODULE_2__.logger.info("[{0}] Can add search select", this.name()); } } }, @@ -2706,13 +2713,13 @@ return results[0]; }; const parseResolution = text => { + if (!text) return; const resolutionsAndAliases = { SD: [ "sd", "pal", "ntsc" ], HD: [ "720p", "hd" ], FHD: [ "1080p", "fhd", "full_hd" ], UHD: [ "2160p", "uhd", "4k" ] }; - if (!text) return; for (let resolution in resolutionsAndAliases) { let aliases = resolutionsAndAliases[resolution]; for (let alias of aliases) if (text.includes(alias)) return resolution; @@ -2765,6 +2772,10 @@ return tags; }; const parseYearAndTitle = title => { + if (!title) return { + title: void 0, + year: void 0 + }; const regex = /^(.*?)\s+\(?(\d{4})\)?\s+(.*)/; const match = title.match(regex); if (match) { @@ -3013,6 +3024,7 @@ "../common/dist/trackers/index.mjs": (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { __webpack_require__.d(__webpack_exports__, { Aither: () => Aither, + HDb: () => HDb, KG: () => KG, MTV: () => MTV, MTV_TV: () => MTV_TV, @@ -3026,6 +3038,13 @@ positiveMatch: true, both: true }; + const HDb = { + name: "HDb", + searchUrl: "https://hdbits.org/browse.php?c1=1&c2=1&c3=1&c4=1&c5=1&c7=1&c8=1&imdb=%tt%", + loggedOutRegex: /Make sure your passcode generating|nginx/, + matchRegex: /Nothing here!/, + both: true + }; const KG = { name: "KG", searchUrl: "https://karagarga.in/browse.php?sort=added&search=%nott%&search_type=imdb&d=DESC", diff --git a/Find Unique Titles/src/trackers/HDB.ts b/Find Unique Titles/src/trackers/HDB.ts index f1918bb..23591d2 100644 --- a/Find Unique Titles/src/trackers/HDB.ts +++ b/Find Unique Titles/src/trackers/HDB.ts @@ -14,8 +14,9 @@ import { tracker, } from "./tracker"; import { addChild } from "common/dom"; -import { fetchAndParseHtml } from "common/http"; import { logger } from "common/logger"; +import { search, SearchResult as SR } from "common/searcher"; +import { HDb as HDBTracker } from "common/trackers"; const isExclusive = (element: HTMLElement) => { const exclusiveLink = element.querySelector( @@ -30,7 +31,7 @@ function parseTorrent(element: HTMLElement): Torrent { ); const title = element .querySelector(".browse_td_name_cell a") - ?.textContent!!.trim(); + ?.textContent?.trim(); const resolution = parseResolution(title); const tags = parseTags(title); @@ -45,8 +46,8 @@ function parseTorrent(element: HTMLElement): Torrent { function parseCategory(element: HTMLElement) { const category = element .querySelector(".catcell a") - .getAttribute("href") - .replace("?cat=", ""); + ?.getAttribute("href") + ?.replace("?cat=", ""); switch (category) { case "1": return Category.MOVIE; @@ -98,7 +99,7 @@ export default class HDB implements tracker { ); const { title, year } = parseYearAndTitle( - element.children[2].querySelector("a")!!.textContent + element.children[2].querySelector("a")?.textContent ); yield { @@ -112,7 +113,7 @@ export default class HDB implements tracker { } catch (e) { console.trace(e); logger.info( - "{0} Error occurred while parsing torrent: " + e, + "[{0}] Error occurred while parsing torrent: " + e, this.name() ); yield null; @@ -126,26 +127,23 @@ export default class HDB implements tracker { async search(request: Request): Promise { if (!request.imdbId) return SearchResult.NOT_CHECKED; - const queryUrl = - "https://hdbits.org/browse.php?c3=1&c1=1&c2=1&tagsearchtype=or&imdb=" + - request.imdbId + - "&sort=size&h=8&d=DESC"; - - const result = await fetchAndParseHtml(queryUrl); - - return result - .querySelector("#resultsarea") - .textContent.includes("Nothing here!") - ? SearchResult.NOT_EXIST - : SearchResult.EXIST; + const result = await search(HDBTracker, { + movie_title: "", + movie_imdb_id: request.imdbId, + }); + if (result == SR.LOGGED_OUT) return SearchResult.NOT_LOGGED_IN; + return result == SR.NOT_FOUND ? SearchResult.NOT_EXIST : SearchResult.EXIST; } insertTrackersSelect(select: HTMLElement): void { - document.querySelector("#moresearch3 > td:nth-child(2)").innerHTML += - "

Find unique for:
"; - addChild( - document.querySelector("#moresearch3 > td:nth-child(2)") as HTMLElement, - select + const targetElement = document.querySelector( + "#moresearch3 > td:nth-child(2)" ); + if (targetElement) { + targetElement.innerHTML += "

Find unique for:
"; + addChild(targetElement as HTMLElement, select); + } else { + logger.info("[{0}] Can add search select", this.name()); + } } } diff --git a/Find Unique Titles/src/utils/utils.ts b/Find Unique Titles/src/utils/utils.ts index 1508195..87c6be3 100644 --- a/Find Unique Titles/src/utils/utils.ts +++ b/Find Unique Titles/src/utils/utils.ts @@ -36,13 +36,13 @@ export const parseImdbId = (text: string) => { }; export const parseResolution = (text: string): Resolution | undefined => { + if (!text) return undefined; const resolutionsAndAliases: Record = { SD: ["sd", "pal", "ntsc"], HD: ["720p", "hd"], FHD: ["1080p", "fhd", "full_hd"], UHD: ["2160p", "uhd", "4k"], }; - if (!text) return undefined; for (let resolution in resolutionsAndAliases) { let aliases = resolutionsAndAliases[resolution as keyof typeof Resolution]; for (let alias of aliases) { @@ -96,7 +96,7 @@ export const parseCodec = (title: string) => { export const parseTags = (title: string) => { const tags: string[] = []; - if (!title) return tags + if (!title) return tags; if (title.toLowerCase().includes("remux")) tags.push("Remux"); if (title.replaceAll(new RegExp("HDRip", "gi"), "").includes("HDR")) tags.push("HDR"); @@ -105,7 +105,8 @@ export const parseTags = (title: string) => { return tags; }; -export const parseYearAndTitle = (title: string) => { +export const parseYearAndTitle = (title: string | undefined) => { + if (!title) return { title: undefined, year: undefined }; const regex = /^(.*?)\s+\(?(\d{4})\)?\s+(.*)/; const match = title.match(regex); @@ -142,4 +143,4 @@ export const parseContainerAndFormat = ( } return result; -}; \ No newline at end of file +};