mirror of
https://github.com/putyy/res-downloader.git
synced 2026-01-12 14:14:55 +08:00
优化
This commit is contained in:
@@ -166,7 +166,7 @@ func (a *App) OpenSystemProxy() bool {
|
||||
a.IsProxy = true
|
||||
return true
|
||||
}
|
||||
DialogErr("设置失败")
|
||||
DialogErr("设置失败" + err.Error())
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
26
core/http.go
26
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()})
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user