private IEnumerable <IOListing> LoadLocal(FilerArgs args) { var list = new List <IOListing>(); if (!this.storageService.DirectoryExists(args.CurrentDirectory)) { return(list); } list.AddRange( this.storageService .GetDirectoryNames(args.CurrentDirectory) .Select(dirName => new IOListing { FullPath = args.CurrentDirectory + dirName + "/", Name = dirName, IsDirectory = true, IsLocal = true })); list.AddRange( this.storageService .GetFileNames(args.CurrentDirectory) .Select(fileName => new IOListing { FullPath = args.CurrentDirectory + fileName, Name = fileName, IsDirectory = false, IsLocal = true })); return(list); }
private async Task <IEnumerable <IOListing> > LoadRemoteAsync(FilerArgs args) { var list = await this.filerWebHandler.GetDirectoryListingAsync(args, this.ObtainCancellationToken()); if (list == null) { throw new IOListingNullException("IOListing empty"); } return(list); }
public async Task Init(FilerArgs args) { this.Listings = new ObservableCollection <IOListing>(); if (this.IsLoading) { return; } this.IsLoading = true; this.filerArgs = args; var loadLocalListing = Task.Factory.StartNew(() => this.LoadLocal(args)); var loadRemoteListing = this.LoadRemoteAsync(args); var results = await Task.Factory.ContinueWhenAll(new[] { loadLocalListing, loadRemoteListing }, tasks => { var taskResults = new List <IEnumerable <IOListing> >(); foreach (var task in tasks) { if (task.IsFaulted) { this.logging.Exception(this, task.Exception); } else { taskResults.Add(task.Result); } } return(taskResults); }); var ordered = results.SelectMany(l => l) .GroupBy(l => l.FullPath.ToLowerInvariant()) .Select(g => g.OrderByDescending(l => l.IsLocal).First()) // prefer IsLocal == true .OrderByDescending(l => l.IsDirectory) .ThenBy(l => l.Name); this.Listings = new ObservableCollection <IOListing>(ordered); this.HasContent = this.Listings.Count > 0; this.IsLoading = false; }
public override void Prepare(FilerArgs parameter) { }