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; } }
/// <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(); }