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