parent
e5bb4e693f
commit
b3b2812d36
@ -0,0 +1,68 @@ |
|||||||
|
/* |
||||||
|
* SPDX-License-Identifier: GPL-3.0 |
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop! |
||||||
|
*/ |
||||||
|
|
||||||
|
import { existsSync, mkdirSync } from "fs"; |
||||||
|
import { join } from "path"; |
||||||
|
|
||||||
|
import { USER_AGENT, VENCORD_FILES_DIR } from "../constants"; |
||||||
|
import { downloadFile, fetchie } from "./http"; |
||||||
|
|
||||||
|
const API_BASE = "https://api.github.com"; |
||||||
|
|
||||||
|
export const FILES_TO_DOWNLOAD = [ |
||||||
|
"vencordDesktopMain.js", |
||||||
|
"vencordDesktopPreload.js", |
||||||
|
"vencordDesktopRenderer.js", |
||||||
|
"vencordDesktopRenderer.css" |
||||||
|
]; |
||||||
|
|
||||||
|
export interface ReleaseData { |
||||||
|
name: string; |
||||||
|
tag_name: string; |
||||||
|
html_url: string; |
||||||
|
assets: Array<{ |
||||||
|
name: string; |
||||||
|
browser_download_url: string; |
||||||
|
}>; |
||||||
|
} |
||||||
|
|
||||||
|
export async function githubGet(endpoint: string) { |
||||||
|
const opts: RequestInit = { |
||||||
|
headers: { |
||||||
|
Accept: "application/vnd.github+json", |
||||||
|
"User-Agent": USER_AGENT |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
if (process.env.GITHUB_TOKEN) (opts.headers! as any).Authorization = `Bearer ${process.env.GITHUB_TOKEN}`; |
||||||
|
|
||||||
|
return fetchie(API_BASE + endpoint, opts, { retryOnNetworkError: true }); |
||||||
|
} |
||||||
|
|
||||||
|
export async function downloadVencordFiles() { |
||||||
|
const release = await githubGet("/repos/Vendicated/Vencord/releases/latest"); |
||||||
|
|
||||||
|
const { assets }: ReleaseData = await release.json(); |
||||||
|
|
||||||
|
await Promise.all( |
||||||
|
assets |
||||||
|
.filter(({ name }) => FILES_TO_DOWNLOAD.some(f => name.startsWith(f))) |
||||||
|
.map(({ name, browser_download_url }) => |
||||||
|
downloadFile(browser_download_url, join(VENCORD_FILES_DIR, name), {}, { retryOnNetworkError: true }) |
||||||
|
) |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
export function isValidVencordInstall(dir: string) { |
||||||
|
return FILES_TO_DOWNLOAD.every(f => existsSync(join(dir, f))); |
||||||
|
} |
||||||
|
|
||||||
|
export async function ensureVencordFiles() { |
||||||
|
if (isValidVencordInstall(VENCORD_FILES_DIR)) return; |
||||||
|
mkdirSync(VENCORD_FILES_DIR, { recursive: true }); |
||||||
|
|
||||||
|
await downloadVencordFiles(); |
||||||
|
} |
Loading…
Reference in new issue