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:
Yun Chan 2026-08-15 18:11:49 +09:00
parent 27c91c04dd
commit 46c6c321f2
26 changed files with 1058 additions and 30 deletions

View file

@ -4,7 +4,7 @@ namespace VideoDownloader.Server;
public sealed record QueueItemDto(string Id, string Title, string Url, string Status, double Percent);
/// <summary>라이브러리(저장 폴더) 미디어 항목.</summary>
public sealed record LibraryItemDto(string Id, string FileName, long SizeBytes, DateTime Modified);
public sealed record LibraryItemDto(string Id, string FileName, long SizeBytes, DateTime Modified, string? Resolution = null);
/// <summary>이어보기 위치(U3 동기화). 초 단위.</summary>
public sealed record PositionDto(double PositionSec);
@ -22,6 +22,15 @@ public sealed class ServerOptions
public IQueueAdapter Queue { get; init; } = new EmptyQueueAdapter();
/// <summary>기기 표시명(웹 컴패니언 헤더용).</summary>
public string DeviceName { get; init; } = Environment.MachineName;
/// <summary>썸네일/해상도 생성기(기본: DesktopProcessRunner 기반 ffmpeg). 테스트 주입 가능.</summary>
public Thumbnailer? Thumbnailer { get; init; }
}
/// <summary>기본 썸네일러 팩토리.</summary>
public static class ServerOptionsDefaults
{
public static Thumbnailer DefaultThumbnailer() =>
new(VideoDownloader.Core.Platform.DesktopProcessRunner.Default);
}
/// <summary>호스트 앱의 다운로드 큐와 서버를 잇는 어댑터(UI 스레드 마샬링은 구현측 담당).</summary>