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)