diff --git a/build/README.md b/build/README.md index 5fc4ea3..5ff65d0 100644 --- a/build/README.md +++ b/build/README.md @@ -7,8 +7,9 @@ mv -f "build/bin/res-downloader $(jq -r '.info.productVersion' wails.json).dmg" ## Windows ```bash -wails build -f -nsis -platform "windows/amd64" -webview2 Embed && mv -f "build/bin/res-downloader-amd64-installer.exe" "build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_win_amd64.exe" -wails build -f -nsis -platform "windows/arm64" -webview2 Embed && mv -f "build/bin/res-downloader-arm64-installer.exe" "build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_win_arm64.exe" +wails build -f -nsis -platform "windows/amd64" -webview2 Embed -skipbindings && mv -f "build/bin/res-downloader-amd64-installer.exe" "build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_win_amd64.exe" +wails build -f -nsis -platform "windows/arm64" -webview2 Embed -skipbindings && mv -f "build/bin/res-downloader-arm64-installer.exe" "build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_win_arm64.exe" + ``` ## Linux @@ -41,7 +42,7 @@ wget -O ./build/bin/appimagetool-x86_64.AppImage https://github.com/AppImage/App chmod +x ./build/bin/appimagetool-x86_64.AppImage ./build/bin/appimagetool-x86_64.AppImage build/linux/AppImage build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_linux_amd64.AppImage -cp build/bin/res-downloader build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_linux_amd64 +mv -f build/bin/res-downloader build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_linux_amd64 ``` > arm64 @@ -58,7 +59,7 @@ cp build/bin/res-downloader build/linux/Debian/usr/local/bin/ echo "$(cat build/linux/Debian/DEBIAN/.control | sed -e "s/{{Version}}/$(jq -r '.info.productVersion' wails.json)/g")" > build/linux/Debian/DEBIAN/control dpkg-deb --build ./build/linux/Debian build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_linux_arm64.deb -cp build/bin/res-downloader build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_linux_arm64 +mv -f build/bin/res-downloader build/bin/res-downloader_$(jq -r '.info.productVersion' wails.json)_linux_arm64 ``` ### Arch Linux diff --git a/core/downloader.go b/core/downloader.go index 106f8b2..a910561 100644 --- a/core/downloader.go +++ b/core/downloader.go @@ -106,8 +106,6 @@ func (fd *FileDownloader) init() error { fd.IsMultiPart = true } - resp.Body.Close() - fd.FileName = filepath.Clean(fd.FileName) dir := filepath.Dir(fd.FileName) diff --git a/core/proxy.go b/core/proxy.go index c6bf23c..ed372c9 100644 --- a/core/proxy.go +++ b/core/proxy.go @@ -148,12 +148,12 @@ func (p *Proxy) handleWechatRequest(r *http.Request, ctx *goproxy.ProxyCtx) (*ht if !ok { return } - resourceOnce.markMu.Lock() - defer resourceOnce.markMu.Unlock() + urlSign := Md5(rowUrl.(string)) - if _, ok := resourceOnce.mark[urlSign]; ok { + if resourceOnce.mediaIsMarked(urlSign) { return } + id, err := gonanoid.New() if err != nil { id = urlSign @@ -214,7 +214,7 @@ func (p *Proxy) handleWechatRequest(r *http.Request, ctx *goproxy.ProxyCtx) (*ht res.OtherData["wx_file_formats"] = strings.Join(fileFormats, "#") } - resourceOnce.mark[urlSign] = true + resourceOnce.markMedia(urlSign) httpServerOnce.send("newResources", res) }(body) return r, p.buildEmptyResponse(r) @@ -310,14 +310,11 @@ func (p *Proxy) httpResponseEvent(resp *http.Response, ctx *goproxy.ProxyCtx) *h } rawUrl := resp.Request.URL.String() - resourceOnce.markMu.Lock() - defer resourceOnce.markMu.Unlock() - isAll, _ := resourceOnce.getResType("all") isClassify, _ := resourceOnce.getResType(classify) urlSign := Md5(rawUrl) - if _, ok := resourceOnce.mark[urlSign]; !ok && (isAll || isClassify) { + if ok := resourceOnce.mediaIsMarked(urlSign); !ok && (isAll || isClassify) { value, _ := strconv.ParseFloat(resp.Header.Get("content-length"), 64) id, err := gonanoid.New() if err != nil { @@ -339,7 +336,7 @@ func (p *Proxy) httpResponseEvent(resp *http.Response, ctx *goproxy.ProxyCtx) *h Description: "", ContentType: resp.Header.Get("Content-Type"), } - resourceOnce.mark[urlSign] = true + resourceOnce.markMedia(urlSign) httpServerOnce.send("newResources", res) } return resp diff --git a/core/resource.go b/core/resource.go index bfd863c..573ea20 100644 --- a/core/resource.go +++ b/core/resource.go @@ -26,8 +26,7 @@ type WxFileDecodeResult struct { } type Resource struct { - mark map[string]bool - markMu sync.RWMutex + mediaMark sync.Map resType map[string]bool resTypeMu sync.RWMutex } @@ -35,7 +34,6 @@ type Resource struct { func initResource() *Resource { if resourceOnce == nil { resourceOnce = &Resource{ - mark: make(map[string]bool), resType: map[string]bool{ "all": true, "image": true, @@ -52,17 +50,13 @@ func initResource() *Resource { return resourceOnce } -func (r *Resource) getMark(key string) (bool, bool) { - r.markMu.RLock() - defer r.markMu.RUnlock() - value, ok := r.mark[key] - return value, ok +func (r *Resource) mediaIsMarked(key string) bool { + _, loaded := r.mediaMark.Load(key) + return loaded } -func (r *Resource) setMark(key string, value bool) { - r.markMu.Lock() - defer r.markMu.Unlock() - r.mark[key] = value +func (r *Resource) markMedia(key string) { + r.mediaMark.Store(key, true) } func (r *Resource) getResType(key string) (bool, bool) { @@ -93,15 +87,11 @@ func (r *Resource) setResType(n []string) { } func (r *Resource) clear() { - r.markMu.Lock() - defer r.markMu.Unlock() - r.mark = make(map[string]bool) + r.mediaMark.Clear() } func (r *Resource) delete(sign string) { - r.markMu.Lock() - defer r.markMu.Unlock() - delete(r.mark, sign) + r.mediaMark.Delete(sign) } func (r *Resource) download(mediaInfo MediaInfo, decodeStr string) {