88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package diffService
|
|
|
|
import (
|
|
"firefly-launcher/pkg/constant"
|
|
"firefly-launcher/pkg/sevenzip"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/wailsapp/wails/v3/pkg/application"
|
|
)
|
|
|
|
func (h *DiffService) DataExtract(gamePath, patchPath string) (bool, string) {
|
|
os.RemoveAll(constant.TempUrl)
|
|
if _, err := os.Stat(gamePath); err != nil {
|
|
return false, err.Error()
|
|
}
|
|
|
|
if _, err := os.Stat(patchPath); err != nil {
|
|
return false, err.Error()
|
|
}
|
|
|
|
if _, err := os.Stat(constant.TempUrl); os.IsNotExist(err) {
|
|
if err := os.MkdirAll(constant.TempUrl, os.ModePerm); err != nil {
|
|
return false, err.Error()
|
|
}
|
|
}
|
|
|
|
if err := sevenzip.ExtractAllFilesFromZip(patchPath, constant.TempUrl); err != nil {
|
|
os.RemoveAll(constant.TempUrl)
|
|
return false, err.Error()
|
|
}
|
|
return true, "extract completed"
|
|
}
|
|
|
|
func (h *DiffService) CutData(gamePath string) (bool, string) {
|
|
if _, err := os.Stat(constant.TempUrl); os.IsNotExist(err) {
|
|
return false, err.Error()
|
|
}
|
|
|
|
err := filepath.Walk(constant.TempUrl, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
relPath, err := filepath.Rel(constant.TempUrl, path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
destPath := filepath.Join(gamePath, relPath)
|
|
application.Get().Event.Emit("diff:message", map[string]string{"message": destPath})
|
|
if info.IsDir() {
|
|
return os.MkdirAll(destPath, os.ModePerm)
|
|
}
|
|
|
|
if err := os.MkdirAll(filepath.Dir(destPath), os.ModePerm); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := os.Rename(path, destPath); err != nil {
|
|
srcFile, err := os.Open(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer srcFile.Close()
|
|
|
|
dstFile, err := os.Create(destPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer dstFile.Close()
|
|
|
|
if _, err := io.Copy(dstFile, srcFile); err != nil {
|
|
return err
|
|
}
|
|
os.Remove(path)
|
|
}
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
os.RemoveAll(constant.TempUrl)
|
|
return false, err.Error()
|
|
}
|
|
os.RemoveAll(constant.TempUrl)
|
|
return true, "cut completed"
|
|
}
|