mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
fix pushpage
This commit is contained in:
@@ -74,6 +74,36 @@ internal class MiHoYoJSInterface
|
||||
|
||||
public event Action? ClosePageRequested;
|
||||
|
||||
/// <summary>
|
||||
/// 关闭
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>响应</returns>
|
||||
public virtual async ValueTask<IJsResult?> ClosePageAsync(JsParam param)
|
||||
{
|
||||
await taskContext.SwitchToMainThreadAsync();
|
||||
if (coreWebView2.CanGoBack)
|
||||
{
|
||||
coreWebView2.GoBack();
|
||||
}
|
||||
else
|
||||
{
|
||||
ClosePageRequested?.Invoke();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 调整分享设置
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>响应</returns>
|
||||
public virtual IJsResult? ConfigureShare(JsParam param)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取ActionTicket
|
||||
/// </summary>
|
||||
@@ -87,24 +117,6 @@ internal class MiHoYoJSInterface
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取Http请求头
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>Http请求头</returns>
|
||||
public virtual JsResult<Dictionary<string, string>> GetHttpRequestHeader(JsParam param)
|
||||
{
|
||||
return new()
|
||||
{
|
||||
Data = new Dictionary<string, string>()
|
||||
{
|
||||
{ "x-rpc-client_type", "5" },
|
||||
{ "x-rpc-device_id", HoyolabOptions.DeviceId },
|
||||
{ "x-rpc-app_version", SaltConstants.CNVersion },
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 异步获取账户信息
|
||||
/// </summary>
|
||||
@@ -125,6 +137,45 @@ internal class MiHoYoJSInterface
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取CookieToken
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>响应</returns>
|
||||
public virtual async ValueTask<JsResult<Dictionary<string, string>>> GetCookieTokenAsync(JsParam<CookieTokenPayload> param)
|
||||
{
|
||||
IUserService userService = serviceProvider.GetRequiredService<IUserService>();
|
||||
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] } };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前语言和时区
|
||||
/// </summary>
|
||||
/// <param name="param">param</param>
|
||||
/// <returns>语言与时区</returns>
|
||||
public virtual JsResult<Dictionary<string, string>> GetCurrentLocale(JsParam<PushPagePayload> param)
|
||||
{
|
||||
MetadataOptions metadataOptions = serviceProvider.GetRequiredService<MetadataOptions>();
|
||||
|
||||
return new()
|
||||
{
|
||||
Data = new()
|
||||
{
|
||||
["language"] = metadataOptions.LanguageCode,
|
||||
["timeZone"] = "GMT+8",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取1代动态密钥
|
||||
/// </summary>
|
||||
@@ -179,6 +230,34 @@ internal class MiHoYoJSInterface
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取Http请求头
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>Http请求头</returns>
|
||||
public virtual JsResult<Dictionary<string, string>> GetHttpRequestHeader(JsParam param)
|
||||
{
|
||||
return new()
|
||||
{
|
||||
Data = new Dictionary<string, string>()
|
||||
{
|
||||
{ "x-rpc-client_type", "5" },
|
||||
{ "x-rpc-device_id", HoyolabOptions.DeviceId },
|
||||
{ "x-rpc-app_version", SaltConstants.CNVersion },
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取状态栏高度
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>结果</returns>
|
||||
public virtual JsResult<Dictionary<string, object>> GetStatusBarHeight(JsParam param)
|
||||
{
|
||||
return new() { Data = new() { ["statusBarHeight"] = 0 } };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户基本信息
|
||||
/// </summary>
|
||||
@@ -213,90 +292,28 @@ internal class MiHoYoJSInterface
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取CookieToken
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>响应</returns>
|
||||
public virtual async ValueTask<JsResult<Dictionary<string, string>>> GetCookieTokenAsync(JsParam<CookieTokenPayload> param)
|
||||
{
|
||||
IUserService userService = serviceProvider.GetRequiredService<IUserService>();
|
||||
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] } };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 关闭
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>响应</returns>
|
||||
public virtual async ValueTask<IJsResult?> ClosePageAsync(JsParam param)
|
||||
{
|
||||
await taskContext.SwitchToMainThreadAsync();
|
||||
if (coreWebView2.CanGoBack)
|
||||
{
|
||||
coreWebView2.GoBack();
|
||||
}
|
||||
else
|
||||
{
|
||||
ClosePageRequested?.Invoke();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 调整分享设置
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>响应</returns>
|
||||
public virtual IJsResult? ConfigureShare(JsParam param)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取状态栏高度
|
||||
/// </summary>
|
||||
/// <param name="param">参数</param>
|
||||
/// <returns>结果</returns>
|
||||
public virtual JsResult<Dictionary<string, object>> GetStatusBarHeight(JsParam param)
|
||||
{
|
||||
return new() { Data = new() { ["statusBarHeight"] = 0 } };
|
||||
}
|
||||
|
||||
public virtual async ValueTask<IJsResult?> PushPageAsync(JsParam<PushPagePayload> param)
|
||||
{
|
||||
await taskContext.SwitchToMainThreadAsync();
|
||||
coreWebView2.Navigate(param.Payload.Page);
|
||||
return null;
|
||||
}
|
||||
const string bbsSchema = "mihoyobbs://";
|
||||
string pageUrl = param.Payload.Page;
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前语言和时区
|
||||
/// </summary>
|
||||
/// <param name="param">param</param>
|
||||
/// <returns>语言与时区</returns>
|
||||
public virtual JsResult<Dictionary<string, string>> GetCurrentLocale(JsParam<PushPagePayload> param)
|
||||
{
|
||||
MetadataOptions metadataOptions = serviceProvider.GetRequiredService<MetadataOptions>();
|
||||
|
||||
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<SharePayload> param)
|
||||
|
||||
Reference in New Issue
Block a user