T3-11/14/15 + M2 잔여: 권한 정책 UI(PermissionGate/PermissionRequested 다이얼로그+SavesInProfile), 추적 방지(TrackerBlocklist/WebResourceRequested 차단+실드 배지·팝업), 주소창 진행 바+파라미터 제거 복사(UrlCleaner/NavProgressTracker), U5 완료 알림(Mobile.Core 감지기+Plugin.LocalNotification), 재생중 ongoing 미디어 알림, 썸네일/해상도 API(Thumbnailer 사이드카 캐시+/thumb)+라이브러리 그리드, 외부망 안내(ConnectionTroubleshoot). 147 tests GREEN
This commit is contained in:
parent
27c91c04dd
commit
46c6c321f2
26 changed files with 1058 additions and 30 deletions
18
VideoDownloader.Mobile.Core/QueueCompletionDetector.cs
Normal file
18
VideoDownloader.Mobile.Core/QueueCompletionDetector.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
namespace VideoDownloader.Mobile;
|
||||
|
||||
/// <summary>U5 완료 알림: 이전/다음 큐 스냅샷에서 새로 완료("완료")된 항목 ID 감지.
|
||||
/// 이전 스냅샷이 비면(앱 시작 직후 첫 폴링) 무시 — 과거 완료 알림 스팸 방지.</summary>
|
||||
public sealed class QueueCompletionDetector
|
||||
{
|
||||
public IReadOnlyList<string> Detect(
|
||||
IReadOnlyList<(string Id, string Status)> previous,
|
||||
IReadOnlyList<(string Id, string Status)> next)
|
||||
{
|
||||
if (previous.Count == 0) return Array.Empty<string>();
|
||||
var prev = previous.ToDictionary(x => x.Id, x => x.Status);
|
||||
return next
|
||||
.Where(n => n.Status == "완료" && prev.TryGetValue(n.Id, out var s) && s != "완료")
|
||||
.Select(n => n.Id)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue