# Conflicts: # .github/CONTRIBUTING.md # build/NuSpecs/UmbracoCms.Core.nuspec # build/NuSpecs/UmbracoCms.Web.nuspec # build/NuSpecs/UmbracoCms.nuspec # src/SolutionInfo.cs # src/Umbraco.Core/Cache/AppCaches.cs # src/Umbraco.Core/Cache/AppPolicedCacheDictionary.cs # src/Umbraco.Core/Cache/DeepCloneAppCache.cs # src/Umbraco.Core/Cache/WebCachingAppCache.cs # src/Umbraco.Core/CompositionExtensions.cs # src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs # src/Umbraco.Core/Models/PropertyGroupCollection.cs # src/Umbraco.Core/Models/PropertyTypeCollection.cs # src/Umbraco.Core/Persistence/Repositories/Implement/ExternalLoginRepository.cs # src/Umbraco.Core/ReadLock.cs # src/Umbraco.Core/Routing/SiteDomainMapper.cs # src/Umbraco.Core/UpgradeableReadLock.cs # src/Umbraco.Core/WriteLock.cs # src/Umbraco.Examine/ExamineExtensions.cs # src/Umbraco.Infrastructure/Examine/UmbracoFieldDefinitionCollection.cs # src/Umbraco.Infrastructure/Persistence/Dtos/ContentTypeDto.cs # src/Umbraco.Infrastructure/Persistence/Dtos/DictionaryDto.cs # src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberGroupRepository.cs # src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TemplateRepository.cs # src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs # src/Umbraco.Infrastructure/Services/IdKeyMap.cs # src/Umbraco.Infrastructure/Services/Implement/ContentService.cs # src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs # src/Umbraco.Tests/App.config # src/Umbraco.Web.BackOffice/Controllers/EntityController.cs # src/Umbraco.Web.UI.Client/package.json # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/da.xml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/en.xml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/en_us.xml # src/Umbraco.Web.UI/Umbraco.Web.UI.csproj # src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml # src/Umbraco.Web.UI/web.Template.config # src/Umbraco.Web/CacheHelperExtensions.cs # src/Umbraco.Web/Editors/RelationTypeController.cs # src/Umbraco.Web/Logging/WebProfilerProvider.cs # src/Umbraco.Web/Models/Mapping/MemberMapDefinition.cs # src/Umbraco.Web/PublishedCache/NuCache/MemberCache.cs # src/Umbraco.Web/Routing/ContentFinderByConfigured404.cs # src/Umbraco.Web/Routing/NotFoundHandlerHelper.cs # src/Umbraco.Web/Security/BackOfficeUserManager.cs # src/Umbraco.Web/Umbraco.Web.csproj
126 lines
3.7 KiB
C#
126 lines
3.7 KiB
C#
using System;
|
|
using Umbraco.Cms.Core;
|
|
using Umbraco.Cms.Core.Cache;
|
|
using Umbraco.Cms.Core.PublishedCache;
|
|
|
|
namespace Umbraco.Cms.Infrastructure.PublishedCache
|
|
{
|
|
// implements published snapshot
|
|
public class PublishedSnapshot : IPublishedSnapshot, IDisposable
|
|
{
|
|
private readonly PublishedSnapshotService _service;
|
|
private bool _defaultPreview;
|
|
private PublishedSnapshotElements _elements;
|
|
|
|
#region Constructors
|
|
|
|
public PublishedSnapshot(IPublishedSnapshotService service, bool defaultPreview)
|
|
{
|
|
_service = service as PublishedSnapshotService;
|
|
_defaultPreview = defaultPreview;
|
|
}
|
|
|
|
public class PublishedSnapshotElements : IDisposable
|
|
{
|
|
#pragma warning disable IDE1006 // Naming Styles
|
|
public ContentCache ContentCache;
|
|
public MediaCache MediaCache;
|
|
public MemberCache MemberCache;
|
|
public DomainCache DomainCache;
|
|
public IAppCache SnapshotCache;
|
|
public IAppCache ElementsCache;
|
|
#pragma warning restore IDE1006 // Naming Styles
|
|
|
|
public void Dispose()
|
|
{
|
|
ContentCache.Dispose();
|
|
MediaCache.Dispose();
|
|
MemberCache.Dispose();
|
|
}
|
|
}
|
|
|
|
private PublishedSnapshotElements Elements
|
|
{
|
|
get
|
|
{
|
|
if (_service == null)
|
|
{
|
|
throw new InvalidOperationException($"The {typeof(PublishedSnapshot)} cannot be used when the {typeof(IPublishedSnapshotService)} is not the default type {typeof(PublishedSnapshotService)}");
|
|
}
|
|
return _elements ??= _service.GetElements(_defaultPreview);
|
|
}
|
|
}
|
|
|
|
public void Resync()
|
|
{
|
|
// no lock - published snapshots are single-thread
|
|
_elements?.Dispose();
|
|
_elements = null;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Caches
|
|
|
|
public IAppCache SnapshotCache => Elements.SnapshotCache;
|
|
|
|
public IAppCache ElementsCache => Elements.ElementsCache;
|
|
|
|
#endregion
|
|
|
|
#region IPublishedSnapshot
|
|
|
|
public IPublishedContentCache Content => Elements.ContentCache;
|
|
|
|
public IPublishedMediaCache Media => Elements.MediaCache;
|
|
|
|
public IPublishedMemberCache Members => Elements.MemberCache;
|
|
|
|
public IDomainCache Domains => Elements.DomainCache;
|
|
|
|
public IDisposable ForcedPreview(bool preview, Action<bool> callback = null)
|
|
{
|
|
return new ForcedPreviewObject(this, preview, callback);
|
|
}
|
|
|
|
private class ForcedPreviewObject : DisposableObjectSlim
|
|
{
|
|
private readonly PublishedSnapshot _publishedSnapshot;
|
|
private readonly bool _origPreview;
|
|
private readonly Action<bool> _callback;
|
|
|
|
public ForcedPreviewObject(PublishedSnapshot publishedShapshot, bool preview, Action<bool> callback)
|
|
{
|
|
_publishedSnapshot = publishedShapshot;
|
|
_callback = callback;
|
|
|
|
// save and force
|
|
_origPreview = publishedShapshot._defaultPreview;
|
|
publishedShapshot._defaultPreview = preview;
|
|
}
|
|
|
|
protected override void DisposeResources()
|
|
{
|
|
// restore
|
|
_publishedSnapshot._defaultPreview = _origPreview;
|
|
_callback?.Invoke(_origPreview);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IDisposable
|
|
|
|
private bool _disposed;
|
|
|
|
public void Dispose()
|
|
{
|
|
if (_disposed) return;
|
|
_disposed = true;
|
|
_elements?.Dispose();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|