Working on division between modpack and instance
This commit is contained in:
parent
db9ba30442
commit
4bcc2703d6
34
fclauncher/2
Normal file
34
fclauncher/2
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Instance struct {
|
||||||
|
InstanceName string
|
||||||
|
ModpackId string
|
||||||
|
ModpackVersion string
|
||||||
|
}
|
||||||
|
|
||||||
|
type InstanceManager struct {
|
||||||
|
instances []Instance
|
||||||
|
PrismLauncher Prism
|
||||||
|
ctx context.Context
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *InstanceManager)SearchInstances() {
|
||||||
|
i.instances = []Instance{}
|
||||||
|
dir := i.PrismLauncher.GetInstanceDir()
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
67
fclauncher/InstanceManager.go
Normal file
67
fclauncher/InstanceManager.go
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,6 @@ import (
|
|||||||
"archive/tar"
|
"archive/tar"
|
||||||
"bytes"
|
"bytes"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"context"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
@ -15,11 +14,11 @@ import (
|
|||||||
"github.com/zhyee/zipstream"
|
"github.com/zhyee/zipstream"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Java struct {
|
type JavaManager struct {
|
||||||
ctx context.Context
|
app *App
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Java)CheckJavaVer(version int) bool{
|
func (JavaManager)CheckJavaVer(version int) bool{
|
||||||
suffix := "lin"
|
suffix := "lin"
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
suffix = "win"
|
suffix = "win"
|
||||||
@ -35,13 +34,13 @@ func (Java)CheckJavaVer(version int) bool{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *Java)InstallJavaVer(version int) {
|
func (j *JavaManager)InstallJavaVer(version int) {
|
||||||
suffix := "lin.tar.gz"
|
suffix := "lin.tar.gz"
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
suffix = "win.zip"
|
suffix = "win.zip"
|
||||||
}
|
}
|
||||||
buff := new(bytes.Buffer)
|
buff := new(bytes.Buffer)
|
||||||
HttpDownload("java/"+fmt.Sprintf("java-%d-%s", version, suffix), buff, j.ctx)
|
HttpDownload("java/"+fmt.Sprintf("java-%d-%s", version, suffix), buff, j.app.Ctx)
|
||||||
path, _ := os.UserConfigDir()
|
path, _ := os.UserConfigDir()
|
||||||
suffix = "lin"
|
suffix = "lin"
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
|
62
fclauncher/Modpack.go
Normal file
62
fclauncher/Modpack.go
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Modpack struct {
|
||||||
|
Name string
|
||||||
|
Id string
|
||||||
|
Last_updated string
|
||||||
|
Versions []Version
|
||||||
|
}
|
||||||
|
|
||||||
|
type Version struct {
|
||||||
|
Version string
|
||||||
|
Data time.Time
|
||||||
|
File string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ModpackManager struct {
|
||||||
|
app *App
|
||||||
|
Modpacks []Modpack
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (m *ModpackManager) QuerryModpacks() {
|
||||||
|
buff := new(bytes.Buffer)
|
||||||
|
err := HttpDownload("modpacks.json", buff, nil)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(buff.Bytes(), &m.Modpacks)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for ind, pack := range m.Modpacks {
|
||||||
|
buff = new(bytes.Buffer)
|
||||||
|
err = HttpDownload(pack.Id + "/versions.json", buff, nil)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
json.Unmarshal(buff.Bytes(), &pack.Versions)
|
||||||
|
m.Modpacks[ind] = pack
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (m *ModpackManager) GetModpacks() []Modpack{
|
||||||
|
return m.Modpacks
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ModpackManager) GetModpack(id string) Modpack {
|
||||||
|
for _, pack := range m.Modpacks {
|
||||||
|
if pack.Id == id {
|
||||||
|
return pack
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Modpack{}
|
||||||
|
}
|
@ -2,36 +2,26 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/tar"
|
"archive/tar"
|
||||||
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"context"
|
"fmt"
|
||||||
"encoding/json"
|
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/zhyee/zipstream"
|
"github.com/zhyee/zipstream"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Prism struct {
|
type Prism struct {
|
||||||
Instances []Instance
|
app *App
|
||||||
ctx context.Context
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Instance struct {
|
|
||||||
Path string
|
|
||||||
Name string
|
|
||||||
MCVer string
|
|
||||||
JavaVer string
|
|
||||||
}
|
|
||||||
|
|
||||||
type Version struct {
|
|
||||||
Version string
|
|
||||||
Data time.Time
|
|
||||||
File string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Prism) CheckInstalled() bool {
|
func (Prism) CheckInstalled() bool {
|
||||||
path, _ := os.UserConfigDir()
|
path, _ := os.UserConfigDir()
|
||||||
@ -45,11 +35,13 @@ func (Prism) CheckInstalled() bool {
|
|||||||
|
|
||||||
func (p *Prism) Install() {
|
func (p *Prism) Install() {
|
||||||
suffix := "lin.tar.gz"
|
suffix := "lin.tar.gz"
|
||||||
|
shortSuffix := "lin"
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
suffix = "win.zip"
|
suffix = "win.zip"
|
||||||
|
shortSuffix = "win"
|
||||||
}
|
}
|
||||||
buff := new(bytes.Buffer)
|
buff := new(bytes.Buffer)
|
||||||
HttpDownload("prism/prism-"+suffix, buff, p.ctx)
|
HttpDownload("prism/prism-"+suffix, buff, p.app.Ctx)
|
||||||
path, _ := os.UserConfigDir()
|
path, _ := os.UserConfigDir()
|
||||||
os.MkdirAll(filepath.Join(path, "FCLauncher", "prism"), 0755)
|
os.MkdirAll(filepath.Join(path, "FCLauncher", "prism"), 0755)
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
@ -121,18 +113,51 @@ func (p *Prism) Install() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
dir, _ := os.UserConfigDir()
|
||||||
|
buff = new(bytes.Buffer)
|
||||||
|
HttpDownload("prism/prismlauncher.cfg", buff, nil)
|
||||||
func (p *Prism)InstallModpack(modpack Modpack){
|
scanner := bufio.NewScanner(buff)
|
||||||
buff := new(bytes.Buffer)
|
f, _ := os.OpenFile(filepath.Join(dir, "FCLauncher", "prism", "prismlauncher.cfg"), os.O_CREATE|os.O_RDWR, 0755)
|
||||||
HttpDownload(modpack.Id + "/versions.json", buff, nil)
|
|
||||||
var versions []Version
|
|
||||||
json.Unmarshal(buff.Bytes(), &versions)
|
|
||||||
version := versions[len(versions)-1]
|
|
||||||
dname, _ := os.MkdirTemp("", "fclauncher-*")
|
|
||||||
f, _ := os.OpenFile(filepath.Join(dname, modpack.Name+".mrpack"), os.O_CREATE|os.O_RDWR, 0755)
|
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
HttpDownload(modpack.Id + "/" + version.File, f, p.ctx)
|
for scanner.Scan() {
|
||||||
|
line := scanner.Text()
|
||||||
|
if strings.HasPrefix(line, "JavaPath") {
|
||||||
|
line = fmt.Sprintf("JavaPath=%s/FCLauncher/java/java-21-%s", dir, shortSuffix)
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(line, "LastHostname") {
|
||||||
|
host, _ := os.Hostname()
|
||||||
|
line = fmt.Sprintf("LastHostname=%s", host)
|
||||||
|
}
|
||||||
|
f.WriteString(line + "\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func (Prism)GetInstanceDir() string{
|
||||||
|
dir, _ := os.UserConfigDir()
|
||||||
|
return filepath.Join(dir, "FCLauncher", "prism", "instances")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (Prism)getExecutableName() string {
|
||||||
|
execName := "PrismLauncher"
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
execName = "prismlauncher.exe"
|
||||||
|
}
|
||||||
|
return execName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Prism)ImportModpack(path string) {
|
||||||
|
dir, _ := os.UserConfigDir()
|
||||||
|
child := exec.Command(filepath.Join(dir, "FCLauncher", "prism", p.getExecutableName()), "-I", path)
|
||||||
|
child.Start()
|
||||||
|
tokens := strings.Split(path, string(os.PathSeparator))
|
||||||
|
versionPath := filepath.Join(dir, "FCLauncher", "prism", "instances",strings.Split(tokens[len(tokens)-1], ".")[0], ".minecraft", "version.txt")
|
||||||
|
for {
|
||||||
|
time.Sleep(time.Second * 3)
|
||||||
|
if _, err := os.Stat(versionPath); err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
child.Process.Kill()
|
||||||
}
|
}
|
||||||
|
@ -1,91 +1,69 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/wailsapp/wails/v2/pkg/runtime"
|
"github.com/wailsapp/wails/v2/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// App struct
|
// App struct
|
||||||
type App struct {
|
type App struct {
|
||||||
ctx context.Context
|
Ctx context.Context
|
||||||
prism Prism
|
PrismLauncher Prism
|
||||||
java Java
|
Java JavaManager
|
||||||
|
Instance InstanceManager
|
||||||
|
Modpacks ModpackManager
|
||||||
}
|
}
|
||||||
|
|
||||||
type Modpack struct {
|
|
||||||
Name string
|
|
||||||
Id string
|
|
||||||
Last_updated string
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewApp creates a new App application struct
|
// NewApp creates a new App application struct
|
||||||
func NewApp() *App {
|
func NewApp() *App {
|
||||||
return &App{}
|
a := &App{}
|
||||||
|
a.PrismLauncher = Prism{app: a}
|
||||||
|
a.Java = JavaManager{app: a}
|
||||||
|
a.Instance = InstanceManager{app: a}
|
||||||
|
a.Modpacks = ModpackManager{app: a}
|
||||||
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
// startup is called when the app starts. The context is saved
|
// startup is called when the app starts. The context is saved
|
||||||
// so we can call the runtime methods
|
// so we can call the runtime methods
|
||||||
func (a *App) startup(ctx context.Context) {
|
func (a *App) startup(ctx context.Context) {
|
||||||
a.ctx = ctx
|
a.Ctx = ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
// Greet returns a greeting for the given name
|
// Greet returns a greeting for the given name
|
||||||
func (a *App) Greet(name string) string {
|
|
||||||
return fmt.Sprintf("Hello %s, It's show time!", name)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *App) GetModpacks() []Modpack {
|
|
||||||
buff := new(bytes.Buffer)
|
|
||||||
err := HttpDownload("modpacks.json", buff, nil)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
body, err := io.ReadAll(buff)
|
|
||||||
var modpacks []Modpack
|
|
||||||
err = json.Unmarshal([]byte(body), &modpacks)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err.Error())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return modpacks
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *App) CheckPrerequisites() {
|
func (a *App) CheckPrerequisites() {
|
||||||
a.status("Checking Prism")
|
a.Status("Querrying Existing Instances")
|
||||||
a.prism = Prism{ctx: a.ctx}
|
a.Instance.SearchInstances()
|
||||||
res := a.prism.CheckInstalled()
|
a.Status("Pulling Modpacks")
|
||||||
|
a.Modpacks.QuerryModpacks()
|
||||||
|
a.Status("Checking Prism")
|
||||||
|
res := a.PrismLauncher.CheckInstalled()
|
||||||
if res {
|
if res {
|
||||||
a.status("Prism OK")
|
a.Status("Prism OK")
|
||||||
} else {
|
} else {
|
||||||
a.status("Prism MISSING")
|
a.Status("Prism MISSING")
|
||||||
a.status("Installing Prism")
|
a.Status("Installing Prism")
|
||||||
a.prism.Install()
|
a.PrismLauncher.Install()
|
||||||
a.status("Prism Installed")
|
a.Status("Prism Installed")
|
||||||
}
|
}
|
||||||
a.status("Checking Java 21")
|
a.Status("Checking Java 21")
|
||||||
a.java = Java{ctx: a.ctx}
|
res = a.Java.CheckJavaVer(21)
|
||||||
res = a.java.CheckJavaVer(21)
|
|
||||||
if res {
|
if res {
|
||||||
a.status("Java 21 OK")
|
a.Status("Java 21 OK")
|
||||||
} else {
|
} else {
|
||||||
a.status("Java 21 MISSING")
|
a.Status("Java 21 MISSING")
|
||||||
a.status("Installing Java 21")
|
a.Status("Installing Java 21")
|
||||||
a.java.InstallJavaVer(21)
|
a.Java.InstallJavaVer(21)
|
||||||
a.status("Java 21 Installed")
|
a.Status("Java 21 Installed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) InstallModpack(pack Modpack) {
|
func (a *App) Status(status string) {
|
||||||
a.status(fmt.Sprintf("Installing %s\n", pack.Name))
|
|
||||||
a.prism.InstallModpack(pack)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *App) status(status string) {
|
|
||||||
fmt.Printf("LOG: %s\n", status)
|
fmt.Printf("LOG: %s\n", status)
|
||||||
runtime.EventsEmit(a.ctx, "status", status)
|
runtime.EventsEmit(a.Ctx, "status", status)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import logo from './assets/images/logo-universal.png'
|
import logo from './assets/images/logo-universal.png'
|
||||||
import Client from './Client.svelte'
|
import Instances from './Instances.svelte'
|
||||||
import Loading from './Loading.svelte'
|
import Loading from './Loading.svelte'
|
||||||
import {CheckPrerequisites} from '../wailsjs/go/main/App.js'
|
import {CheckPrerequisites} from '../wailsjs/go/main/App.js'
|
||||||
import { onMount } from 'svelte'
|
import { onMount } from 'svelte'
|
||||||
@ -20,7 +20,7 @@
|
|||||||
{#if $loading}
|
{#if $loading}
|
||||||
<Loading />
|
<Loading />
|
||||||
{:else}
|
{:else}
|
||||||
<Client />
|
<Instances />
|
||||||
{/if}
|
{/if}
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import {GetModpacks, InstallModpack} from '../wailsjs/go/main/App.js'
|
|
||||||
import {onMount} from 'svelte'
|
|
||||||
import {loading} from './global.ts'
|
|
||||||
|
|
||||||
let modpacks: string[] = []
|
|
||||||
let pack: Modpack
|
|
||||||
|
|
||||||
onMount(() => {
|
|
||||||
GetModpacks().then((result) => {
|
|
||||||
modpacks = result
|
|
||||||
pack = modpacks[0]
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
function onclick(event) {
|
|
||||||
$loading = true
|
|
||||||
InstallModpack(pack).then(() => {$loading = false})
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<select bind:value={pack} name="pack">Select a Modpack:
|
|
||||||
{#each modpacks as pack}
|
|
||||||
<option value={pack}>{pack.Name}</option>
|
|
||||||
{/each}
|
|
||||||
</select>
|
|
||||||
<button on:click={onclick}>Launch</button>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
</style>
|
|
74
fclauncher/frontend/src/Instances.svelte
Normal file
74
fclauncher/frontend/src/Instances.svelte
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import {GetModpacks, GetModpack} from '../wailsjs/go/main/ModpackManager.js'
|
||||||
|
import {InstallModpack, GetInstances} from '../wailsjs/go/main/InstanceManager.js'
|
||||||
|
import {onMount} from 'svelte'
|
||||||
|
import {loading} from './global.ts'
|
||||||
|
|
||||||
|
let modpacks: Modpack[] = []
|
||||||
|
let pack: string
|
||||||
|
let instances: Instance[] = []
|
||||||
|
let instance: Instance
|
||||||
|
let addingInstance: boolean = false
|
||||||
|
let name: string = "New Modpack"
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
GetModpacks().then((result) => {
|
||||||
|
modpacks = result
|
||||||
|
pack = modpacks[0].Id
|
||||||
|
name = modpacks[0].Name
|
||||||
|
})
|
||||||
|
GetInstances().then((result) => {
|
||||||
|
instances = result
|
||||||
|
instance = instances[0]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function onclick(event) {
|
||||||
|
}
|
||||||
|
|
||||||
|
function install(){
|
||||||
|
$loading = true
|
||||||
|
GetModpack(pack).then((result) => {
|
||||||
|
InstallModpack(result, name).then(() => {
|
||||||
|
onMount()
|
||||||
|
addingInstance = false
|
||||||
|
$loading = false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function onchange(event){
|
||||||
|
GetModpack(event.target.value).then((result) => {
|
||||||
|
name = result.Name
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<select bind:value={instance} name="pack">Select a Modpack:
|
||||||
|
{#each instances as instance}
|
||||||
|
<option value={instance}>{instance.InstanceName}</option>
|
||||||
|
{/each}
|
||||||
|
</select>
|
||||||
|
<button on:click={onclick}>Launch</button>
|
||||||
|
<br/>
|
||||||
|
{#if addingInstance}
|
||||||
|
<select id="pack" on:change={onchange} bind:value={pack} name="pack">Select a Modpack:
|
||||||
|
{#each modpacks as pack}
|
||||||
|
<option value={pack.Id}>{pack.Name}</option>
|
||||||
|
{/each}
|
||||||
|
</select>
|
||||||
|
<br/>
|
||||||
|
<input bind:value={name} />
|
||||||
|
<br/>
|
||||||
|
<button on:click={install}>Install</button>
|
||||||
|
<button on:click={() => {addingInstance = false}}>Cancel</button>
|
||||||
|
{:else}
|
||||||
|
<button on:click={() => {addingInstance = true}}>Add Instance</button>
|
||||||
|
{/if}
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
7
fclauncher/frontend/wailsjs/go/main/App.d.ts
vendored
7
fclauncher/frontend/wailsjs/go/main/App.d.ts
vendored
@ -1,11 +1,6 @@
|
|||||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
// This file is automatically generated. DO NOT EDIT
|
// This file is automatically generated. DO NOT EDIT
|
||||||
import {main} from '../models';
|
|
||||||
|
|
||||||
export function CheckPrerequisites():Promise<void>;
|
export function CheckPrerequisites():Promise<void>;
|
||||||
|
|
||||||
export function GetModpacks():Promise<Array<main.Modpack>>;
|
export function Status(arg1:string):Promise<void>;
|
||||||
|
|
||||||
export function Greet(arg1:string):Promise<string>;
|
|
||||||
|
|
||||||
export function InstallModpack(arg1:main.Modpack):Promise<void>;
|
|
||||||
|
@ -6,14 +6,6 @@ export function CheckPrerequisites() {
|
|||||||
return window['go']['main']['App']['CheckPrerequisites']();
|
return window['go']['main']['App']['CheckPrerequisites']();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function GetModpacks() {
|
export function Status(arg1) {
|
||||||
return window['go']['main']['App']['GetModpacks']();
|
return window['go']['main']['App']['Status'](arg1);
|
||||||
}
|
|
||||||
|
|
||||||
export function Greet(arg1) {
|
|
||||||
return window['go']['main']['App']['Greet'](arg1);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function InstallModpack(arg1) {
|
|
||||||
return window['go']['main']['App']['InstallModpack'](arg1);
|
|
||||||
}
|
}
|
||||||
|
9
fclauncher/frontend/wailsjs/go/main/InstanceManager.d.ts
vendored
Executable file
9
fclauncher/frontend/wailsjs/go/main/InstanceManager.d.ts
vendored
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
import {main} from '../models';
|
||||||
|
|
||||||
|
export function GetInstances():Promise<Array<main.Instance>>;
|
||||||
|
|
||||||
|
export function InstallModpack(arg1:main.Modpack,arg2:string):Promise<void>;
|
||||||
|
|
||||||
|
export function SearchInstances():Promise<void>;
|
15
fclauncher/frontend/wailsjs/go/main/InstanceManager.js
Executable file
15
fclauncher/frontend/wailsjs/go/main/InstanceManager.js
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
// @ts-check
|
||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
|
||||||
|
export function GetInstances() {
|
||||||
|
return window['go']['main']['InstanceManager']['GetInstances']();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function InstallModpack(arg1, arg2) {
|
||||||
|
return window['go']['main']['InstanceManager']['InstallModpack'](arg1, arg2);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SearchInstances() {
|
||||||
|
return window['go']['main']['InstanceManager']['SearchInstances']();
|
||||||
|
}
|
6
fclauncher/frontend/wailsjs/go/main/JavaManager.d.ts
vendored
Executable file
6
fclauncher/frontend/wailsjs/go/main/JavaManager.d.ts
vendored
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
|
||||||
|
export function CheckJavaVer(arg1:number):Promise<boolean>;
|
||||||
|
|
||||||
|
export function InstallJavaVer(arg1:number):Promise<void>;
|
11
fclauncher/frontend/wailsjs/go/main/JavaManager.js
Executable file
11
fclauncher/frontend/wailsjs/go/main/JavaManager.js
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
// @ts-check
|
||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
|
||||||
|
export function CheckJavaVer(arg1) {
|
||||||
|
return window['go']['main']['JavaManager']['CheckJavaVer'](arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function InstallJavaVer(arg1) {
|
||||||
|
return window['go']['main']['JavaManager']['InstallJavaVer'](arg1);
|
||||||
|
}
|
9
fclauncher/frontend/wailsjs/go/main/ModpackManager.d.ts
vendored
Executable file
9
fclauncher/frontend/wailsjs/go/main/ModpackManager.d.ts
vendored
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
import {main} from '../models';
|
||||||
|
|
||||||
|
export function GetModpack(arg1:string):Promise<main.Modpack>;
|
||||||
|
|
||||||
|
export function GetModpacks():Promise<Array<main.Modpack>>;
|
||||||
|
|
||||||
|
export function QuerryModpacks():Promise<void>;
|
15
fclauncher/frontend/wailsjs/go/main/ModpackManager.js
Executable file
15
fclauncher/frontend/wailsjs/go/main/ModpackManager.js
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
// @ts-check
|
||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
|
||||||
|
export function GetModpack(arg1) {
|
||||||
|
return window['go']['main']['ModpackManager']['GetModpack'](arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetModpacks() {
|
||||||
|
return window['go']['main']['ModpackManager']['GetModpacks']();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function QuerryModpacks() {
|
||||||
|
return window['go']['main']['ModpackManager']['QuerryModpacks']();
|
||||||
|
}
|
10
fclauncher/frontend/wailsjs/go/main/Prism.d.ts
vendored
Executable file
10
fclauncher/frontend/wailsjs/go/main/Prism.d.ts
vendored
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
|
||||||
|
export function CheckInstalled():Promise<boolean>;
|
||||||
|
|
||||||
|
export function GetInstanceDir():Promise<string>;
|
||||||
|
|
||||||
|
export function ImportModpack(arg1:string):Promise<void>;
|
||||||
|
|
||||||
|
export function Install():Promise<void>;
|
19
fclauncher/frontend/wailsjs/go/main/Prism.js
Executable file
19
fclauncher/frontend/wailsjs/go/main/Prism.js
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
// @ts-check
|
||||||
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
|
||||||
|
export function CheckInstalled() {
|
||||||
|
return window['go']['main']['Prism']['CheckInstalled']();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetInstanceDir() {
|
||||||
|
return window['go']['main']['Prism']['GetInstanceDir']();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ImportModpack(arg1) {
|
||||||
|
return window['go']['main']['Prism']['ImportModpack'](arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function Install() {
|
||||||
|
return window['go']['main']['Prism']['Install']();
|
||||||
|
}
|
@ -1,9 +1,61 @@
|
|||||||
export namespace main {
|
export namespace main {
|
||||||
|
|
||||||
|
export class Instance {
|
||||||
|
InstanceName: string;
|
||||||
|
ModpackId: string;
|
||||||
|
ModpackVersion: string;
|
||||||
|
|
||||||
|
static createFrom(source: any = {}) {
|
||||||
|
return new Instance(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(source: any = {}) {
|
||||||
|
if ('string' === typeof source) source = JSON.parse(source);
|
||||||
|
this.InstanceName = source["InstanceName"];
|
||||||
|
this.ModpackId = source["ModpackId"];
|
||||||
|
this.ModpackVersion = source["ModpackVersion"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class Version {
|
||||||
|
Version: string;
|
||||||
|
// Go type: time
|
||||||
|
Data: any;
|
||||||
|
File: string;
|
||||||
|
|
||||||
|
static createFrom(source: any = {}) {
|
||||||
|
return new Version(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(source: any = {}) {
|
||||||
|
if ('string' === typeof source) source = JSON.parse(source);
|
||||||
|
this.Version = source["Version"];
|
||||||
|
this.Data = this.convertValues(source["Data"], null);
|
||||||
|
this.File = source["File"];
|
||||||
|
}
|
||||||
|
|
||||||
|
convertValues(a: any, classs: any, asMap: boolean = false): any {
|
||||||
|
if (!a) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
if (a.slice && a.map) {
|
||||||
|
return (a as any[]).map(elem => this.convertValues(elem, classs));
|
||||||
|
} else if ("object" === typeof a) {
|
||||||
|
if (asMap) {
|
||||||
|
for (const key of Object.keys(a)) {
|
||||||
|
a[key] = new classs(a[key]);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return new classs(a);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
export class Modpack {
|
export class Modpack {
|
||||||
Name: string;
|
Name: string;
|
||||||
Id: string;
|
Id: string;
|
||||||
Last_updated: string;
|
Last_updated: string;
|
||||||
|
Versions: Version[];
|
||||||
|
|
||||||
static createFrom(source: any = {}) {
|
static createFrom(source: any = {}) {
|
||||||
return new Modpack(source);
|
return new Modpack(source);
|
||||||
@ -14,6 +66,25 @@ export namespace main {
|
|||||||
this.Name = source["Name"];
|
this.Name = source["Name"];
|
||||||
this.Id = source["Id"];
|
this.Id = source["Id"];
|
||||||
this.Last_updated = source["Last_updated"];
|
this.Last_updated = source["Last_updated"];
|
||||||
|
this.Versions = this.convertValues(source["Versions"], Version);
|
||||||
|
}
|
||||||
|
|
||||||
|
convertValues(a: any, classs: any, asMap: boolean = false): any {
|
||||||
|
if (!a) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
if (a.slice && a.map) {
|
||||||
|
return (a as any[]).map(elem => this.convertValues(elem, classs));
|
||||||
|
} else if ("object" === typeof a) {
|
||||||
|
if (asMap) {
|
||||||
|
for (const key of Object.keys(a)) {
|
||||||
|
a[key] = new classs(a[key]);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return new classs(a);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +27,10 @@ func main() {
|
|||||||
OnStartup: app.startup,
|
OnStartup: app.startup,
|
||||||
Bind: []interface{}{
|
Bind: []interface{}{
|
||||||
app,
|
app,
|
||||||
|
&app.Instance,
|
||||||
|
&app.PrismLauncher,
|
||||||
|
&app.Java,
|
||||||
|
&app.Modpacks,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user