Skip to content

Commit 4d9ee05

Browse files
committed
修复手动查询刷新异常并优化刷新体验
1 parent 0488449 commit 4d9ee05

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

Firefly/Models/CccfQuerySession.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,37 @@ public class CccfQuerySession : NavigationSession<CccfQuerySession>
1313
{
1414
public CccfRequest CombinedRequest { get; set; }
1515

16-
public bool UseCombinedQuery { get; set; }
16+
public bool HasError { get; set; }
1717

1818
public int PageNumber { get; set; }
1919

2020
public QueryResponse<Cccf>? QueryResponse { get; set; }
2121

22+
public string QueryResultMessage { get; set; }
23+
2224
public double ScrolledVerticalOffset { get; set; }
2325

2426
public CccfSmartRequest SmartRequest { get; set; }
2527

28+
public bool UseCombinedQuery { get; set; }
29+
2630
public CccfQuerySession(
2731
int pageNumber,
2832
CccfSmartRequest smartRequest,
2933
CccfRequest combinedRequest,
3034
bool useCombinedQuery,
3135
QueryResponse<Cccf>? queryResponse,
36+
bool hasError,
37+
string queryResultMessage,
3238
double scrolledVerticalOffset)
3339
{
3440
PageNumber = pageNumber;
3541
SmartRequest = smartRequest;
3642
CombinedRequest = combinedRequest;
3743
UseCombinedQuery = useCombinedQuery;
3844
QueryResponse = queryResponse;
45+
HasError = hasError;
46+
QueryResultMessage = queryResultMessage;
3947
ScrolledVerticalOffset = scrolledVerticalOffset;
4048
}
4149

@@ -47,6 +55,8 @@ public override CccfQuerySession DeepClone()
4755
CombinedRequest.DeepClone(),
4856
UseCombinedQuery,
4957
QueryResponse,
58+
HasError,
59+
QueryResultMessage,
5060
ScrolledVerticalOffset);
5161
}
5262

Firefly/ViewModels/CccfQueryViewModelBase.cs

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public abstract partial class CccfQueryViewModelBase : ObservableRecipient
3333

3434
protected CccfRequest? _lastCombinedRequest;
3535

36+
protected int _lastPageNumberBeforeCancel = 1;
37+
3638
protected bool _pageNumberChanged;
3739

3840
protected bool _pageSizeChanged;
@@ -55,7 +57,7 @@ public abstract partial class CccfQueryViewModelBase : ObservableRecipient
5557

5658
public bool CanQuery => !IsNavigating;
5759

58-
public bool CanRefresh => QueryResponse is not null && CanQuery;
60+
public bool CanRefresh => CanQuery;
5961

6062
public CccfRequest CccfRequest => UseCombinedQuery ? CombinedRequest : SmartRequest;
6163

@@ -210,6 +212,7 @@ public virtual async Task QueryAsync(CancellationToken cancellationToken = defau
210212
{
211213
try
212214
{
215+
_lastPageNumberBeforeCancel = PageNumber;
213216
HasError = false;
214217
QueryResultMessage = "";
215218

@@ -281,14 +284,36 @@ await _navigationService.NavigateAsync(async () => {
281284
SmartRequest.RejectChanges();
282285
CccfRequest.RejectChanges();
283286

284-
await QueryCommand.ExecuteAsync(cancellationToken);
287+
CccfQuerySession session;
288+
PageNumber = _lastPageNumberBeforeCancel;
285289

286-
var session = new CccfQuerySession(
290+
try
291+
{
292+
await QueryCommand.ExecuteAsync(cancellationToken);
293+
}
294+
catch (TaskCanceledException)
295+
{
296+
session = new CccfQuerySession(
297+
_lastPageNumberBeforeCancel,
298+
SmartRequest,
299+
CombinedRequest,
300+
UseCombinedQuery,
301+
QueryResponse,
302+
HasError,
303+
"刷新请求被取消。",
304+
_scrolledVerticalOffset);
305+
306+
return session;
307+
}
308+
309+
session = new CccfQuerySession(
287310
PageNumber,
288311
SmartRequest,
289312
CombinedRequest,
290313
UseCombinedQuery,
291314
QueryResponse,
315+
HasError,
316+
QueryResultMessage,
292317
_scrolledVerticalOffset);
293318

294319
return session;
@@ -363,6 +388,8 @@ await _navigationService.NavigateAsync(async () => {
363388
CombinedRequest,
364389
UseCombinedQuery,
365390
QueryResponse,
391+
HasError,
392+
QueryResultMessage,
366393
0d);
367394

368395
try
@@ -373,6 +400,7 @@ await _navigationService.NavigateAsync(async () => {
373400
catch (TaskCanceledException)
374401
{
375402
session.QueryResponse = null;
403+
session.QueryResultMessage = "查询请求被取消。";
376404
}
377405

378406
Messenger.Send(new ScrollBarOffsetMessage() {
@@ -419,13 +447,16 @@ protected virtual void NavigationService_Navigated(object? sender, NavigationEve
419447
if (e.NavigationMode is NavigationMode.Back or NavigationMode.Forward)
420448
{
421449
var cloned = e.Current.DeepClone();
450+
_lastPageNumberBeforeCancel = cloned.PageNumber;
422451
PageNumber = cloned.PageNumber;
423452
SmartRequest = cloned.SmartRequest;
424453

425454
// 必须先设置 UseCombinedQuery,否则 OnUseCombinedQueryChanged() 将修改 CombinedRequest
426455
UseCombinedQuery = cloned.UseCombinedQuery;
427456
CombinedRequest = cloned.CombinedRequest;
428457
QueryResponse = cloned.QueryResponse;
458+
HasError = cloned.HasError;
459+
QueryResultMessage = cloned.QueryResultMessage;
429460

430461
double scrolledVerticalOffset = cloned.ScrolledVerticalOffset;
431462

0 commit comments

Comments
 (0)