mirror of
https://github.com/simon-ding/polaris.git
synced 2026-02-06 23:21:00 +08:00
add auth to transmission
This commit is contained in:
@@ -6,8 +6,9 @@ import 'package:quiver/strings.dart';
|
|||||||
import 'package:ui/providers/APIs.dart';
|
import 'package:ui/providers/APIs.dart';
|
||||||
import 'package:ui/providers/server_response.dart';
|
import 'package:ui/providers/server_response.dart';
|
||||||
|
|
||||||
var settingProvider = AsyncNotifierProvider.autoDispose
|
var settingProvider =
|
||||||
<EditSettingData, GeneralSetting>(EditSettingData.new);
|
AsyncNotifierProvider.autoDispose<EditSettingData, GeneralSetting>(
|
||||||
|
EditSettingData.new);
|
||||||
|
|
||||||
var indexersProvider =
|
var indexersProvider =
|
||||||
AsyncNotifierProvider.autoDispose<IndexerSetting, List<Indexer>>(
|
AsyncNotifierProvider.autoDispose<IndexerSetting, List<Indexer>>(
|
||||||
@@ -152,15 +153,12 @@ class DownloadClientSetting
|
|||||||
return indexers;
|
return indexers;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> addDownloadClients(String name, String url) async {
|
Future<void> addDownloadClients(DownloadClient client) async {
|
||||||
if (name.isEmpty || url.isEmpty) {
|
if (isBlank(client.name) || isBlank(client.url)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final dio = await APIs.getDio();
|
final dio = await APIs.getDio();
|
||||||
var resp = await dio.post(APIs.addDownloadClientUrl, data: {
|
var resp = await dio.post(APIs.addDownloadClientUrl, data: client.toJson());
|
||||||
"name": name,
|
|
||||||
"url": url,
|
|
||||||
});
|
|
||||||
var sp = ServerResponse.fromJson(resp.data);
|
var sp = ServerResponse.fromJson(resp.data);
|
||||||
if (sp.code != 0) {
|
if (sp.code != 0) {
|
||||||
throw sp.message;
|
throw sp.message;
|
||||||
@@ -185,8 +183,8 @@ class DownloadClient {
|
|||||||
String? name;
|
String? name;
|
||||||
String? implementation;
|
String? implementation;
|
||||||
String? url;
|
String? url;
|
||||||
bool? removeCompletedDownloads;
|
String? user;
|
||||||
bool? removeFailedDownloads;
|
String? password;
|
||||||
|
|
||||||
DownloadClient(
|
DownloadClient(
|
||||||
{this.id,
|
{this.id,
|
||||||
@@ -194,8 +192,8 @@ class DownloadClient {
|
|||||||
this.name,
|
this.name,
|
||||||
this.implementation,
|
this.implementation,
|
||||||
this.url,
|
this.url,
|
||||||
this.removeCompletedDownloads,
|
this.user,
|
||||||
this.removeFailedDownloads});
|
this.password});
|
||||||
|
|
||||||
DownloadClient.fromJson(Map<String, dynamic> json) {
|
DownloadClient.fromJson(Map<String, dynamic> json) {
|
||||||
id = json['id'];
|
id = json['id'];
|
||||||
@@ -203,8 +201,8 @@ class DownloadClient {
|
|||||||
name = json['name'];
|
name = json['name'];
|
||||||
implementation = json['implementation'];
|
implementation = json['implementation'];
|
||||||
url = json['url'];
|
url = json['url'];
|
||||||
removeCompletedDownloads = json['remove_completed_downloads'];
|
user = json['user'];
|
||||||
removeFailedDownloads = json['remove_failed_downloads'];
|
password = json['password'];
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
@@ -214,8 +212,8 @@ class DownloadClient {
|
|||||||
data['name'] = name;
|
data['name'] = name;
|
||||||
data['implementation'] = implementation;
|
data['implementation'] = implementation;
|
||||||
data['url'] = url;
|
data['url'] = url;
|
||||||
data['remove_completed_downloads'] = removeCompletedDownloads;
|
data['user'] = user;
|
||||||
data['remove_failed_downloads'] = removeFailedDownloads;
|
data['password'] = password;
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:quiver/strings.dart';
|
||||||
import 'package:ui/providers/login.dart';
|
import 'package:ui/providers/login.dart';
|
||||||
import 'package:ui/providers/settings.dart';
|
import 'package:ui/providers/settings.dart';
|
||||||
import 'package:ui/utils.dart';
|
import 'package:ui/utils.dart';
|
||||||
@@ -303,7 +304,10 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
|
|||||||
Future<void> showDownloadClientDetails(DownloadClient client) {
|
Future<void> showDownloadClientDetails(DownloadClient client) {
|
||||||
var nameController = TextEditingController(text: client.name);
|
var nameController = TextEditingController(text: client.name);
|
||||||
var urlController = TextEditingController(text: client.url);
|
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";
|
String selectImpl = "transmission";
|
||||||
var body = <Widget>[
|
var body = <Widget>[
|
||||||
DropdownMenu(
|
DropdownMenu(
|
||||||
@@ -326,7 +330,34 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
|
|||||||
decoration: Commons.requiredTextFieldStyle(text: "地址"),
|
decoration: Commons.requiredTextFieldStyle(text: "地址"),
|
||||||
controller: urlController,
|
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 {
|
onDelete() async {
|
||||||
return ref
|
return ref
|
||||||
@@ -335,9 +366,13 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSubmit() async {
|
onSubmit() async {
|
||||||
return ref
|
return ref.read(dwonloadClientsProvider.notifier).addDownloadClients(
|
||||||
.read(dwonloadClientsProvider.notifier)
|
DownloadClient(
|
||||||
.addDownloadClients(nameController.text, urlController.text);
|
name: nameController.text,
|
||||||
|
implementation: "transmission",
|
||||||
|
url: urlController.text,
|
||||||
|
user: _enableAuth ? userController.text : null,
|
||||||
|
password: _enableAuth ? passController.text : null));
|
||||||
}
|
}
|
||||||
|
|
||||||
return showSettingDialog(
|
return showSettingDialog(
|
||||||
|
|||||||
Reference in New Issue
Block a user