Esempio n. 1
0
        private void MediaCacheRefresherUpdated(MediaCacheRefresher sender, CacheRefresherEventArgs args)
        {
            if (args.MessageType != MessageType.RefreshByPayload)
            {
                throw new NotSupportedException();
            }

            var mediaService = _services.MediaService;

            foreach (var payload in (MediaCacheRefresher.JsonPayload[])args.MessageObject)
            {
                if (payload.ChangeTypes.HasType(TreeChangeTypes.Remove))
                {
                    // remove from *all* indexes
                    DeleteIndexForEntity(payload.Id, false);
                }
                else if (payload.ChangeTypes.HasType(TreeChangeTypes.RefreshAll))
                {
                    // ExamineEvents does not support RefreshAll
                    // just ignore that payload
                    // so what?!
                }
                else // RefreshNode or RefreshBranch (maybe trashed)
                {
                    var media = mediaService.GetById(payload.Id);
                    if (media == null)
                    {
                        // gone fishing, remove entirely
                        DeleteIndexForEntity(payload.Id, false);
                        continue;
                    }

                    if (media.Trashed)
                    {
                        DeleteIndexForEntity(payload.Id, true);
                    }

                    // just that media
                    ReIndexForMedia(media, !media.Trashed);

                    // branch
                    if (payload.ChangeTypes.HasType(TreeChangeTypes.RefreshBranch))
                    {
                        const int pageSize = 500;
                        var       page     = 0;
                        var       total    = long.MaxValue;
                        while (page * pageSize < total)
                        {
                            var descendants = mediaService.GetPagedDescendants(media.Id, page++, pageSize, out total);
                            foreach (var descendant in descendants)
                            {
                                ReIndexForMedia(descendant, !descendant.Trashed);
                            }
                        }
                    }
                }
            }
        }
    public override void Refresh(JsonPayload[] payloads)
    {
        // TODO: refactor
        // we should NOT directly clear caches here, but instead ask whatever class
        // is managing the cache to please clear that cache properly
        _contentTypeCommonRepository.ClearCache(); // always

        if (payloads.Any(x => x.ItemType == typeof(IContentType).Name))
        {
            ClearAllIsolatedCacheByEntityType <IContent>();
            ClearAllIsolatedCacheByEntityType <IContentType>();
        }

        if (payloads.Any(x => x.ItemType == typeof(IMediaType).Name))
        {
            ClearAllIsolatedCacheByEntityType <IMedia>();
            ClearAllIsolatedCacheByEntityType <IMediaType>();
        }

        if (payloads.Any(x => x.ItemType == typeof(IMemberType).Name))
        {
            ClearAllIsolatedCacheByEntityType <IMember>();
            ClearAllIsolatedCacheByEntityType <IMemberType>();
        }

        foreach (var id in payloads.Select(x => x.Id))
        {
            _idKeyMap.ClearCache(id);
        }

        if (payloads.Any(x => x.ItemType == typeof(IContentType).Name))
        {
            // don't try to be clever - refresh all
            ContentCacheRefresher.RefreshContentTypes(AppCaches);
        }

        if (payloads.Any(x => x.ItemType == typeof(IMediaType).Name))
        {
            // don't try to be clever - refresh all
            MediaCacheRefresher.RefreshMediaTypes(AppCaches);
        }

        if (payloads.Any(x => x.ItemType == typeof(IMemberType).Name))
        {
            // don't try to be clever - refresh all
            MemberCacheRefresher.RefreshMemberTypes(AppCaches);
        }

        // refresh the models and cache
        _publishedModelFactory.WithSafeLiveFactoryReset(() =>
                                                        _publishedSnapshotService.Notify(payloads));

        // now we can trigger the event
        base.Refresh(payloads);
    }
        /// <summary>
        /// Handle the cache refresher event to update the index
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void MediaCacheRefresherUpdated(MediaCacheRefresher sender, CacheRefresherEventArgs args)
        {
            if (args.MessageType != MessageType.RefreshByPayload)
            {
                throw new NotSupportedException();
            }

            foreach (var payload in (MediaCacheRefresher.JsonPayload[])args.MessageObject)
            {
                if (payload.ChangeTypes.HasType(TreeChangeTypes.Remove))
                {
                    _pdfIndexPopulator.RemoveFromIndex(payload.Id);
                }
                else if (payload.ChangeTypes.HasType(TreeChangeTypes.RefreshAll))
                {
                    // ExamineEvents does not support RefreshAll
                    // just ignore that payload
                    // so what?!
                }
                else // RefreshNode or RefreshBranch (maybe trashed)
                {
                    var media = _mediaService.GetById(payload.Id);
                    if (media == null)
                    {
                        // gone fishing, remove entirely
                        _pdfIndexPopulator.RemoveFromIndex(payload.Id);
                        continue;
                    }

                    if (media.Trashed)
                    {
                        _pdfIndexPopulator.RemoveFromIndex(payload.Id);
                    }
                    else
                    {
                        _pdfIndexPopulator.AddToIndex(media);
                    }

                    // branch
                    if (payload.ChangeTypes.HasType(TreeChangeTypes.RefreshBranch))
                    {
                        const int pageSize = 500;
                        var       page     = 0;
                        var       total    = long.MaxValue;
                        while (page * pageSize < total)
                        {
                            var descendants = _mediaService.GetPagedDescendants(media.Id, page++, pageSize, out total);
                            foreach (var descendant in descendants)
                            {
                                if (descendant.Trashed)
                                {
                                    _pdfIndexPopulator.RemoveFromIndex(descendant);
                                }
                                else
                                {
                                    _pdfIndexPopulator.AddToIndex(descendant);
                                }
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Handles index management for all media events - basically handling saving/copying/trashing/deleting
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        static void MediaCacheRefresherCacheUpdated(MediaCacheRefresher sender, CacheRefresherEventArgs e)
        {
            if (Suspendable.ExamineEvents.CanIndex == false)
            {
                return;
            }

            switch (e.MessageType)
            {
            case MessageType.RefreshById:
                var c1 = ApplicationContext.Current.Services.MediaService.GetById((int)e.MessageObject);
                if (c1 != null)
                {
                    ReIndexForMedia(c1, c1.Trashed == false);
                }
                break;

            case MessageType.RemoveById:
                var c2 = ApplicationContext.Current.Services.MediaService.GetById((int)e.MessageObject);
                if (c2 != null)
                {
                    //This is triggered when the item has trashed.
                    // So we need to delete the index from all indexes not supporting unpublished content.

                    DeleteIndexForEntity(c2.Id, true);

                    //We then need to re-index this item for all indexes supporting unpublished content

                    ReIndexForMedia(c2, false);
                }
                break;

            case MessageType.RefreshByJson:

                var jsonPayloads = MediaCacheRefresher.DeserializeFromJsonPayload((string)e.MessageObject);
                if (jsonPayloads.Any())
                {
                    foreach (var payload in jsonPayloads)
                    {
                        switch (payload.Operation)
                        {
                        case MediaCacheRefresher.OperationType.Saved:
                            var media1 = ApplicationContext.Current.Services.MediaService.GetById(payload.Id);
                            if (media1 != null)
                            {
                                ReIndexForMedia(media1, media1.Trashed == false);
                            }
                            break;

                        case MediaCacheRefresher.OperationType.Trashed:

                            //keep if trashed for indexes supporting unpublished
                            //(delete the index from all indexes not supporting unpublished content)

                            DeleteIndexForEntity(payload.Id, true);

                            //We then need to re-index this item for all indexes supporting unpublished content
                            var media2 = ApplicationContext.Current.Services.MediaService.GetById(payload.Id);
                            if (media2 != null)
                            {
                                ReIndexForMedia(media2, false);
                            }

                            break;

                        case MediaCacheRefresher.OperationType.Deleted:

                            //permanently remove from all indexes

                            DeleteIndexForEntity(payload.Id, false);

                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }
                }

                break;

            case MessageType.RefreshByInstance:
            case MessageType.RemoveByInstance:
            case MessageType.RefreshAll:
            default:
                //We don't support these, these message types will not fire for media
                break;
            }
        }
Esempio n. 5
0
 /// <summary>
 /// The media cache refresher cache updated event handler.
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="e">The <see cref="CacheRefresherEventArgs"/> containing information about the event.</param>
 private void MediaCacheRefresherCacheUpdated(MediaCacheRefresher sender, CacheRefresherEventArgs e)
 {
     this.ClearCache();
 }
 private void MediaCacheRefresherOnCacheUpdated(MediaCacheRefresher sender, CacheRefresherEventArgs cacheRefresherEventArgs)
 {
     _logService.Debug <ClearDonutOutputCache>("MediaCacheRefresherOnCacheUpdated");
     ClearCache();
 }
 private void MediaCacheRefresherOnCacheUpdated(MediaCacheRefresher sender,
                                                CacheRefresherEventArgs cacheRefresherEventArgs)
 {
     ClearCache();
 }
 private void MediaCacheRefresherOnCacheUpdated(MediaCacheRefresher sender, CacheRefresherEventArgs cacheRefresherEventArgs)
 {
     Log.Debug("Clearing output cache");
     ClearCache();
 }