From 3ef0e36026a48095bc1f3f38af238d84ac40e1d4 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Sun, 25 Oct 2026 16:20:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=8E=9F=E7=94=9F=E6=A1=8C=E9=9D=A2):=20?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E6=A1=8C=E9=9D=A2=E5=8F=8C=E6=A8=AA=E7=BA=BF?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/webview/webview.go | 59 ++++++++++++++++++++++++++++++++++ cmd/webview/webview_linux.go | 6 ++-- cmd/webview/webview_windows.go | 6 ++-- 3 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 cmd/webview/webview.go diff --git a/cmd/webview/webview.go b/cmd/webview/webview.go new file mode 100644 index 0000000..3085c8a --- /dev/null +++ b/cmd/webview/webview.go @@ -0,0 +1,59 @@ +// Copyright 2025-2026 肖其顿 (XIAO QI DUN) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build (windows && amd64) || (linux && (amd64 || arm64)) + +package main + +import ( + "os" + "strings" +) + +// commandLine 读取桌面参数并处理参数错误 +// 返回: []string 文件路径, string 浏览器数据目录 +func commandLine() ([]string, string) { + paths, dataDir, ok := parseArguments(os.Args[1:]) + if !ok { + os.Exit(2) + } + return paths, dataDir +} + +// parseArguments 解析双横线选项及后续文件路径 +// 入参: args 启动参数 +// 返回: []string 文件路径, string 浏览器数据目录, bool 参数是否有效 +func parseArguments(args []string) ([]string, string, bool) { + var dataDir string + for len(args) > 0 { + arg := args[0] + args = args[1:] + switch { + case arg == "--": + return args, dataDir, true + case arg == "--data-dir": + if len(args) == 0 { + return nil, dataDir, false + } + dataDir, args = args[0], args[1:] + case strings.HasPrefix(arg, "--data-dir="): + dataDir = strings.TrimPrefix(arg, "--data-dir=") + case strings.HasPrefix(arg, "-"): + return nil, dataDir, false + default: + return append([]string{arg}, args...), dataDir, true + } + } + return nil, dataDir, true +} diff --git a/cmd/webview/webview_linux.go b/cmd/webview/webview_linux.go index 9b0fd80..e4caddb 100644 --- a/cmd/webview/webview_linux.go +++ b/cmd/webview/webview_linux.go @@ -18,7 +18,6 @@ package main import ( "context" - "flag" "fmt" "os" @@ -26,9 +25,8 @@ import ( ) func main() { - dataDir := flag.String("data-dir", "", "browser data directory") - flag.Parse() - if err := webview.Run(context.Background(), flag.Args(), *dataDir); err != nil { + paths, dataDir := commandLine() + if err := webview.Run(context.Background(), paths, dataDir); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } diff --git a/cmd/webview/webview_windows.go b/cmd/webview/webview_windows.go index 683d1f8..2950404 100644 --- a/cmd/webview/webview_windows.go +++ b/cmd/webview/webview_windows.go @@ -18,7 +18,6 @@ package main import ( "context" - "flag" "fmt" "os" "syscall" @@ -28,9 +27,8 @@ import ( ) func main() { - dataDir := flag.String("data-dir", "", "browser data directory") - flag.Parse() - if err := webview.Run(context.Background(), flag.Args(), *dataDir); err != nil { + paths, dataDir := commandLine() + if err := webview.Run(context.Background(), paths, dataDir); err != nil { fmt.Fprintln(os.Stderr, err) message, _ := syscall.UTF16PtrFromString(err.Error()) title, _ := syscall.UTF16PtrFromString("OFDGo")