示例#1
0
        /// <summary>
        /// Gets the specified file.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        ///   <c>GetFileRequest</c> with an file.
        /// </returns>
        public GetFileResponse Get(GetFileRequest request)
        {
            var model = repository
                        .AsQueryable <MediaFile>()
                        .Where(media => media.Id == request.FileId && media.Type == Module.MediaManager.Models.MediaType.File)
                        .Select(media => new
            {
                Model = new FileModel
                {
                    Id             = media.Id,
                    Version        = media.Version,
                    CreatedBy      = media.CreatedByUser,
                    CreatedOn      = media.CreatedOn,
                    LastModifiedBy = media.ModifiedByUser,
                    LastModifiedOn = media.ModifiedOn,

                    Title                 = media.Title,
                    Description           = media.Description,
                    FileExtension         = media.OriginalFileExtension,
                    FileSize              = media.Size,
                    IsArchived            = media.IsArchived,
                    FolderId              = media.Folder != null && !media.Folder.IsDeleted ? media.Folder.Id : (Guid?)null,
                    FolderName            = media.Folder != null && !media.Folder.IsDeleted ? media.Folder.Title : null,
                    PublishedOn           = media.PublishedOn,
                    OriginalFileName      = media.OriginalFileName,
                    OriginalFileExtension = media.OriginalFileExtension,
                    ThumbnailId           = media.Image != null && !media.Image.IsDeleted ? media.Image.Id : (Guid?)null,
                    ThumbnailCaption      = media.Image != null && !media.Image.IsDeleted ? media.Image.Caption : null,
                    ThumbnailUrl          = media.Image != null && !media.Image.IsDeleted ? media.Image.PublicThumbnailUrl : null,
                    FileUrl               = media.PublicUrl,

                    IsUploaded  = media.IsUploaded,
                    IsTemporary = media.IsTemporary,
                    IsCanceled  = media.IsCanceled
                },

                FileUri = media.FileUri,
            })
                        .FirstOne();

            model.Model.FileUrl      = fileService.GetDownloadFileUrl(Module.MediaManager.Models.MediaType.File, model.Model.Id, model.Model.FileUrl);
            model.Model.ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(model.Model.ThumbnailUrl);
            model.Model.FileUrl      = fileUrlResolver.EnsureFullPathUrl(model.Model.FileUrl);

            model.Model.FileUri = model.FileUri.ToString();

            IEnumerable <TagModel> tagsFuture;

            if (request.Data.IncludeTags)
            {
                tagsFuture =
                    repository.AsQueryable <MediaTag>(mediaTag => mediaTag.Media.Id == request.FileId && !mediaTag.Tag.IsDeleted)
                    .OrderBy(mediaTag => mediaTag.Tag.Name)
                    .Select(media => new TagModel
                {
                    Id             = media.Tag.Id,
                    Version        = media.Tag.Version,
                    CreatedBy      = media.Tag.CreatedByUser,
                    CreatedOn      = media.Tag.CreatedOn,
                    LastModifiedBy = media.Tag.ModifiedByUser,
                    LastModifiedOn = media.Tag.ModifiedOn,

                    Name = media.Tag.Name
                })
                    .ToFuture();
            }
            else
            {
                tagsFuture = null;
            }

            IEnumerable <AccessRuleModel> accessRulesFuture;

            if (request.Data.IncludeAccessRules)
            {
                accessRulesFuture = (from file in repository.AsQueryable <MediaFile>()
                                     from accessRule in file.AccessRules
                                     where file.Id == request.FileId
                                     orderby accessRule.IsForRole, accessRule.Identity
                                     select
                                     new AccessRuleModel
                {
                    AccessLevel = (AccessLevel)(int)accessRule.AccessLevel,
                    Identity = accessRule.Identity,
                    IsForRole = accessRule.IsForRole
                })
                                    .ToList();
            }
            else
            {
                accessRulesFuture = null;
            }

            if (request.Data.IncludeCategories)
            {
                model.Model.Categories = (from media in repository.AsQueryable <MediaFile>()
                                          from category in media.Categories
                                          where media.Id == model.Model.Id && !category.IsDeleted
                                          select new CategoryNodeModel
                {
                    Id = category.Category.Id,
                    Version = category.Version,
                    CreatedBy = category.CreatedByUser,
                    CreatedOn = category.CreatedOn,
                    LastModifiedBy = category.ModifiedByUser,
                    LastModifiedOn = category.ModifiedOn,
                    Name = category.Category.Name,
                    CategoryTreeId = category.Category.CategoryTree.Id
                }).ToList();
            }

            return(new GetFileResponse
            {
                Data = model.Model,
                Tags = tagsFuture != null?tagsFuture.ToList() : null,
                           AccessRules = accessRulesFuture != null?accessRulesFuture.ToList() : null
            });
        }
示例#2
0
        public GetFileResponse Get(GetFileRequest request)
        {
            var model = repository
                        .AsQueryable <MediaFile>()
                        .Where(media => media.Id == request.FileId && media.Type == MediaType.File)
                        .Select(media => new FileModel
            {
                Id             = media.Id,
                Version        = media.Version,
                CreatedBy      = media.CreatedByUser,
                CreatedOn      = media.CreatedOn,
                LastModifiedBy = media.ModifiedByUser,
                LastModifiedOn = media.ModifiedOn,

                Title                 = media.Title,
                Description           = media.Description,
                FileExtension         = media.OriginalFileExtension,
                FileSize              = media.Size,
                FileUrl               = fileUrlResolver.EnsureFullPathUrl(media.PublicUrl),
                IsArchived            = media.IsArchived,
                FolderId              = media.Folder != null && !media.Folder.IsDeleted ? media.Folder.Id : (Guid?)null,
                FolderName            = media.Folder != null && !media.Folder.IsDeleted ? media.Folder.Title : null,
                PublishedOn           = media.PublishedOn,
                OriginalFileName      = media.OriginalFileName,
                OriginalFileExtension = media.OriginalFileExtension,
                ThumbnailId           = media.Image != null && !media.Image.IsDeleted ? media.Image.Id : (Guid?)null,
                ThumbnailCaption      = media.Image != null && !media.Image.IsDeleted ? media.Image.Caption : null,
                ThumbnailUrl          = media.Image != null && !media.Image.IsDeleted ? media.Image.PublicThumbnailUrl : null
            })
                        .FirstOne();

            model.FileUrl      = fileService.GetDownloadFileUrl(MediaType.File, model.Id, model.FileUrl);
            model.ThumbnailUrl = fileUrlResolver.EnsureFullPathUrl(model.ThumbnailUrl);

            IList <TagModel> tags;

            if (request.Data.IncludeTags)
            {
                tags =
                    repository.AsQueryable <MediaTag>(mediaTag => mediaTag.Media.Id == request.FileId && !mediaTag.Tag.IsDeleted)
                    .OrderBy(mediaTag => mediaTag.Tag.Name)
                    .Select(media => new TagModel
                {
                    Id             = media.Tag.Id,
                    Version        = media.Tag.Version,
                    CreatedBy      = media.Tag.CreatedByUser,
                    CreatedOn      = media.Tag.CreatedOn,
                    LastModifiedBy = media.Tag.ModifiedByUser,
                    LastModifiedOn = media.Tag.ModifiedOn,

                    Name = media.Tag.Name
                })
                    .ToList();
            }
            else
            {
                tags = null;
            }

            return(new GetFileResponse
            {
                Data = model,
                Tags = tags
            });
        }