Beispiel #1
0
        /// <summary>
        /// Refreshes the publish snapshot service and if there are published changes ensures that partial view caches are refreshed too
        /// </summary>
        /// <param name="service"></param>
        /// <param name="appCaches"></param>
        /// <param name="payloads"></param>
        internal static void NotifyPublishedSnapshotService(IPublishedSnapshotService service, AppCaches appCaches, JsonPayload[] payloads)
        {
            service.Notify(payloads, out _, out var publishedChanged);

            if (payloads.Any(x => x.ChangeTypes.HasType(TreeChangeTypes.RefreshAll)) || publishedChanged)
            {
                // when a public version changes
                appCaches.ClearPartialViewCache();
            }
        }
Beispiel #2
0
        public static void RefreshContentTypes(AppCaches appCaches)
        {
            // we could try to have a mechanism to notify the PublishedCachesService
            // and figure out whether published items were modified or not... keep it
            // simple for now, just clear the whole thing

            appCaches.ClearPartialViewCache();

            appCaches.IsolatedCaches.ClearCache <PublicAccessEntry>();
            appCaches.IsolatedCaches.ClearCache <IContent>();
        }
        private void ClearCache(params JsonPayload[] payloads)
        {
            AppCaches.ClearPartialViewCache();
            var memberCache = AppCaches.IsolatedCaches.Get <IMember>();

            foreach (var p in payloads)
            {
                _idKeyMap.ClearCache(p.Id);
                if (memberCache)
                {
                    memberCache.Result.Clear(RepositoryCacheKeys.GetKey <IMember, int>(p.Id));
                    memberCache.Result.Clear(RepositoryCacheKeys.GetKey <IMember, string>(p.Username));
                }
            }
        }
Beispiel #4
0
        public override void Refresh(JsonPayload[] payloads)
        {
            if (payloads == null)
            {
                return;
            }

            _publishedSnapshotService.Notify(payloads, out var anythingChanged);

            if (anythingChanged)
            {
                AppCaches.ClearPartialViewCache();
                AppCaches.RuntimeCache.ClearByKey(CacheKeys.MediaRecycleBinCacheKey);

                var mediaCache = AppCaches.IsolatedCaches.Get <IMedia>();

                foreach (var payload in payloads)
                {
                    if (payload.ChangeTypes == TreeChangeTypes.Remove)
                    {
                        _idKeyMap.ClearCache(payload.Id);
                    }

                    if (!mediaCache)
                    {
                        continue;
                    }

                    // repository cache
                    // it *was* done for each pathId but really that does not make sense
                    // only need to do it for the current media
                    mediaCache.Result.Clear(RepositoryCacheKeys.GetKey <IMedia, int>(payload.Id));
                    mediaCache.Result.Clear(RepositoryCacheKeys.GetKey <IMedia, Guid?>(payload.Key));

                    // remove those that are in the branch
                    if (payload.ChangeTypes.HasTypesAny(TreeChangeTypes.RefreshBranch | TreeChangeTypes.Remove))
                    {
                        var pathid = "," + payload.Id + ",";
                        mediaCache.Result.ClearOfType <IMedia>((_, v) => v.Path.Contains(pathid));
                    }
                }
            }

            base.Refresh(payloads);
        }