public override async Task <object> Fetch() { var u = new Uri(uri); using (var stream = await SearchAction.Action(u, new SearchQuery(this))) { return(BaseResource.FromStream(u, stream)); } }
public async static Task <FileSize> Action(Uri uri, Action <BaseResource, List <BaseResource> > lambda) { var parent = uri.LocateParent(); var stream = await Request.Get(parent, new Types.Queries.BaseQuery()); var content = BaseResource.FromStream(uri, stream); var resource = content.Find(r => (r.GetUri().Equals(uri))); return(await resource.GetSize(lambda)); }
public static async Task <bool> Action(Uri uri, BaseQuery query, Action <BaseResource> callback) { callback(new BaseResource(uri)); List <BaseResource> contents; using (var stream = await ListAction.Action(uri, query)) { contents = BaseResource.FromStream(uri, stream); } var progress = new List <Task>(); foreach (var i in contents.Where(x => x.Type == BaseResourceType.File)) { progress.Add(Task.Run(async() => { callback(i); using (var s = await Request.Get(i.Uri, query)) using (var fs = File.Create(i.Path.WindowsSubfolderPath)) { s.Seek(0, SeekOrigin.Begin); s.CopyTo(fs); } })); } await Task.WhenAll(progress); progress.Clear(); foreach (var i in contents.Where(x => x.Type == BaseResourceType.Folder)) { progress.Add(DownloadAction.Action(i.Uri, query, callback)); } await Task.WhenAll(progress); progress.Clear(); return(true); }