VideoConcat/Models/VideoModel.cs

272 lines
6.8 KiB
C#

using Standard;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Threading;
using System.Xml.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Header;
using static VideoConcat.Models.VideoModel;
namespace VideoConcat.Models
{
public enum Gender
{
Male,
Female
}
public class VideoModel : INotifyPropertyChanged
{
private int _num;
private int _maxNum;
private string _folderPath = "";
private string _auditImagePath = "";
private bool _canStart = false;
private bool _isCanOperate = false;
private bool _isStart = false;
private ObservableCollection<FolderInfo> _FolderInfos = [];
private ObservableCollection<ConcatVideo> _concatVideos = [];
private Dispatcher _dispatcher;
public static int Index = 0;
public bool IsCanOperate
{
get => _isCanOperate;
set
{
_isCanOperate = value;
OnPropertyChanged();
}
}
public bool IsStart
{
get => _isStart;
set
{
_isStart = value;
OnPropertyChanged();
SetCanStart();
}
}
public Dispatcher Dispatcher
{
get => _dispatcher;
set
{
_dispatcher = value;
}
}
public int Num
{
get => _num;
set
{
_num = value;
OnPropertyChanged();
UpdateSum();
}
}
public string AuditImagePath
{
get => _auditImagePath;
set
{
_auditImagePath = value;
OnPropertyChanged();
}
}
public int MaxNum
{
get => _maxNum;
set
{
_maxNum = value;
}
}
public struct FolderInfo
{
public DirectoryInfo DirectoryInfo { set; get; }
public int Num { set; get; }
public List<string> VideoPaths { set; get; }
}
public class ConcatVideo
{
public int Index { set; get; }
public string FileName { set; get; } = "";
public string Size { set; get; } = "";
public int Seconds { set; get; }
public string Status { set; get; } = "";
public string Progress { set; get; } = "";
}
public ObservableCollection<FolderInfo> FolderInfos
{
get { return _FolderInfos; }
set
{
if (_FolderInfos != null)
{
_FolderInfos.CollectionChanged -= ItemList_CollectionChanged;
}
_FolderInfos = value;
if (_FolderInfos != null)
{
_FolderInfos.CollectionChanged += ItemList_CollectionChanged;
}
OnPropertyChanged();
UpdateSum();
}
}
public ObservableCollection<ConcatVideo> ConcatVideos
{
get { return _concatVideos; }
set
{
if (_concatVideos != null)
{
_concatVideos.CollectionChanged -= ItemList_CollectionChanged;
}
_concatVideos = value;
if (_concatVideos != null)
{
_concatVideos.CollectionChanged += ItemList_CollectionChanged;
}
OnPropertyChanged();
}
}
public string FolderPath
{
get { return _folderPath; }
set
{
_folderPath = value;
OnPropertyChanged(nameof(FolderPath));
}
}
public bool CanStart
{
get { return _canStart; }
set
{
_canStart = value;
OnPropertyChanged(nameof(CanStart));
}
}
public ICommand? BtnOpenFolderCommand { get; set; }
public ICommand? BtnStartVideoConcatCommand { get; set; }
public ICommand? BtnChooseAuditImageCommand { get; set; }
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private void ItemList_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
UpdateSum();
}
public void UpdateSum()
{
int _temp = 1;
if (FolderInfos.Count > 0)
{
if (IsJoinType1Selected)
{
foreach (FolderInfo item in FolderInfos)
{
if (item.Num > 0)
{
_temp *= item.Num;
}
}
MaxNum = _temp;
}
if (IsJoinType2Selected)
{
MaxNum = FolderInfos[0].Num;
}
SetCanStart();
}
else
{
MaxNum = 0;
SetCanStart();
}
}
public void SetCanStart()
{
if (Num > 0 && Num <= MaxNum && IsStart == false)
{
CanStart = true;
}
else
{
CanStart = false;
}
IsCanOperate = !IsStart;
}
public VideoModel()
{
ConcatVideos = [];
_dispatcher = Dispatcher.CurrentDispatcher;
}
private bool _isJoinType1Selected;
private bool _isJoinType2Selected;
public bool IsJoinType1Selected
{
get { return _isJoinType1Selected; }
set
{
_isJoinType1Selected = value;
OnPropertyChanged(nameof(IsJoinType1Selected));
}
}
public bool IsJoinType2Selected
{
get { return _isJoinType2Selected; }
set
{
_isJoinType2Selected = value;
OnPropertyChanged(nameof(IsJoinType2Selected));
}
}
}
}