🎨 Removed support for Gitea and optimized update timeouts
This commit is contained in:
@@ -564,49 +564,6 @@ export class GitBackupConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* GiteaConfig Gitea配置
|
|
||||||
*/
|
|
||||||
export class GiteaConfig {
|
|
||||||
/**
|
|
||||||
* Gitea服务器URL
|
|
||||||
*/
|
|
||||||
"baseURL": string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仓库所有者
|
|
||||||
*/
|
|
||||||
"owner": string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仓库名称
|
|
||||||
*/
|
|
||||||
"repo": string;
|
|
||||||
|
|
||||||
/** Creates a new GiteaConfig instance. */
|
|
||||||
constructor($$source: Partial<GiteaConfig> = {}) {
|
|
||||||
if (!("baseURL" in $$source)) {
|
|
||||||
this["baseURL"] = "";
|
|
||||||
}
|
|
||||||
if (!("owner" in $$source)) {
|
|
||||||
this["owner"] = "";
|
|
||||||
}
|
|
||||||
if (!("repo" in $$source)) {
|
|
||||||
this["repo"] = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.assign(this, $$source);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new GiteaConfig instance from a string or object.
|
|
||||||
*/
|
|
||||||
static createFrom($$source: any = {}): GiteaConfig {
|
|
||||||
let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
|
|
||||||
return new GiteaConfig($$parsedSource as Partial<GiteaConfig>);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GithubConfig GitHub配置
|
* GithubConfig GitHub配置
|
||||||
*/
|
*/
|
||||||
@@ -1272,26 +1229,6 @@ export enum TabType {
|
|||||||
TabTypeTab = "tab",
|
TabTypeTab = "tab",
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* UpdateSourceType 更新源类型
|
|
||||||
*/
|
|
||||||
export enum UpdateSourceType {
|
|
||||||
/**
|
|
||||||
* The Go zero value for the underlying type of the enum.
|
|
||||||
*/
|
|
||||||
$zero = "",
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UpdateSourceGithub GitHub更新源
|
|
||||||
*/
|
|
||||||
UpdateSourceGithub = "github",
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UpdateSourceGitea Gitea更新源
|
|
||||||
*/
|
|
||||||
UpdateSourceGitea = "gitea",
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UpdatesConfig 更新设置配置
|
* UpdatesConfig 更新设置配置
|
||||||
*/
|
*/
|
||||||
@@ -1306,16 +1243,6 @@ export class UpdatesConfig {
|
|||||||
*/
|
*/
|
||||||
"autoUpdate": boolean;
|
"autoUpdate": boolean;
|
||||||
|
|
||||||
/**
|
|
||||||
* 主要更新源
|
|
||||||
*/
|
|
||||||
"primarySource": UpdateSourceType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 备用更新源
|
|
||||||
*/
|
|
||||||
"backupSource": UpdateSourceType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新前是否备份
|
* 更新前是否备份
|
||||||
*/
|
*/
|
||||||
@@ -1331,11 +1258,6 @@ export class UpdatesConfig {
|
|||||||
*/
|
*/
|
||||||
"github": GithubConfig;
|
"github": GithubConfig;
|
||||||
|
|
||||||
/**
|
|
||||||
* Gitea配置
|
|
||||||
*/
|
|
||||||
"gitea": GiteaConfig;
|
|
||||||
|
|
||||||
/** Creates a new UpdatesConfig instance. */
|
/** Creates a new UpdatesConfig instance. */
|
||||||
constructor($$source: Partial<UpdatesConfig> = {}) {
|
constructor($$source: Partial<UpdatesConfig> = {}) {
|
||||||
if (!("version" in $$source)) {
|
if (!("version" in $$source)) {
|
||||||
@@ -1344,12 +1266,6 @@ export class UpdatesConfig {
|
|||||||
if (!("autoUpdate" in $$source)) {
|
if (!("autoUpdate" in $$source)) {
|
||||||
this["autoUpdate"] = false;
|
this["autoUpdate"] = false;
|
||||||
}
|
}
|
||||||
if (!("primarySource" in $$source)) {
|
|
||||||
this["primarySource"] = ("" as UpdateSourceType);
|
|
||||||
}
|
|
||||||
if (!("backupSource" in $$source)) {
|
|
||||||
this["backupSource"] = ("" as UpdateSourceType);
|
|
||||||
}
|
|
||||||
if (!("backupBeforeUpdate" in $$source)) {
|
if (!("backupBeforeUpdate" in $$source)) {
|
||||||
this["backupBeforeUpdate"] = false;
|
this["backupBeforeUpdate"] = false;
|
||||||
}
|
}
|
||||||
@@ -1359,9 +1275,6 @@ export class UpdatesConfig {
|
|||||||
if (!("github" in $$source)) {
|
if (!("github" in $$source)) {
|
||||||
this["github"] = (new GithubConfig());
|
this["github"] = (new GithubConfig());
|
||||||
}
|
}
|
||||||
if (!("gitea" in $$source)) {
|
|
||||||
this["gitea"] = (new GiteaConfig());
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.assign(this, $$source);
|
Object.assign(this, $$source);
|
||||||
}
|
}
|
||||||
@@ -1370,14 +1283,10 @@ export class UpdatesConfig {
|
|||||||
* Creates a new UpdatesConfig instance from a string or object.
|
* Creates a new UpdatesConfig instance from a string or object.
|
||||||
*/
|
*/
|
||||||
static createFrom($$source: any = {}): UpdatesConfig {
|
static createFrom($$source: any = {}): UpdatesConfig {
|
||||||
const $$createField6_0 = $$createType9;
|
const $$createField4_0 = $$createType9;
|
||||||
const $$createField7_0 = $$createType10;
|
|
||||||
let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
|
let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
|
||||||
if ("github" in $$parsedSource) {
|
if ("github" in $$parsedSource) {
|
||||||
$$parsedSource["github"] = $$createField6_0($$parsedSource["github"]);
|
$$parsedSource["github"] = $$createField4_0($$parsedSource["github"]);
|
||||||
}
|
|
||||||
if ("gitea" in $$parsedSource) {
|
|
||||||
$$parsedSource["gitea"] = $$createField7_0($$parsedSource["gitea"]);
|
|
||||||
}
|
}
|
||||||
return new UpdatesConfig($$parsedSource as Partial<UpdatesConfig>);
|
return new UpdatesConfig($$parsedSource as Partial<UpdatesConfig>);
|
||||||
}
|
}
|
||||||
@@ -1399,4 +1308,3 @@ var $$createType6 = (function $$initCreateType6(...args): any {
|
|||||||
const $$createType7 = $Create.Map($Create.Any, $Create.Any);
|
const $$createType7 = $Create.Map($Create.Any, $Create.Any);
|
||||||
const $$createType8 = HotkeyCombo.createFrom;
|
const $$createType8 = HotkeyCombo.createFrom;
|
||||||
const $$createType9 = GithubConfig.createFrom;
|
const $$createType9 = GithubConfig.createFrom;
|
||||||
const $$createType10 = GiteaConfig.createFrom;
|
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ export class SelfUpdateResult {
|
|||||||
"error": string;
|
"error": string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新源(github/gitea)
|
* 更新源(github)
|
||||||
*/
|
*/
|
||||||
"source": string;
|
"source": string;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import {
|
|||||||
LanguageType,
|
LanguageType,
|
||||||
SystemThemeType,
|
SystemThemeType,
|
||||||
TabType,
|
TabType,
|
||||||
UpdateSourceType
|
|
||||||
} from '@/../bindings/voidraft/internal/models/models';
|
} from '@/../bindings/voidraft/internal/models/models';
|
||||||
import {FONT_OPTIONS} from './fonts';
|
import {FONT_OPTIONS} from './fonts';
|
||||||
|
|
||||||
@@ -110,19 +109,12 @@ export const DEFAULT_CONFIG: AppConfig = {
|
|||||||
updates: {
|
updates: {
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
autoUpdate: true,
|
autoUpdate: true,
|
||||||
primarySource: UpdateSourceType.UpdateSourceGithub,
|
|
||||||
backupSource: UpdateSourceType.UpdateSourceGitea,
|
|
||||||
backupBeforeUpdate: true,
|
backupBeforeUpdate: true,
|
||||||
updateTimeout: 30,
|
updateTimeout: 120,
|
||||||
github: {
|
github: {
|
||||||
owner: "landaiqing",
|
owner: "landaiqing",
|
||||||
repo: "voidraft",
|
repo: "voidraft",
|
||||||
},
|
},
|
||||||
gitea: {
|
|
||||||
baseURL: "https://git.landaiqing.cn",
|
|
||||||
owner: "landaiqing",
|
|
||||||
repo: "voidraft",
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
backup: {
|
backup: {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
|
|||||||
@@ -39,29 +39,12 @@ const (
|
|||||||
SystemThemeAuto SystemThemeType = "auto"
|
SystemThemeAuto SystemThemeType = "auto"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UpdateSourceType 更新源类型
|
|
||||||
type UpdateSourceType string
|
|
||||||
|
|
||||||
const (
|
|
||||||
// UpdateSourceGithub GitHub更新源
|
|
||||||
UpdateSourceGithub UpdateSourceType = "github"
|
|
||||||
// UpdateSourceGitea Gitea更新源
|
|
||||||
UpdateSourceGitea UpdateSourceType = "gitea"
|
|
||||||
)
|
|
||||||
|
|
||||||
// GithubConfig GitHub配置
|
// GithubConfig GitHub配置
|
||||||
type GithubConfig struct {
|
type GithubConfig struct {
|
||||||
Owner string `json:"owner"` // 仓库所有者
|
Owner string `json:"owner"` // 仓库所有者
|
||||||
Repo string `json:"repo"` // 仓库名称
|
Repo string `json:"repo"` // 仓库名称
|
||||||
}
|
}
|
||||||
|
|
||||||
// GiteaConfig Gitea配置
|
|
||||||
type GiteaConfig struct {
|
|
||||||
BaseURL string `json:"baseURL"` // Gitea服务器URL
|
|
||||||
Owner string `json:"owner"` // 仓库所有者
|
|
||||||
Repo string `json:"repo"` // 仓库名称
|
|
||||||
}
|
|
||||||
|
|
||||||
// GeneralConfig 通用设置配置
|
// GeneralConfig 通用设置配置
|
||||||
type GeneralConfig struct {
|
type GeneralConfig struct {
|
||||||
AlwaysOnTop bool `json:"alwaysOnTop"` // 窗口是否置顶
|
AlwaysOnTop bool `json:"alwaysOnTop"` // 窗口是否置顶
|
||||||
@@ -120,14 +103,11 @@ type AppearanceConfig struct {
|
|||||||
|
|
||||||
// UpdatesConfig 更新设置配置
|
// UpdatesConfig 更新设置配置
|
||||||
type UpdatesConfig struct {
|
type UpdatesConfig struct {
|
||||||
Version string `json:"version"` // 当前版本号
|
Version string `json:"version"` // 当前版本号
|
||||||
AutoUpdate bool `json:"autoUpdate"` // 是否自动更新
|
AutoUpdate bool `json:"autoUpdate"` // 是否自动更新
|
||||||
PrimarySource UpdateSourceType `json:"primarySource"` // 主要更新源
|
BackupBeforeUpdate bool `json:"backupBeforeUpdate"` // 更新前是否备份
|
||||||
BackupSource UpdateSourceType `json:"backupSource"` // 备用更新源
|
UpdateTimeout int `json:"updateTimeout"` // 更新超时时间(秒)
|
||||||
BackupBeforeUpdate bool `json:"backupBeforeUpdate"` // 更新前是否备份
|
Github GithubConfig `json:"github"` // GitHub配置
|
||||||
UpdateTimeout int `json:"updateTimeout"` // 更新超时时间(秒)
|
|
||||||
Github GithubConfig `json:"github"` // GitHub配置
|
|
||||||
Gitea GiteaConfig `json:"gitea"` // Gitea配置
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Git备份相关类型定义
|
// Git备份相关类型定义
|
||||||
@@ -221,19 +201,12 @@ func NewDefaultAppConfig() *AppConfig {
|
|||||||
Updates: UpdatesConfig{
|
Updates: UpdatesConfig{
|
||||||
Version: version.Version,
|
Version: version.Version,
|
||||||
AutoUpdate: true,
|
AutoUpdate: true,
|
||||||
PrimarySource: UpdateSourceGitea,
|
|
||||||
BackupSource: UpdateSourceGithub,
|
|
||||||
BackupBeforeUpdate: true,
|
BackupBeforeUpdate: true,
|
||||||
UpdateTimeout: 30,
|
UpdateTimeout: 120,
|
||||||
Github: GithubConfig{
|
Github: GithubConfig{
|
||||||
Owner: "landaiqing",
|
Owner: "landaiqing",
|
||||||
Repo: "voidraft",
|
Repo: "voidraft",
|
||||||
},
|
},
|
||||||
Gitea: GiteaConfig{
|
|
||||||
BaseURL: "https://git.landaiqing.cn",
|
|
||||||
Owner: "landaiqing",
|
|
||||||
Repo: "voidraft",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
Backup: GitBackupConfig{
|
Backup: GitBackupConfig{
|
||||||
Enabled: false,
|
Enabled: false,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ type SelfUpdateResult struct {
|
|||||||
AssetURL string `json:"assetURL"` // 下载链接
|
AssetURL string `json:"assetURL"` // 下载链接
|
||||||
ReleaseNotes string `json:"releaseNotes"` // 发布说明
|
ReleaseNotes string `json:"releaseNotes"` // 发布说明
|
||||||
Error string `json:"error"` // 错误信息
|
Error string `json:"error"` // 错误信息
|
||||||
Source string `json:"source"` // 更新源(github/gitea)
|
Source string `json:"source"` // 更新源(github)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SelfUpdateService 自我更新服务
|
// SelfUpdateService 自我更新服务
|
||||||
@@ -66,33 +66,6 @@ func (s *SelfUpdateService) CheckForUpdates(ctx context.Context) (*SelfUpdateRes
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result := &SelfUpdateResult{
|
|
||||||
CurrentVersion: config.Updates.Version,
|
|
||||||
HasUpdate: false,
|
|
||||||
UpdateApplied: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
// 尝试主要更新源
|
|
||||||
primaryResult, err := s.checkSourceForUpdates(ctx, config.Updates.PrimarySource, config)
|
|
||||||
if err == nil && primaryResult != nil {
|
|
||||||
s.handleUpdateBadge(primaryResult)
|
|
||||||
return primaryResult, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 尝试备用更新源
|
|
||||||
backupResult, backupErr := s.checkSourceForUpdates(ctx, config.Updates.BackupSource, config)
|
|
||||||
if backupErr != nil {
|
|
||||||
result.Error = fmt.Sprintf("both sources failed: %v; %v", err, backupErr)
|
|
||||||
s.handleUpdateBadge(result)
|
|
||||||
return result, errors.New(result.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
s.handleUpdateBadge(backupResult)
|
|
||||||
return backupResult, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// checkSourceForUpdates 根据更新源类型检查更新
|
|
||||||
func (s *SelfUpdateService) checkSourceForUpdates(ctx context.Context, sourceType models.UpdateSourceType, config *models.AppConfig) (*SelfUpdateResult, error) {
|
|
||||||
timeout := config.Updates.UpdateTimeout
|
timeout := config.Updates.UpdateTimeout
|
||||||
if timeout <= 0 {
|
if timeout <= 0 {
|
||||||
timeout = 30
|
timeout = 30
|
||||||
@@ -104,28 +77,21 @@ func (s *SelfUpdateService) checkSourceForUpdates(ctx context.Context, sourceTyp
|
|||||||
CurrentVersion: config.Updates.Version,
|
CurrentVersion: config.Updates.Version,
|
||||||
HasUpdate: false,
|
HasUpdate: false,
|
||||||
UpdateApplied: false,
|
UpdateApplied: false,
|
||||||
Source: string(sourceType),
|
Source: "github",
|
||||||
}
|
|
||||||
|
|
||||||
var release *selfupdate.Release
|
|
||||||
var found bool
|
|
||||||
var err error
|
|
||||||
|
|
||||||
switch sourceType {
|
|
||||||
case models.UpdateSourceGithub:
|
|
||||||
release, found, err = s.checkGithubUpdates(timeoutCtx, config)
|
|
||||||
case models.UpdateSourceGitea:
|
|
||||||
release, found, err = s.checkGiteaUpdates(timeoutCtx, config)
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("unsupported source: %s", sourceType)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查 GitHub 更新
|
||||||
|
release, found, err := s.checkGithubUpdates(timeoutCtx, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, fmt.Errorf("check failed: %w", err)
|
result.Error = fmt.Sprintf("check github updates failed: %v", err)
|
||||||
|
s.handleUpdateBadge(result)
|
||||||
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !found {
|
if !found {
|
||||||
return result, fmt.Errorf("no release for %s/%s", runtime.GOOS, runtime.GOARCH)
|
result.Error = fmt.Sprintf("no release for %s/%s", runtime.GOOS, runtime.GOARCH)
|
||||||
|
s.handleUpdateBadge(result)
|
||||||
|
return result, errors.New(result.Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
result.LatestVersion = release.Version()
|
result.LatestVersion = release.Version()
|
||||||
@@ -133,6 +99,7 @@ func (s *SelfUpdateService) checkSourceForUpdates(ctx context.Context, sourceTyp
|
|||||||
result.ReleaseNotes = release.ReleaseNotes
|
result.ReleaseNotes = release.ReleaseNotes
|
||||||
result.HasUpdate = release.GreaterThan(config.Updates.Version)
|
result.HasUpdate = release.GreaterThan(config.Updates.Version)
|
||||||
|
|
||||||
|
s.handleUpdateBadge(result)
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,18 +108,6 @@ func (s *SelfUpdateService) createGithubUpdater() (*selfupdate.Updater, error) {
|
|||||||
return selfupdate.NewUpdater(selfupdate.Config{})
|
return selfupdate.NewUpdater(selfupdate.Config{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// createGiteaUpdater 创建Gitea更新器
|
|
||||||
func (s *SelfUpdateService) createGiteaUpdater(config *models.AppConfig) (*selfupdate.Updater, error) {
|
|
||||||
source, err := selfupdate.NewGiteaSource(selfupdate.GiteaConfig{
|
|
||||||
BaseURL: config.Updates.Gitea.BaseURL,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("create gitea source failed: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return selfupdate.NewUpdater(selfupdate.Config{Source: source})
|
|
||||||
}
|
|
||||||
|
|
||||||
// checkGithubUpdates 检查GitHub更新
|
// checkGithubUpdates 检查GitHub更新
|
||||||
func (s *SelfUpdateService) checkGithubUpdates(ctx context.Context, config *models.AppConfig) (*selfupdate.Release, bool, error) {
|
func (s *SelfUpdateService) checkGithubUpdates(ctx context.Context, config *models.AppConfig) (*selfupdate.Release, bool, error) {
|
||||||
updater, err := s.createGithubUpdater()
|
updater, err := s.createGithubUpdater()
|
||||||
@@ -164,17 +119,6 @@ func (s *SelfUpdateService) checkGithubUpdates(ctx context.Context, config *mode
|
|||||||
return updater.DetectLatest(ctx, repo)
|
return updater.DetectLatest(ctx, repo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkGiteaUpdates 检查Gitea更新
|
|
||||||
func (s *SelfUpdateService) checkGiteaUpdates(ctx context.Context, config *models.AppConfig) (*selfupdate.Release, bool, error) {
|
|
||||||
updater, err := s.createGiteaUpdater(config)
|
|
||||||
if err != nil {
|
|
||||||
return nil, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
repo := selfupdate.NewRepositorySlug(config.Updates.Gitea.Owner, config.Updates.Gitea.Repo)
|
|
||||||
return updater.DetectLatest(ctx, repo)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyUpdate 应用更新
|
// ApplyUpdate 应用更新
|
||||||
func (s *SelfUpdateService) ApplyUpdate(ctx context.Context) (*SelfUpdateResult, error) {
|
func (s *SelfUpdateService) ApplyUpdate(ctx context.Context) (*SelfUpdateResult, error) {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
@@ -201,23 +145,17 @@ func (s *SelfUpdateService) ApplyUpdate(ctx context.Context) (*SelfUpdateResult,
|
|||||||
return nil, fmt.Errorf("locate executable failed: %w", err)
|
return nil, fmt.Errorf("locate executable failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 尝试主要源
|
// 执行 GitHub 更新
|
||||||
result, err := s.performUpdate(ctx, config.Updates.PrimarySource, exe, config)
|
result, err := s.performUpdate(ctx, exe, config)
|
||||||
if err == nil {
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 尝试备用源
|
|
||||||
result, err = s.performUpdate(ctx, config.Updates.BackupSource, exe, config)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("update failed from both sources: %w", err)
|
return nil, fmt.Errorf("update failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// performUpdate 执行更新操作(包括检测、备份、下载、应用)
|
// performUpdate 执行更新操作(包括检测、备份、下载、应用)
|
||||||
func (s *SelfUpdateService) performUpdate(ctx context.Context, sourceType models.UpdateSourceType, exe string, config *models.AppConfig) (*SelfUpdateResult, error) {
|
func (s *SelfUpdateService) performUpdate(ctx context.Context, exe string, config *models.AppConfig) (*SelfUpdateResult, error) {
|
||||||
timeout := config.Updates.UpdateTimeout
|
timeout := config.Updates.UpdateTimeout
|
||||||
if timeout <= 0 {
|
if timeout <= 0 {
|
||||||
timeout = 30
|
timeout = 30
|
||||||
@@ -225,8 +163,13 @@ func (s *SelfUpdateService) performUpdate(ctx context.Context, sourceType models
|
|||||||
checkCtx, cancel := context.WithTimeout(ctx, time.Duration(timeout)*time.Second)
|
checkCtx, cancel := context.WithTimeout(ctx, time.Duration(timeout)*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
// 获取更新器和版本信息
|
// 获取 GitHub 更新信息
|
||||||
updater, release, found, err := s.getUpdateFromSource(checkCtx, sourceType, config)
|
updater, err := s.createGithubUpdater()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("create github updater failed: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
release, found, err := s.checkGithubUpdates(checkCtx, config)
|
||||||
if err != nil || !found {
|
if err != nil || !found {
|
||||||
return nil, fmt.Errorf("detect release failed: %w", err)
|
return nil, fmt.Errorf("detect release failed: %w", err)
|
||||||
}
|
}
|
||||||
@@ -236,7 +179,7 @@ func (s *SelfUpdateService) performUpdate(ctx context.Context, sourceType models
|
|||||||
LatestVersion: release.Version(),
|
LatestVersion: release.Version(),
|
||||||
AssetURL: release.AssetURL,
|
AssetURL: release.AssetURL,
|
||||||
ReleaseNotes: release.ReleaseNotes,
|
ReleaseNotes: release.ReleaseNotes,
|
||||||
Source: string(sourceType),
|
Source: "github",
|
||||||
HasUpdate: release.GreaterThan(config.Updates.Version),
|
HasUpdate: release.GreaterThan(config.Updates.Version),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,33 +212,6 @@ func (s *SelfUpdateService) performUpdate(ctx context.Context, sourceType models
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getUpdateFromSource 从指定源获取更新信息
|
|
||||||
func (s *SelfUpdateService) getUpdateFromSource(ctx context.Context, sourceType models.UpdateSourceType, config *models.AppConfig) (*selfupdate.Updater, *selfupdate.Release, bool, error) {
|
|
||||||
var updater *selfupdate.Updater
|
|
||||||
var release *selfupdate.Release
|
|
||||||
var found bool
|
|
||||||
var err error
|
|
||||||
|
|
||||||
switch sourceType {
|
|
||||||
case models.UpdateSourceGithub:
|
|
||||||
updater, err = s.createGithubUpdater()
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, false, err
|
|
||||||
}
|
|
||||||
release, found, err = s.checkGithubUpdates(ctx, config)
|
|
||||||
case models.UpdateSourceGitea:
|
|
||||||
updater, err = s.createGiteaUpdater(config)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, false, err
|
|
||||||
}
|
|
||||||
release, found, err = s.checkGiteaUpdates(ctx, config)
|
|
||||||
default:
|
|
||||||
return nil, nil, false, fmt.Errorf("unsupported source: %s", sourceType)
|
|
||||||
}
|
|
||||||
|
|
||||||
return updater, release, found, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleUpdateSuccess 处理更新成功后的操作
|
// handleUpdateSuccess 处理更新成功后的操作
|
||||||
func (s *SelfUpdateService) handleUpdateSuccess(result *SelfUpdateResult) {
|
func (s *SelfUpdateService) handleUpdateSuccess(result *SelfUpdateResult) {
|
||||||
// 更新配置版本
|
// 更新配置版本
|
||||||
|
|||||||
Reference in New Issue
Block a user