From 3c68b67aff28f4e066ccbf5f7cd68281d58a472a Mon Sep 17 00:00:00 2001 From: SpikeHD Date: Sat, 14 May 2022 00:47:30 -0700 Subject: [PATCH] remove test download button --- src/ui/App.tsx | 15 ------- src/ui/components/common/BigButton.tsx | 21 ++++++++- src/ui/components/menu/Downloads.css | 2 +- src/ui/components/menu/Downloads.tsx | 60 ++++++++++++++++++++++---- src/utils/download.ts | 10 +++++ 5 files changed, 82 insertions(+), 26 deletions(-) diff --git a/src/ui/App.tsx b/src/ui/App.tsx index 2c97593..ace33ee 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -27,19 +27,6 @@ interface IState { const downloadHandler = new DownloadHandler() -async function download(url: string, filename: string, path: string) { - const completePath = `${path}/${filename}` - downloadHandler.addDownload(url, completePath) -} - -async function TESTDOWNLOAD() { - download( - 'https://github.com/Koko-boya/Grasscutter_Resources/archive/refs/heads/main.zip', - 'resources.zip', - 'S:\\Cultivation' - ) -} - class App extends React.Component { constructor(props: IProps) { super(props) @@ -90,8 +77,6 @@ class App extends React.Component { this.state.optionsOpen ? this.setState({ optionsOpen: !this.state.optionsOpen })}/> : null } - -
any; id: string; + disabled?: boolean; } -export default class BigButton extends React.Component { +interface IState { + disabled?: boolean; +} + +export default class BigButton extends React.Component { constructor(props: IProps) { super(props) + this.state = { + disabled: this.props.disabled + } + this.handleClick = this.handleClick.bind(this) } + static getDerivedStateFromProps(props: IProps, state: IState) { + return { + disabled: props.disabled + } + } + handleClick() { + if (this.state.disabled) return + this.props.onClick() } render() { return ( -
+
{this.props.children}
) diff --git a/src/ui/components/menu/Downloads.css b/src/ui/components/menu/Downloads.css index 8e16b19..d20f5d0 100644 --- a/src/ui/components/menu/Downloads.css +++ b/src/ui/components/menu/Downloads.css @@ -2,7 +2,7 @@ width: 40%; } -.DownloadSection { +.DownloadMenuSection { display: flex; flex-direction: row; align-items: center; diff --git a/src/ui/components/menu/Downloads.tsx b/src/ui/components/menu/Downloads.tsx index ee48f75..6b05c87 100644 --- a/src/ui/components/menu/Downloads.tsx +++ b/src/ui/components/menu/Downloads.tsx @@ -6,6 +6,11 @@ import BigButton from '../common/BigButton' import './Downloads.css' import Divider from './Divider' +import { getConfigOption } from '../../../utils/configuration' + +const STABLE_DOWNLOAD = 'https://nightly.link/Grasscutters/Grasscutter/workflows/build/stable/Grasscutter.zip' +const DEV_DOWNLOAD = 'https://nightly.link/Grasscutters/Grasscutter/workflows/build/development/Grasscutter.zip' +const RESOURCES_DOWNLOAD = 'https://github.com/Koko-boya/Grasscutter_Resources/archive/refs/heads/main.zip' interface IProps { closeFn: () => void; @@ -22,30 +27,69 @@ export default class Downloads extends React.Component { super(props) this.state = { - grasscutter_downloading: false, - resources_downloading: false + grasscutter_downloading: this.props.downloadManager.downloadingJar(), + resources_downloading: this.props.downloadManager.downloadingResources() } + + this.getGrasscutterFolder = this.getGrasscutterFolder.bind(this) + this.downloadGrasscutterStable = this.downloadGrasscutterStable.bind(this) + this.downloadGrasscutterLatest = this.downloadGrasscutterLatest.bind(this) + this.downloadResources = this.downloadResources.bind(this) + } + + async getGrasscutterFolder() { + const path = await getConfigOption('grasscutter_path') + let folderPath + + if (path.includes('/')) { + folderPath = path.substring(0, path.lastIndexOf('/')) + } else { + folderPath = path.substring(0, path.lastIndexOf('\\')) + } + + // Set states since we know we are downloading something if this is called + this.setState({ + grasscutter_downloading: this.props.downloadManager.downloadingJar(), + resources_downloading: this.props.downloadManager.downloadingResources() + }) + + return folderPath + } + + async downloadGrasscutterStable() { + const folder = await this.getGrasscutterFolder() + this.props.downloadManager.addDownload(STABLE_DOWNLOAD, folder + '\\grasscutter.jar') + } + + async downloadGrasscutterLatest() { + const folder = await this.getGrasscutterFolder() + this.props.downloadManager.addDownload(DEV_DOWNLOAD, folder + '\\grasscutter.jar') + } + + async downloadResources() { + const folder = await this.getGrasscutterFolder() + this.props.downloadManager.addDownload(RESOURCES_DOWNLOAD, folder + '\\resources.zip') } render() { return ( -
+
- console.log('download')} id="grasscutterStableBtn" > +
-
+
- console.log('download')} id="grasscutterLatestBtn" > +
@@ -53,12 +97,12 @@ export default class Downloads extends React.Component { -
+
- console.log('download')} id="resourcesBtn" > +
diff --git a/src/utils/download.ts b/src/utils/download.ts index 01c9f33..61a182a 100644 --- a/src/utils/download.ts +++ b/src/utils/download.ts @@ -63,6 +63,16 @@ export default class DownloadHandler { getDownloads() { return this.downloads } + + downloadingJar() { + // Kinda hacky but it works + return this.downloads.some(d => d.path.includes('grasscutter')) + } + + downloadingResources() { + // Kinda hacky but it works + return this.downloads.some(d => d.path.includes('resources')) + } addDownload(url: string, path: string) { // Begin download from rust backend, don't add if the download addition fails