diff --git a/src/Umbraco.Web.UI/config/xsltExtensions.config b/src/Umbraco.Web.UI/config/xsltExtensions.config
index 354f37fd64..a372e40d95 100644
--- a/src/Umbraco.Web.UI/config/xsltExtensions.config
+++ b/src/Umbraco.Web.UI/config/xsltExtensions.config
@@ -8,8 +8,4 @@
-
-
-
-
\ No newline at end of file
diff --git a/src/Umbraco.Web/umbraco.presentation/LibraryCacheRefresher.cs b/src/Umbraco.Web/umbraco.presentation/LibraryCacheRefresher.cs
index 3e991fafc4..371d659bd8 100644
--- a/src/Umbraco.Web/umbraco.presentation/LibraryCacheRefresher.cs
+++ b/src/Umbraco.Web/umbraco.presentation/LibraryCacheRefresher.cs
@@ -1,8 +1,13 @@
+using Umbraco.Core;
+using Umbraco.Core.Events;
+using Umbraco.Core.Models;
+using Umbraco.Core.Services;
using umbraco.businesslogic;
using umbraco.cms.businesslogic;
using umbraco.cms.businesslogic.media;
using umbraco.cms.businesslogic.member;
using umbraco.interfaces;
+using DeleteEventArgs = umbraco.cms.businesslogic.DeleteEventArgs;
namespace umbraco
{
@@ -13,47 +18,55 @@ namespace umbraco
{
public LibraryCacheRefresher()
{
- if (UmbracoSettings.UmbracoLibraryCacheDuration > 0)
- {
- Member.AfterSave += new Member.SaveEventHandler(Member_AfterSave);
- Member.BeforeDelete += new Member.DeleteEventHandler(Member_BeforeDelete);
- Media.AfterSave += new Media.SaveEventHandler(Media_AfterSave);
- Media.BeforeDelete += new Media.DeleteEventHandler(Media_BeforeDelete);
- }
+ if (UmbracoSettings.UmbracoLibraryCacheDuration <= 0) return;
- // now handled directly by the IRoutesCache implementation
- //content.AfterUpdateDocumentCache += new content.DocumentCacheEventHandler(content_AfterUpdateDocumentCache);
- //content.AfterRefreshContent += new content.RefreshContentEventHandler(content_AfterRefreshContent);
+
+ Member.AfterSave += MemberAfterSave;
+ Member.BeforeDelete += MemberBeforeDelete;
+
+ MediaService.Saved += MediaServiceSaved;
+ //We need to perform all of the 'before' events here because we need a reference to the
+ //media item's Path before it is moved/deleting/trashed
+ //see: http://issues.umbraco.org/issue/U4-1653
+ MediaService.Deleting += MediaServiceDeleting;
+ MediaService.Moving += MediaServiceMoving;
+ MediaService.Trashing += MediaServiceTrashing;
}
- //void content_AfterRefreshContent(Document sender, RefreshContentEventArgs e)
- //{
- // library.ClearNiceUrlCache();
- //}
+ static void MediaServiceTrashing(IMediaService sender, MoveEventArgs e)
+ {
+ library.ClearLibraryCacheForMedia(e.Entity.Id);
+ }
- //void content_AfterUpdateDocumentCache(Document sender, DocumentCacheEventArgs e)
- //{
- // library.ClearNiceUrlCache();
- //}
+ static void MediaServiceMoving(IMediaService sender, MoveEventArgs e)
+ {
+ library.ClearLibraryCacheForMedia(e.Entity.Id);
+ }
- void Member_BeforeDelete(Member sender, DeleteEventArgs e)
- {
- library.ClearLibraryCacheForMember(sender.Id);
- }
+ static void MediaServiceDeleting(IMediaService sender, DeleteEventArgs e)
+ {
+ foreach (var item in e.DeletedEntities)
+ {
+ library.ClearLibraryCacheForMedia(item.Id);
+ }
+ }
- void Media_BeforeDelete(Media sender, DeleteEventArgs e)
- {
- library.ClearLibraryCacheForMedia(sender.Id);
- }
+ static void MediaServiceSaved(IMediaService sender, SaveEventArgs e)
+ {
+ foreach (var item in e.SavedEntities)
+ {
+ library.ClearLibraryCacheForMedia(item.Id);
+ }
+ }
- void Media_AfterSave(Media sender, SaveEventArgs e)
- {
- library.ClearLibraryCacheForMedia(sender.Id);
- }
+ static void MemberBeforeDelete(Member sender, DeleteEventArgs e)
+ {
+ library.ClearLibraryCacheForMember(sender.Id);
+ }
- void Member_AfterSave(Member sender, SaveEventArgs e)
- {
- library.ClearLibraryCacheForMember(sender.Id);
- }
+ static void MemberAfterSave(Member sender, SaveEventArgs e)
+ {
+ library.ClearLibraryCacheForMember(sender.Id);
+ }
}
}
\ No newline at end of file