mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-06-23 04:14:17 +08:00
Return homepage if is already logined when visit login page.
Store cookies information to cookies subdirectory on Windows
This commit is contained in:
@@ -9,6 +9,8 @@ class AuthInfo {
|
||||
ServerStatus? _status;
|
||||
ServerStatus? get status => _status;
|
||||
bool get isAuthed => (_user != null);
|
||||
bool _checked = false;
|
||||
bool get checked => _checked;
|
||||
|
||||
Future<void> getServerStatus() async {
|
||||
_status = (await api.getStatus()).unwrap();
|
||||
@@ -21,6 +23,7 @@ class AuthInfo {
|
||||
} else {
|
||||
_user = null;
|
||||
}
|
||||
_checked = true;
|
||||
await getServerStatus();
|
||||
return re.ok;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:dio_cookie_manager/dio_cookie_manager.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'api/client.dart';
|
||||
@@ -23,12 +24,24 @@ final dio = Dio()
|
||||
Config? _prefs;
|
||||
EHApi? _api;
|
||||
|
||||
Future<void> prepareJar() async {
|
||||
Future<String> _getJarPath() async {
|
||||
if (isWindows) {
|
||||
try {
|
||||
final p = await platformPath.getCurrentExe();
|
||||
if (p != null) {
|
||||
return path.join(path.dirname(p), "cookies");
|
||||
}
|
||||
} catch (e) {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
final Directory appDocDir = await getApplicationDocumentsDirectory();
|
||||
final String appDocPath = appDocDir.path;
|
||||
final jar = PersistCookieJar(
|
||||
storage: FileStorage('$appDocPath/.eh-cookies/'),
|
||||
);
|
||||
return '$appDocPath/.eh-cookies/';
|
||||
}
|
||||
|
||||
Future<void> prepareJar() async {
|
||||
final jar = PersistCookieJar(storage: FileStorage(await _getJarPath()));
|
||||
dio.interceptors.add(CookieManager(jar));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'globals.dart';
|
||||
|
||||
final _log = Logger("LoginPage");
|
||||
|
||||
class LoginPage extends StatefulWidget {
|
||||
const LoginPage({Key? key}) : super(key: key);
|
||||
|
||||
@@ -19,6 +23,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||
bool _passwordVisible = false;
|
||||
bool _isValid = false;
|
||||
bool _isLogin = false;
|
||||
bool _checkAuth = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -68,9 +73,32 @@ class _LoginPageState extends State<LoginPage> {
|
||||
return re.ok;
|
||||
}
|
||||
|
||||
void _checkStatus(BuildContext build) {
|
||||
if (auth.isAuthed) {
|
||||
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||
build.go("/");
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!auth.checked) {
|
||||
if (_checkAuth) return;
|
||||
_checkAuth = true;
|
||||
auth.checkAuth().then((re) {
|
||||
_checkAuth = false;
|
||||
if (re) {
|
||||
build.go("/");
|
||||
}
|
||||
}).catchError((e) {
|
||||
_log.severe("Failed to check auth info:", e);
|
||||
_checkAuth = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
tryInitApi(context);
|
||||
_checkStatus(context);
|
||||
return Scaffold(
|
||||
body: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 100),
|
||||
@@ -124,6 +152,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||
});
|
||||
}
|
||||
}).catchError((e) {
|
||||
_log.severe("Failed to login:", e);
|
||||
setState(() {
|
||||
_isLogin = false;
|
||||
});
|
||||
|
||||
@@ -36,7 +36,9 @@ Future<void> initLogger() async {
|
||||
Logger.root.level = Level(logLevelName, logLevel);
|
||||
}
|
||||
Logger.root.onRecord.listen((record) {
|
||||
print('${record.level.name}: ${record.time}: ${record.message}');
|
||||
final stack = record.stackTrace != null ? '\n${record.stackTrace}' : '';
|
||||
print(
|
||||
'${record.level.name}: ${record.time}: ${record.message}${record.error}$stack');
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user