From 54d13fe7f23c7473ec98581af1904ef8e7444e3f Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Fri, 10 Jan 2025 23:58:07 +0800 Subject: [PATCH] mod: webview: reset cookie Signed-off-by: bggRGjQaUbCoE --- lib/pages/about/index.dart | 8 ++--- lib/pages/webview/webview_page.dart | 48 ++++++++++++++++++++++------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/lib/pages/about/index.dart b/lib/pages/about/index.dart index b81b30e6..75ab5b11 100644 --- a/lib/pages/about/index.dart +++ b/lib/pages/about/index.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/build_config.dart'; import 'package:PiliPlus/http/constants.dart'; import 'package:PiliPlus/services/loggeer.dart'; import 'package:cookie_jar/cookie_jar.dart'; -import 'package:dio_cookie_manager/dio_cookie_manager.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -13,6 +12,7 @@ import 'package:package_info_plus/package_info_plus.dart'; import 'package:PiliPlus/models/github/latest.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/utils.dart'; +import '../../http/init.dart'; import '../../utils/cache_manage.dart'; class AboutPage extends StatefulWidget { @@ -223,11 +223,7 @@ Commit Hash: ${BuildConfig.commitHash}''', Get.back(); dynamic accessKey = GStorage.localCache .get(LocalCacheKey.accessKey, defaultValue: {}); - dynamic cookies = (await CookieManager(PersistCookieJar( - ignoreExpires: true, - storage: FileStorage(await Utils.getCookiePath()), - )) - .cookieJar + dynamic cookies = (await Request.cookieManager.cookieJar .loadForRequest(Uri.parse(HttpString.baseUrl))) .map( (Cookie cookie) => { diff --git a/lib/pages/webview/webview_page.dart b/lib/pages/webview/webview_page.dart index 3f5799bf..fdc7b3c1 100644 --- a/lib/pages/webview/webview_page.dart +++ b/lib/pages/webview/webview_page.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:PiliPlus/http/constants.dart'; import 'package:PiliPlus/http/init.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; @@ -7,15 +8,24 @@ import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; +import 'package:cookie_jar/cookie_jar.dart' as cookie_jar; -enum WebviewMenuItem { refresh, copy, openInBrowser, clearCache, goBack } +enum _WebviewMenuItem { + refresh, + copy, + openInBrowser, + clearCache, + resetCookie, + goBack, +} -extension WebviewMenuItemExt on WebviewMenuItem { +extension _WebviewMenuItemExt on _WebviewMenuItem { String get title => [ '刷新', '复制链接', '浏览器中打开', '清除缓存', + '重新设置Cookie', '返回', ][index]; } @@ -72,22 +82,22 @@ class _WebviewPageNewState extends State { PopupMenuButton( onSelected: (item) async { switch (item) { - case WebviewMenuItem.refresh: + case _WebviewMenuItem.refresh: _webViewController?.reload(); break; - case WebviewMenuItem.copy: + case _WebviewMenuItem.copy: WebUri? uri = await _webViewController?.getUrl(); if (uri != null) { Utils.copyText(uri.toString()); } break; - case WebviewMenuItem.openInBrowser: + case _WebviewMenuItem.openInBrowser: WebUri? uri = await _webViewController?.getUrl(); if (uri != null) { Utils.launchURL(uri.toString()); } break; - case WebviewMenuItem.clearCache: + case _WebviewMenuItem.clearCache: try { await InAppWebViewController.clearAllCache(); await _webViewController?.clearHistory(); @@ -96,23 +106,39 @@ class _WebviewPageNewState extends State { SmartDialog.showToast(e.toString()); } break; - case WebviewMenuItem.goBack: + case _WebviewMenuItem.goBack: if (await _webViewController?.canGoBack() == true) { _webViewController?.goBack(); } else { Get.back(); } break; + case _WebviewMenuItem.resetCookie: + final List cookies = await Request + .cookieManager.cookieJar + .loadForRequest(Uri.parse(HttpString.baseUrl)); + for (cookie_jar.Cookie item in cookies) { + await CookieManager().setCookie( + url: WebUri(item.domain ?? ''), + name: item.name, + value: item.value, + path: item.path ?? '', + domain: item.domain, + isSecure: item.secure, + isHttpOnly: item.httpOnly, + ); + } + break; } }, - itemBuilder: (context) => >[ - ...WebviewMenuItem.values.sublist(0, 4).map((item) => + itemBuilder: (context) => >[ + ..._WebviewMenuItem.values.sublist(0, 4).map((item) => PopupMenuItem(value: item, child: Text(item.title))), const PopupMenuDivider(), PopupMenuItem( - value: WebviewMenuItem.goBack, + value: _WebviewMenuItem.goBack, child: Text( - WebviewMenuItem.goBack.title, + _WebviewMenuItem.goBack.title, style: TextStyle(color: Theme.of(context).colorScheme.error), )),