Files
AynaLivePlayer/internal/updater/application.go

65 lines
1.8 KiB
Go

package updater
import (
"AynaLivePlayer/core/events"
"AynaLivePlayer/core/model"
"AynaLivePlayer/global"
"AynaLivePlayer/pkg/config"
"AynaLivePlayer/pkg/eventbus"
"AynaLivePlayer/pkg/logger"
"github.com/go-resty/resty/v2"
"github.com/tidwall/gjson"
"strconv"
)
var log logger.ILogger = nil
func Initialize() {
log = global.Logger.WithPrefix("internal.updater")
if config.General.AutoCheckUpdate {
go func() {
info, hasUpdate := CheckUpdate()
if !hasUpdate {
return
}
_ = global.EventBus.Publish(
events.CheckUpdateResultUpdate,
events.CheckUpdateResultUpdateEvent{
HasUpdate: hasUpdate,
Info: info,
})
}()
}
global.EventBus.Subscribe("",
events.CheckUpdateCmd, "internal.updater.handle",
func(evt *eventbus.Event) {
info, hasUpdate := CheckUpdate()
_ = global.EventBus.Publish(
events.CheckUpdateResultUpdate,
events.CheckUpdateResultUpdateEvent{
HasUpdate: hasUpdate,
Info: info,
})
})
}
func CheckUpdate() (model.VersionInfo, bool) {
uri := config.General.InfoApiServer + "/api/version/check_update"
resp, err := resty.New().R().SetQueryParam("client_version", strconv.Itoa(int(config.Version))).Get(uri)
if err != nil {
log.Errorf("failed to check update: %s", err.Error())
return model.VersionInfo{}, false
}
result := gjson.ParseBytes(resp.Body())
log.Infof("check update result: %s", result.String())
if !result.Get("data.has_update").Bool() {
log.Infof("no update available")
return model.VersionInfo{}, false
}
log.Infof("new version available: %s", model.Version(result.Get("data.latest.version").Uint()).String())
return model.VersionInfo{
Version: model.Version(result.Get("data.latest.version").Uint()),
Info: result.Get("data.latest.note").String(),
}, true
}