Пример #1
0
        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;
                }
                
            }
        }
Пример #2
0
 public void OnLibraryChanged(LibraryChangedEventArgs args)
 {
     if (NotifyLibraryChanged != null)
     {
         NotifyLibraryChanged(this, args);
     }
 }