UPDATE: Add mutithread download
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package gitService
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"firefly-launcher/pkg/constant"
|
||||
"firefly-launcher/pkg/models"
|
||||
"fmt"
|
||||
@@ -8,7 +9,8 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"github.com/wailsapp/wails/v3/pkg/application"
|
||||
)
|
||||
|
||||
@@ -35,72 +37,35 @@ func (g *GitService) GetLatestProxyVersion() (bool, string, string) {
|
||||
}
|
||||
|
||||
func (g *GitService) DownloadProxyProgress(version string) (bool, string) {
|
||||
resp, err := http.Get(constant.ProxyGitUrl)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, _ := io.ReadAll(resp.Body)
|
||||
|
||||
var releases []*models.ReleaseType
|
||||
err = json.Unmarshal(body, &releases)
|
||||
if err != nil {
|
||||
return false, err.Error()
|
||||
}
|
||||
|
||||
if len(releases) == 0 {
|
||||
return false, "no releases found"
|
||||
}
|
||||
|
||||
var releaseData *models.ReleaseType
|
||||
for _, release := range releases {
|
||||
if release.TagName == version {
|
||||
releaseData = release
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if releaseData == nil || releaseData.TagName == "" {
|
||||
asset, ok := g.getReleaseAsset(version, constant.ProxyGitUrl, constant.ProxyZipFile)
|
||||
if !ok {
|
||||
return false, "no release found"
|
||||
}
|
||||
|
||||
var assetWin models.AssetType
|
||||
for _, asset := range releaseData.Assets {
|
||||
if asset.Name == constant.ProxyZipFile {
|
||||
assetWin = asset
|
||||
break
|
||||
}
|
||||
if err := os.MkdirAll(constant.ProxyStorageUrl, 0755); err != nil {
|
||||
return false, err.Error()
|
||||
}
|
||||
|
||||
if assetWin.Name == "" {
|
||||
return false, "no assets found"
|
||||
}
|
||||
|
||||
if err := os.Mkdir(constant.ProxyStorageUrl, 0755); err != nil {
|
||||
if !os.IsExist(err) {
|
||||
return false, err.Error()
|
||||
}
|
||||
}
|
||||
saveFile := filepath.Join(constant.ProxyStorageUrl, assetWin.Name)
|
||||
|
||||
resp, err = http.Get(assetWin.BrowserDownloadURL)
|
||||
saveFile := filepath.Join(constant.ProxyStorageUrl, asset.Name)
|
||||
tmpPath, err := g.downloadFileParallel(saveFile, asset.BrowserDownloadURL, 4, func(percent float64, speed string) {
|
||||
application.Get().Event.Emit("download:proxy", map[string]interface{}{
|
||||
"percent": fmt.Sprintf("%.2f", percent),
|
||||
"speed": speed,
|
||||
})
|
||||
})
|
||||
if err != nil {
|
||||
return false, err.Error()
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
DownloadFile(saveFile, assetWin.BrowserDownloadURL, func(percent float64, speed float64) {
|
||||
application.Get().Event.Emit("download:proxy", map[string]interface{}{
|
||||
"percent": fmt.Sprintf("%.2f", percent),
|
||||
"speed": fmt.Sprintf("%.2f", speed),
|
||||
})
|
||||
|
||||
})
|
||||
return true, ""
|
||||
for i := 0; i < 3; i++ {
|
||||
if err := os.Rename(tmpPath, saveFile); err == nil {
|
||||
return true, ""
|
||||
}
|
||||
time.Sleep(300 * time.Millisecond)
|
||||
}
|
||||
return false, "failed to rename tmp file after retries"
|
||||
}
|
||||
|
||||
func (g *GitService) UnzipProxy() {
|
||||
unzipParallel(filepath.Join(constant.ProxyStorageUrl, constant.ProxyZipFile), constant.ProxyStorageUrl)
|
||||
g.unzipParallel(filepath.Join(constant.ProxyStorageUrl, constant.ProxyZipFile), constant.ProxyStorageUrl)
|
||||
os.Remove(filepath.Join(constant.ProxyStorageUrl, constant.ProxyZipFile))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user