public void DownloadFile(TLEncryptedFile file, TLObject owner) { var inputFile = new TLInputEncryptedFileLocation { Id = file.Id, AccessHash = file.AccessHash }; var downloadableItem = GetDownloadableItem(file.DCId, inputFile, owner, file.Size); lock (_itemsSyncRoot) { bool addFile = true; foreach (var item in _items) { if (item.InputEncryptedFileLocation.LocationEquals(inputFile)) { addFile = false; break; } } if (addFile) { _items.Add(downloadableItem); } } StartAwaitingWorkers(); }
public void DownloadFile(TLEncryptedFile file, TLObject owner, Action <DownloadableItem> callback) { var inputFile = new TLInputEncryptedFileLocation { Id = file.Id, AccessHash = file.AccessHash }; var downloadableItem = GetDownloadableItem(file.DCId, inputFile, owner, file.Size, callback); var downloadedCount = downloadableItem.Parts.Count(x => x.Status == PartStatus.Processed); var count = downloadableItem.Parts.Count; var isComplete = downloadedCount == count; if (isComplete) { var fileName = downloadableItem.InputLocation.GetFileName("encrypted"); Func <DownloadablePart, string> getPartName = x => downloadableItem.InputLocation.GetPartFileName(x.Number, "encrypted"); FileUtils.MergePartsToFile(getPartName, downloadableItem.Parts, fileName); downloadableItem.IsoFileName = fileName; if (downloadableItem.Callback != null) { downloadableItem.Callback(downloadableItem); } else { _eventAggregator.Publish(downloadableItem); } } else { lock (_itemsSyncRoot) { bool addFile = true; foreach (var item in _items) { if (item.InputLocation.LocationEquals(inputFile)) { addFile = false; break; } } if (addFile) { _items.Add(downloadableItem); } } StartAwaitingWorkers(); } }
public IAsyncOperationWithProgress <DownloadableItem, double> DownloadFileAsync(TLEncryptedFile file) { return(AsyncInfo.Run <DownloadableItem, double>((token, progress) => { var tsc = new TaskCompletionSource <DownloadableItem>(); var inputFile = new TLInputEncryptedFileLocation { Id = file.Id, AccessHash = file.AccessHash }; var downloadableItem = GetDownloadableItem(file.DCId, inputFile, null, file.Size); downloadableItem.Callback = tsc; downloadableItem.Progress = progress; lock (_itemsSyncRoot) { bool addFile = true; foreach (var item in _items) { if (item.InputEncryptedFileLocation.LocationEquals(inputFile)) { addFile = false; break; } } if (addFile) { _items.Add(downloadableItem); } } StartAwaitingWorkers(); return tsc.Task; })); }