private void LibraryChanged(object sender, LibraryChangedEventArgs args) { Logger.ReportVerbose("Library Changed..."); Logger.ReportVerbose("Folders Added to: {0} Items Added: {1} Items Removed: {2} Items Updated: {3}", args.UpdateInfo.FoldersAddedTo.Count, args.UpdateInfo.ItemsAdded.Count, args.UpdateInfo.ItemsRemoved.Count, args.UpdateInfo.ItemsUpdated.Count); var changedFolders = args.UpdateInfo.FoldersAddedTo.Concat(args.UpdateInfo.FoldersRemovedFrom).SelectMany(id => Kernel.Instance.FindItems(new Guid(id))).OfType<Folder>().Where(folder => folder != null).ToList(); // Get folders that were reported to us foreach (var changedItem in changedFolders) { Logger.ReportVerbose("Folder with changes is: {0}", changedItem.Name); changedItem.ReloadChildren(); } //First get all the top folders of removed items foreach (var id in args.UpdateInfo.ItemsRemoved) { var removed = Kernel.Instance.FindItem(new Guid(id)); if (removed != null) { // If our parent wasn't included in the updated list - refresh it var parent = removed.Parent; if (parent != null) { if (!args.UpdateInfo.ItemsUpdated.Contains(parent.ApiId)) parent.RefreshMetadata(); } } } // Get changed items and update them foreach (var id in args.UpdateInfo.ItemsUpdated) { var changedItem = Kernel.Instance.FindItem(new Guid(id)); if (changedItem != null) { if (!args.UpdateInfo.ItemsUpdated.Contains(changedItem.Parent.ApiId) && !args.UpdateInfo.FoldersAddedTo.Contains(id) && !args.UpdateInfo.FoldersRemovedFrom.Contains(id)) { Logger.ReportVerbose("Item changed is: {0}. Refreshing.", changedItem.Name); changedItem.RefreshMetadata(); } else { Logger.ReportVerbose("Not refreshing {0} because parent was/will be.", changedItem.Name); } } else { Logger.ReportVerbose("Changed Item {0} is not loaded", id); } } //And reset the recent list for and reload each top folder if anything was added or removed - just do them all if (args.UpdateInfo.ItemsAdded.Any() || args.UpdateInfo.ItemsRemoved.Any()) { foreach (var top in RootFolder.Children.OfType<Folder>()) { top.ReloadChildren(); top.ResetQuickList(); top.OnQuickListChanged(null); } } //Call any subscribers OnLibraryChanged(args); //Finally notify if enabled if (Config.ShowNewItemNotification) { var firstNew = Kernel.Instance.MB3ApiRepository.RetrieveItem(args.UpdateInfo.ItemsAdded.FirstOrDefault()); if (firstNew != null) { NewItem = ItemFactory.Instance.Create(firstNew); ShowNewItemPopout = true; Thread.Sleep(Config.NewItemNotificationDisplayTime * 1000); ShowNewItemPopout = false; } } }
public void OnLibraryChanged(LibraryChangedEventArgs args) { if (NotifyLibraryChanged != null) { NotifyLibraryChanged(this, args); } }