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;
		}
Example #3
0
        public static coreModels.GetThemeAssetsCriteria ToCoreModel(this webModels.GetThemeAssetsCriteria criteria)
        {
            var retVal = new coreModels.GetThemeAssetsCriteria();

            retVal.LastUpdateDate = criteria.LastUpdateDate;
            retVal.LoadContent    = criteria.LoadContent;

            return(retVal);
        }
Example #4
0
		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());
		}