using Remotely.Desktop.Core.Interfaces; using Remotely.Desktop.Core.Models; using Remotely.Desktop.Core.ViewModels; using Remotely.Desktop.Win.Services; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Input; namespace Remotely.Desktop.Win.ViewModels { public class FileTransferWindowViewModel : ViewModelBase { private readonly IFileTransferService _fileTransferService; private readonly Viewer _viewer; private string _viewerConnectionId; private string _viewerName; public FileTransferWindowViewModel() { } public FileTransferWindowViewModel( Viewer viewer, IFileTransferService fileTransferService) { _fileTransferService = fileTransferService; _viewer = viewer; ViewerName = viewer.Name; ViewerConnectionId = viewer.ViewerConnectionID; } public ObservableCollection FileUploads { get; } = new ObservableCollection(); public ICommand OpenFileUploadDialog => new Executor(async (param) => { var ofd = new OpenFileDialog { Title = "Upload File via Remotely", Multiselect = true }; var result = ofd.ShowDialog(); if (result == DialogResult.Cancel) { return; } foreach (var file in ofd.FileNames) { if (File.Exists(file)) { await UploadFile(file); } } }); public string ViewerConnectionId { get { return _viewerConnectionId; } set { _viewerConnectionId = value; FirePropertyChanged(nameof(ViewerConnectionId)); } } public string ViewerName { get { return _viewerName; } set { _viewerName = value; FirePropertyChanged(nameof(ViewerName)); } } public async Task UploadFile(string filePath) { var fileUpload = new FileUpload() { FilePath = filePath }; FileUploads.Add(fileUpload); await _fileTransferService.UploadFile(fileUpload, _viewer); } public ICommand RemoveFileUpload => new Executor((param) => { if (param is FileUpload fileUpload) { FileUploads.Remove(fileUpload); } }); } }