This commit is contained in:
wgh19
2024-05-16 09:31:21 +08:00
parent 2f0b1b9554
commit 945d386d17
3 changed files with 61 additions and 14 deletions

View File

@@ -18,7 +18,8 @@ class _Appdata {
"downloadSubPath": r"/${id}-p${index}.${ext}", "downloadSubPath": r"/${id}-p${index}.${ext}",
"tagsWeight": "風景 ロリ 巨乳 女の子", "tagsWeight": "風景 ロリ 巨乳 女の子",
"useTranslatedNameForDownload": true, "useTranslatedNameForDownload": true,
"maxParallels": 3 "maxParallels": 3,
"proxy": "",
}; };
bool lock = false; bool lock = false;

View File

@@ -3,6 +3,7 @@ import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:dio/io.dart'; import 'package:dio/io.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:pixes/appdata.dart';
import 'package:pixes/foundation/app.dart'; import 'package:pixes/foundation/app.dart';
import 'package:pixes/foundation/log.dart'; import 'package:pixes/foundation/log.dart';
import 'package:pixes/utils/ext.dart'; import 'package:pixes/utils/ext.dart';
@@ -132,7 +133,9 @@ class _ProxyHttpOverrides extends HttpOverrides {
String proxy = "DIRECT"; String proxy = "DIRECT";
String findProxy(Uri uri) { String findProxy(Uri uri) {
if(!App.isLinux) { var haveUserProxy = appdata.settings["proxy"] != null
&& appdata.settings["proxy"].toString().isNotEmpty;
if(!App.isLinux && !haveUserProxy){
var channel = const MethodChannel("pixes/proxy"); var channel = const MethodChannel("pixes/proxy");
channel.invokeMethod("getProxy").then((value) { channel.invokeMethod("getProxy").then((value) {
if(value.toString().toLowerCase() == "no proxy"){ if(value.toString().toLowerCase() == "no proxy"){
@@ -150,6 +153,10 @@ class _ProxyHttpOverrides extends HttpOverrides {
proxy = "PROXY $value"; proxy = "PROXY $value";
} }
}); });
} else {
if(haveUserProxy){
proxy = "PROXY ${appdata.settings["proxy"]}";
}
} }
return proxy; return proxy;
} }

View File

@@ -31,6 +31,8 @@ class _SettingsPageState extends State<SettingsPage> {
SliverTitleBar(title: "Settings".tl), SliverTitleBar(title: "Settings".tl),
buildHeader("Account".tl), buildHeader("Account".tl),
buildAccount(), buildAccount(),
buildHeader("Browser".tl),
buildBrowser(),
buildHeader("Download".tl), buildHeader("Download".tl),
buildDownload(), buildDownload(),
buildHeader("About".tl), buildHeader("About".tl),
@@ -123,10 +125,20 @@ class _SettingsPageState extends State<SettingsPage> {
child: Text("Manage".tl).fixWidth(64), child: Text("Manage".tl).fixWidth(64),
onPressed: () { onPressed: () {
if (Platform.isIOS) { if (Platform.isIOS) {
showToast(context, message: "Unsupport platform".tl); showToast(context, message: "Unsupported platform".tl);
return; return;
} }
context.to(() => const _SetDownloadPathPage()); context.to(() => _SetSingleFieldPage(
"Download Path".tl,
"downloadPath",
check: (text) {
if(!Directory(text).havePermission()) {
return "No permission".tl;
} else {
return null;
}
},
));
}), }),
), ),
buildItem( buildItem(
@@ -189,25 +201,51 @@ class _SettingsPageState extends State<SettingsPage> {
), ),
); );
} }
Widget buildBrowser() {
return SliverToBoxAdapter(
child: Column(
children: [
buildItem(
title: "Proxy".tl,
action: Button(
child: Text("Edit".tl).fixWidth(64),
onPressed: () {
context.to(() => _SetSingleFieldPage(
"Http ${"Proxy".tl}",
"proxy",
));
},
)),
],
),
);
}
} }
class _SetDownloadPathPage extends StatefulWidget { class _SetSingleFieldPage extends StatefulWidget {
const _SetDownloadPathPage(); const _SetSingleFieldPage(this.title, this.field, {this.check});
final String title;
final String field;
final String? Function(String)? check;
@override @override
State<_SetDownloadPathPage> createState() => __SetDownloadPathPageState(); State<_SetSingleFieldPage> createState() => _SetSingleFieldPageState();
} }
class __SetDownloadPathPageState extends State<_SetDownloadPathPage> { class _SetSingleFieldPageState extends State<_SetSingleFieldPage> {
final controller = late final controller =
TextEditingController(text: appdata.settings["downloadPath"]); TextEditingController(text: appdata.settings[widget.field]);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
TitleBar(title: "Download Path".tl), TitleBar(title: widget.title),
TextBox( TextBox(
controller: controller, controller: controller,
).paddingHorizontal(16), ).paddingHorizontal(16),
@@ -218,12 +256,13 @@ class __SetDownloadPathPageState extends State<_SetDownloadPathPage> {
child: Text("Confirm".tl), child: Text("Confirm".tl),
onPressed: () { onPressed: () {
var text = controller.text; var text = controller.text;
if (Directory(text).havePermission()) { var checkRes = widget.check?.call(text);
appdata.settings["downloadPath"] = text; if (checkRes == null) {
appdata.settings[widget.field] = text;
appdata.writeData(); appdata.writeData();
context.pop(); context.pop();
} else { } else {
showToast(context, message: "No Permission".tl); showToast(context, message: checkRes);
} }
}, },
).toAlign(Alignment.centerRight).paddingRight(16), ).toAlign(Alignment.centerRight).paddingRight(16),