private void btnAttach_Click_1(object sender, RoutedEventArgs e) { var entries = SelectedEntries(); var tempDir = TempDir(); var downloaded = 0; filesToAttach = new List <StorageSelectionEntry>(); downloadProgress.Visibility = Visibility.Visible; foreach (var entry in entries) { var pathName = System.IO.Path.Combine(tempDir, Guid.NewGuid().ToString() + entry.Title); _storage.Download(entry.IdString, pathName, Dispatcher, () => { if (File.Exists(pathName)) //some files are empty { filesToAttach.Add(new StorageSelectionEntry { PathName = pathName, Title = entry.Title }); } attachmentsProcessed.Text = downloaded + " of " + entries.Count(); if (++downloaded == entries.Count()) { Close(); } }); } }
public async Task <FileModel> Download(int id) { using (var storageItemRepository = repositoryFactory.CreateStorageItemRepository()) { var user = userService.GetAuthenticatedUser(); var item = storageItemRepository.GetById(id); var fileStream = await storageClient.Download(user.Id, item.Path); return(new FileModel { Name = item.Name, Stream = fileStream }); } }
public async Task <PageRankingProcessorResponse> PageRankingProcessorHandler(PageRankingProcessorRequest request) { string targetPath = PathGenerator.Generate(request.SearchEngine, request.Keywords, request.TargetDate); StorageClientListFolderResponse files = await _storageClient.ListFolder(new StorageClientListFolderRequest { FolderPath = targetPath }); List <Task <StorageClientDownloadResponse> > downloadTasks = files.FilePaths .Select(f => _storageClient.Download(new StorageClientDownloadRequest { DownloadPath = f })) .ToList(); List <PageRankingProcessorWithSequenceResponse> processedResponses = new List <PageRankingProcessorWithSequenceResponse>(); while (downloadTasks.Any()) { Task <StorageClientDownloadResponse> finishedTask = await Task.WhenAny(downloadTasks); downloadTasks.Remove(finishedTask); StorageClientDownloadResponse downloadedData = await finishedTask; processedResponses.Add(await GenerateResponse(request.SearchEngine, downloadedData.FilePath, downloadedData.FileData)); } //combine List <PageRank> pageRanks = new List <PageRank>(); int rank = 1; foreach (var r in processedResponses.OrderBy(c => c.Sequence)) { foreach (var p in r.Pages.OrderBy(c => c.Rank)) { pageRanks.Add(new PageRank { Rank = rank++, Url = p.Url }); } } return(new PageRankingProcessorResponse { Date = request.TargetDate, Pages = pageRanks }); }