From 6d2705112d709f98464c019d2b39fbbf1e0aa757 Mon Sep 17 00:00:00 2001 From: putyy Date: Mon, 23 Dec 2024 16:59:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 6148 bytes README.md | 19 ++-- build/.DS_Store | Bin 6148 -> 6148 bytes core/app.go | 2 +- core/downloader.go | 3 +- core/http.go | 26 ++---- core/middleware.go | 14 +-- core/proxy.go | 2 +- core/system_darwin.go | 108 +++++++++++------------ frontend/src/App.vue | 6 +- frontend/src/components/Footer.vue | 2 +- frontend/src/components/Screen.vue | 1 - frontend/src/components/layout/Sider.vue | 10 ++- frontend/src/const.ts | 2 - frontend/src/stores/event.ts | 4 +- frontend/src/stores/index.ts | 2 +- frontend/src/types/app.d.ts | 10 +++ frontend/src/types/ws.d.ts | 21 ----- frontend/src/views/index.vue | 6 +- go.mod | 4 +- go.sum | 4 +- preview/public.crt | 23 +++++ 22 files changed, 131 insertions(+), 138 deletions(-) delete mode 100644 frontend/src/types/ws.d.ts create mode 100644 preview/public.crt diff --git a/.DS_Store b/.DS_Store index 6e9570e806c48ffbe8ba6fe9672a8e8e20eb2bce..087c037a80d039a648a71fac00750c08aed0285d 100644 GIT binary patch delta 76 zcmZoMXfc@J&&aniU^g=(-)0_`xs3Ac4CxH{40;T?Kr)4)&NC-JIVmSUiGhJZfPsPO e>f}6D@yQ!mzq2u21q$hHUdN`*xS5^fFFyeLaTG)V delta 47 zcmV+~0MP%0FoZCWPXP_FP`d*G4YLdcodJ`51qhSh1@{I4ivR!sp0nHrD*=&!F0%&+ F{SRZ>4-EhS diff --git a/README.md b/README.md index 706fdab..1ae400e 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,22 @@ -## res-downloader V3全新版来袭,更快了! +## res-downloader V3全新版来袭、全新实现,支持更多设置,视频号、直播流、m3u8预览等! ### 爱享素材下载器【[加入群聊](https://qm.qq.com/q/HS8FdhpZCK)】 🎯 基于Go + [wails](https://github.com/wailsapp/wails) 📦 操作简单、可获取不同类型资源 - 🖥️ 支持Windows、Mac、Linux 🌐 支持视频、音频、图片、m3u8、直播流等常见网络资源 💪 支持微信视频号、小程序、抖音、快手、小红书、酷狗音乐、qq音乐等网络资源下载 -👼 支持设置代理以获取特殊网络下的资源 +👼 支持设置代理以获取特殊网络下的资源 -## 软件下载 +## 软件下载(Win7下载2.3.0版本) 🆕 [github下载](https://github.com/putyy/res-downloader/releases) -🆕 [蓝奏云下载 密码:9vs5](https://wwjv.lanzoum.com/b04wgtfyb) +🆕 [蓝奏云下载 密码:9vs5](https://wwjv.lanzoum.com/b04wgtfyb) ## 使用方法 -> 0. 安装时一定要同意安装证书文件、一定要允许网络访问 -> 1. 打开本软件 软件首页左上角点击 “启动代理” -> 2. 软件首页选择要获取的资源类型(默认选中的全部) -> 3. 打开要捕获的源, 如:视频号、网页、小程序等等 -> 4. 返回软件首页即可看到资源列表 +> 0. 安装时一定要同意安装证书文件、一定要允许网络访问 +> 1. 打开本软件 软件首页左上角点击 “启动代理” +> 2. 软件首页选择要获取的资源类型(默认选中的全部) +> 3. 打开要捕获的源, 如:视频号、网页、小程序等等 +> 4. 返回软件首页即可看到资源列表 ## 软件截图 ![](preview/show.webp) diff --git a/build/.DS_Store b/build/.DS_Store index dadc027064807a060b709d17113bf19dad827697..e6448f32b3a10042d7b8a347813f75e4d6a8cef0 100644 GIT binary patch delta 32 ocmZoMXfc@J&&a+pU^gQp`(_@de8$ZSnbTM%HmGf8=lIJH0Hj+A3;+NC delta 53 zcmZoMXfc@J&&aVcU^gQp$7UX;d`59*h7^WehIG%I{N$vZ{3Hej1_1^J#_r8I%%v=w J**X650|0ms4aEQe diff --git a/core/app.go b/core/app.go index 2f89229..b7e2b06 100644 --- a/core/app.go +++ b/core/app.go @@ -166,7 +166,7 @@ func (a *App) OpenSystemProxy() bool { a.IsProxy = true return true } - DialogErr("设置失败") + DialogErr("设置失败" + err.Error()) return false } diff --git a/core/downloader.go b/core/downloader.go index a38e563..07a1322 100644 --- a/core/downloader.go +++ b/core/downloader.go @@ -9,6 +9,7 @@ import ( "net/url" "os" "path/filepath" + "strings" "sync" ) @@ -68,7 +69,7 @@ func (fd *FileDownloader) init() error { fd.Referer = parsedURL.Scheme + "://" + parsedURL.Host + "/" } - if globalConfig.DownloadProxy && globalConfig.UpstreamProxy != "" { + if globalConfig.DownloadProxy && globalConfig.UpstreamProxy != "" && !strings.Contains(globalConfig.UpstreamProxy, globalConfig.Port) { proxyURL, err := url.Parse(globalConfig.UpstreamProxy) if err == nil { fd.ProxyUrl = proxyURL diff --git a/core/http.go b/core/http.go index 13d80a0..6c42dfc 100644 --- a/core/http.go +++ b/core/http.go @@ -20,15 +20,11 @@ type ResponseData struct { Data interface{} `json:"data"` } -type HttpServer struct { - broadcast chan []byte -} +type HttpServer struct{} func initHttpServer() *HttpServer { if httpServerOnce == nil { - httpServerOnce = &HttpServer{ - broadcast: make(chan []byte), - } + httpServerOnce = &HttpServer{} } return httpServerOnce } @@ -38,7 +34,6 @@ func (h *HttpServer) run() { if err != nil { log.Fatalf("无法启动监听: %v", err) } - go h.handleMessages() fmt.Println("服务已启动,监听 http://" + globalConfig.Host + ":" + globalConfig.Port) if err := http.Serve(listener, proxyOnce.Proxy); err != nil { fmt.Printf("服务器异常: %v", err) @@ -90,13 +85,6 @@ func (h *HttpServer) preview(w http.ResponseWriter, r *http.Request) { return } -func (h *HttpServer) handleMessages() { - for { - msg := <-h.broadcast - runtime.EventsEmit(appOnce.ctx, "event", string(msg)) - } -} - func (h *HttpServer) send(t string, data interface{}) { jsonData, err := json.Marshal(map[string]interface{}{ "type": t, @@ -106,7 +94,7 @@ func (h *HttpServer) send(t string, data interface{}) { fmt.Println("Error converting map to JSON:", err) return } - h.broadcast <- jsonData + runtime.EventsEmit(appOnce.ctx, "event", string(jsonData)) } func (h *HttpServer) writeJson(w http.ResponseWriter, data ResponseData) { @@ -179,13 +167,13 @@ func (h *HttpServer) openFolder(w http.ResponseWriter, r *http.Request) { case "linux": // linux // 尝试使用不同的文件管理器 - cmd = exec.Command("nautilus", filePath) // 尝试Nautilus + cmd = exec.Command("nautilus", filePath) if err := cmd.Start(); err != nil { - cmd = exec.Command("thunar", filePath) // 尝试Thunar + cmd = exec.Command("thunar", filePath) if err := cmd.Start(); err != nil { - cmd = exec.Command("dolphin", filePath) // 尝试Dolphin + cmd = exec.Command("dolphin", filePath) if err := cmd.Start(); err != nil { - cmd = exec.Command("pcmanfm", filePath) // 尝试PCManFM + cmd = exec.Command("pcmanfm", filePath) if err := cmd.Start(); err != nil { globalLogger.err(err) h.writeJson(w, ResponseData{Code: 0, Message: err.Error()}) diff --git a/core/middleware.go b/core/middleware.go index 7d7bdf4..8464fc8 100644 --- a/core/middleware.go +++ b/core/middleware.go @@ -15,14 +15,14 @@ func Middleware(next http.Handler) http.Handler { } func HandleApi(w http.ResponseWriter, r *http.Request) bool { - w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") - w.Header().Set("Access-Control-Allow-Headers", "Content-Type") - if r.Method == http.MethodOptions { - w.WriteHeader(http.StatusNoContent) - return true - } if strings.HasPrefix(r.URL.Path, "/api") { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type") + if r.Method == http.MethodOptions { + w.WriteHeader(http.StatusNoContent) + return true + } switch r.URL.Path { case "/api/preview": httpServerOnce.preview(w, r) diff --git a/core/proxy.go b/core/proxy.go index 1a91261..8cbbef6 100644 --- a/core/proxy.go +++ b/core/proxy.go @@ -95,7 +95,7 @@ func (p *Proxy) setTransport() { IdleConnTimeout: 30 * time.Second, } - if globalConfig.UpstreamProxy != "" && globalConfig.OpenProxy { + if globalConfig.UpstreamProxy != "" && globalConfig.OpenProxy && !strings.Contains(globalConfig.UpstreamProxy, globalConfig.Port) { proxyURL, err := url.Parse(globalConfig.UpstreamProxy) if err == nil { transport.Proxy = http.ProxyURL(proxyURL) diff --git a/core/system_darwin.go b/core/system_darwin.go index eaeed27..313891f 100644 --- a/core/system_darwin.go +++ b/core/system_darwin.go @@ -5,94 +5,88 @@ package core import ( "bytes" "fmt" - "log" - "net" "os/exec" "strings" ) -func (s *SystemSetup) getActiveInterface() (string, error) { - interfaces, err := net.Interfaces() +func (s *SystemSetup) getNetworkServices() ([]string, error) { + cmd := exec.Command("networksetup", "-listallnetworkservices") + output, err := cmd.Output() if err != nil { - return "", err + return nil, fmt.Errorf("failed to execute command: %v", err) } - for _, inter := range interfaces { - if inter.Flags&net.FlagUp != 0 && inter.Flags&net.FlagLoopback == 0 { - return inter.Name, nil - } - } - return "", fmt.Errorf("no active network interface found") -} + services := strings.Split(string(output), "\n") -func (s *SystemSetup) getNetworkServiceName(interfaceName string) (string, error) { - cmd := exec.Command("networksetup", "-listallhardwareports") - var out bytes.Buffer - cmd.Stdout = &out - if err := cmd.Run(); err != nil { - return "", err + var validServices []string + for _, service := range services { + service = strings.TrimSpace(service) + if service != "" && !strings.Contains(service, "*") && !strings.Contains(service, "Serial Port") { + validServices = append(validServices, service) + } } - output := out.String() - lines := strings.Split(output, "\n") - var serviceName string - for _, line := range lines { - if strings.Contains(line, "Hardware Port:") { - serviceName = strings.TrimSpace(strings.Split(line, ":")[1]) - } - if strings.Contains(line, "Device: "+interfaceName) { - return serviceName, nil - } - } - return "", fmt.Errorf("no matching network service found for interface %s", interfaceName) + return validServices, nil } func (s *SystemSetup) setProxy() error { - interfaceName, err := s.getActiveInterface() + services, err := s.getNetworkServices() if err != nil { return err } - - serviceName, err := s.getNetworkServiceName(interfaceName) - if err != nil { - return err - } - commands := [][]string{ - {"networksetup", "-setwebproxy", serviceName, "127.0.0.1", globalConfig.Port}, - {"networksetup", "-setsecurewebproxy", serviceName, "127.0.0.1", globalConfig.Port}, + if len(services) == 0 { + return fmt.Errorf("find to Network failed") } - for _, cmd := range commands { - if err := exec.Command(cmd[0], cmd[1:]...).Run(); err != nil { - return err + is := false + for _, serviceName := range services { + if err := exec.Command("networksetup", "-setwebproxy", serviceName, "127.0.0.1", globalConfig.Port).Run(); err != nil { + fmt.Println(err) + } else { + is = true + } + if err := exec.Command("networksetup", "-setsecurewebproxy", serviceName, "127.0.0.1", globalConfig.Port).Run(); err != nil { + fmt.Println(err) + } else { + is = true } } - return nil + + if is { + return nil + } + + return fmt.Errorf("find to Network failed") } func (s *SystemSetup) unsetProxy() error { - interfaceName, err := s.getActiveInterface() + services, err := s.getNetworkServices() if err != nil { return err } - - serviceName, err := s.getNetworkServiceName(interfaceName) - if err != nil { - return err - } - commands := [][]string{ - {"networksetup", "-setwebproxystate", serviceName, "off"}, - {"networksetup", "-setsecurewebproxystate", serviceName, "off"}, + if len(services) == 0 { + return fmt.Errorf("find to Network failed") } - for _, cmd := range commands { - if err := exec.Command(cmd[0], cmd[1:]...).Run(); err != nil { - log.Println("UnsetProxy failed:", err) - return err + is := false + for _, serviceName := range services { + if err := exec.Command("networksetup", "-setwebproxystate", serviceName, "off").Run(); err != nil { + fmt.Println(err) + } else { + is = true + } + if err := exec.Command("networksetup", "-setsecurewebproxystate", serviceName, "off").Run(); err != nil { + fmt.Println(err) + } else { + is = true } } - return nil + if is { + return nil + } + + return fmt.Errorf("find to Network failed") } func (s *SystemSetup) installCert() (string, error) { diff --git a/frontend/src/App.vue b/frontend/src/App.vue index d44d05e..0af3cf2 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -12,9 +12,9 @@ import NaiveProvider from '@/components/NaiveProvider.vue' import {darkTheme, lightTheme, zhCN} from 'naive-ui' import {useIndexStore} from "@/stores" -import {computed, onMounted, watch} from "vue" -import type {wsType} from "@/types/ws" +import {computed, onMounted} from "vue" import {useEventStore} from "@/stores/event" +import {appType} from "@/types/app"; const store = useIndexStore() const eventStore = useEventStore() @@ -33,7 +33,7 @@ onMounted(async () => { eventStore.init() eventStore.addHandle({ type: "message", - event: (res: wsType.Message)=>{ + event: (res: appType.Message)=>{ switch (res?.code) { case 0: window?.$message?.error(res.message) diff --git a/frontend/src/components/Footer.vue b/frontend/src/components/Footer.vue index d53e261..d9cc47d 100644 --- a/frontend/src/components/Footer.vue +++ b/frontend/src/components/Footer.vue @@ -58,7 +58,7 @@