Exemplo n.º 1
0
        public virtual IndexFolder UpdateQuickList(string recentItemOption)
        {
            //rebuild the proper list
            List <BaseItem> items       = null;
            int             containerNo = 0;
            int             maxItems    = this.ActualChildren.Count > 0 ? (this.ActualChildren[0] is IContainer || this.ActualChildren[0] is MusicArtist) && Kernel.Instance.ConfigData.RecentItemCollapseThresh <= 6 ? Kernel.Instance.ConfigData.RecentItemContainerCount : Kernel.Instance.ConfigData.RecentItemCount : Kernel.Instance.ConfigData.RecentItemCount;

            using (new Profiler(string.Format("RAL child retrieval for {0} option {1}", Name, recentItemOption)))
            {
                items = GetLatestItems(recentItemOption, maxItems).ToList();
            }

            Logger.ReportVerbose(recentItemOption + " list for " + this.Name + " loaded with " + items.Count + " items.");
            var folderChildren = new List <BaseItem>();
            //now collapse anything that needs to be and create the child list for the list folder
            var containers = from item in items
                             where item is IGroupInIndex
                             group item by(item as IGroupInIndex).MainContainerId;

            foreach (var container in containers)
            {
                var containerObj = ((IGroupInIndex)container.First()).MainContainer;
                //Logger.ReportVerbose("Container " + (containerObj == null ? "--Unknown--" : containerObj.Name) + " items: " + container.Count());
                if (container.Count() < Kernel.Instance.ConfigData.RecentItemCollapseThresh)
                {
                    //add the items without rolling up
                    foreach (var i in container)
                    {
                        //make sure any inherited images get loaded
                        var ignore = i.Parent != null ? i.Parent.BackdropImages : null;
                        ignore = i.BackdropImages;
                        var ignore2 = i.LogoImage;
                        ignore2 = i.ArtImage;

                        folderChildren.Add(i);
                    }
                }
                else
                {
                    var currentContainer = containerObj ?? new IndexFolder()
                    {
                        Name = "<Unknown>"
                    };
                    var currentSeries = currentContainer as Series;
                    containerNo++;
                    var aContainer = new SearchResultFolder(new List <BaseItem>())
                    {
                        Id                 = ("container" + recentItemOption + this.Name + this.Path + containerNo).GetMD5(),
                        Name               = currentContainer.Name + " (" + container.Count() + " Items)",
                        Overview           = currentContainer.Overview,
                        MpaaRating         = currentContainer.MpaaRating,
                        Genres             = currentContainer.Genres,
                        ImdbRating         = currentContainer.ImdbRating,
                        Studios            = currentContainer.Studios,
                        PrimaryImagePath   = currentContainer.PrimaryImagePath,
                        SecondaryImagePath = currentContainer.SecondaryImagePath,
                        BannerImagePath    = currentContainer.BannerImagePath,
                        BackdropImagePaths = currentContainer.BackdropImagePaths,
                        ThemeId            = currentSeries != null ? currentSeries.ApiId : null,
                        TVDBSeriesId       = currentSeries != null ? currentSeries.TVDBSeriesId : null,
                        LogoImagePath      = currentSeries != null ? currentSeries.LogoImagePath : null,
                        ArtImagePath       = currentSeries != null ? currentSeries.ArtImagePath : null,
                        ThumbnailImagePath = currentSeries != null ? currentSeries.ThumbnailImagePath : null,
                        DisplayMediaType   = currentContainer.DisplayMediaType,
                        DateCreated        = container.First().DateCreated,
                        Parent             = this
                    };
                    if (containerObj is Series)
                    {
                        //always roll into seasons
                        var seasons = from episode in container
                                      group episode by(episode as Episode).SeasonId;

                        foreach (var season in seasons)
                        {
                            var currentSeason = ((Episode)season.First()).Season;
                            containerNo++;
                            var aSeason = new SearchResultFolder(season.ToList())
                            {
                                Id                 = ("season" + recentItemOption + this.Name + this.Path + containerNo).GetMD5(),
                                Name               = currentSeason.Name + " (" + season.Count() + " Items)",
                                Overview           = currentSeason.Overview,
                                MpaaRating         = currentSeason.MpaaRating,
                                Genres             = currentSeason.Genres,
                                ImdbRating         = currentSeason.ImdbRating,
                                Studios            = currentSeason.Studios,
                                PrimaryImagePath   = currentSeason.PrimaryImagePath ?? containerObj.PrimaryImagePath,
                                SecondaryImagePath = currentSeason.SecondaryImagePath,
                                BannerImagePath    = currentSeason.BannerImagePath ?? containerObj.BannerImagePath,
                                BackdropImagePaths = currentSeason.BackdropImagePaths ?? containerObj.BackdropImagePaths,
                                TVDBSeriesId       = currentSeason.TVDBSeriesId,
                                LogoImagePath      = currentSeason.LogoImagePath,
                                ArtImagePath       = currentSeason.ArtImagePath,
                                ThumbnailImagePath = currentSeason.ThumbnailImagePath,
                                DisplayMediaType   = currentSeason.DisplayMediaType,
                                DateCreated        = season.First().DateCreated,
                                Parent             = currentSeason.Id == aContainer.Id ? this : aContainer
                            };

                            aContainer.AddChild(aSeason);
                        }
                    }
                    else
                    {
                        //not series so just add all children to container
                        aContainer.AddChildren(container.ToList());
                    }

                    //and container to children
                    folderChildren.Add(aContainer);
                }
            }
            //finally add all the items that don't go in containers
            folderChildren.AddRange(items.Where(i => (!(i is IGroupInIndex))));

            //and create our quicklist folder
            return(new IndexFolder(folderChildren)
            {
                Id = QuickListID(recentItemOption), Name = "User:" + Kernel.CurrentUser.Name, DateCreated = DateTime.UtcNow, Parent = this
            });
        }
