68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type Instance struct {
|
|
InstanceName string
|
|
ModpackId string
|
|
ModpackVersion string
|
|
}
|
|
|
|
type InstanceManager struct {
|
|
instances []Instance
|
|
app *App
|
|
}
|
|
|
|
func (i *InstanceManager)SearchInstances() {
|
|
i.instances = []Instance{}
|
|
dir := i.app.PrismLauncher.GetInstanceDir()
|
|
if _, err := os.Stat(dir); err != nil {
|
|
return
|
|
}
|
|
subdirs, _ := os.ReadDir(dir)
|
|
for _, d := range subdirs {
|
|
if !d.IsDir() {
|
|
continue
|
|
}
|
|
if _, err := os.Stat(filepath.Join(dir, d.Name(), "instance.json")); err != nil {
|
|
continue
|
|
}
|
|
f, _ := os.OpenFile(filepath.Join(dir, d.Name(), "instance.json"), os.O_RDONLY, 0755)
|
|
defer f.Close()
|
|
buff := new(bytes.Buffer)
|
|
io.Copy(buff, f)
|
|
instance := Instance{}
|
|
json.Unmarshal(buff.Bytes(), &instance)
|
|
fmt.Printf("Found Instance: %+v\n", instance)
|
|
i.instances = append(i.instances, instance)
|
|
}
|
|
}
|
|
|
|
func (i *InstanceManager)InstallModpack(modpack Modpack, instanceName string){
|
|
i.app.Status(fmt.Sprintf("Installing %s", modpack.Name))
|
|
version := modpack.Versions[len(modpack.Versions)-1]
|
|
dname, _ := os.MkdirTemp("", "fclauncher-*")
|
|
f, _ := os.OpenFile(filepath.Join(dname, instanceName+".mrpack"), os.O_CREATE|os.O_RDWR, 0755)
|
|
defer f.Close()
|
|
HttpDownload(modpack.Id + "/" + version.File, f, i.app.Ctx)
|
|
i.app.PrismLauncher.ImportModpack(f.Name())
|
|
instance := Instance{InstanceName: instanceName, ModpackVersion: version.Version, ModpackId: modpack.Id}
|
|
i.instances = append(i.instances, instance)
|
|
f, _ = os.OpenFile(filepath.Join(i.app.PrismLauncher.GetInstanceDir(), instanceName, "instance.json"), os.O_CREATE|os.O_RDWR, 0755)
|
|
defer f.Close()
|
|
data, _ := json.Marshal(instance)
|
|
f.Write(data)
|
|
}
|
|
|
|
func (i *InstanceManager)GetInstances() []Instance{
|
|
return i.instances
|
|
}
|
|
|