Fixed broken file size and better direct link detection

This commit is contained in:
Filip Znachor 2023-02-09 01:10:55 +01:00
parent 3a633d9794
commit 78f5fe5dc4
3 changed files with 11 additions and 17 deletions

View file

@ -36,22 +36,18 @@ export class Links {
return match![group] ? match![group] : undefined;
}
async direct_link(id: string): Promise<string | undefined> {
let download_link = "https://uloz.to/download-dialog/free/download?fileSlug="+id;
let redirect = await this.inst.get(download_link, {maxRedirects: 0, validateStatus: null});
if(redirect.status !== 302) throw new Error(`Status code: ${redirect.status}`);
this.tor.torNewSession();
if(redirect.headers.location && redirect.headers.location.startsWith("https://download.uloz.to"))
return redirect.headers.location;
}
async captcha_link(id: string): Promise<string | undefined> {
let download_link = "https://uloz.to/download-dialog/free/download?fileSlug="+id;
let captcha_page = await this.inst.get(download_link, {maxRedirects: 0, validateStatus: null});
// Direct link detection
if(captcha_page.status == 302) {
this.tor.torNewSession();
if(captcha_page.headers.location && captcha_page.headers.location.startsWith("https://download"))
return captcha_page.headers.location;
}
if(captcha_page.status !== 200) throw new Error(`Status code: ${captcha_page.status}`);
let cookies = this.parse_cookie(captcha_page.headers["set-cookie"]);

View file

@ -26,7 +26,6 @@ export class UrlPool {
file_name?: string;
total_size: number = 0;
is_direct = false;
constructor(storage: UrlPoolStorage, id: string) {
this.valid_to = new Date();
@ -42,7 +41,6 @@ export class UrlPool {
let dom = new JSDOM(page.data);
// TODO: Add quick download support
// let quick_dl_url = links.regex_parse(new RegExp('href="(/quickDownload/[^"]*)"'), page.data, 1);
this.is_direct = 'js-free-download-button-direct' == links.regex_parse(new RegExp('data-href="/download-dialog/free/[^"]+" +class=".+(js-free-download-button-direct).+"'), page.data, 1);
let filename = dom.window.document.querySelector(".jsFileTitle");
if(filename && filename.textContent) {
@ -117,7 +115,7 @@ export class UrlPool {
async generate(): Promise<string | undefined> {
this.last_generated = unixtime();
try {
let link = await (this.is_direct ? links.direct_link(this.id) : links.captcha_link(this.id));
let link = await links.captcha_link(this.id);
if(link) this.add(link);
return link;
} catch(e) {

View file

@ -57,10 +57,10 @@ export class Webserver {
let d = p.get_downloader(range.from);
let contentLength = p.total_size-1-range.from;
let contentLength = p.total_size-range.from;
let headers = {
"Content-Range": `bytes ${range.from}-${p.total_size-1}/${p.total_size-1}`,
"Range": `bytes=${range.from}-${p.total_size-1}/${p.total_size-1}`,
"Content-Range": `bytes ${range.from}-${p.total_size-1}/${p.total_size}`,
"Range": `bytes=${range.from}-${p.total_size-1}/${p.total_size}`,
"Accept-Ranges": "bytes",
"Content-Length": contentLength,
"Content-Type": "application/octet-stream",