mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-09 01:50:30 +00:00
feat: move native communication to FFI (#1457)
This commit is contained in:
86 files changed
+4558
-886
No files matched your search
@@ -1,6 +1,8 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/GopeedLab/gopeed/pkg/base"
|
||||
enginewebview "github.com/GopeedLab/gopeed/pkg/download/engine/webview"
|
||||
"io/fs"
|
||||
@@ -16,6 +18,7 @@ const (
|
||||
type StartConfig struct {
|
||||
Network string `json:"network"`
|
||||
Address string `json:"address"`
|
||||
ApiEnable *bool `json:"apiEnable,omitempty"`
|
||||
RefreshInterval int `json:"refreshInterval"`
|
||||
Storage Storage `json:"storage"`
|
||||
StorageDir string `json:"storageDir"`
|
||||
@@ -25,6 +28,7 @@ type StartConfig struct {
|
||||
WebViewRPCConfig *enginewebview.RPCConfig `json:"webViewRpcConfig,omitempty"`
|
||||
|
||||
ProductionMode bool
|
||||
NativeMode bool
|
||||
WebViewProvider enginewebview.Provider `json:"-"`
|
||||
|
||||
WebEnable bool
|
||||
@@ -32,6 +36,26 @@ type StartConfig struct {
|
||||
WebAuth *WebAuth
|
||||
}
|
||||
|
||||
func (cfg *StartConfig) APIEnabled() bool {
|
||||
if cfg == nil || cfg.WebEnable {
|
||||
return true
|
||||
}
|
||||
// Preserve the behavior of existing CLI and library callers. Native
|
||||
// Flutter explicitly sends false when it wants an in-process-only runtime.
|
||||
return cfg.ApiEnable == nil || *cfg.ApiEnable
|
||||
}
|
||||
|
||||
func (cfg *StartConfig) Validate() error {
|
||||
if cfg == nil {
|
||||
return nil
|
||||
}
|
||||
if cfg.WebEnable && cfg.ApiToken != "" &&
|
||||
(cfg.WebAuth == nil || cfg.WebAuth.Username == "" || cfg.WebAuth.Password == "") {
|
||||
return errors.New("web authentication username and password are required when API token is enabled for the web server")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfg *StartConfig) Init() *StartConfig {
|
||||
if cfg.Network == "" {
|
||||
cfg.Network = "tcp"
|
||||
@@ -55,3 +79,20 @@ type WebAuth struct {
|
||||
Username string
|
||||
Password string
|
||||
}
|
||||
|
||||
// APIServerState describes the listener that is actually running. The
|
||||
// persisted APIServerConfig remains the desired state.
|
||||
type APIServerState struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
Running bool `json:"running"`
|
||||
Network string `json:"network"`
|
||||
Address string `json:"address"`
|
||||
RunningPort int `json:"runningPort"`
|
||||
PendingApply bool `json:"pendingApply"`
|
||||
LastError string `json:"lastError"`
|
||||
}
|
||||
|
||||
type APIServerOperationResult struct {
|
||||
State *APIServerState `json:"state"`
|
||||
Error string `json:"error"`
|
||||
}
|
||||
Reference in new issue
Block a user