releases/VideoDownloader.Browser/UrlCleaner.cs

43 lines
1.4 KiB
C#

using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace VideoDownloader.Browser;
/// <summary>T3-15: "파라미터 제거 복사" — 추적용 쿼리·프래그먼트를 뺀 URL 반환.</summary>
public static class UrlCleaner
{
public static string? StripQuery(string? url)
{
if (url == null) return null;
var q = url.IndexOf('?');
if (q >= 0) url = url[..q];
var f = url.IndexOf('#');
if (f >= 0) url = url[..f];
return url;
}
}
/// <summary>T3-15: 주소창 진행 바 상태 — 진행 중 네비게이션 개수 집계(탭·리다이렉트 중복 안전).</summary>
public sealed class NavProgressTracker : INotifyPropertyChanged
{
private int _count;
public bool IsNavigating => Volatile.Read(ref _count) > 0;
public event PropertyChangedEventHandler? PropertyChanged;
public void Started() => Update(1);
public void Completed() => Update(-1);
private void Update(int delta)
{
var before = IsNavigating;
var c = _count + delta;
Volatile.Write(ref _count, Math.Max(0, c)); // 과잉 완료 방지
if (before != IsNavigating)
OnPropertyChanged(nameof(IsNavigating));
}
private void OnPropertyChanged([CallerMemberName] string? name = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}