From d7b2aa25cc34684be0eb4dd3c5e815db1cfdc272 Mon Sep 17 00:00:00 2001 From: Thoronium <107363768+NotThorny@users.noreply.github.com> Date: Fri, 7 Apr 2023 02:15:17 -0600 Subject: [PATCH] Add mods download --- src-tauri/lang/chs.json | 4 +- src-tauri/lang/cht.json | 4 +- src-tauri/lang/de.json | 4 +- src-tauri/lang/en.json | 7 +++- src-tauri/lang/es.json | 4 +- src-tauri/lang/fr.json | 4 +- src-tauri/lang/id.json | 4 +- src-tauri/lang/ko.json | 4 +- src-tauri/lang/lv.json | 4 +- src-tauri/lang/nl.json | 4 +- src-tauri/lang/pt-br.json | 4 +- src-tauri/lang/ru.json | 4 +- src-tauri/lang/vi.json | 4 +- src-tauri/src/unzip.rs | 6 +++ src/ui/Main.tsx | 8 ++++ src/ui/components/menu/Downloads.tsx | 57 ++++++++++++++++++++++++++++ src/utils/download.ts | 4 ++ 17 files changed, 116 insertions(+), 14 deletions(-) diff --git a/src-tauri/lang/chs.json b/src-tauri/lang/chs.json index b3badeb..264e72c 100644 --- a/src-tauri/lang/chs.json +++ b/src-tauri/lang/chs.json @@ -44,7 +44,9 @@ "resources": "下载 Grasscutter 资源", "game": "下载游戏", "aio_header": "多合一下载:", - "individual_header": "个别部分下载:" + "individual_header": "个别部分下载:", + "mods_header": "Mods:", + "migoto": "下载 GIMI 3dmigoto" }, "download_status": { "downloading": "下载中", diff --git a/src-tauri/lang/cht.json b/src-tauri/lang/cht.json index 2904049..ee42a02 100644 --- a/src-tauri/lang/cht.json +++ b/src-tauri/lang/cht.json @@ -44,7 +44,9 @@ "resources": "下載Grasscutter資源(Resources)", "game": "下載遊戲", "aio_header": "多合一下載:", - "individual_header": "個別部分下載:" + "individual_header": "個別部分下載:", + "mods_header": "Mods:", + "migoto": "下載GIMI 3dmigoto" }, "download_status": { "downloading": "下載中", diff --git a/src-tauri/lang/de.json b/src-tauri/lang/de.json index 73af904..f605e83 100644 --- a/src-tauri/lang/de.json +++ b/src-tauri/lang/de.json @@ -43,7 +43,9 @@ "resources": "Grasscutter Ressourcen herunterladen", "game": "Spiel herunterladen", "aio_header": "Alles in Einem herunterladen", - "individual_header": "Einzelne Teile herunterladen:" + "individual_header": "Einzelne Teile herunterladen:", + "mods_header": "Mods:", + "migoto": "GIMI 3dmigoto herunterladen" }, "download_status": { "downloading": "Lädt herunter", diff --git a/src-tauri/lang/en.json b/src-tauri/lang/en.json index e905f24..db6b0f2 100644 --- a/src-tauri/lang/en.json +++ b/src-tauri/lang/en.json @@ -44,7 +44,9 @@ "resources": "Download Grasscutter Resources", "game": "Download Game", "aio_header": "All-in-One Downloads:", - "individual_header": "Individual downloads:" + "individual_header": "Individual downloads:", + "mods_header": "Mods:", + "migoto": "Download GIMI 3dmigoto" }, "download_status": { "downloading": "Downloading", @@ -77,7 +79,8 @@ "emergency_rsa": "In case something went wrong, force delete RSA patch.", "use_proxy": "Use the Cultivation internal proxy. You should have this enabled unless you use something like Fiddler", "patch_rsa": "Patch and unpatch your game RSA automatically. Unless playing with old/non-official versions (3.0 and older), this should be enabled.", - "add_delay": "Set delay in 3dmigoto loader! \nThis should fix loading issues, but will add a small delay to when 3dmigoto is loaded upon launching the game. \nYou can now launch with 3dmigoto again." + "add_delay": "Set delay in 3dmigoto loader! \nThis should fix loading issues, but will add a small delay to when 3dmigoto is loaded upon launching the game. \nYou can now launch with 3dmigoto again.", + "migoto": "For importing models from GameBanana" }, "swag": { "akebi_name": "Akebi", diff --git a/src-tauri/lang/es.json b/src-tauri/lang/es.json index 45a9dcc..ffdf1ff 100644 --- a/src-tauri/lang/es.json +++ b/src-tauri/lang/es.json @@ -44,7 +44,9 @@ "resources": "Descargar Recursos de Grasscutter", "game": "Descarga el juego", "aio_header": "Descargas todo en uno:", - "individual_header": "Descargas de piezas individuales:" + "individual_header": "Descargas de piezas individuales:", + "mods_header": "Mods:", + "migoto": "Descargar GIMI 3dmigoto" }, "download_status": { "downloading": "Descargando", diff --git a/src-tauri/lang/fr.json b/src-tauri/lang/fr.json index 1372e9c..dcc03f6 100644 --- a/src-tauri/lang/fr.json +++ b/src-tauri/lang/fr.json @@ -43,7 +43,9 @@ "grasscutter_latest_update": "Mettre a jour Grasscutter (derniere version)", "resources": "Telecharger les ressources logicielles de Grasscutter", "aio_header": "Telechargements tout-en-un:", - "individual_header": "Telechargements de pièces individuelles:" + "individual_header": "Telechargements de pièces individuelles:", + "mods_header": "Mods:", + "migoto": "Telecharger GIMI 3dmigoto" }, "download_status": { "downloading": "Telechargement", diff --git a/src-tauri/lang/id.json b/src-tauri/lang/id.json index 5a2bbaf..45c8609 100644 --- a/src-tauri/lang/id.json +++ b/src-tauri/lang/id.json @@ -42,7 +42,9 @@ "grasscutter_latest_update": "Sedang MengUpdate Grasscutter Terbaru", "resources": "Mendownload Grasscutter Resources", "aio_header": "Unduhan Semua Dalam Satu:", - "individual_header": "Unduhan Bagian Individual:" + "individual_header": "Unduhan Bagian Individual:", + "mods_header": "Mods:", + "migoto": "Sedang Mendownload GIMI 3dmigoto" }, "download_status": { "downloading": "Sedang Mendownload", diff --git a/src-tauri/lang/ko.json b/src-tauri/lang/ko.json index 6ac1c17..33a7e8a 100644 --- a/src-tauri/lang/ko.json +++ b/src-tauri/lang/ko.json @@ -44,7 +44,9 @@ "resources": "리소스 다운로드", "game": "게임 다운로드", "aio_header": "올인원 다운로드", - "individual_header": "개별 부품 다운로드:" + "individual_header": "개별 부품 다운로드:", + "mods_header": "Mods:", + "migoto": "GIMI 3dmigoto 다운로드" }, "download_status": { "downloading": "다운로드 중", diff --git a/src-tauri/lang/lv.json b/src-tauri/lang/lv.json index 3303ac7..8915d2f 100644 --- a/src-tauri/lang/lv.json +++ b/src-tauri/lang/lv.json @@ -41,7 +41,9 @@ "grasscutter_latest_update": "Atjauniet Grasscutter jaunāko", "resources": "Lejupielādējiet Grasscutter resursi", "aio_header": "Lejupielādes viss vienā", - "individual_header": "Atsevišķu daļu lejupielādes:" + "individual_header": "Atsevišķu daļu lejupielādes:", + "mods_header": "Mods:", + "migoto": "Lejupielādēt GIMI 3dmigoto" }, "download_status": { "downloading": "Notiek lejupielāde", diff --git a/src-tauri/lang/nl.json b/src-tauri/lang/nl.json index 4a0cc6b..833fbf4 100644 --- a/src-tauri/lang/nl.json +++ b/src-tauri/lang/nl.json @@ -43,7 +43,9 @@ "resources": "Download Grasscutter bronnen", "game": "Download Spel", "aio_header": "Alles-in-één Downloads:", - "individual_header": "Downloads van afzonderlijke onderdelen:" + "individual_header": "Downloads van afzonderlijke onderdelen:", + "mods_header": "Mods:", + "migoto": "Download GIMI 3dmigoto" }, "download_status": { "downloading": "Aan Het Downloading", diff --git a/src-tauri/lang/pt-br.json b/src-tauri/lang/pt-br.json index 3197d25..e8f1932 100644 --- a/src-tauri/lang/pt-br.json +++ b/src-tauri/lang/pt-br.json @@ -44,7 +44,9 @@ "resources": "Baixar os Recursos do Grasscutter ", "game": "Baixar o Jogo", "aio_header": "Downloads Tudo-em-Um:", - "individual_header": "Downloads Individuais:" + "individual_header": "Downloads Individuais:", + "mods_header": "Mods:", + "migoto": "Baixar o GIMI 3dmigoto" }, "download_status": { "downloading": "Baixando", diff --git a/src-tauri/lang/ru.json b/src-tauri/lang/ru.json index 19ed185..42b3e52 100644 --- a/src-tauri/lang/ru.json +++ b/src-tauri/lang/ru.json @@ -43,7 +43,9 @@ "resources": "Скачать ресурсы Grasscutter", "game": "Скачать Игру", "aio_header": "Все в одной загрузке:", - "individual_header": "загрузка отдельных частей:" + "individual_header": "загрузка отдельных частей:", + "mods_header": "Mods:", + "migoto": "Скачать GIMI 3dmigoto" }, "download_status": { "downloading": "Скачивание", diff --git a/src-tauri/lang/vi.json b/src-tauri/lang/vi.json index 11eced5..7f51bc6 100644 --- a/src-tauri/lang/vi.json +++ b/src-tauri/lang/vi.json @@ -44,7 +44,9 @@ "resources": "Tải tài nguyên Grasscutter", "game": "Tải game", "aio_header": "Tải xuống tất cả trong một:", - "individual_header": "Tải xuống từng phần:" + "individual_header": "Tải xuống từng phần:", + "mods_header": "Mods:", + "migoto": "Tải GIMI 3dmigoto" }, "download_status": { "downloading": "Đang tải", diff --git a/src-tauri/src/unzip.rs b/src-tauri/src/unzip.rs index 7e0b9b2..ac16f06 100644 --- a/src-tauri/src/unzip.rs +++ b/src-tauri/src/unzip.rs @@ -103,6 +103,12 @@ pub fn unzip( .unwrap(); } + if zipfile.contains("3dmigoto") { + window + .emit("migoto_extracted", destpath.to_string() + "3DMigoto Loader.exe") + .unwrap(); + } + // Delete zip file match std::fs::remove_file(&zipfile) { Ok(_) => { diff --git a/src/ui/Main.tsx b/src/ui/Main.tsx index 61deed1..52ed17c 100644 --- a/src/ui/Main.tsx +++ b/src/ui/Main.tsx @@ -65,6 +65,14 @@ export class Main extends React.Component { setConfigOption('grasscutter_path', payload) }) + listen('migoto_extracted', ({ payload }: { payload: string }) => { + setConfigOption('migoto_path', payload) + + invoke('set_migoto_target', { + migotoPath: payload, + }) + }) + // Emitted for rsa replacing-purposes listen('game_closed', async () => { const wasPatched = await getConfigOption('patch_rsa') diff --git a/src/ui/components/menu/Downloads.tsx b/src/ui/components/menu/Downloads.tsx index 433b691..13a8b8c 100644 --- a/src/ui/components/menu/Downloads.tsx +++ b/src/ui/components/menu/Downloads.tsx @@ -19,6 +19,7 @@ const DEV_REPO_DOWNLOAD = 'https://github.com/Grasscutters/Grasscutter/archive/r 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://gitlab.com/YuukiPS/GC-Resources/-/archive/3.5/GC-Resources-3.5.zip' // Use Yuuki res as grasscutter crepe res are broken +const MIGOTO_DOWNLOAD = 'https://github.com/SilentNightSound/GI-Model-Importer/releases/download/V6.0/3dmigoto-GIMI-for-playing-mods.zip' interface IProps { closeFn: () => void @@ -30,8 +31,10 @@ interface IState { grasscutter_downloading: boolean resources_downloading: boolean repo_downloading: boolean + migoto_downloading: boolean grasscutter_set: boolean resources_exist: boolean + swag: boolean } export default class Downloads extends React.Component { @@ -43,8 +46,10 @@ export default class Downloads extends React.Component { grasscutter_downloading: this.props.downloadManager.downloadingJar(), resources_downloading: this.props.downloadManager.downloadingResources(), repo_downloading: this.props.downloadManager.downloadingRepo(), + migoto_downloading: this.props.downloadManager.downloadingMigoto(), grasscutter_set: false, resources_exist: false, + swag: false, } this.getGrasscutterFolder = this.getGrasscutterFolder.bind(this) @@ -54,11 +59,17 @@ export default class Downloads extends React.Component { this.downloadGrasscutterStable = this.downloadGrasscutterStable.bind(this) this.downloadGrasscutterLatest = this.downloadGrasscutterLatest.bind(this) this.downloadResources = this.downloadResources.bind(this) + this.downloadMigoto = this.downloadMigoto.bind(this) this.toggleButtons = this.toggleButtons.bind(this) } async componentDidMount() { const gc_path = await getConfigOption('grasscutter_path') + const swag = await getConfigOption('swag_mode') + + this.setState({ + swag: swag || false, + }) listen('jar_extracted', () => { this.setState({ grasscutter_set: true }, this.forceUpdate) @@ -113,6 +124,13 @@ export default class Downloads extends React.Component { return folderPath } + async getCultivationFolder() { + + const folderPath = await dataDir() + 'cultivation' + + return folderPath + } + async downloadGrasscutterFullBuild() { const folder = await this.getGrasscutterFolder() this.props.downloadManager.addDownload(FULL_BUILD_DOWNLOAD, folder + '\\GrasscutterCulti.zip', async () => { @@ -201,6 +219,20 @@ export default class Downloads extends React.Component { this.toggleButtons() } + async downloadMigoto() { + const folder = await this.getCultivationFolder() + '\\3dmigoto' + await invoke('dir_create', { + path: folder + }) + + this.props.downloadManager.addDownload(MIGOTO_DOWNLOAD, folder + '\\GIMI-3dmigoto.zip', async () => { + await unzip(folder + '\\GIMI-3dmigoto.zip', folder + '\\', true) + this.toggleButtons() + }) + + this.toggleButtons() + } + async toggleButtons() { const gc_path = await getConfigOption('grasscutter_path') @@ -210,6 +242,7 @@ export default class Downloads extends React.Component { grasscutter_downloading: this.props.downloadManager.downloadingJar(), resources_downloading: this.props.downloadManager.downloadingResources(), repo_downloading: this.props.downloadManager.downloadingRepo(), + migoto_downloading: this.props.downloadManager.downloadingMigoto(), grasscutter_set: gc_path !== '', }) } @@ -336,6 +369,30 @@ export default class Downloads extends React.Component { + + {this.state.swag && ( + <> + +
+ +
+
+
+ + +
+
+ + + +
+
+ + )} ) } diff --git a/src/utils/download.ts b/src/utils/download.ts index c9ed7c6..496e6b6 100644 --- a/src/utils/download.ts +++ b/src/utils/download.ts @@ -117,6 +117,10 @@ export default class DownloadHandler { downloadingRepo() { return this.downloads.some((d) => d.path.includes('grasscutter_repo.zip')) } + + downloadingMigoto() { + return this.downloads.some((d) => d.path.includes('3dmigoto')) + } addDownload(url: string, path: string, onFinish?: () => void) { // Begin download from rust backend, don't add if the download addition fails