From 75ef8fbd7359fc5d69e44724a6dedc11599bb196 Mon Sep 17 00:00:00 2001 From: MikeZeDev Date: Sat, 1 Jun 2024 11:21:27 +0000 Subject: [PATCH] FIx HentaiHand : rewrite website Dont expect miracles as for now their main cdn doesnt answer for me (NS_ERROR) Fixes https://github.com/manga-download/hakuneko/issues/7128 --- src/web/mjs/connectors/HentaiHand.mjs | 49 ++++++++------------------- 1 file changed, 14 insertions(+), 35 deletions(-) diff --git a/src/web/mjs/connectors/HentaiHand.mjs b/src/web/mjs/connectors/HentaiHand.mjs index 78574d23f3..85cdb16c21 100644 --- a/src/web/mjs/connectors/HentaiHand.mjs +++ b/src/web/mjs/connectors/HentaiHand.mjs @@ -9,48 +9,27 @@ export default class HentaiHand extends Connector { super.label = 'HentaiHand'; this.tags = [ 'hentai', 'multi-lingual' ]; this.url = 'https://hentaihand.com'; + this.requestOptions.headers.set('x-referer', this.url); } async _getMangaFromURI(uri) { - let request = new Request(uri, this.requestOptions); - let data = await this.fetchDOM(request, 'div#info-block div#info h1'); - let id = uri.pathname + uri.search; - let title = data[0].innerText.trim(); - return new Manga(this, id, title); + const slug = uri.href.split('/').pop(); + const apiUrl = new URL('/api/comics/' + slug, this.url); + const data = await this.fetchJSON( new Request(apiUrl)); + return new Manga(this, data.slug, data.title.trim()); } - async _getMangaList(callback) { - try { - throw new Error('This website does not provide a manga list, please copy and paste the URL containing the images directly from your browser into HakuNeko.'); - } catch(error) { - console.error(error, this); - callback(error, undefined); - } + async _getMangas() { + throw new Error('This website does not provide a manga list, please copy and paste the URL containing the images directly from your browser into HakuNeko.'); } - async _getChapterList(manga, callback) { - try { - callback(null, [ Object.assign({ language: '' }, manga) ]); - } catch(error) { - console.error( error, manga ); - callback( error, undefined ); - } + async _getChapters(manga) { + return[ Object.assign({ language: '' }, manga) ]; } - async _getPageList(manga, chapter, callback) { - try { - let request = new Request(this.url + chapter.id, this.requestOptions); - let data = await this.fetchDOM(request, 'div#thumbnail-container a.gallerythumb source'); - let pageList = data.map(element => { - let path = element.dataset['src'].split('/'); - let file = path.pop(); - path.push('full', file.replace('t.', '.')); - return path.join('/'); - }); - callback(null, pageList); - } catch(error) { - console.error( error, chapter ); - callback( error, undefined ); - } + async _getPages(chapter) { + const apiUrl = new URL(`/api/comics/${chapter.id}/images`, this.url); + const data = await this.fetchJSON( new Request(apiUrl)); + return data.images.map(page => this.createConnectorURI(page.source_url)); } -} \ No newline at end of file +}