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