Пример #1
0
        public static void Merge(this MangaObject mangaObject, IEnumerable <MangaObject> list)
        {
            if (list.Count() > 0)
            {
                // Name
                if (String.IsNullOrWhiteSpace(mangaObject.Name))
                {
                    MangaObject FoD_Obj = list.FirstOrDefault(mO => !String.IsNullOrWhiteSpace(mO.Name));
                    if (FoD_Obj != null)
                    {
                        mangaObject.Name = FoD_Obj.Name;
                    }
                }

                // Released
                if (mangaObject.Released.Equals(DateTime.MinValue))
                {
                    MangaObject FoD_Obj = list.FirstOrDefault(mO => mO.Released > DateTime.MinValue);
                    if (FoD_Obj != null)
                    {
                        mangaObject.Released = FoD_Obj.Released;
                    }
                }

                // Rating
                if (mangaObject.Rating < 0)
                {
                    MangaObject FoD_Obj = list.FirstOrDefault(mO => mO.Rating >= 0);
                    if (FoD_Obj != null)
                    {
                        mangaObject.Rating = FoD_Obj.Rating;
                    }
                }

                // Description
                if (String.IsNullOrWhiteSpace(mangaObject.Description))
                {
                    MangaObject FoD_Obj = list.FirstOrDefault(mO => !String.IsNullOrWhiteSpace(mO.Description));
                    if (FoD_Obj != null)
                    {
                        mangaObject.Description = FoD_Obj.Description;
                    }
                }

                // MangaType & PageFlowDirection
                if (mangaObject.MangaType == Enums.MangaObjectType.Unknown)
                {
                    MangaObject FoD_Obj = list.FirstOrDefault(mO => mO.MangaType != Enums.MangaObjectType.Unknown);
                    if (FoD_Obj != null)
                    {
                        mangaObject.MangaType         = FoD_Obj.MangaType;
                        mangaObject.PageFlowDirection = FoD_Obj.PageFlowDirection;
                    }
                }

                // Locations
                foreach (List <LocationObject> Locations in (from MangaObject obj in list where obj != null select obj.Locations))
                {
                    foreach (LocationObject Location in Locations)
                    {
                        if (!mangaObject.Locations.Any(o => o.ExtensionName == Location.ExtensionName))
                        {
                            mangaObject.Locations.Add(Location);
                        }
                        else
                        {
                            // Update existing location url
                            Int32 idx = mangaObject.Locations.FindIndex(o => o.ExtensionName == Location.ExtensionName);
                            mangaObject.Locations.RemoveAt(idx);
                            mangaObject.Locations.Insert(idx, Location);
                        }
                    }
                }

                // DatabaseLocations
                foreach (List <LocationObject> DatabaseLocations in (from MangaObject obj in list where obj != null select obj.DatabaseLocations))
                {
                    foreach (LocationObject DatabaseLocation in DatabaseLocations)
                    {
                        if (!mangaObject.DatabaseLocations.Any(o => o.ExtensionName == DatabaseLocation.ExtensionName))
                        {
                            mangaObject.DatabaseLocations.Add(DatabaseLocation);
                        }
                    }
                }

                // Artists
                foreach (List <String> Artists in (from MangaObject obj in list where obj != null select obj.Artists))
                {
                    foreach (String Artist in Artists)
                    {
                        if (Artist != null &&
                            !mangaObject.Artists.Any(o => o.ToLower() == Artist.ToLower()))
                        {
                            mangaObject.Artists.Add(Artist);
                        }
                    }
                }

                // Authors
                foreach (List <String> Authors in (from MangaObject obj in list where obj != null select obj.Authors))
                {
                    foreach (String Author in Authors)
                    {
                        if (Author != null &&
                            !mangaObject.Authors.Any(o => o.ToLower() == Author.ToLower()))
                        {
                            mangaObject.Authors.Add(Author);
                        }
                    }
                }

                // Covers
                foreach (List <LocationObject> Covers in (from MangaObject obj in list where obj != null select obj.CoverLocations))
                {
                    foreach (LocationObject Cover in Covers)
                    {
                        if (Cover != null &&
                            !mangaObject.CoverLocations.Any(o => Equals(o.Url, Cover.Url)))
                        {
                            mangaObject.CoverLocations.Add(Cover);
                        }
                    }
                }
                mangaObject.CoverLocations.RemoveAll(c => String.IsNullOrWhiteSpace(c.Url));

                // AlternateNames
                foreach (String Name in (from MangaObject obj in list where obj != null select obj.Name))
                {
                    if (!mangaObject.AlternateNames.Any(o => o.ToLower() == Name.ToLower()) && Name != null)
                    {
                        mangaObject.AlternateNames.Add(Name);
                    }
                }
                foreach (List <String> AlternateNames in (from MangaObject obj in list where obj != null select obj.AlternateNames))
                {
                    foreach (String AlternateName in AlternateNames)
                    {
                        if (AlternateName != null && !mangaObject.AlternateNames.Any(o => o.ToLower() == AlternateName.ToLower()))
                        {
                            mangaObject.AlternateNames.Add(AlternateName);
                        }
                    }
                }

                // Genres
                foreach (List <String> Genres in (from MangaObject obj in list where obj != null select obj.Genres))
                {
                    foreach (String Genre in Genres)
                    {
                        if (Genre != null && !mangaObject.Genres.Any(o => o.ToLower() == Genre.ToLower()))
                        {
                            mangaObject.Genres.Add(Genre);
                        }
                    }
                }

                // Chapters
                foreach (List <ChapterObject> Chapters in (from MangaObject obj in list where obj != null select obj.Chapters))
                {
                    foreach (ChapterObject Chapter in Chapters)
                    {
                        if (Chapter != null)
                        {
                            ChapterObject chapterObject = mangaObject.Chapters.FirstOrDefault(o =>
                            {
                                if (!Int32.Equals(o.Chapter, Chapter.Chapter))
                                {
                                    return(false);
                                }
                                if (!Int32.Equals(o.SubChapter, Chapter.SubChapter))
                                {
                                    return(false);
                                }
                                return(true);
                            });
                            if (ChapterObject.Equals(chapterObject, null))
                            {
                                mangaObject.Chapters.Add(Chapter);
                            }
                            else
                            {
                                chapterObject.Merge(Chapter);
                            }
                        }
                    }
                }

                mangaObject.SortChapters();
            }
        }