diff --git a/frontend/src/helper/launcher.ts b/frontend/src/helper/launcher.ts index b4e1874..75bfcbc 100644 --- a/frontend/src/helper/launcher.ts +++ b/frontend/src/helper/launcher.ts @@ -3,25 +3,24 @@ import { AppService, GitService } from "@bindings/firefly-launcher/internal"; import { toast } from "react-toastify"; import { sleep } from "./sleep"; -export async function CheckUpdateLauncher() : Promise<{isUpdate: boolean, version: string}> { - let isUpdateLauncher = false - let version = "" - const [launcherCurrentOk, launcherCurrentVersion] = await AppService.GetCurrentLauncherVersion() - if (!launcherCurrentOk) { +export async function CheckUpdateLauncher(): Promise<{ isUpdate: boolean; isExists: boolean; version: string }> { + const [currentOk, currentVersion] = await AppService.GetCurrentLauncherVersion() + if (!currentOk) { toast.error("Launcher error: cannot get current version") - } else { - const [launcherNewOk, launcherNewVersion, launcherNewError] = await GitService.GetLatestLauncherVersion() - version = launcherCurrentVersion - if (launcherNewOk && launcherNewVersion && launcherNewVersion !== launcherCurrentVersion) { - isUpdateLauncher = true - version = launcherNewVersion - } else if (!launcherNewOk) { - toast.error("Launcher error: " + launcherNewError) - } + return { isUpdate: false, isExists: true, version: "" } } - return { isUpdate: isUpdateLauncher, version: version } + + const [latestOk, latestVersion, latestError] = await GitService.GetLatestLauncherVersion() + if (!latestOk) { + toast.error("Launcher error: " + latestError) + return { isUpdate: false, isExists: true, version: currentVersion } + } + + const isUpdate = latestVersion !== currentVersion + return { isUpdate, isExists: true, version: latestVersion } } + export async function UpdateLauncher(launcherVersion: string) : Promise { const {setDownloadType } = useLauncherStore.getState() setDownloadType("update:launcher:downloading") diff --git a/frontend/src/helper/proxy.ts b/frontend/src/helper/proxy.ts index 0e59b94..b22099f 100644 --- a/frontend/src/helper/proxy.ts +++ b/frontend/src/helper/proxy.ts @@ -3,18 +3,17 @@ import useSettingStore from "@/stores/settingStore"; import { FSService, GitService } from "@bindings/firefly-launcher/internal"; import { toast } from "react-toastify"; -export async function CheckUpdateProxy(proxyPath: string, proxyVersion: string) : Promise<{isUpdate: boolean, version: string}> { - let isUpdateProxy = false - let version = "" - const [proxyOk, proxyNewVersion, proxyError] = await GitService.GetLatestProxyVersion() - const proxyExists = await FSService.FileExists(proxyPath) - if (proxyOk && proxyNewVersion && proxyNewVersion !== proxyVersion || !proxyExists) { - isUpdateProxy = true - version = proxyNewVersion - } else if (!proxyOk) { - toast.error("Proxy error: " + proxyError) +export async function CheckUpdateProxy(proxyPath: string, proxyVersion: string) : Promise<{isUpdate: boolean, isExists: boolean, version: string}> { + const [ok, latestVersion, error] = await GitService.GetLatestProxyVersion() + const isExists = await FSService.FileExists(proxyPath) + + if (!ok) { + toast.error("Proxy error: " + error) + return { isUpdate: false, isExists, version: "" } } - return { isUpdate: isUpdateProxy, version: version } + + const isUpdate = latestVersion !== proxyVersion + return { isUpdate, isExists, version: latestVersion } } export async function UpdateProxy(proxyVersion: string) : Promise { diff --git a/frontend/src/helper/server.ts b/frontend/src/helper/server.ts index 02bdf7f..f5d592f 100644 --- a/frontend/src/helper/server.ts +++ b/frontend/src/helper/server.ts @@ -3,20 +3,23 @@ import useSettingStore from '@/stores/settingStore'; import { FSService, GitService } from '@bindings/firefly-launcher/internal'; import { toast } from 'react-toastify'; -export async function CheckUpdateServer(serverPath: string, serverVersion: string) : Promise<{isUpdate: boolean, version: string}> { - let isUpdateServer = false - let version = "" - const [serverOk, serverNewVersion, serverError] = await GitService.GetLatestServerVersion() - const serverExists = await FSService.FileExists(serverPath) - if (serverOk && serverNewVersion && serverNewVersion !== serverVersion || !serverExists) { - isUpdateServer = true - version = serverNewVersion - } else if (!serverOk) { - toast.error("Server error: " + serverError) +export async function CheckUpdateServer( + serverPath: string, + serverVersion: string +): Promise<{ isUpdate: boolean; isExists: boolean; version: string }> { + const [ok, latestVersion, error] = await GitService.GetLatestServerVersion() + const isExists = await FSService.FileExists(serverPath) + + if (!ok) { + toast.error("Server error: " + error) + return { isUpdate: false, isExists, version: "" } } - return { isUpdate: isUpdateServer, version: version } + + const isUpdate = latestVersion !== serverVersion + return { isUpdate, isExists, version: latestVersion } } + export async function UpdateServer(serverVersion: string) : Promise { const {setDownloadType } = useLauncherStore.getState() const {setServerPath, setServerVersion} = useSettingStore.getState() diff --git a/frontend/src/pages/launcher/index.tsx b/frontend/src/pages/launcher/index.tsx index 1a2b0d9..a0dec1c 100644 --- a/frontend/src/pages/launcher/index.tsx +++ b/frontend/src/pages/launcher/index.tsx @@ -55,7 +55,7 @@ export default function LauncherPage() { useEffect(() => { const check = async () => { - if (!serverPath || !proxyPath || !serverVersion || !proxyVersion) { + if (!serverVersion || !proxyVersion) { setServerReady(false) setProxyReady(false) return @@ -74,17 +74,11 @@ export default function LauncherPage() { const checkStartUp = async (): Promise => { const [_, version] = await AppService.GetCurrentLauncherVersion() setLauncherVersion(version) - let isExists = false - if (serverPath && proxyPath && serverVersion && proxyVersion) { - isExists = true - setServerReady(true) - setProxyReady(true) - } const launcherData = await CheckUpdateLauncher() if (launcherData.isUpdate) { setUpdateData({ - server: { isUpdate: false, version: "" }, - proxy: { isUpdate: false, version: "" }, + server: { isUpdate: false, isExists: false, version: "" }, + proxy: { isUpdate: false, isExists: false, version: "" }, launcher: launcherData }) setIsOpenSelfUpdateModal(true) @@ -92,29 +86,33 @@ export default function LauncherPage() { } const serverData = await CheckUpdateServer(serverPath, serverVersion) const proxyData = await CheckUpdateProxy(proxyPath, proxyVersion) + setUpdateData({ + server: serverData, + proxy: proxyData, + launcher: launcherData + }) const exitGame = await FSService.FileExists(gamePath) if (!exitGame) { setGameRunning(false) setGamePath("") setGameDir("") } - if (!serverData.isUpdate && !proxyData.isUpdate) { - setServerReady(true) - setProxyReady(true) - return - } - if (!isExists) { - setUpdateData({ - server: serverData, - proxy: proxyData, - launcher: launcherData - }) + + if (!serverData.isExists || !proxyData.isExists) { setServerReady(false) setProxyReady(false) setIsOpenDownloadDataModal(true) return } - setIsOpenUpdateDataModal(true) + + if (serverData.isUpdate || proxyData.isUpdate) { + setServerReady(true) + setProxyReady(true) + setIsOpenUpdateDataModal(true) + return + } + setServerReady(true) + setProxyReady(true) } checkStartUp() }, []); @@ -196,31 +194,30 @@ export default function LauncherPage() { } } - const handlerUpdateServer = async () => { + + const handlerUpdateData = async () => { setIsDownloading(true) - for (const [key, value] of Object.entries(updateData)) { - if (!value.isUpdate) { - if (key === "server") { - setServerReady(true) - } else if (key === "proxy") { - setProxyReady(true) - } - continue - } - if (key === "server") { - await UpdateServer(value.version) - setServerReady(true) - } else if (key === "proxy") { - await UpdateProxy(value.version) - setProxyReady(true) - } else if (key === "launcher") { - await UpdateLauncher(value.version) - } + if (updateData.launcher.isUpdate) { + await UpdateLauncher(updateData.launcher.version) + setUpdateData({...updateData, launcher: { isUpdate: false, isExists: true, version: updateData.launcher.version }}) + setIsOpenSelfUpdateModal(true) } + if (updateData.server.isUpdate || !updateData.server.isExists) { + await UpdateServer(updateData.server.version) + setServerReady(true) + setUpdateData({...updateData, server: { isUpdate: false, isExists: true, version: updateData.server.version }}) + } + if (updateData.proxy.isUpdate || !updateData.proxy.isExists) { + await UpdateProxy(updateData.proxy.version) + setProxyReady(true) + setUpdateData({...updateData, proxy: { isUpdate: false, isExists: true, version: updateData.proxy.version }}) + } + setDownloadType("") setIsDownloading(false) } + // Handle ESC key to close modal useEffect(() => { const handleEscKey = (event: KeyboardEvent) => { @@ -352,16 +349,24 @@ export default function LauncherPage() { const serverData = await CheckUpdateServer(serverPath, serverVersion) const proxyData = await CheckUpdateProxy(proxyPath, proxyVersion) const launcherData = await CheckUpdateLauncher() - if (serverData.isUpdate || proxyData.isUpdate || launcherData.isUpdate) { - setUpdateData({ - server: serverData, - proxy: proxyData, - launcher: launcherData - }) - setIsOpenUpdateDataModal(true) - } else { - toast.success("No updates available") + setUpdateData({ + server: serverData, + proxy: proxyData, + launcher: launcherData + }) + if (launcherData.isUpdate) { + setIsOpenSelfUpdateModal(true) + return } + if (!serverData.isExists || !proxyData.isExists) { + setIsOpenDownloadDataModal(true) + return + } + if (serverData.isUpdate || proxyData.isUpdate) { + setIsOpenUpdateDataModal(true) + return + } + toast.success("No updates available") }}> Check for Updates @@ -388,7 +393,12 @@ export default function LauncherPage() { )} {/* Downloading */} - {isDownloading && (updateData.proxy.isUpdate || updateData.server.isUpdate) && ( + {isDownloading && ( + updateData.proxy.isUpdate + || updateData.server.isUpdate + || !updateData.proxy.isExists + || !updateData.server.isExists + ) && (
@@ -505,7 +515,7 @@ export default function LauncherPage() { className="btn btn-primary bg-gradient-to-r from-orange-200 to-red-400 border-none" onClick={async () => { setIsOpenUpdateDataModal(false) - await handlerUpdateServer() + await handlerUpdateData() }} > Yes @@ -539,7 +549,7 @@ export default function LauncherPage() { className="btn btn-primary bg-gradient-to-r from-orange-200 to-red-400 border-none" onClick={async () => { setIsOpenDownloadDataModal(false) - await handlerUpdateServer() + await handlerUpdateData() }} > Download @@ -590,7 +600,7 @@ export default function LauncherPage() { className="btn btn-primary bg-gradient-to-r from-orange-200 to-red-400 border-none" onClick={async () => { setIsOpenSelfUpdateModal(false) - await handlerUpdateServer() + await handlerUpdateData() }} > Yes diff --git a/frontend/src/stores/launcherStore.ts b/frontend/src/stores/launcherStore.ts index 53a1900..4f5f394 100644 --- a/frontend/src/stores/launcherStore.ts +++ b/frontend/src/stores/launcherStore.ts @@ -13,7 +13,7 @@ interface LauncherState { progressDownload: number; downloadSpeed: number; launcherVersion: string; - updateData: Record<'server' | 'proxy' | 'launcher', { isUpdate: boolean, version: string }>; + updateData: Record<'server' | 'proxy' | 'launcher', { isUpdate: boolean, isExists: boolean, version: string }>; setDownloadType: (value: string) => void; setServerReady: (value: boolean) => void; setProxyReady: (value: boolean) => void; @@ -25,7 +25,7 @@ interface LauncherState { setProgressDownload: (value: number) => void; setLauncherVersion: (value: string) => void; setDownloadSpeed: (value: number) => void; - setUpdateData: (value: Record<'server' | 'proxy' | 'launcher', { isUpdate: boolean, version: string }>) => void; + setUpdateData: (value: Record<'server' | 'proxy' | 'launcher', { isUpdate: boolean, isExists: boolean, version: string }>) => void; } const useLauncherStore = create((set, get) => ({ @@ -41,9 +41,9 @@ const useLauncherStore = create((set, get) => ({ downloadSpeed: 0, launcherVersion: "", updateData: { - server: { isUpdate: false, version: "" }, - proxy: { isUpdate: false, version: "" }, - launcher: { isUpdate: false, version: "" }, + server: { isUpdate: false, isExists: false, version: "" }, + proxy: { isUpdate: false, isExists: false, version: "" }, + launcher: { isUpdate: false, isExists: true, version: "" }, }, setIsLoading: (value: boolean) => set({ isLoading: value }), setDownloadType: (value: string) => set({ downloadType: value }), @@ -56,7 +56,7 @@ const useLauncherStore = create((set, get) => ({ setProgressDownload: (value: number) => set({ progressDownload: value }), setLauncherVersion: (value: string) => set({ launcherVersion: value }), setDownloadSpeed: (value: number) => set({ downloadSpeed: value }), - setUpdateData: (value: Record<'server' | 'proxy' | 'launcher', { isUpdate: boolean, version: string }>) => set({ updateData: value }), + setUpdateData: (value: Record<'server' | 'proxy' | 'launcher', { isUpdate: boolean, isExists: boolean, version: string }>) => set({ updateData: value }), })); export default useLauncherStore; \ No newline at end of file