write modinfo.json after installing mod

This commit is contained in:
SpikeHD
2022-07-24 20:03:16 -07:00
parent 5077c19fdc
commit 552d612e7c
6 changed files with 84 additions and 36 deletions

View File

@@ -1,3 +1,4 @@
import { invoke } from '@tauri-apps/api'
import React from 'react'
import DownloadHandler from '../utils/download'
import { getModDownload, ModData } from '../utils/gamebanana'
@@ -69,8 +70,15 @@ export class Mods extends React.Component<IProps, IState> {
this.props.downloadHandler.addDownload(firstLink, modPath, async () => {
console.log('Unzipping:', mod.name)
unzip(modPath, modFolder, false, () => {
console.log('DONE MOD DOWNLOAD')
const unzipRes = await unzip(modPath, modFolder, false)
console.log(`${unzipRes.new_folder}/modinfo.json`)
console.log(unzipRes)
// Write a modinfo.json file
invoke('write_file', {
path: `${unzipRes.new_folder}/modinfo.json`,
contents: JSON.stringify(mod),
})
})
}

View File

@@ -111,8 +111,9 @@ export default class Downloads extends React.Component<IProps, IState> {
async downloadGrasscutterStableRepo() {
const folder = await this.getGrasscutterFolder()
this.props.downloadManager.addDownload(STABLE_REPO_DOWNLOAD, folder + '\\grasscutter_repo.zip', () => {
unzip(folder + '\\grasscutter_repo.zip', folder + '\\', true, this.toggleButtons)
this.props.downloadManager.addDownload(STABLE_REPO_DOWNLOAD, folder + '\\grasscutter_repo.zip', async () => {
await unzip(folder + '\\grasscutter_repo.zip', folder + '\\', true)
this.toggleButtons()
})
this.toggleButtons()
@@ -120,8 +121,9 @@ export default class Downloads extends React.Component<IProps, IState> {
async downloadGrasscutterDevRepo() {
const folder = await this.getGrasscutterFolder()
this.props.downloadManager.addDownload(DEV_REPO_DOWNLOAD, folder + '\\grasscutter_repo.zip', () => {
unzip(folder + '\\grasscutter_repo.zip', folder + '\\', true, this.toggleButtons)
this.props.downloadManager.addDownload(DEV_REPO_DOWNLOAD, folder + '\\grasscutter_repo.zip', async () => {
await unzip(folder + '\\grasscutter_repo.zip', folder + '\\', true)
this.toggleButtons()
})
this.toggleButtons()
@@ -129,8 +131,9 @@ export default class Downloads extends React.Component<IProps, IState> {
async downloadGrasscutterStable() {
const folder = await this.getGrasscutterFolder()
this.props.downloadManager.addDownload(STABLE_DOWNLOAD, folder + '\\grasscutter.zip', () => {
unzip(folder + '\\grasscutter.zip', folder + '\\', true, this.toggleButtons)
this.props.downloadManager.addDownload(STABLE_DOWNLOAD, folder + '\\grasscutter.zip', async () => {
await unzip(folder + '\\grasscutter.zip', folder + '\\', true)
this.toggleButtons
})
// Also add repo download
@@ -141,8 +144,9 @@ export default class Downloads extends React.Component<IProps, IState> {
async downloadGrasscutterLatest() {
const folder = await this.getGrasscutterFolder()
this.props.downloadManager.addDownload(DEV_DOWNLOAD, folder + '\\grasscutter.zip', () => {
unzip(folder + '\\grasscutter.zip', folder + '\\', true, this.toggleButtons)
this.props.downloadManager.addDownload(DEV_DOWNLOAD, folder + '\\grasscutter.zip', async () => {
await unzip(folder + '\\grasscutter.zip', folder + '\\', true)
this.toggleButtons()
})
// Also add repo download
@@ -165,15 +169,14 @@ export default class Downloads extends React.Component<IProps, IState> {
})
}
await unzip(folder + '\\resources.zip', folder + '\\', true, () => {
// Rename folder to resources
invoke('rename', {
path: folder + '\\Resources',
newName: 'resources',
})
this.toggleButtons()
await unzip(folder + '\\resources.zip', folder + '\\', true)
// Rename folder to resources
invoke('rename', {
path: folder + '\\Resources',
newName: 'resources',
})
this.toggleButtons()
})
this.toggleButtons()

View File

@@ -45,11 +45,10 @@ export default class Downloads extends React.Component<IProps, IState> {
async downloadGame() {
const folder = this.state.gameDownloadFolder
this.props.downloadManager.addDownload(GAME_DOWNLOAD, folder + '\\game.zip', () => {
unzip(folder + '\\game.zip', folder + '\\', true, () => {
this.setState({
gameDownloading: false,
})
this.props.downloadManager.addDownload(GAME_DOWNLOAD, folder + '\\game.zip', async () => {
await unzip(folder + '\\game.zip', folder + '\\', true)
this.setState({
gameDownloading: false,
})
})

View File

@@ -49,6 +49,10 @@ export class ModList extends React.Component<IProps, IState> {
return mod
}
const newInfo = mod.info as PartialModData
console.log(newInfo)
return mod
})

View File

@@ -1,16 +1,24 @@
import { invoke } from '@tauri-apps/api'
import { listen } from '@tauri-apps/api/event'
export function unzip(file: string, dest: string, topLevelStrip?: boolean, onFinish?: () => void) {
invoke('unzip', {
zipfile: file,
destpath: dest,
topLevelStrip,
})
interface UnzipPayload {
file: string
new_folder: string
}
listen('extract_end', ({ payload }) => {
if (payload === file && onFinish) {
onFinish()
}
export function unzip(file: string, dest: string, topLevelStrip?: boolean): Promise<UnzipPayload> {
return new Promise((resolve) => {
invoke('unzip', {
zipfile: file,
destpath: dest,
topLevelStrip,
})
listen('extract_end', ({ payload }) => {
// @ts-expect-error Payload is an object
if (payload?.file === file) {
resolve(payload as UnzipPayload)
}
})
})
}