Skip to content

Commit 4901ded

Browse files
committed
Update: 增加下载功能
Chore: 修改比较函数 Chore: 移除启动参数
1 parent 6a2a9e1 commit 4901ded

1 file changed

Lines changed: 75 additions & 31 deletions

File tree

updater/mian.go

Lines changed: 75 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package main
33
import (
44
"crypto/md5"
55
"encoding/json"
6-
"flag"
76
"fmt"
87
"github.com/hashicorp/go-version"
98
"io"
@@ -79,30 +78,30 @@ func GenerateMetadata(dictionary string) (map[string]interface{}, error) {
7978
}
8079

8180
// Powered by DeepSeek V3
82-
func compareJSON(oldData, newData map[string]interface{}) map[string]interface{} {
83-
result := make(map[string]interface{})
84-
for key, newValue := range newData {
85-
oldValue, exists := oldData[key]
86-
if !exists {
87-
// 处理新增的键
88-
result[key] = newValue
89-
continue
90-
}
91-
// 递归处理嵌套map
92-
if newMap, ok := newValue.(map[string]interface{}); ok {
93-
if oldMap, ok := oldValue.(map[string]interface{}); ok {
94-
nestedResult := compareJSON(oldMap, newMap)
95-
if len(nestedResult) > 0 {
96-
result[key] = nestedResult
97-
}
98-
} else {
99-
result[key] = newValue
81+
func compareJSON(data1, data2 map[string]interface{}) map[string]string {
82+
result := make(map[string]string)
83+
84+
var flatten func(string, map[string]interface{}, *map[string]string)
85+
flatten = func(prefix string, m map[string]interface{}, res *map[string]string) {
86+
for k, v := range m {
87+
key := prefix + k
88+
switch val := v.(type) {
89+
case string:
90+
(*res)[key] = val
91+
case map[string]interface{}:
92+
flatten(key+"/", val, res)
10093
}
101-
continue
10294
}
103-
// 处理值变更
104-
if fmt.Sprintf("%v", oldValue) != fmt.Sprintf("%v", newValue) {
105-
result[key] = newValue
95+
}
96+
97+
flat1 := make(map[string]string)
98+
flat2 := make(map[string]string)
99+
flatten("", data1, &flat1)
100+
flatten("", data2, &flat2)
101+
102+
for k, v2 := range flat2 {
103+
if v1, exists := flat1[k]; !exists || v1 != v2 {
104+
result[k] = v2
106105
}
107106
}
108107
return result
@@ -144,35 +143,80 @@ func GetRemoteMetadata(goos string, version string) map[string]interface{} {
144143
return metadata
145144
}
146145

146+
func GetDownloadLink(md5hash string) string {
147+
resp, err := http.Get("https://update.ravi.cool/download/" + md5hash)
148+
if err != nil {
149+
fmt.Println("Error:", err)
150+
return ""
151+
}
152+
defer resp.Body.Close()
153+
if resp.StatusCode != http.StatusOK {
154+
fmt.Println("Error: ", resp.Status)
155+
return ""
156+
}
157+
var data map[string]interface{}
158+
err = json.NewDecoder(resp.Body).Decode(&data)
159+
if err != nil {
160+
fmt.Println("Error:", err)
161+
return ""
162+
}
163+
link, ok := data["download_link"].(string)
164+
if !ok {
165+
fmt.Println("Error: link is not a string")
166+
return ""
167+
}
168+
return link
169+
}
170+
147171
func Update(CurrentVersion string) {
148172
NewVersion, _ := CheckUpdate()
149173
v1, err := version.NewVersion(NewVersion)
174+
if err != nil {
175+
fmt.Println("Error:", err)
176+
}
150177
v2, err := version.NewVersion(CurrentVersion)
178+
if err != nil {
179+
fmt.Println("Error:", err)
180+
}
151181
if v1.LessThan(v2) {
152182
fmt.Println("Not updating, current version is newer")
153183
}
154184
localMetadata, err := GenerateMetadata("./")
185+
if err != nil {
186+
fmt.Println("Error:", err)
187+
}
155188
file1, _ := os.Create("local.json")
156189
defer file1.Close()
157190
encoder1 := json.NewEncoder(file1)
158191
encoder1.SetIndent("", " ")
159-
encoder1.Encode(localMetadata)
192+
err = encoder1.Encode(localMetadata)
160193
if err != nil {
161194
fmt.Println("Error:", err)
162195
}
163196
goos := CheckOs()
164197
remoteMetadata := GetRemoteMetadata(goos, NewVersion)
165198
result := compareJSON(localMetadata, remoteMetadata)
199+
for k, v := range result {
200+
fmt.Println("File:", k, "Hash:", v)
201+
link := GetDownloadLink(v)
202+
if link == "" {
203+
fmt.Println("Error: link is empty")
204+
return
205+
}
206+
fmt.Println("Download link:", link)
207+
}
166208
}
167209

168210
func main() {
169-
var update bool
170-
var v string
171-
flag.BoolVar(&update, "update", false, "Update directory metadata")
172-
flag.StringVar(&v, "v", "", "Current version")
173-
flag.Parse()
174-
175-
if update {
211+
content, err := os.ReadFile("version")
212+
if err != nil {
213+
fmt.Println("Error:", err)
214+
}
215+
v := string(content)
216+
if v == "" {
217+
fmt.Println("Error: version is empty")
218+
return
219+
} else {
176220
Update(v)
177221
}
178222
}

0 commit comments

Comments
 (0)