diff --git a/db/const.go b/db/const.go index 5184054..75c4fb1 100644 --- a/db/const.go +++ b/db/const.go @@ -63,6 +63,7 @@ type Limiter struct { } type ProwlarrSetting struct { - ApiKey string `json:"api_key"` - URL string `json:"url"` + Disabled bool `json:"disabled"` + ApiKey string `json:"api_key"` + URL string `json:"url"` } diff --git a/server/core/torrent.go b/server/core/torrent.go index 5ca2ce9..f1c7c0e 100644 --- a/server/core/torrent.go +++ b/server/core/torrent.go @@ -233,7 +233,7 @@ func searchWithTorznab(db *db.Client, t prowlarr.ProwlarrSupportType, queries .. allTorznab := db.GetAllTorznabInfo() p, err := db.GetProwlarrSetting() - if err == nil { //prowlarr exists + if err == nil && !p.Disabled { //prowlarr exists c := prowlarr.New(p.ApiKey, p.URL) all, err := c.GetIndexers(t) if err != nil { diff --git a/server/setting.go b/server/setting.go index 40131fa..43ef212 100644 --- a/server/setting.go +++ b/server/setting.go @@ -318,9 +318,11 @@ func (s *Server) SaveProwlarrSetting(c *gin.Context) (interface{}, error) { if err := c.ShouldBindJSON(&in); err != nil { return nil, err } - client := prowlarr.New(in.ApiKey, in.URL) - if _, err := client.GetIndexers(prowlarr.TV); err != nil { - return nil, errors.Wrap(err, "connect to prowlarr error") + if !in.Disabled { + client := prowlarr.New(in.ApiKey, in.URL) + if _, err := client.GetIndexers(prowlarr.TV); err != nil { + return nil, errors.Wrap(err, "connect to prowlarr error") + } } err := s.db.SaveProwlarrSetting(&in) if err != nil { diff --git a/ui/lib/providers/settings.dart b/ui/lib/providers/settings.dart index 88a9254..7de9224 100644 --- a/ui/lib/providers/settings.dart +++ b/ui/lib/providers/settings.dart @@ -32,7 +32,7 @@ var prowlarrSettingDataProvider = class EditSettingData extends AutoDisposeAsyncNotifier { @override FutureOr build() async { - final dio = APIs.getDio(); + final dio = APIs.getDio(); var resp = await dio.get(APIs.settingsGeneralUrl); var rrr = ServerResponse.fromJson(resp.data); @@ -509,14 +509,20 @@ class ImportListData extends AutoDisposeAsyncNotifier> { } class ProwlarrSetting { + final bool disabled; final String apiKey; final String url; - ProwlarrSetting({required this.apiKey, required this.url}); + ProwlarrSetting( + {required this.apiKey, required this.url, required this.disabled}); factory ProwlarrSetting.fromJson(Map json) { - return ProwlarrSetting(apiKey: json["api_key"], url: json["url"]); + return ProwlarrSetting( + apiKey: json["api_key"], + url: json["url"], + disabled: json["disabled"] ?? false); } - Map tojson() => {"api_key": apiKey, "url": url}; + Map tojson() => + {"api_key": apiKey, "url": url, "disabled": disabled}; } class ProwlarrSettingData extends AutoDisposeAsyncNotifier { diff --git a/ui/lib/settings/prowlarr.dart b/ui/lib/settings/prowlarr.dart index bd8cce4..37597f8 100644 --- a/ui/lib/settings/prowlarr.dart +++ b/ui/lib/settings/prowlarr.dart @@ -25,9 +25,18 @@ class ProwlarrSettingState extends ConsumerState { data: (v) => FormBuilder( key: _formKey, //设置globalKey,用于后面获取FormState autovalidateMode: AutovalidateMode.onUserInteraction, - initialValue: {"api_key": v.apiKey, "url": v.url}, + initialValue: { + "api_key": v.apiKey, + "url": v.url, + "enabled": !v.disabled + }, child: Column( children: [ + FormBuilderSwitch( + name: "enabled", + title: const Text("启用"), + decoration: InputDecoration(icon: Icon(Icons.check_circle)), + ), FormBuilderTextField( name: "url", decoration: const InputDecoration( @@ -55,12 +64,16 @@ class ProwlarrSettingState extends ConsumerState { .read(prowlarrSettingDataProvider.notifier) .save(ProwlarrSetting( apiKey: values["api_key"], - url: values["url"])) + url: values["url"], + disabled: !values["enabled"])) .then((v) => showSnakeBar("更新成功")); showLoadingWithFuture(f); } }, - child: const Padding(padding: EdgeInsets.all(10), child: Text("保存"),)), + child: const Padding( + padding: EdgeInsets.all(10), + child: Text("保存"), + )), ), ) ],