using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media.Imaging; using Tango.Core; using Tango.FileSystem.Network; namespace Tango.FileSystem { public abstract class FileSystemItem : ExtendedObject { private String _path; public String Path { get { return _path; } set { _path = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(Name)); } } public FileSystemItemType Type { get; protected set; } public abstract String Description { get; } public DateTime DateModified { get; set; } public DateTime DateCreated { get; set; } public long Size { get; set; } public String Name { get { return OnGetName(); } } public FileSystemItem() { DateModified = DateTime.Now; Size = 1000 * 1000; } protected virtual String OnGetName() { return System.IO.Path.GetFileName(Path); } public override string ToString() { return Name; } public static FileSystemItem FromDTO(FileSystemItemDTO dto) { FileSystemItem item = null; if (dto.Type == FileSystemItemType.Drive) { item = new DriveItem() { DriveType = dto.DriveType, Label = dto.DriveLabel, Items = dto.Items?.Select(x => FromDTO(x)).ToObservableCollection() }; } else if (dto.Type == FileSystemItemType.Folder) { item = new FolderItem() { Items = dto.Items?.Select(x => FromDTO(x)).ToObservableCollection(), IsRoot = dto.IsRoot, }; } else if (dto.Type == FileSystemItemType.File) { item = new FileItem(); } item.DateModified = dto.DateModified; item.DateCreated = dto.DateCreated; item.Path = dto.Path; item.Size = dto.Size; item.Type = dto.Type; return item; } } }