Skip to content

Commit

Permalink
Fix LineMangaJP (#6298)
Browse files Browse the repository at this point in the history
* add: support portal chapter

* update: variable name
  • Loading branch information
Elastic1 authored and Sheepux committed Jan 2, 2024
1 parent 0281ef1 commit 47d22b2
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions src/web/mjs/connectors/LineMangaJP.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ export default class LineMangaJP extends Connector {
});
});
}
if (option.isPortal) {
return Object.values(option.portalPages)
.map(portalPage => this.createConnectorURI({ portalPage }));
}
if (images.length == 0) {
throw new Error(`The chapter '${chapter.title}' is neither public, nor purchased!`);
}
Expand All @@ -71,6 +75,12 @@ export default class LineMangaJP extends Connector {
}

async _handleConnectorURI(payload) {
if (payload.portalPage != null) {
const canvas = await this._descramblePortalPage(payload.portalPage);
const blob = await this._canvasToBlob(canvas);
return this._blobToBuffer(blob);
}

const canvas = document.createElement('canvas');
canvas.width = payload.imageData.width;
canvas.height = payload.imageData.height;
Expand Down Expand Up @@ -179,6 +189,30 @@ export default class LineMangaJP extends Connector {
image.src = imageData.url;
});
}

async _descramblePortalPage(portalPage) {
const uri = new URL(portalPage.url);
const request = new Request(uri);
request.headers.set('x-origin', uri.origin);
const res = await fetch(request);
const blob = await res.blob();
const image = await createImageBitmap(blob);
const canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
const context = canvas.getContext('2d');
context.drawImage(image, 0, 0);
for (let i = 0; i < portalPage.metadata.m.length; i++) {
const data = portalPage.metadata.m[i];
const o = parseInt(data, 35);
const c = o % portalPage.metadata.hc * portalPage.metadata.bwd;
const s = Math.floor(o / portalPage.metadata.hc) * portalPage.metadata.bwd;
const l = i % portalPage.metadata.hc * portalPage.metadata.bwd;
const u = Math.floor(i / portalPage.metadata.hc) * portalPage.metadata.bwd;
context.drawImage(image, c, s, portalPage.metadata.bwd, portalPage.metadata.bwd, l, u, portalPage.metadata.bwd, portalPage.metadata.bwd);
}
return canvas;
}
}

/**
Expand Down

0 comments on commit 47d22b2

Please sign in to comment.