Skip to content

Commit 41860d0

Browse files
authored
修复消息 cookie 的刷新问题 (#269)
1 parent cbad0e6 commit 41860d0

File tree

5 files changed

+41
-27
lines changed

5 files changed

+41
-27
lines changed

src/App/Pages/WebPlayerPage.xaml.cs

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Bili Copilot. All rights reserved.
22

33
using Bili.Copilot.App.Controls.Base;
4+
using Bili.Copilot.Libs.Provider;
45
using Bili.Copilot.Models.App.Args;
56
using Microsoft.Web.WebView2.Core;
67
using Windows.Storage;
@@ -93,6 +94,13 @@ private async void OnNavigationCompletedAsync(WebView2 sender, CoreWebView2Navig
9394
{
9495
LoadingOverlay.IsOpen = false;
9596

97+
var cookies = await sender.CoreWebView2.CookieManager.GetCookiesAsync(sender.Source.AbsoluteUri);
98+
var cookieDict = cookies.Select(p => (p.Name, p.Value)).ToDictionary();
99+
if (cookieDict.ContainsKey("bili_jct"))
100+
{
101+
AuthorizeProvider.SaveCookies(cookieDict);
102+
}
103+
96104
// 注入 js.
97105
var cleanFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/WebPlayer.js"));
98106
var cleanContent = await FileIO.ReadTextAsync(cleanFile);

src/App/Pages/WebSignInPage.xaml.cs

+6
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ private async void OnNavigationCompletedAsync(WebView2 sender, Microsoft.Web.Web
5858
if (_isVerify)
5959
{
6060
SettingsToolkit.WriteLocalSetting(Models.Constants.App.SettingNames.IsWebSignIn, true);
61+
62+
if (cookieDict.ContainsKey("bili_jct"))
63+
{
64+
AuthorizeProvider.SaveCookies(cookieDict);
65+
}
66+
6167
CoreViewModel.BackCommand.Execute(default);
6268
return;
6369
}

src/Libs/Libs.Provider/AccountProvider/AccountProvider.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ public async Task<ChatSessionListView> GetChatSessionsAsync()
507507
{ "end_ts", _chatSessionOffset.ToString() },
508508
};
509509

510-
var request = await HttpProvider.GetRequestMessageAsync(HttpMethod.Get, Account.ChatSessions, queryParameters, needRid: true, needCookie: true);
510+
var request = await HttpProvider.GetRequestMessageAsync(HttpMethod.Get, Account.ChatSessions, queryParameters, needRid: true, needCookie: true, forceNoToken: true);
511511
var response = await HttpProvider.Instance.SendAsync(request);
512512
var sessionResult = await HttpProvider.ParseAsync<ServerResponse<ChatSessionListResponse>>(response);
513513
_chatSessionOffset = sessionResult.Data.SessionList.LastOrDefault()?.SessionTimestamp ?? 0;

src/Libs/Libs.Provider/AuthorizeProvider/AuthorizeProvider.Extension.cs

+22-22
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,28 @@ private set
8989
/// </summary>
9090
public string CurrentUserId { get; private set; }
9191

92+
/// <summary>
93+
/// 保存Cookie.
94+
/// </summary>
95+
/// <param name="cookies">Cookie 信息.</param>
96+
public static void SaveCookies(Dictionary<string, string> cookies)
97+
{
98+
var localCookies = GetCookieDict();
99+
foreach (var cookie in cookies)
100+
{
101+
if (localCookies.ContainsKey(cookie.Key))
102+
{
103+
localCookies[cookie.Key] = cookie.Value;
104+
}
105+
else
106+
{
107+
localCookies.Add(cookie.Key, cookie.Value);
108+
}
109+
}
110+
111+
SettingsToolkit.WriteLocalSetting(SettingNames.LocalCookie, JsonSerializer.Serialize(localCookies));
112+
}
113+
92114
internal static void GenerateAppKey(Dictionary<string, string> queryParameters, RequestClientType clientType, bool onlyAppKey = false)
93115
{
94116
if (clientType == RequestClientType.IOS)
@@ -204,28 +226,6 @@ internal async Task<TokenInfo> InternalRefreshTokenAsync()
204226

205227
private static long GetNowMilliSeconds() => DateTimeOffset.Now.ToLocalTime().ToUnixTimeMilliseconds();
206228

207-
/// <summary>
208-
/// 保存Cookie.
209-
/// </summary>
210-
/// <param name="cookies">Cookie 信息.</param>
211-
private static void SaveCookies(Dictionary<string, string> cookies)
212-
{
213-
var localCookies = GetCookieDict();
214-
foreach (var cookie in cookies)
215-
{
216-
if (localCookies.ContainsKey(cookie.Key))
217-
{
218-
localCookies[cookie.Key] = cookie.Value;
219-
}
220-
else
221-
{
222-
localCookies.Add(cookie.Key, cookie.Value);
223-
}
224-
}
225-
226-
SettingsToolkit.WriteLocalSetting(SettingNames.LocalCookie, JsonSerializer.Serialize(localCookies));
227-
}
228-
229229
private static void SaveCookie(CookieInfo cookieInfo)
230230
{
231231
var cookies = cookieInfo.Cookies.Select(p => (p.Name, p.Value)).ToDictionary();

src/ViewModels/Components/NotificationViewModel/NotificationViewModel.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ private NotificationViewModel()
2929

3030
private static async Task CheckVideoDynamicNotificationsAsync()
3131
{
32-
var lastSeen = SettingsToolkit.ReadLocalSetting(SettingNames.LastReadVideoDynamicId, string.Empty);
32+
var lastSeen = Convert.ToInt64(SettingsToolkit.ReadLocalSetting(SettingNames.LastReadVideoDynamicId, string.Empty));
3333
var latestDynamics = await CommunityProvider.Instance.GetDynamicVideoListAsync(true);
3434
if (latestDynamics != null)
3535
{
3636
var dynamics = latestDynamics.Dynamics.Where(p => p.DynamicType != Models.Constants.Community.DynamicItemType.Forward).ToList();
37-
var currentSeen = SettingsToolkit.ReadLocalSetting(SettingNames.LastReadVideoDynamicId, string.Empty);
38-
if (currentSeen != lastSeen)
37+
var currentSeen = Convert.ToInt64(SettingsToolkit.ReadLocalSetting(SettingNames.LastReadVideoDynamicId, string.Empty));
38+
if (currentSeen > lastSeen)
3939
{
4040
// 有更新,发送通知.
4141
for (var i = 0; i < 3; i++)
@@ -47,7 +47,7 @@ private static async Task CheckVideoDynamicNotificationsAsync()
4747

4848
var d = dynamics.ElementAt(i);
4949

50-
if (d.Id == lastSeen)
50+
if (Convert.ToInt64(d.Id) <= lastSeen)
5151
{
5252
break;
5353
}

0 commit comments

Comments
 (0)