Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }