Compare commits
	
		
			2 Commits
		
	
	
		
			1adb1b7dec
			...
			756ae1be58
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 756ae1be58 | |||
| 4569d35a65 | 
							
								
								
									
										42
									
								
								main.js
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								main.js
									
									
									
									
									
								
							| @@ -18,7 +18,11 @@ function isDev() { | |||||||
|  |  | ||||||
| function registerIPCPipes() { | function registerIPCPipes() { | ||||||
|   ipcMain.handle("ezpplauncher:login", async (e, args) => { |   ipcMain.handle("ezpplauncher:login", async (e, args) => { | ||||||
|  |     const timeout = new AbortController(); | ||||||
|  |     const timeoutId = setTimeout(() => timeout.abort(), 8000); | ||||||
|  |     try { | ||||||
|       const fetchResult = await fetch("https://ez-pp.farm/login/check", { |       const fetchResult = await fetch("https://ez-pp.farm/login/check", { | ||||||
|  |         signal: timeout.signal, | ||||||
|         method: "POST", |         method: "POST", | ||||||
|         body: JSON.stringify({ |         body: JSON.stringify({ | ||||||
|           username: args.username, |           username: args.username, | ||||||
| @@ -29,6 +33,8 @@ function registerIPCPipes() { | |||||||
|         }, |         }, | ||||||
|       }); |       }); | ||||||
|  |  | ||||||
|  |       clearTimeout(timeoutId); | ||||||
|  |  | ||||||
|       if (fetchResult.ok) { |       if (fetchResult.ok) { | ||||||
|         const result = await fetchResult.json(); |         const result = await fetchResult.json(); | ||||||
|         if ("user" in result) { |         if ("user" in result) { | ||||||
| @@ -44,6 +50,12 @@ function registerIPCPipes() { | |||||||
|         code: 500, |         code: 500, | ||||||
|         message: "Something went wrong while logging you in.", |         message: "Something went wrong while logging you in.", | ||||||
|       }; |       }; | ||||||
|  |     } catch (err) { | ||||||
|  |       return { | ||||||
|  |         code: 500, | ||||||
|  |         message: "Something went wrong while logging you in.", | ||||||
|  |       }; | ||||||
|  |     } | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   ipcMain.handle("ezpplauncher:autologin", async (e) => { |   ipcMain.handle("ezpplauncher:autologin", async (e) => { | ||||||
| @@ -54,7 +66,11 @@ function registerIPCPipes() { | |||||||
|     if (username == undefined || password == undefined) { |     if (username == undefined || password == undefined) { | ||||||
|       return { code: 200, message: "No autologin" }; |       return { code: 200, message: "No autologin" }; | ||||||
|     } |     } | ||||||
|  |     const timeout = new AbortController(); | ||||||
|  |     const timeoutId = setTimeout(() => timeout.abort(), 8000); | ||||||
|  |     try { | ||||||
|       const fetchResult = await fetch("https://ez-pp.farm/login/check", { |       const fetchResult = await fetch("https://ez-pp.farm/login/check", { | ||||||
|  |         signal: timeout.signal, | ||||||
|         method: "POST", |         method: "POST", | ||||||
|         body: JSON.stringify({ |         body: JSON.stringify({ | ||||||
|           username: username, |           username: username, | ||||||
| @@ -65,6 +81,8 @@ function registerIPCPipes() { | |||||||
|         }, |         }, | ||||||
|       }); |       }); | ||||||
|  |  | ||||||
|  |       clearTimeout(timeoutId); | ||||||
|  |  | ||||||
|       if (fetchResult.ok) { |       if (fetchResult.ok) { | ||||||
|         const result = await fetchResult.json(); |         const result = await fetchResult.json(); | ||||||
|         return result; |         return result; | ||||||
| @@ -73,6 +91,12 @@ function registerIPCPipes() { | |||||||
|         code: 500, |         code: 500, | ||||||
|         message: "Something went wrong while logging you in.", |         message: "Something went wrong while logging you in.", | ||||||
|       }; |       }; | ||||||
|  |     } catch (err) { | ||||||
|  |       return { | ||||||
|  |         code: 500, | ||||||
|  |         message: "Something went wrong while logging you in.", | ||||||
|  |       }; | ||||||
|  |     } | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   ipcMain.handle("ezpplauncher:guestlogin", (e) => { |   ipcMain.handle("ezpplauncher:guestlogin", (e) => { | ||||||
| @@ -87,6 +111,24 @@ function registerIPCPipes() { | |||||||
|     config.remove("guest"); |     config.remove("guest"); | ||||||
|     return true; |     return true; | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|  |   ipcMain.handle("ezpplauncher:launch", async (e) => { | ||||||
|  |     mainWindow.webContents.send("ezpplauncher:launchstatus", { | ||||||
|  |       status: "Checking osu! directory...", | ||||||
|  |     }); | ||||||
|  |     await new Promise((res) => setTimeout(res, 1500)); | ||||||
|  |     mainWindow.webContents.send("ezpplauncher:launchstatus", { | ||||||
|  |       status: "Checking for osu! updates...", | ||||||
|  |     }); | ||||||
|  |     mainWindow.webContents.send("ezpplauncher:launchprogress", { | ||||||
|  |       progress: 0, | ||||||
|  |     }); | ||||||
|  |     await new Promise((res) => setTimeout(res, 1500)); | ||||||
|  |     mainWindow.webContents.send("ezpplauncher:launchprogress", { | ||||||
|  |       progress: 100, | ||||||
|  |     }); | ||||||
|  |     return true; | ||||||
|  |   }); | ||||||
| } | } | ||||||
|  |  | ||||||
| function createWindow() { | function createWindow() { | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								preload.js
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								preload.js
									
									
									
									
									
								
							| @@ -36,3 +36,19 @@ window.addEventListener("logout", async (e) => { | |||||||
| window.addEventListener("guest-login", async (e) => { | window.addEventListener("guest-login", async (e) => { | ||||||
|   await ipcRenderer.invoke("ezpplauncher:guestlogin"); |   await ipcRenderer.invoke("ezpplauncher:guestlogin"); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | window.addEventListener("launch", async (e) => { | ||||||
|  |   await ipcRenderer.invoke("ezpplauncher:launch"); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | ipcRenderer.addListener("ezpplauncher:launchstatus", (e, args) => { | ||||||
|  |   window.dispatchEvent( | ||||||
|  |     new CustomEvent("launchStatusUpdate", { detail: args }), | ||||||
|  |   ); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | ipcRenderer.addListener("ezpplauncher:launchprogress", (e, args) => { | ||||||
|  |   window.dispatchEvent( | ||||||
|  |     new CustomEvent("launchProgressUpdate", { detail: args }), | ||||||
|  |   ); | ||||||
|  | }); | ||||||
|   | |||||||
| @@ -4,19 +4,20 @@ | |||||||
|     Dropdown, |     Dropdown, | ||||||
|     DropdownItem, |     DropdownItem, | ||||||
|     DropdownHeader, |     DropdownHeader, | ||||||
|     DropdownDivider |     DropdownDivider, | ||||||
|   } from "flowbite-svelte"; |   } from "flowbite-svelte"; | ||||||
|   import { |   import { | ||||||
|     ArrowRightFromBracketSolid, |     ArrowRightFromBracketSolid, | ||||||
|     ArrowRightToBracketSolid, |     ArrowRightToBracketSolid, | ||||||
|     UserSettingsSolid |     UserSettingsSolid, | ||||||
|   } from "flowbite-svelte-icons"; |   } from "flowbite-svelte-icons"; | ||||||
|   import ezppLogo from "../public/favicon.png"; |   import ezppLogo from "../public/favicon.png"; | ||||||
|   import { |   import { | ||||||
|     currentPage, |     currentPage, | ||||||
|     currentUser, |     currentUser, | ||||||
|     launching, |     launching, | ||||||
|     launchStatus |     launchPercentage, | ||||||
|  |     launchStatus, | ||||||
|   } from "./storage/localStore"; |   } from "./storage/localStore"; | ||||||
|   import { Page } from "./consts/pages"; |   import { Page } from "./consts/pages"; | ||||||
|   import Login from "./pages/Login.svelte"; |   import Login from "./pages/Login.svelte"; | ||||||
| @@ -40,9 +41,16 @@ | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   window.addEventListener("launchStatusUpdate", (e) => { |   window.addEventListener("launchStatusUpdate", (e) => { | ||||||
|     const status = (e as CustomEvent).detail; |     console.log((e as CustomEvent).detail); | ||||||
|  |     const status = (e as CustomEvent).detail.status; | ||||||
|     launchStatus.set(status); |     launchStatus.set(status); | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|  |   window.addEventListener("launchProgressUpdate", (e) => { | ||||||
|  |     console.log((e as CustomEvent).detail); | ||||||
|  |     const progress = (e as CustomEvent).detail.progress; | ||||||
|  |     launchPercentage.set(progress); | ||||||
|  |   }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <Toaster></Toaster> | <Toaster></Toaster> | ||||||
|   | |||||||
| @@ -54,6 +54,10 @@ html .cet-titlebar .cet-control-icon svg { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .animatedProgress div { | ||||||
|  |   transition: width 0.35s cubic-bezier(0.65, -0.02, 0.31, 1.01); | ||||||
|  | } | ||||||
|  |  | ||||||
| @keyframes progress-loading { | @keyframes progress-loading { | ||||||
|   50% { |   50% { | ||||||
|     background-position-x: -115%; |     background-position-x: -115%; | ||||||
|   | |||||||
| @@ -2,9 +2,10 @@ | |||||||
|   import { cubicOut } from "svelte/easing"; |   import { cubicOut } from "svelte/easing"; | ||||||
|   import { tweened } from "svelte/motion"; |   import { tweened } from "svelte/motion"; | ||||||
|   import { twMerge, twJoin } from "tailwind-merge"; |   import { twMerge, twJoin } from "tailwind-merge"; | ||||||
|  |   import { clamp } from "../util/mathUtil"; | ||||||
|  |  | ||||||
|   export let progress: string | number | undefined | null = "45"; |   export let progress: number = 45; | ||||||
|   export let precision = 0; |   export let precision = 2; | ||||||
|   export let tweenDuration = 400; |   export let tweenDuration = 400; | ||||||
|   export let animate = false; |   export let animate = false; | ||||||
|   export let size = "h-2.5"; |   export let size = "h-2.5"; | ||||||
| @@ -12,10 +13,10 @@ | |||||||
|   export let labelOutside = ""; |   export let labelOutside = ""; | ||||||
|   export let easing = cubicOut; |   export let easing = cubicOut; | ||||||
|   export let color = "primary"; |   export let color = "primary"; | ||||||
|  |   export let indeterminate = false; | ||||||
|   export let labelInsideClass = |   export let labelInsideClass = | ||||||
|     "text-primary-100 text-xs font-medium text-center p-0.5 leading-none rounded-full"; |     "text-primary-100 text-xs font-medium text-center p-0.5 leading-none rounded-full"; | ||||||
|   export let divClass = "w-full bg-gray-200 rounded-full dark:bg-gray-700"; |   export let divClass = "w-full bg-gray-200 rounded-full dark:bg-gray-700"; | ||||||
|   export let indeterminate = progress == null; |  | ||||||
|  |  | ||||||
|   const barColors: Record<string, string> = { |   const barColors: Record<string, string> = { | ||||||
|     primary: "bg-primary-600", |     primary: "bg-primary-600", | ||||||
| @@ -28,15 +29,14 @@ | |||||||
|     indigo: "bg-indigo-600 dark:bg-indigo-500", |     indigo: "bg-indigo-600 dark:bg-indigo-500", | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   const _progress = tweened(0, { |   let _progress = tweened(0, { | ||||||
|     duration: animate && !indeterminate ? tweenDuration : 0, |     duration: tweenDuration, | ||||||
|     easing, |     easing, | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   $: { |   $: { | ||||||
|     if (!indeterminate) { |     progress = clamp(Number(progress), 0, 100); | ||||||
|       _progress.set(Number(progress)); |     _progress.set(progress); | ||||||
|     } |  | ||||||
|   } |   } | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| @@ -49,7 +49,9 @@ | |||||||
|       >{labelOutside}</span |       >{labelOutside}</span | ||||||
|     > |     > | ||||||
|     <span class="text-sm font-medium text-blue-700 dark:text-white" |     <span class="text-sm font-medium text-blue-700 dark:text-white" | ||||||
|       >{progress}%</span |       >{animate | ||||||
|  |         ? $_progress.toFixed(precision) | ||||||
|  |         : progress.toFixed(precision)}%</span | ||||||
|     > |     > | ||||||
|   </div> |   </div> | ||||||
| {/if} | {/if} | ||||||
| @@ -59,9 +61,9 @@ | |||||||
|     {#if !indeterminate} |     {#if !indeterminate} | ||||||
|       <div |       <div | ||||||
|         class={twJoin(labelInsideClass, barColors[color])} |         class={twJoin(labelInsideClass, barColors[color])} | ||||||
|         style="width: {$_progress}%" |         style="width: {animate ? $_progress : progress}%" | ||||||
|       > |       > | ||||||
|         {$_progress.toFixed(precision)}% |         {animate ? $_progress.toFixed(precision) : progress.toFixed(precision)}% | ||||||
|       </div> |       </div> | ||||||
|     {:else} |     {:else} | ||||||
|       <div |       <div | ||||||
| @@ -75,7 +77,7 @@ | |||||||
|   {:else if !indeterminate} |   {:else if !indeterminate} | ||||||
|     <div |     <div | ||||||
|       class={twJoin(barColors[color], size, "rounded-full")} |       class={twJoin(barColors[color], size, "rounded-full")} | ||||||
|       style="width: {$_progress}%" |       style="width: {animate ? $_progress : progress}%" | ||||||
|     /> |     /> | ||||||
|   {:else} |   {:else} | ||||||
|     <div |     <div | ||||||
|   | |||||||
| @@ -1,7 +1,12 @@ | |||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
|   import { Button, Checkbox } from "flowbite-svelte"; |   import { Button, Checkbox } from "flowbite-svelte"; | ||||||
|   import Progressbar from "../lib/Progressbar.svelte"; |   import Progressbar from "../lib/Progressbar.svelte"; | ||||||
|   import { launching, patch, launchStatus } from "./../storage/localStore"; |   import { | ||||||
|  |     launching, | ||||||
|  |     patch, | ||||||
|  |     launchStatus, | ||||||
|  |     launchPercentage, | ||||||
|  |   } from "./../storage/localStore"; | ||||||
|   let progressbarFix = true; |   let progressbarFix = true; | ||||||
|  |  | ||||||
|   setTimeout(() => { |   setTimeout(() => { | ||||||
| @@ -10,7 +15,8 @@ | |||||||
|  |  | ||||||
|   const launch = () => { |   const launch = () => { | ||||||
|     launching.set(true); |     launching.set(true); | ||||||
|   } |     window.dispatchEvent(new CustomEvent("launch")); | ||||||
|  |   }; | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <main | <main | ||||||
| @@ -26,7 +32,7 @@ | |||||||
|         ? '' |         ? '' | ||||||
|         : 'active:scale-95 '}transition-transform duration-75" |         : 'active:scale-95 '}transition-transform duration-75" | ||||||
|       disabled={$launching} |       disabled={$launching} | ||||||
|       on:click={() => launching.set(!$launching)}>Launch</Button |       on:click={launch}>Launch</Button | ||||||
|     > |     > | ||||||
|     <Checkbox |     <Checkbox | ||||||
|       disabled={$launching} |       disabled={$launching} | ||||||
| @@ -40,10 +46,12 @@ | |||||||
|     > |     > | ||||||
|       <Progressbar |       <Progressbar | ||||||
|         animate={true} |         animate={true} | ||||||
|         progress={null} |         progress={$launchPercentage} | ||||||
|  |         indeterminate={$launchPercentage == -1} | ||||||
|         labelInside={true} |         labelInside={true} | ||||||
|         size="h-3" |         size="h-3" | ||||||
|         labelInsideClass="bg-primary-600 drop-shadow-xl text-gray-100 text-base font-medium text-center p-1 leading-none rounded-full" |         class="" | ||||||
|  |         labelInsideClass="bg-primary-600 drop-shadow-xl text-gray-100 text-base font-medium text-center p-1 leading-none rounded-full !text-[0.7rem] !leading-[0.45]" | ||||||
|       /> |       /> | ||||||
|       <p class="m-0 p-0 dark:text-gray-400 font-light">{$launchStatus}</p> |       <p class="m-0 p-0 dark:text-gray-400 font-light">{$launchStatus}</p> | ||||||
|     </div> |     </div> | ||||||
|   | |||||||
| @@ -142,7 +142,9 @@ | |||||||
|         {/if} |         {/if} | ||||||
|       </Button> |       </Button> | ||||||
|     </Input> |     </Input> | ||||||
|     <Checkbox bind:checked={saveCredentials}>Save credentials</Checkbox> |     <Checkbox bind:checked={saveCredentials} disabled={loading} | ||||||
|  |       >Save credentials</Checkbox | ||||||
|  |     > | ||||||
|     <div class="flex flex-col justify-center items-center gap-5 mt-1"> |     <div class="flex flex-col justify-center items-center gap-5 mt-1"> | ||||||
|       <Button |       <Button | ||||||
|         class="dark:active:!bg-gray-900  active:scale-95 transition-transform duration-75" |         class="dark:active:!bg-gray-900  active:scale-95 transition-transform duration-75" | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								src/util/mathUtil.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/util/mathUtil.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | export const clamp = (val: number, min: number, max: number) => { | ||||||
|  |   return val <= min ? min : val >= max ? max : val; | ||||||
|  | }; | ||||||
| @@ -21,6 +21,9 @@ const config = { | |||||||
|         fadeIn: "fadeIn 1s ease forwards", |         fadeIn: "fadeIn 1s ease forwards", | ||||||
|         fadeOut: "fadeOut 1s ease forwards", |         fadeOut: "fadeOut 1s ease forwards", | ||||||
|       }, |       }, | ||||||
|  |       transitionProperty: { | ||||||
|  |         'width': 'width', | ||||||
|  |       }, | ||||||
|       colors: { |       colors: { | ||||||
|         // flowbite-svelte |         // flowbite-svelte | ||||||
|         primary: { |         primary: { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user