Skip to content

Commit

Permalink
Datanodes support
Browse files Browse the repository at this point in the history
  • Loading branch information
Shisuiicaro committed Jan 3, 2025
1 parent 59bc23b commit 82b1d71
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/main/services/download/download-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from "@main/repository";
import { publishDownloadCompleteNotification } from "../notifications";
import type { DownloadProgress } from "@types";
import { GofileApi, QiwiApi } from "../hosters";
import { GofileApi, QiwiApi, DatanodesApi } from "../hosters";
import { PythonRPC } from "../python-rpc";
import {
LibtorrentPayload,
Expand Down Expand Up @@ -277,6 +277,16 @@ export class DownloadManager {
save_path: game.downloadPath!,
};
}
case Downloader.Datanodes: {
const downloadUrl = await DatanodesApi.getDownloadUrl(game.uri!);

return {
action: "start",
game_id: game.id,
url: downloadUrl,
save_path: game.downloadPath!,
};
}
case Downloader.Torrent:
return {
action: "start",
Expand Down
51 changes: 51 additions & 0 deletions src/main/services/hosters/datanodes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import axios, { AxiosResponse } from "axios";

export class DatanodesApi {
private static session = axios.create({});

public static async getDownloadUrl(downloadUrl: string): Promise<string> {
const parsedUrl = new URL(downloadUrl);
const pathSegments = parsedUrl.pathname.split("/");

const fileCode = decodeURIComponent(pathSegments[1]);
const fileName = decodeURIComponent(pathSegments[pathSegments.length - 1]);

const headers: Record<string, string> = {
"Content-Type": "application/x-www-form-urlencoded",
Cookie: `lang=english; file_name=${fileName}; file_code=${fileCode};`,
Host: "datanodes.to",
Origin: "https://datanodes.to",
Referer: "https://datanodes.to/download",
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
};

const payload = new URLSearchParams({
op: "download2",
id: fileCode,
rand: "",
referer: "https://datanodes.to/download",
method_free: "Free Download >>",
method_premium: "",
adblock_detected: "",
});

const config = {
headers,
maxRedirects: 0,
validateStatus: (status: number) => status === 302 || status < 400,
};

const response: AxiosResponse = await DatanodesApi.session.post(
"https://datanodes.to/download",
payload,
config
);

if (response.status === 302) {
return response.headers["location"];
}

return "";
}
}
1 change: 1 addition & 0 deletions src/main/services/hosters/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from "./gofile";
export * from "./qiwi";
export * from "./datanodes";
1 change: 1 addition & 0 deletions src/renderer/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export const DOWNLOADER_NAME = {
[Downloader.Gofile]: "Gofile",
[Downloader.PixelDrain]: "PixelDrain",
[Downloader.Qiwi]: "Qiwi",
[Downloader.Datanodes]: "Datanodes",
};

export const MAX_MINUTES_TO_SHOW_IN_PLAYTIME = 120;
1 change: 1 addition & 0 deletions src/shared/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export enum Downloader {
Gofile,
PixelDrain,
Qiwi,
Datanodes,
}

export enum DownloadSourceStatus {
Expand Down
1 change: 1 addition & 0 deletions src/shared/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ export const getDownloadersForUri = (uri: string) => {

if (uri.startsWith("https://pixeldrain.com")) return [Downloader.PixelDrain];
if (uri.startsWith("https://qiwi.gg")) return [Downloader.Qiwi];
if (uri.startsWith("https://datanodes.to")) return [Downloader.Datanodes];

if (realDebridHosts.some((host) => uri.startsWith(host)))
return [Downloader.RealDebrid];
Expand Down

0 comments on commit 82b1d71

Please sign in to comment.