Upload files to 'src/main/utils'
This commit is contained in:
		
							parent
							
								
									e5bb4e693f
								
							
						
					
					
						commit
						b3b2812d36
					
				
							
								
								
									
										68
									
								
								src/main/utils/vencordLoader.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/main/utils/vencordLoader.ts
									
									
									
									
									
										Normal file
									
								
							@ -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();
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user