diff --git a/ui/lib/providers/settings.dart b/ui/lib/providers/settings.dart index 7cc21cc..f047f4f 100644 --- a/ui/lib/providers/settings.dart +++ b/ui/lib/providers/settings.dart @@ -6,8 +6,9 @@ import 'package:quiver/strings.dart'; import 'package:ui/providers/APIs.dart'; import 'package:ui/providers/server_response.dart'; -var settingProvider = AsyncNotifierProvider.autoDispose - (EditSettingData.new); +var settingProvider = + AsyncNotifierProvider.autoDispose( + EditSettingData.new); var indexersProvider = AsyncNotifierProvider.autoDispose>( @@ -152,15 +153,12 @@ class DownloadClientSetting return indexers; } - Future addDownloadClients(String name, String url) async { - if (name.isEmpty || url.isEmpty) { + Future addDownloadClients(DownloadClient client) async { + if (isBlank(client.name) || isBlank(client.url)) { return; } final dio = await APIs.getDio(); - var resp = await dio.post(APIs.addDownloadClientUrl, data: { - "name": name, - "url": url, - }); + var resp = await dio.post(APIs.addDownloadClientUrl, data: client.toJson()); var sp = ServerResponse.fromJson(resp.data); if (sp.code != 0) { throw sp.message; @@ -185,8 +183,8 @@ class DownloadClient { String? name; String? implementation; String? url; - bool? removeCompletedDownloads; - bool? removeFailedDownloads; + String? user; + String? password; DownloadClient( {this.id, @@ -194,8 +192,8 @@ class DownloadClient { this.name, this.implementation, this.url, - this.removeCompletedDownloads, - this.removeFailedDownloads}); + this.user, + this.password}); DownloadClient.fromJson(Map json) { id = json['id']; @@ -203,8 +201,8 @@ class DownloadClient { name = json['name']; implementation = json['implementation']; url = json['url']; - removeCompletedDownloads = json['remove_completed_downloads']; - removeFailedDownloads = json['remove_failed_downloads']; + user = json['user']; + password = json['password']; } Map toJson() { @@ -214,8 +212,8 @@ class DownloadClient { data['name'] = name; data['implementation'] = implementation; data['url'] = url; - data['remove_completed_downloads'] = removeCompletedDownloads; - data['remove_failed_downloads'] = removeFailedDownloads; + data['user'] = user; + data['password'] = password; return data; } } diff --git a/ui/lib/system_settings.dart b/ui/lib/system_settings.dart index 089155a..1a1edb6 100644 --- a/ui/lib/system_settings.dart +++ b/ui/lib/system_settings.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:quiver/strings.dart'; import 'package:ui/providers/login.dart'; import 'package:ui/providers/settings.dart'; import 'package:ui/utils.dart'; @@ -303,7 +304,10 @@ class _SystemSettingsPageState extends ConsumerState { Future showDownloadClientDetails(DownloadClient client) { var nameController = TextEditingController(text: client.name); var urlController = TextEditingController(text: client.url); + var userController = TextEditingController(text: client.user); + var passController = TextEditingController(text: client.password); + var _enableAuth = isNotBlank(client.user); String selectImpl = "transmission"; var body = [ DropdownMenu( @@ -326,7 +330,34 @@ class _SystemSettingsPageState extends ConsumerState { decoration: Commons.requiredTextFieldStyle(text: "地址"), controller: urlController, ), - + StatefulBuilder(builder: (BuildContext context, StateSetter setState) { + return Column( + children: [ + SwitchListTile( + title: const Text("开启认证"), + value: _enableAuth, + onChanged: (v) { + setState(() { + _enableAuth = v; + }); + }), + _enableAuth + ? Column( + children: [ + TextField( + decoration: Commons.requiredTextFieldStyle(text: "用户"), + controller: userController, + ), + TextField( + decoration: Commons.requiredTextFieldStyle(text: "密码"), + controller: passController, + ), + ], + ) + : Container() + ], + ); + }) ]; onDelete() async { return ref @@ -335,9 +366,13 @@ class _SystemSettingsPageState extends ConsumerState { } onSubmit() async { - return ref - .read(dwonloadClientsProvider.notifier) - .addDownloadClients(nameController.text, urlController.text); + return ref.read(dwonloadClientsProvider.notifier).addDownloadClients( + DownloadClient( + name: nameController.text, + implementation: "transmission", + url: urlController.text, + user: _enableAuth ? userController.text : null, + password: _enableAuth ? passController.text : null)); } return showSettingDialog(