Skip to content

Commit 28952b9

Browse files
committed
修复已知问题
1 parent f665744 commit 28952b9

2 files changed

Lines changed: 30 additions & 16 deletions

File tree

pkg/libraries.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ func DownloadLibraries(versionInfo core.VersionInfo, librariesDir string, maxCon
2626
continue
2727
}
2828

29-
url := lib.Downloads.Artifact.URL
29+
originalURL := lib.Downloads.Artifact.URL
30+
url := originalURL
3031
if downloadapi == "bmclapi" {
3132
url = strings.Replace(url, "https://maven.minecraftforge.net/", "https://bmclapi2.bangbang93.com/maven/", 1)
3233
url = strings.Replace(url, "https://maven.fabricmc.net/", "https://bmclapi2.bangbang93.com/maven/", 1)
@@ -41,38 +42,45 @@ func DownloadLibraries(versionInfo core.VersionInfo, librariesDir string, maxCon
4142
filePath := filepath.Join(librariesDir, lib.Downloads.Artifact.Path)
4243

4344
wg.Add(1)
44-
go func(lib core.Library, url, filePath string) {
45+
go func(lib core.Library, url, originalURL, filePath string) {
4546
defer wg.Done()
46-
sem <- struct{}{} // 获取令牌
47+
sem <- struct{}{}
48+
defer func() { <-sem }()
49+
4750
// 校验 SHA1
4851
if _, err := os.Stat(filePath); err == nil {
4952
fileSHA1, err := computeSHA1(filePath)
5053
if err == nil && fileSHA1 == lib.Downloads.Artifact.SHA1 {
5154
fmt.Printf("已存在且校验通过: %s\n", filePath)
52-
<-sem // 释放令牌
5355
return
5456
} else {
5557
fmt.Printf("文件 %s 校验失败 (或无法校验),重新下载...\n", filePath)
5658
os.Remove(filePath)
5759
}
5860
}
61+
5962
if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
6063
fmt.Printf("无法创建目录: %v\n", err)
64+
return
6165
}
62-
fmt.Println("正在下载:", url)
63-
if err := core.DownloadFile(url, filePath); err != nil {
64-
fmt.Printf("下载失败 %s (%s): %v\n", lib.Name, url, err)
66+
err := core.DownloadFile(url, filePath)
67+
if err != nil {
68+
fmt.Printf("下载失败 %s: %v\n", lib.Name, err)
69+
fmt.Println("尝试使用原始链接下载:", originalURL)
70+
if err := core.DownloadFile(originalURL, filePath); err != nil {
71+
fmt.Printf("原始链接下载也失败 %s: %v\n", lib.Name, err)
72+
} else {
73+
fmt.Println("使用原始链接下载完成:", filePath)
74+
}
6575
} else {
66-
fmt.Println("下载完成:", filePath)
76+
fmt.Println("使用 BMCLAPI 下载完成:", filePath)
6777
}
68-
<-sem // 释放令牌
69-
}(lib, url, filePath)
78+
}(lib, url, originalURL, filePath)
7079
}
7180
wg.Wait()
7281
return nil
7382
}
7483

75-
// 计算文件的 SHA1 哈希值
7684
func computeSHA1(filePath string) (string, error) {
7785
file, err := os.Open(filePath)
7886
if err != nil {

pkg/mrpack.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,19 @@ func Modrinth(file string, MaxCon int, Args string) {
156156
errChan <- err
157157
return
158158
}
159+
160+
var downloadErr error
159161
for _, downloadURL := range file.Downloads {
160-
fmt.Println("下载链接:", downloadURL)
161-
err := core.DownloadFile(downloadURL, filePath)
162-
if err != nil {
163-
errChan <- err
164-
return
162+
fmt.Println("尝试下载:", downloadURL)
163+
downloadErr = core.DownloadFile(downloadURL, filePath)
164+
if downloadErr == nil {
165+
break
165166
}
167+
fmt.Printf("下载失败: %v, 尝试下一个链接\n", downloadErr)
168+
}
169+
if downloadErr != nil {
170+
errChan <- fmt.Errorf("所有下载链接均失败: %v", downloadErr)
171+
return
166172
}
167173
}(file)
168174
}

0 commit comments

Comments
 (0)