Beispiel #1
0
        public override async Task <IList <IEntryModel> > ListAsync(IEntryModel entry, CancellationToken ct, Func <IEntryModel, bool> filter = null,
                                                                    bool refresh = false)
        {
            await checkLoginAsync();

            if (filter == null)
            {
                filter = e => true;
            }

            GoogleDriveItemModel dirModel = (GoogleDriveItemModel)entry;

            if (dirModel != null)
            {
                if (!refresh)
                {
                    var cachedChild = ModelCache.GetChildModel(dirModel);
                    if (cachedChild != null)
                    {
                        return(cachedChild.Where(m => filter(m)).Cast <IEntryModel>().ToList());
                    }
                }

                var listRequest = _driveService.Files.List();
                listRequest.Q = String.Format("'{0}' in parents", dirModel.UniqueId);
                var listResult      = (await listRequest.ExecuteAsync().ConfigureAwait(false));
                var listResultItems = listResult.Items.ToList();
                var outputModels    = listResultItems.Select(f => new GoogleDriveItemModel(this, f, dirModel.FullPath)).ToArray();
                ModelCache.RegisterChildModels(dirModel, outputModels);

                return(outputModels.Where(m => filter(m)).Cast <IEntryModel>().ToList());
            }
            return(new List <IEntryModel>());
        }
        public override async Task <IList <IEntryModel> > ListAsync(IEntryModel entry, CancellationToken ct, Func <IEntryModel, bool> filter = null, bool refresh = false)
        {
            await checkLoginAsync();

            if (filter == null)
            {
                filter = e => true;
            }

            List <IEntryModel>       retList   = new List <IEntryModel>();
            List <SkyDriveItemModel> cacheList = new List <SkyDriveItemModel>();

            SkyDriveItemModel dirModel = entry as SkyDriveItemModel;

            if (dirModel != null)
            {
                if (!refresh)
                {
                    var cachedChild = ModelCache.GetChildModel(dirModel);
                    if (cachedChild != null)
                    {
                        return(cachedChild.Where(m => filter(m)).Cast <IEntryModel>().ToList());
                    }
                }

                LiveConnectClient   client       = new LiveConnectClient(Session);
                LiveOperationResult listOpResult = await client.GetAsync(dirModel.UniqueId + "/files", ct);

                if (ct.IsCancellationRequested)
                {
                    return(retList);
                }

                dynamic listResult = listOpResult.Result;


                foreach (dynamic itemData in listResult.data)
                {
                    SkyDriveItemModel retVal = null;
                    retVal = new SkyDriveItemModel(this, itemData, dirModel.FullPath);

                    if (retVal != null)
                    {
                        cacheList.Add(ModelCache.RegisterModel(retVal));
                        if (filter(retVal))
                        {
                            retList.Add(retVal);
                        }
                    }
                }
                ModelCache.RegisterChildModels(dirModel, cacheList.ToArray());
            }

            return(retList);
        }
        public override async Task <IList <IEntryModel> > ListAsync(IEntryModel entry, CancellationToken ct,
                                                                    Func <IEntryModel, bool> filter = null, bool refresh = false)
        {
            checkLogin();

            if (filter == null)
            {
                filter = em => true;
            }

            List <IEntryModel>      retList   = new List <IEntryModel>();
            List <DropBoxItemModel> cacheList = new List <DropBoxItemModel>();

            var dirModel = (entry as DropBoxItemModel);

            if (dirModel != null)
            {
                if (!refresh)
                {
                    var cachedChild = ModelCache.GetChildModel(dirModel);
                    if (cachedChild != null)
                    {
                        return(cachedChild.Where(m => filter(m)).Cast <IEntryModel>().ToList());
                    }
                }
                ct.ThrowIfCancellationRequested();

                var fetchedMetadata = await GetClient().GetMetaDataTask(ConvertRemotePath(entry.FullPath));

                foreach (var metadata in fetchedMetadata.Contents)
                {
                    var retVal = new DropBoxItemModel(this, metadata, dirModel.FullPath);
                    cacheList.Add(ModelCache.RegisterModel(retVal));
                    if (filter(retVal))
                    {
                        retList.Add(retVal);
                    }
                }
                ModelCache.RegisterChildModels(dirModel, cacheList.ToArray());
            }
            return(retList);
        }