public void AddCloud(AvailableCloud selectedItem) { var name = selectedItem.Name; var letters = VirtualDriveWrapper.GetFreeDriveLettes(); if (letters.Count == 0) { throw new InvalidOperationException("No free letters"); } if (Clouds.Any(c => c.CloudInfo.Name == name)) { int i = 1; while (Clouds.Any(c => c.CloudInfo.Name == name + " " + i)) { i++; } name = name + " " + i; } var info = new CloudInfo { Id = Guid.NewGuid().ToString(), Name = name, ClassName = selectedItem.ClassName, AssemblyFileName = selectedItem.AssemblyFileName, DriveLetter = letters[0] }; var mount = new CloudMount(info, this); Clouds.Add(mount); SaveClouds(); }
public void OnProviderDownloadStatisticsUpdated(CloudMount mount, StatisticUpdateReason reason, AStatisticFileInfo info) { var cloud = mount.CloudInfo; switch (reason) { case StatisticUpdateReason.DownloadAdded: { var item = new FileItemInfo(cloud.Id, info.Id) { CloudIcon = mount.Instance.CloudServiceIcon, FileName = info.FileName, FullPath = $"{mount.MountLetter}:{info.Path}", ErrorMessage = info.ErrorMessage, Total = info.Total, CloudName = cloud.Name }; DownloadFiles.Remove(item); DownloadFiles.Add(item); } break; case StatisticUpdateReason.DownloadFinished: { DownloadFiles.Remove(new FileItemInfo(cloud.Id, info.Id)); } break; case StatisticUpdateReason.DownloadFailed: { var item = UploadFiles.Single(f => f.Id == info.Id && f.CloudId == cloud.Id); item.ErrorMessage = info.ErrorMessage; DownloadFiles.Remove(item); DownloadFailedFiles.Add(item); if (DownloadFailedFiles.Count > 10) { DownloadFailedFiles.RemoveAt(DownloadFailedFiles.Count - 1); } } break; default: throw new ArgumentOutOfRangeException(); } }
public void OnProviderStatisticsUpdated(CloudMount mount, StatisticUpdateReason reason, AStatisticFileInfo info) { if (info is UploadStatisticInfo uploadInfo) { OnProviderUploadStatisticsUpdated(mount, reason, uploadInfo); return; } if (info is DownloadStatisticInfo downloadInfo) { OnProviderDownloadStatisticsUpdated(mount, reason, downloadInfo); return; } throw new ArgumentOutOfRangeException(nameof(info)); }
public void DeleteCloud(CloudMount cloud) { Clouds.Remove(cloud); SaveClouds(); }
public void OnProviderUploadStatisticsUpdated(CloudMount mount, StatisticUpdateReason reason, UploadStatisticInfo info) { var cloud = mount.CloudInfo; if (reason == StatisticUpdateReason.UploadAdded) { var newitem = new FileItemInfo(cloud.Id, info.Id) { CloudIcon = mount.Instance.CloudServiceIcon, FileName = info.FileName, FullPath = $"{mount.MountLetter}:{info.Path}", ErrorMessage = info.ErrorMessage, Total = info.Total, CloudName = cloud.Name }; UploadFiles.Remove(newitem); UploadFiles.Add(newitem); return; } var item = UploadFiles.SingleOrDefault(f => f.Id == info.Id && f.CloudId == cloud.Id); if (item == null) { return; } switch (reason) { case StatisticUpdateReason.UploadFinished: UploadFiles.Remove(new FileItemInfo(cloud.Id, info.Id)); break; case StatisticUpdateReason.UploadFailed: { item.ErrorMessage = info.ErrorMessage; UploadFiles.Remove(item); UploadFiles.Add(item); } break; case StatisticUpdateReason.UploadAborted: { item.ErrorMessage = info.ErrorMessage; item.DismissOnly = true; UploadFiles.Remove(item); UploadFiles.Add(item); } break; case StatisticUpdateReason.Progress: { item.Done = info.Done; } break; case StatisticUpdateReason.UploadState: { item.State = info.State; } break; default: throw new ArgumentOutOfRangeException(); } }