using System.Collections.Generic; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Services.Implement; namespace Umbraco.Cms.Infrastructure.PublishedCache.Persistence { public class NuCacheContentService : RepositoryService, INuCacheContentService { private readonly INuCacheContentRepository _repository; public NuCacheContentService(INuCacheContentRepository repository, IScopeProvider provider, ILoggerFactory loggerFactory, IEventMessagesFactory eventMessagesFactory) : base(provider, loggerFactory, eventMessagesFactory) { _repository = repository; } /// public IEnumerable GetAllContentSources() => _repository.GetAllContentSources(); /// public IEnumerable GetAllMediaSources() => _repository.GetAllMediaSources(); /// public IEnumerable GetBranchContentSources(int id) => _repository.GetBranchContentSources(id); /// public IEnumerable GetBranchMediaSources(int id) => _repository.GetBranchMediaSources(id); /// public ContentNodeKit GetContentSource(int id) => _repository.GetContentSource(id); /// public ContentNodeKit GetMediaSource(int id) => _repository.GetMediaSource(id); /// public IEnumerable GetTypeContentSources(IEnumerable ids) => _repository.GetTypeContentSources(ids); /// public IEnumerable GetTypeMediaSources(IEnumerable ids) => _repository.GetTypeContentSources(ids); /// public void DeleteContentItem(IContentBase item) => _repository.DeleteContentItem(item); public void DeleteContentItems(IEnumerable items) { foreach (IContentBase item in items) { _repository.DeleteContentItem(item); } } /// public void RefreshContent(IContent content) => _repository.RefreshContent(content); /// public void RefreshEntity(IContentBase content) => _repository.RefreshEntity(content); /// public void Rebuild( int groupSize = 5000, IReadOnlyCollection contentTypeIds = null, IReadOnlyCollection mediaTypeIds = null, IReadOnlyCollection memberTypeIds = null) { using (IScope scope = ScopeProvider.CreateScope(repositoryCacheMode: RepositoryCacheMode.Scoped)) { if (contentTypeIds != null) { scope.ReadLock(Constants.Locks.ContentTree); } if (mediaTypeIds != null) { scope.ReadLock(Constants.Locks.MediaTree); } if (memberTypeIds != null) { scope.ReadLock(Constants.Locks.MemberTree); } _repository.Rebuild(groupSize, contentTypeIds, mediaTypeIds, memberTypeIds); scope.Complete(); } } /// public bool VerifyContentDbCache() { using IScope scope = ScopeProvider.CreateScope(autoComplete: true); scope.ReadLock(Constants.Locks.ContentTree); return _repository.VerifyContentDbCache(); } /// public bool VerifyMediaDbCache() { using IScope scope = ScopeProvider.CreateScope(autoComplete: true); scope.ReadLock(Constants.Locks.MediaTree); return _repository.VerifyMediaDbCache(); } /// public bool VerifyMemberDbCache() { using IScope scope = ScopeProvider.CreateScope(autoComplete: true); scope.ReadLock(Constants.Locks.MemberTree); return _repository.VerifyMemberDbCache(); } } }