public async Task<IEnumerable<ContentItem>> GetContentItems(string path, GetThemeAssetsCriteria criteria) { var fullPath = this.GetFullPath(path); if (!Directory.Exists(fullPath)) return Enumerable.Empty<ContentItem>(); var files = Directory.GetFiles(fullPath, "*.*", SearchOption.AllDirectories); if (criteria.LastUpdateDate.HasValue) { var filterDate = criteria.LastUpdateDate.Value; if (filterDate.Kind == DateTimeKind.Unspecified) filterDate = DateTime.SpecifyKind(filterDate, DateTimeKind.Utc); files = files.Where(i => File.GetLastWriteTimeUtc(i).Truncate(TimeSpan.FromSeconds(1)) > filterDate.Truncate(TimeSpan.FromSeconds(1))).ToArray(); } var items = files.Select( file => new ContentItem { Name = Path.GetFileName(file), Path = this.RemoveBaseDirectory(file), ModifiedDate = File.GetLastWriteTimeUtc(file).Truncate(TimeSpan.FromSeconds(1)) }) .ToList(); //if (criteria.LoadContent) //{ foreach (var contentItem in items) { var fullFile = await this.GetContentItem(contentItem.Path); contentItem.ByteContent = fullFile.ByteContent; contentItem.ContentType = fullFile.ContentType; } //} return await Task.FromResult(items.AsEnumerable()); }
public static coreModels.GetThemeAssetsCriteria ToCoreModel(this webModels.GetThemeAssetsCriteria criteria) { var retVal = new coreModels.GetThemeAssetsCriteria(); retVal.LastUpdateDate = criteria.LastUpdateDate; retVal.LoadContent = criteria.LoadContent; return retVal; }
public static coreModels.GetThemeAssetsCriteria ToCoreModel(this webModels.GetThemeAssetsCriteria criteria) { var retVal = new coreModels.GetThemeAssetsCriteria(); retVal.LastUpdateDate = criteria.LastUpdateDate; retVal.LoadContent = criteria.LoadContent; return(retVal); }
public async Task<IEnumerable<ThemeAsset>> GetThemeAssets(string storeId, string themeName, GetThemeAssetsCriteria criteria) { var themePath = GetThemePath(storeId, themeName); var items = await _repository.GetContentItems(themePath, criteria); foreach (var item in items) { item.Path = FixPath(themePath, item.Path); item.ContentType = ContentTypeUtility.GetContentType(item.Name, item.ByteContent); } return items.Select(c => c.AsThemeAsset()); }
public IEnumerable<ThemeAsset> GetThemeAssets(string storeId, string themeName, GetThemeAssetsCriteria criteria) { var themePath = GetThemePath(storeId, themeName); using (var repository = _repositoryFactory()) { var items = repository.GetContentItems(themePath, criteria); var retVal = new List<ThemeAsset>(); foreach (var item in items) { var path = item.Path; item.Path = FixPath(themePath, item.Path); item.ContentType = ContentTypeUtility.GetContentType(item.Name, item.ByteContent); var addedItem = item.AsThemeAsset(); addedItem.Path = path; retVal.Add(addedItem); } return retVal; } }
public IEnumerable<ContentItem> GetContentItems(string path, GetThemeAssetsCriteria criteria) { var query = ContentItems.Where(i => i.Path.StartsWith(path)); if (criteria != null && criteria.LastUpdateDate.HasValue) { var compareDate = criteria.LastUpdateDate.Value; query = query.Where(i => (i.ModifiedDate.HasValue && compareDate < i.ModifiedDate.Value) || (compareDate < i.CreatedDate)); } return query.AsEnumerable(); }
public async Task<IEnumerable<ContentItem>> GetContentItems(string path, GetThemeAssetsCriteria criteria) { var fullPath = GetFullPath(path); var result = await this._client.Repository.Content.GetContents(this._ownerName, this._repositoryName, fullPath); var items = result.Where(s => s.Type == ContentType.Dir || s.Type == ContentType.File); var directories = items.Where(s => s.Type == ContentType.Dir).Select(s => s.Path); var files = items.Where(s => s.Type == ContentType.File).Select(file => file.ToContentItem()).ToList(); var directoriesQueue = new Queue<string>(); foreach (var directory in directories) { directoriesQueue.Enqueue(directory); } while (directoriesQueue.Count > 0) { var directory = directoriesQueue.Dequeue(); result = await this._client.Repository.Content.GetContents(this._ownerName, this._repositoryName, directory); var results = result.Where(s => s.Type == ContentType.Dir || s.Type == ContentType.File); var newDirectories = results.Where(s => s.Type == ContentType.Dir).Select(s => s.Path); var newFiles = results.Where(s => s.Type == ContentType.File).Select(file => file.ToContentItem()); foreach (var newDirectory in newDirectories) { directoriesQueue.Enqueue(newDirectory); } files.AddRange(newFiles); } foreach (var file in files) { file.Path = FixPath(file.Path); } if (criteria.LoadContent) { Parallel.ForEach(files, async file => { var fullFile = await GetContentItem(file.Path); file.ByteContent = fullFile.ByteContent; }); } return files; }
public IEnumerable<ContentItem> GetContentItems(string path, GetThemeAssetsCriteria criteria) { var blobs = GetBlobsRecursive(path); // return nothing if there is not result if (blobs == null) { return Enumerable.Empty<Models.ContentItem>(); } var files = new List<Models.ContentItem>(); Parallel.ForEach( blobs, file => { files.Add(file.ToContentItem()); }); foreach (var file in files) { file.Path = FixPath(file.Path); } if (criteria.LoadContent) { Parallel.ForEach(files, file => { var fullFile = GetContentItem(file.Path); if(fullFile != null) file.ByteContent = fullFile.ByteContent; }); } return files; }
public Task<IEnumerable<ContentItem>> GetContentItems(string path, GetThemeAssetsCriteria criteria) { var query = ContentItems.Where(i => i.Path.StartsWith(path)); if (criteria != null && criteria.LastUpdateDate.HasValue) { query = query.Where(i => (i.ModifiedDate.HasValue && criteria.LastUpdateDate.Value < i.ModifiedDate.Value) || (criteria.LastUpdateDate.Value < i.CreatedDate)); } return Task.FromResult(query.AsEnumerable()); }