using System.Net; using Manager.YouTube; using Microsoft.AspNetCore.Components; using MudBlazor; namespace Manager.App.Components.Dialogs { public partial class AccountDialog : ComponentBase { [CascadingParameter] private IMudDialogInstance? MudDialog { get; set; } [Parameter] public string DefaultUserAgent { get; set; } = ""; public YouTubeClient Client { get; set; } = new(); private bool _isLoading; private bool _showCookieTextImport; private string _cookieText = ""; private string _cookieDomain = ".youtube.com"; protected override void OnInitialized() { Client.UserAgent = DefaultUserAgent; base.OnInitialized(); } private void AddCookie() { Client.CookieContainer.Add(new Cookie { Name = "SET_NAME", Domain = ".youtube.com" }); } private void ToggleCookieTextImport() { _showCookieTextImport =! _showCookieTextImport; } private void ApplyTextCookies() { _showCookieTextImport = false; var cookies = ParseCookieHeader(_cookieText, _cookieDomain); Client.CookieContainer.Add(cookies); _cookieText = string.Empty; StateHasChanged(); } public static CookieCollection ParseCookieHeader(string cookieHeader, string domain = "") { var collection = new CookieCollection(); if (string.IsNullOrWhiteSpace(cookieHeader)) return collection; var cookies = cookieHeader.Split(';', StringSplitOptions.RemoveEmptyEntries); foreach (var cookieStr in cookies) { var parts = cookieStr.Split('=', 2); if (parts.Length == 2) { var name = parts[0].Trim(); var value = parts[1].Trim(); var cookie = new Cookie(name, value); if (!string.IsNullOrEmpty(domain)) cookie.Domain = domain; cookie.Expires = DateTime.Now.AddDays(1); cookie.Path = "/"; collection.Add(cookie); } } return collection; } private bool CanValidate() { if (string.IsNullOrWhiteSpace(Client.UserAgent) || Client.CookieContainer.Count <= 0) { return false; } return true; } private bool CanSave() { if (Client.ClientState == null) { return false; } if (string.IsNullOrWhiteSpace(Client.Id)) { return false; } return Client.SapisidCookie != null && Client.ClientState.LoggedIn; } private async Task ValidateAccount() { _isLoading = true; var result = await Client.BuildClientAsync(); if (!result.IsSuccess) { SnackbarService.Add(result.Error?.Description ?? "Error validating account.", Severity.Error); } _isLoading = false; } private void OnSave() { MudDialog?.Close(DialogResult.Ok(Client)); } } }