feat: initial commit
This commit is contained in:
104
examples/wails3_init_updater/updater.go
Normal file
104
examples/wails3_init_updater/updater.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/Eriyc/rules_wails/pkg/wails3kit/updates"
|
||||
updatesdarwin "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/platform/darwin"
|
||||
updateslinux "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/platform/linux"
|
||||
updateswindows "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/platform/windows"
|
||||
httpmanifest "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/providers/httpmanifest"
|
||||
filestore "github.com/Eriyc/rules_wails/pkg/wails3kit/updates/storage/file"
|
||||
)
|
||||
|
||||
const (
|
||||
productID = "com.eriyc.updater-example"
|
||||
currentVersion = "0.1.0"
|
||||
)
|
||||
|
||||
type updaterSettings struct {
|
||||
ManifestURL string
|
||||
Token string
|
||||
}
|
||||
|
||||
func currentAppDescriptor() (updates.AppDescriptor, error) {
|
||||
executablePath, err := os.Executable()
|
||||
if err != nil {
|
||||
return updates.AppDescriptor{}, err
|
||||
}
|
||||
workingDirectory, err := os.Getwd()
|
||||
if err != nil {
|
||||
return updates.AppDescriptor{}, err
|
||||
}
|
||||
|
||||
return updates.AppDescriptor{
|
||||
ProductID: productID,
|
||||
CurrentVersion: currentVersion,
|
||||
Channel: updates.ChannelStable,
|
||||
OS: runtime.GOOS,
|
||||
Arch: runtime.GOARCH,
|
||||
ExecutablePath: executablePath,
|
||||
Args: os.Args[1:],
|
||||
WorkingDirectory: workingDirectory,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func loadUpdaterSettings() updaterSettings {
|
||||
settings := updaterSettings{
|
||||
ManifestURL: os.Getenv("UPDATER_MANIFEST_URL"),
|
||||
Token: os.Getenv("UPDATER_TOKEN"),
|
||||
}
|
||||
if settings.ManifestURL == "" {
|
||||
settings.ManifestURL = "http://127.0.0.1:18765/manifest.json"
|
||||
}
|
||||
if settings.Token == "" {
|
||||
settings.Token = "test-token"
|
||||
}
|
||||
return settings
|
||||
}
|
||||
|
||||
func newController(app updates.AppDescriptor) (*updates.Controller, error) {
|
||||
settings := loadUpdaterSettings()
|
||||
|
||||
provider, err := httpmanifest.New(httpmanifest.Config{
|
||||
ManifestURL: settings.ManifestURL,
|
||||
HTTPClient: http.DefaultClient,
|
||||
PrepareRequest: func(request *http.Request) error {
|
||||
request.Header.Set("Authorization", "Bearer "+settings.Token)
|
||||
return nil
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
platformInstaller, err := currentPlatformInstaller()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return updates.NewController(updates.Config{
|
||||
App: app,
|
||||
Provider: provider,
|
||||
Downloader: updates.NewHTTPDownloader(http.DefaultClient),
|
||||
Store: filestore.New(filepath.Join(os.TempDir(), "wails3kit-example", "snapshot.json")),
|
||||
Platform: platformInstaller,
|
||||
})
|
||||
}
|
||||
|
||||
func currentPlatformInstaller() (updates.PlatformInstaller, error) {
|
||||
switch runtime.GOOS {
|
||||
case "darwin":
|
||||
return updatesdarwin.New(), nil
|
||||
case "linux":
|
||||
return updateslinux.New(), nil
|
||||
case "windows":
|
||||
return updateswindows.New(), nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported platform: %s", runtime.GOOS)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user