diff --git a/fclauncher/app.go b/fclauncher/app.go index f2b3731..c173a84 100644 --- a/fclauncher/app.go +++ b/fclauncher/app.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "context" "encoding/json" "fmt" @@ -11,10 +12,19 @@ import ( "path/filepath" "runtime" + "github.com/inconshreveable/go-update" wruntime "github.com/wailsapp/wails/v2/pkg/runtime" ) const client_id string = "9305aeb8-5ecb-4e7a-b28f-c33aefcfbd8d" +const client_version string = "0.0.1" + +type LauncherMetadata struct { + Schema_Version string + Version string + Desc string + Downloads map[string]string +} // App struct type App struct { @@ -63,6 +73,36 @@ func openbrowser(url string) { } func (a *App) CheckPrerequisites() { + buff := new(bytes.Buffer) + err := HttpDownload("launcher.json", buff, nil) + fmt.Printf("Starting\n") + if err == nil { + data, _ := io.ReadAll(buff) + meta := LauncherMetadata{} + json.Unmarshal(data, &meta) + if client_version != meta.Version { + //Update available! + val, _ := wruntime.MessageDialog(a.Ctx, wruntime.MessageDialogOptions{Type: wruntime.QuestionDialog, Title: "Update!", Message: fmt.Sprintf("There is an update available:\n\n%s -> %s\n\nUpdate Description:\n\n%s\n\nWould you like to update?\n", client_version, meta.Version, meta.Desc)}) + if val == "Yes" { + //run the update + fmt.Printf("Updating\n") + buff := new(bytes.Buffer) + HttpDownload(meta.Downloads[runtime.GOOS], buff, nil) + executable, _ := os.Executable() + err := update.Apply(buff, update.Options{}) + if err != nil { + fmt.Printf("Error!") + } + child := exec.Command(executable) + err = child.Start() + if err != nil { + fmt.Printf("Unable to launch: %s\n", err) + } + wruntime.Quit(a.Ctx) + } + } + } + a.Status("Querrying Existing Instances") a.Instance.SearchInstances() a.Status("Pulling Modpacks") @@ -90,7 +130,10 @@ func (a *App) CheckPrerequisites() { return } } - os.Remove(filepath.Join(dir, "FCLauncher", "authentication.json")) + err = os.Remove(filepath.Join(dir, "FCLauncher", "authentication.json")) + if err != nil { + fmt.Printf("Unable to delete auth file\n") + } os.MkdirAll(filepath.Join(dir, "FCLauncher"), 0755) f, _ := os.OpenFile(filepath.Join(dir, "FCLauncher", "authentication.json"), os.O_CREATE|os.O_RDWR, 0755) defer f.Close() diff --git a/fclauncher/frontend/package.json.md5 b/fclauncher/frontend/package.json.md5 index 20dd88f..b063894 100755 --- a/fclauncher/frontend/package.json.md5 +++ b/fclauncher/frontend/package.json.md5 @@ -1 +1 @@ -48cb20b8d107dab0a7876a449352234a \ No newline at end of file +ad9da3c17151b053a4d2fda8e3578901 \ No newline at end of file diff --git a/fclauncher/go.mod b/fclauncher/go.mod index d47cb1f..dcb1eba 100644 --- a/fclauncher/go.mod +++ b/fclauncher/go.mod @@ -6,6 +6,8 @@ toolchain go1.23.2 require github.com/wailsapp/wails/v2 v2.9.2 +require github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf + require ( github.com/bep/debounce v1.2.1 // indirect github.com/go-ole/go-ole v1.2.6 // indirect diff --git a/fclauncher/go.sum b/fclauncher/go.sum index b3caafc..da2a278 100644 --- a/fclauncher/go.sum +++ b/fclauncher/go.sum @@ -9,6 +9,8 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf h1:WfD7VjIE6z8dIvMsI4/s+1qr5EL+zoIGev1BQj1eoJ8= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf/go.mod h1:hyb9oH7vZsitZCiBt0ZvifOrB+qc8PS5IiilCIb87rg= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M=