Files
VDownload/VDownload.Core/VDownload.Core.ViewModels/Home/Helpers/VideoViewModel.cs

164 lines
4.8 KiB
C#
Raw Normal View History

2024-02-29 03:09:14 +01:00
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
2024-02-29 03:09:14 +01:00
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VDownload.Models;
2024-03-07 22:08:11 +01:00
using VDownload.Services.Data.Application;
2024-02-29 03:09:14 +01:00
using VDownload.Services.Data.Settings;
using VDownload.Services.UI.StoragePicker;
2024-03-03 23:05:32 +01:00
using VDownload.Services.Utility.Filename;
2024-02-29 03:09:14 +01:00
namespace VDownload.Core.ViewModels.Home.Helpers
{
public partial class VideoViewModel : ObservableObject
{
#region SERVICES
protected readonly ISettingsService _settingsService;
protected readonly IStoragePickerService _storagePickerService;
2024-03-03 23:05:32 +01:00
protected readonly IFilenameService _filenameService;
2024-03-07 22:08:11 +01:00
protected readonly IApplicationDataService _applicationDataService;
2024-02-29 03:09:14 +01:00
#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<VideoStream> _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;
public Video Video { get; protected set; }
2024-02-29 03:09:14 +01:00
#endregion
#region CONSTRUCTORS
2024-03-07 22:08:11 +01:00
public VideoViewModel(Video video, ISettingsService settingsService, IStoragePickerService storagePickerService, IFilenameService filenameService, IApplicationDataService applicationDataService)
2024-02-29 03:09:14 +01:00
{
_settingsService = settingsService;
_storagePickerService = storagePickerService;
2024-03-03 23:05:32 +01:00
_filenameService = filenameService;
2024-03-07 22:08:11 +01:00
_applicationDataService = applicationDataService;
2024-02-29 03:09:14 +01:00
Video = video;
2024-02-29 03:09:14 +01:00
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;
2024-03-03 23:05:32 +01:00
Filename = _filenameService.CreateFilename(_settingsService.Data.Common.Tasks.FilenameTemplate, video);
2024-02-29 03:09:14 +01:00
VideoExtension = _settingsService.Data.Common.Tasks.DefaultVideoExtension;
AudioExtension = _settingsService.Data.Common.Tasks.DefaultAudioExtension;
2024-03-07 22:08:11 +01:00
if (_settingsService.Data.Common.Tasks.SaveLastOutputDirectory && !string.IsNullOrWhiteSpace(_applicationDataService.Data.Common.LastOutputDirectory))
{
DirectoryPath = _applicationDataService.Data.Common.LastOutputDirectory;
}
else
{
DirectoryPath = _settingsService.Data.Common.Tasks.DefaultOutputDirectory;
}
2024-02-29 03:09:14 +01:00
}
#endregion
#region PUBLIC METHODS
public VideoDownloadOptions BuildDownloadOptions()
{
return new VideoDownloadOptions(Duration)
{
MediaType = this.MediaType,
SelectedStream = this.SelectedStream,
TrimStart = this.TrimStart,
TrimEnd = this.TrimEnd,
Directory = this.DirectoryPath,
2024-03-03 23:05:32 +01:00
Filename = _filenameService.SanitizeFilename(this.Filename),
Extension = (this.MediaType == MediaType.OnlyAudio ? this.AudioExtension.ToString() : this.VideoExtension.ToString()).ToLower(),
};
}
#endregion
2024-02-29 03:09:14 +01:00
#region COMMANDS
[RelayCommand]
public async Task Browse()
{
string? newDirectory = await _storagePickerService.OpenDirectory();
if (newDirectory is not null)
{
this.DirectoryPath = newDirectory;
2024-03-07 22:08:11 +01:00
_applicationDataService.Data.Common.LastOutputDirectory = newDirectory;
await _applicationDataService.Save();
2024-02-29 03:09:14 +01:00
}
}
#endregion
}
}