From c3ace405ac2b56a3ccd2e0b1492f225b81f6f1d7 Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Fri, 3 Nov 2023 09:26:16 +0800 Subject: [PATCH] fix pushpage --- .../Web/Bridge/MiHoYoJSInterface.cs | 211 ++++++++++-------- 1 file changed, 114 insertions(+), 97 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs index 75a127a8..644a0f7e 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs @@ -74,6 +74,36 @@ internal class MiHoYoJSInterface public event Action? ClosePageRequested; + /// + /// 关闭 + /// + /// 参数 + /// 响应 + public virtual async ValueTask ClosePageAsync(JsParam param) + { + await taskContext.SwitchToMainThreadAsync(); + if (coreWebView2.CanGoBack) + { + coreWebView2.GoBack(); + } + else + { + ClosePageRequested?.Invoke(); + } + + return null; + } + + /// + /// 调整分享设置 + /// + /// 参数 + /// 响应 + public virtual IJsResult? ConfigureShare(JsParam param) + { + return null; + } + /// /// 获取ActionTicket /// @@ -87,24 +117,6 @@ internal class MiHoYoJSInterface .ConfigureAwait(false); } - /// - /// 获取Http请求头 - /// - /// 参数 - /// Http请求头 - public virtual JsResult> GetHttpRequestHeader(JsParam param) - { - return new() - { - Data = new Dictionary() - { - { "x-rpc-client_type", "5" }, - { "x-rpc-device_id", HoyolabOptions.DeviceId }, - { "x-rpc-app_version", SaltConstants.CNVersion }, - }, - }; - } - /// /// 异步获取账户信息 /// @@ -125,6 +137,45 @@ internal class MiHoYoJSInterface }; } + /// + /// 获取CookieToken + /// + /// 参数 + /// 响应 + public virtual async ValueTask>> GetCookieTokenAsync(JsParam param) + { + IUserService userService = serviceProvider.GetRequiredService(); + if (param.Payload.ForceRefresh) + { + await userService.RefreshCookieTokenAsync(userAndUid.User).ConfigureAwait(false); + } + + await taskContext.SwitchToMainThreadAsync(); + coreWebView2.SetCookie(userAndUid.User.CookieToken, userAndUid.User.LToken); + + ArgumentNullException.ThrowIfNull(userAndUid.User.CookieToken); + return new() { Data = new() { [Cookie.COOKIE_TOKEN] = userAndUid.User.CookieToken[Cookie.COOKIE_TOKEN] } }; + } + + /// + /// 获取当前语言和时区 + /// + /// param + /// 语言与时区 + public virtual JsResult> GetCurrentLocale(JsParam param) + { + MetadataOptions metadataOptions = serviceProvider.GetRequiredService(); + + return new() + { + Data = new() + { + ["language"] = metadataOptions.LanguageCode, + ["timeZone"] = "GMT+8", + }, + }; + } + /// /// 获取1代动态密钥 /// @@ -179,6 +230,34 @@ internal class MiHoYoJSInterface } } + /// + /// 获取Http请求头 + /// + /// 参数 + /// Http请求头 + public virtual JsResult> GetHttpRequestHeader(JsParam param) + { + return new() + { + Data = new Dictionary() + { + { "x-rpc-client_type", "5" }, + { "x-rpc-device_id", HoyolabOptions.DeviceId }, + { "x-rpc-app_version", SaltConstants.CNVersion }, + }, + }; + } + + /// + /// 获取状态栏高度 + /// + /// 参数 + /// 结果 + public virtual JsResult> GetStatusBarHeight(JsParam param) + { + return new() { Data = new() { ["statusBarHeight"] = 0 } }; + } + /// /// 获取用户基本信息 /// @@ -213,90 +292,28 @@ internal class MiHoYoJSInterface } } - /// - /// 获取CookieToken - /// - /// 参数 - /// 响应 - public virtual async ValueTask>> GetCookieTokenAsync(JsParam param) - { - IUserService userService = serviceProvider.GetRequiredService(); - if (param.Payload.ForceRefresh) - { - await userService.RefreshCookieTokenAsync(userAndUid.User).ConfigureAwait(false); - } - - await taskContext.SwitchToMainThreadAsync(); - coreWebView2.SetCookie(userAndUid.User.CookieToken, userAndUid.User.LToken); - - ArgumentNullException.ThrowIfNull(userAndUid.User.CookieToken); - return new() { Data = new() { [Cookie.COOKIE_TOKEN] = userAndUid.User.CookieToken[Cookie.COOKIE_TOKEN] } }; - } - - /// - /// 关闭 - /// - /// 参数 - /// 响应 - public virtual async ValueTask ClosePageAsync(JsParam param) - { - await taskContext.SwitchToMainThreadAsync(); - if (coreWebView2.CanGoBack) - { - coreWebView2.GoBack(); - } - else - { - ClosePageRequested?.Invoke(); - } - - return null; - } - - /// - /// 调整分享设置 - /// - /// 参数 - /// 响应 - public virtual IJsResult? ConfigureShare(JsParam param) - { - return null; - } - - /// - /// 获取状态栏高度 - /// - /// 参数 - /// 结果 - public virtual JsResult> GetStatusBarHeight(JsParam param) - { - return new() { Data = new() { ["statusBarHeight"] = 0 } }; - } - public virtual async ValueTask PushPageAsync(JsParam param) { - await taskContext.SwitchToMainThreadAsync(); - coreWebView2.Navigate(param.Payload.Page); - return null; - } + const string bbsSchema = "mihoyobbs://"; + string pageUrl = param.Payload.Page; - /// - /// 获取当前语言和时区 - /// - /// param - /// 语言与时区 - public virtual JsResult> GetCurrentLocale(JsParam param) - { - MetadataOptions metadataOptions = serviceProvider.GetRequiredService(); - - return new() + string targetUrl = pageUrl; + if (pageUrl.AsSpan().StartsWith(bbsSchema, StringComparison.OrdinalIgnoreCase)) { - Data = new() + if (pageUrl.AsSpan(bbsSchema.Length).StartsWith("article/")) { - ["language"] = metadataOptions.LanguageCode, - ["timeZone"] = "GMT+8", - }, - }; + targetUrl = pageUrl.Replace("mihoyobbs://article/", "https://m.miyoushe.com/ys/#/article/", StringComparison.OrdinalIgnoreCase); + } + else if (pageUrl.AsSpan(bbsSchema.Length).StartsWith("webview?link=")) + { + string encoded = pageUrl.Replace("mihoyobbs://webview?link=", string.Empty, StringComparison.OrdinalIgnoreCase); + targetUrl = Uri.UnescapeDataString(encoded); + } + } + + await taskContext.SwitchToMainThreadAsync(); + coreWebView2.Navigate(targetUrl); + return null; } public virtual IJsResult? Share(JsParam param)