Exemplo n.º 2
0
        public virtual IndexFolder UpdateQuickList(string recentItemOption)
        {
            //rebuild the proper list
            List <BaseItem> items       = null;
            int             containerNo = 0;
            int             maxItems    = this.ActualChildren.Count > 0 ? (this.ActualChildren[0] is IContainer || this.ActualChildren[0] is MusicArtist) && Kernel.Instance.ConfigData.RecentItemCollapseThresh <= 6 ? Kernel.Instance.ConfigData.RecentItemContainerCount : Kernel.Instance.ConfigData.RecentItemCount : Kernel.Instance.ConfigData.RecentItemCount;

            using (new Profiler(string.Format("RAL child retrieval for {0} option {1}", Name, recentItemOption)))
            {
                switch (recentItemOption)
                {
                case "watched":
                    items = Kernel.Instance.MB3ApiRepository.RetrieveItems(new ItemQuery
                    {
                        UserId               = Kernel.CurrentUser.ApiId,
                        ParentId             = RalParentId,
                        Limit                = maxItems,
                        Recursive            = true,
                        ExcludeItemTypes     = RalExcludeTypes,
                        IncludeItemTypes     = RalIncludeTypes,
                        ExcludeLocationTypes = new[] { LocationType.Virtual },
                        Fields               = MB3ApiRepository.StandardFields,
                        Filters              = (new[] { Config.Instance.TreatWatchedAsInProgress?ItemFilter.IsResumable: ItemFilter.IsPlayed, }).Concat(AdditionalRalFilters).ToArray(),
                        SortBy               = new[] { ItemSortBy.DatePlayed },
                        SortOrder            = Model.Entities.SortOrder.Descending
                    }).ToList();

                    break;

                case "unwatched":
                    items = Kernel.Instance.MB3ApiRepository.RetrieveItems(new ItemQuery
                    {
                        UserId               = Kernel.CurrentUser.ApiId,
                        ParentId             = RalParentId,
                        Limit                = maxItems,
                        Recursive            = true,
                        Fields               = MB3ApiRepository.StandardFields,
                        ExcludeItemTypes     = RalExcludeTypes,
                        IncludeItemTypes     = RalIncludeTypes,
                        ExcludeLocationTypes = new[] { LocationType.Virtual },
                        Filters              = (new[] { ItemFilter.IsUnplayed, }).Concat(AdditionalRalFilters).ToArray(),
                        SortBy               = new[] { ItemSortBy.DateCreated },
                        SortOrder            = Model.Entities.SortOrder.Descending
                    }).ToList();
                    break;

                default:
                    items = Kernel.Instance.MB3ApiRepository.RetrieveItems(new ItemQuery
                    {
                        UserId               = Kernel.CurrentUser.ApiId,
                        ParentId             = RalParentId,
                        Limit                = maxItems,
                        Recursive            = true,
                        Filters              = AdditionalRalFilters,
                        ExcludeItemTypes     = RalExcludeTypes,
                        IncludeItemTypes     = RalIncludeTypes,
                        ExcludeLocationTypes = new[] { LocationType.Virtual },
                        Fields               = MB3ApiRepository.StandardFields,
                        SortBy               = new[] { ItemSortBy.DateCreated },
                        SortOrder            = Model.Entities.SortOrder.Descending
                    }).ToList();
                    break;
                }
            }
            Logger.ReportVerbose(recentItemOption + " list for " + this.Name + " loaded with " + items.Count + " items.");
            var folderChildren = new List <BaseItem>();
            //now collapse anything that needs to be and create the child list for the list folder
            var containers = from item in items
                             where item is IGroupInIndex
                             group item by(item as IGroupInIndex).MainContainer.Id;

            foreach (var container in containers)
            {
                var containerObj = ((IGroupInIndex)container.First()).MainContainer;
                //Logger.ReportVerbose("Container " + (containerObj == null ? "--Unknown--" : containerObj.Name) + " items: " + container.Count());
                if (container.Count() < Kernel.Instance.ConfigData.RecentItemCollapseThresh)
                {
                    //add the items without rolling up
                    foreach (var i in container)
                    {
                        //make sure any inherited images get loaded
                        var ignore = i.Parent != null ? i.Parent.BackdropImages : null;
                        ignore = i.BackdropImages;
                        var ignore2 = i.LogoImage;
                        ignore2 = i.ArtImage;

                        folderChildren.Add(i);
                    }
                }
                else
                {
                    var currentContainer = containerObj ?? new IndexFolder()
                    {
                        Name = "<Unknown>"
                    };
                    var currentSeries = currentContainer as Series;
                    containerNo++;
                    var aContainer = new SearchResultFolder(new List <BaseItem>())
                    {
                        Id                 = ("container" + recentItemOption + this.Name + this.Path + containerNo).GetMD5(),
                        Name               = currentContainer.Name + " (" + container.Count() + " Items)",
                        Overview           = currentContainer.Overview,
                        MpaaRating         = currentContainer.MpaaRating,
                        Genres             = currentContainer.Genres,
                        ImdbRating         = currentContainer.ImdbRating,
                        Studios            = currentContainer.Studios,
                        PrimaryImagePath   = currentContainer.PrimaryImagePath,
                        SecondaryImagePath = currentContainer.SecondaryImagePath,
                        BannerImagePath    = currentContainer.BannerImagePath,
                        BackdropImagePaths = currentContainer.BackdropImagePaths,
                        TVDBSeriesId       = currentSeries != null ? currentSeries.TVDBSeriesId : null,
                        LogoImagePath      = currentSeries != null ? currentSeries.LogoImagePath : null,
                        ArtImagePath       = currentSeries != null ? currentSeries.ArtImagePath : null,
                        ThumbnailImagePath = currentSeries != null ? currentSeries.ThumbnailImagePath : null,
                        DisplayMediaType   = currentContainer.DisplayMediaType,
                        DateCreated        = container.First().DateCreated,
                        Parent             = this
                    };
                    if (containerObj is Series)
                    {
                        //always roll into seasons
                        var seasons = from episode in container
                                      group episode by(episode as Episode).Season.Id;

                        foreach (var season in seasons)
                        {
                            var currentSeason = ((Episode)season.First()).Season;
                            containerNo++;
                            var aSeason = new SearchResultFolder(season.ToList())
                            {
                                Id                 = ("season" + recentItemOption + this.Name + this.Path + containerNo).GetMD5(),
                                Name               = currentSeason.Name + " (" + season.Count() + " Items)",
                                Overview           = currentSeason.Overview,
                                MpaaRating         = currentSeason.MpaaRating,
                                Genres             = currentSeason.Genres,
                                ImdbRating         = currentSeason.ImdbRating,
                                Studios            = currentSeason.Studios,
                                PrimaryImagePath   = currentSeason.PrimaryImagePath,
                                SecondaryImagePath = currentSeason.SecondaryImagePath,
                                BannerImagePath    = currentSeason.BannerImagePath,
                                BackdropImagePaths = currentSeason.BackdropImagePaths,
                                TVDBSeriesId       = currentSeason.TVDBSeriesId,
                                LogoImagePath      = currentSeason.LogoImagePath,
                                ArtImagePath       = currentSeason.ArtImagePath,
                                ThumbnailImagePath = currentSeason.ThumbnailImagePath,
                                DisplayMediaType   = currentSeason.DisplayMediaType,
                                DateCreated        = season.First().DateCreated,
                                Parent             = currentSeason.Id == aContainer.Id ? this : aContainer
                            };

                            aContainer.AddChild(aSeason);
                        }
                    }
                    else
                    {
                        //not series so just add all children to container
                        aContainer.AddChildren(container.ToList());
                    }

                    //and container to children
                    folderChildren.Add(aContainer);
                }
            }
            //finally add all the items that don't go in containers
            folderChildren.AddRange(items.Where(i => (!(i is IGroupInIndex))));

            //and create our quicklist folder
            return(new IndexFolder(folderChildren)
            {
                Id = QuickListID(recentItemOption), Name = "User:" + Kernel.CurrentUser.Name, DateCreated = DateTime.UtcNow, Parent = this
            });
        }