using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using VDownload.Models; using VDownload.Services.Data.Settings; using VDownload.Services.UI.StoragePicker; namespace VDownload.Core.ViewModels.Home.Helpers { public partial class VideoViewModel : ObservableObject { #region SERVICES protected readonly ISettingsService _settingsService; protected readonly IStoragePickerService _storagePickerService; #endregion #region PROPERTIES [ObservableProperty] protected Uri _thumbnailUrl; [ObservableProperty] protected string _title; [ObservableProperty] protected string _author; [ObservableProperty] protected DateTime _publishDate; [ObservableProperty] protected TimeSpan _duration; [ObservableProperty] protected long _views; [ObservableProperty] protected ObservableCollection _streams; [ObservableProperty] protected VideoStream _selectedStream; [ObservableProperty] protected MediaType _mediaType; [ObservableProperty] protected TimeSpan _trimStart; [ObservableProperty] protected TimeSpan _trimEnd; [ObservableProperty] protected string _directoryPath; [ObservableProperty] protected string _filename; [ObservableProperty] protected VideoExtension _videoExtension; [ObservableProperty] protected AudioExtension _audioExtension; #endregion #region CONSTRUCTORS public VideoViewModel(Video video, ISettingsService settingsService, IStoragePickerService storagePickerService) { _settingsService = settingsService; _storagePickerService = storagePickerService; ThumbnailUrl = video.ThumbnailUrl; Title = video.Title; Author = video.Author; PublishDate = video.PublishDate; Duration = video.Duration; Views = video.Views; Streams = [.. video.Streams]; SelectedStream = Streams[0]; MediaType = _settingsService.Data.Common.Tasks.DefaultMediaType; TrimStart = TimeSpan.Zero; TrimEnd = Duration; DirectoryPath = _settingsService.Data.Common.Tasks.DefaultOutputDirectory; Filename = Title.Length > 50 ? Title.Substring(0, 50) : Title; VideoExtension = _settingsService.Data.Common.Tasks.DefaultVideoExtension; AudioExtension = _settingsService.Data.Common.Tasks.DefaultAudioExtension; } #endregion #region COMMANDS [RelayCommand] public async Task Browse() { string? newDirectory = await _storagePickerService.OpenDirectory(); if (newDirectory is not null) { this.DirectoryPath = newDirectory; } } #endregion } }