public Contract_AniDB_Anime_DefaultImage GetFanartContractNoBlanks(Contract_AniDBAnime anime)
        {
            if (anime == null)
            {
                throw new ArgumentNullException(nameof(anime));
            }

            if (Fanart != null)
            {
                return(Fanart.ToContract());
            }

            List <Contract_AniDB_Anime_DefaultImage> fanarts = anime.Fanarts;

            if (fanarts == null || fanarts.Count == 0)
            {
                return(null);
            }
            if (fanarts.Count == 1)
            {
                return(fanarts[0]);
            }

            Random random = new Random();

            return(fanarts[random.Next(0, fanarts.Count - 1)]);
        }
Example #2
0
        internal static Directory FromGroup(Contract_AnimeGroup grp, Contract_AnimeSeries ser, int userid)
        {
            Directory p = new Directory();

            p.Key = ServerUrl(int.Parse(ServerSettings.JMMServerPort),
                              MainWindow.PathAddressKodi + "/GetMetadata/" + userid + "/" + (int)JMMType.Group + "/" +
                              grp.AnimeGroupID.ToString());
            p.Title   = grp.GroupName;
            p.Summary = grp.Description;
            p.Type    = "show";
            p.AirDate = grp.Stat_AirDate_Min.HasValue ? grp.Stat_AirDate_Min.Value : DateTime.MinValue;
            Contract_AniDBAnime anime = ser.AniDBAnime;

            if (anime != null)
            {
                Contract_AniDB_Anime_DefaultImage poster = anime.DefaultImagePoster;
                Contract_AniDB_Anime_DefaultImage fanart = anime.DefaultImageFanart;
                p.Thumb = poster != null?poster.GenPoster() : ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetSupportImage/plex_404V.png");

                if (fanart != null)
                {
                    p.Art = fanart.GenArt();
                }
            }
            p.LeafCount       = (grp.UnwatchedEpisodeCount + grp.WatchedEpisodeCount).ToString();
            p.ViewedLeafCount = grp.WatchedEpisodeCount.ToString();
            return(p);
        }
Example #3
0
        private static void FillSerie(Video p, AnimeSeries aser, Dictionary <AnimeEpisode, Contract_AnimeEpisode> eps,
                                      AniDB_Anime anidb, Contract_AnimeSeries ser, int userid)
        {
            using (ISession session = JMMService.SessionFactory.OpenSession())
            {
                Contract_AniDBAnime anime = ser.AniDBAnime.AniDBAnime;
                p.Id        = ser.AnimeSeriesID.ToString();
                p.AnimeType = JMMContracts.PlexAndKodi.AnimeTypes.AnimeSerie.ToString();
                if (ser.AniDBAnime.AniDBAnime.Restricted > 0)
                {
                    p.ContentRating = "R";
                }
                p.Title   = aser.GetSeriesName(session);
                p.Summary = SummaryFromAnimeContract(ser);
                p.Type    = "show";
                p.AirDate = DateTime.MinValue;
                TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
                if (anime.AllTags.Count > 0)
                {
                    p.Genres = new List <Tag>();
                    anime.AllTags.ToList().ForEach(a => p.Genres.Add(new Tag {
                        Value = textInfo.ToTitleCase(a.Trim())
                    }));
                }
                //p.OriginalTitle
                if (anime.AirDate.HasValue)
                {
                    p.AirDate = anime.AirDate.Value;
                    p.OriginallyAvailableAt = anime.AirDate.Value.ToPlexDate();
                    p.Year = anime.AirDate.Value.Year.ToString();
                }
                p.LeafCount = anime.EpisodeCount.ToString();
                //p.ChildCount = p.LeafCount;
                p.ViewedLeafCount = ser.WatchedEpisodeCount.ToString();
                p.Rating          = (anime.Rating / 100F).ToString(CultureInfo.InvariantCulture);
                List <Contract_CrossRef_AniDB_TvDBV2> ls = ser.CrossRefAniDBTvDBV2;
                if (ls != null && ls.Count > 0)
                {
                    foreach (Contract_CrossRef_AniDB_TvDBV2 c in ls)
                    {
                        if (c.TvDBSeasonNumber != 0)
                        {
                            p.Season = c.TvDBSeasonNumber.ToString();
                            p.Index  = p.Season;
                        }
                    }
                }
                p.Thumb = p.ParentThumb = anime.DefaultImagePoster.GenPoster();
                p.Art   = anime?.DefaultImageFanart?.GenArt();
                if (eps != null)
                {
                    List <enEpisodeType> types = eps.Keys.Select(a => a.EpisodeTypeEnum).Distinct().ToList();
                    p.ChildCount = types.Count > 1 ? types.Count.ToString() : eps.Keys.Count.ToString();
                }
                p.Roles = new List <RoleTag>();

                //TODO Character implementation is limited in JMM, One Character, could have more than one Seiyuu
                if (anidb.Contract?.AniDBAnime?.Characters != null)
                {
                    foreach (Contract_AniDB_Character c in anidb.Contract.AniDBAnime.Characters)
                    {
                        string ch = c?.CharName;
                        Contract_AniDB_Seiyuu seiyuu = c?.Seiyuu;
                        if (!string.IsNullOrEmpty(ch))
                        {
                            RoleTag t = new RoleTag();
                            t.Value = seiyuu?.SeiyuuName;
                            if (seiyuu != null)
                            {
                                t.TagPicture = Helper.ConstructSeiyuuImage(seiyuu.AniDB_SeiyuuID);
                            }
                            t.Role            = ch;
                            t.RoleDescription = c?.CharDescription;
                            t.RolePicture     = Helper.ConstructCharacterImage(c.CharID);
                            p.Roles.Add(t);
                        }
                    }
                }
                p.Titles = new List <AnimeTitle>();
                foreach (AniDB_Anime_Title title in anidb.GetTitles())
                {
                    p.Titles.Add(new AnimeTitle {
                        Language = title.Language, Title = title.Title, Type = title.TitleType
                    });
                }
            }
        }
Example #4
0
        public Contract_AnimeSeries ToContract(AniDB_Anime animeRec, List <CrossRef_AniDB_TvDBV2> tvDBCrossRefs, CrossRef_AniDB_Other movieDBCrossRef,
                                               AnimeSeries_User userRecord, List <TvDB_Series> tvseries, List <CrossRef_AniDB_MAL> malDBCrossRef, bool passedDefaultImages, AniDB_Anime_DefaultImage defPoster,
                                               AniDB_Anime_DefaultImage defFanart, AniDB_Anime_DefaultImage defWideBanner, List <AniDB_Anime_Title> titles, bool forceimages = false)
        {
            Contract_AnimeSeries contract = new Contract_AnimeSeries();

            contract.AniDB_ID                  = this.AniDB_ID;
            contract.AnimeGroupID              = this.AnimeGroupID;
            contract.AnimeSeriesID             = this.AnimeSeriesID;
            contract.DateTimeUpdated           = this.DateTimeUpdated;
            contract.DateTimeCreated           = this.DateTimeCreated;
            contract.DefaultAudioLanguage      = this.DefaultAudioLanguage;
            contract.DefaultSubtitleLanguage   = this.DefaultSubtitleLanguage;
            contract.LatestLocalEpisodeNumber  = this.LatestLocalEpisodeNumber;
            contract.EpisodeAddedDate          = this.EpisodeAddedDate;
            contract.MissingEpisodeCount       = this.MissingEpisodeCount;
            contract.MissingEpisodeCountGroups = this.MissingEpisodeCountGroups;
            contract.SeriesNameOverride        = this.SeriesNameOverride;



            if (userRecord == null)
            {
                contract.PlayedCount           = 0;
                contract.StoppedCount          = 0;
                contract.UnwatchedEpisodeCount = 0;
                contract.WatchedCount          = 0;
                contract.WatchedDate           = null;
                contract.WatchedEpisodeCount   = 0;
            }
            else
            {
                contract.PlayedCount           = userRecord.PlayedCount;
                contract.StoppedCount          = userRecord.StoppedCount;
                contract.UnwatchedEpisodeCount = userRecord.UnwatchedEpisodeCount;
                contract.WatchedCount          = userRecord.WatchedCount;
                contract.WatchedDate           = userRecord.WatchedDate;
                contract.WatchedEpisodeCount   = userRecord.WatchedEpisodeCount;
            }

            // get AniDB data
            contract.AniDBAnime = null;
            if (animeRec != null)
            {
                Contract_AniDBAnime animecontract = animeRec.ToContract(false, titles);

                AniDB_Anime_DefaultImage defaultPoster = null;
                if (passedDefaultImages)
                {
                    defaultPoster = defPoster;
                }
                else
                {
                    defaultPoster = animeRec.GetDefaultPoster();
                }

                if (defaultPoster == null)
                {
                    animecontract.DefaultImagePoster = null;
                }
                else
                {
                    animecontract.DefaultImagePoster = defaultPoster.ToContract();
                }

                if ((animecontract.DefaultImagePoster == null) && (forceimages))
                {
                    ImageDetails im = animeRec.GetDefaultPosterDetailsNoBlanks();
                    if (im != null)
                    {
                        animecontract.DefaultImagePoster           = new Contract_AniDB_Anime_DefaultImage();
                        animecontract.DefaultImagePoster.AnimeID   = im.ImageID;
                        animecontract.DefaultImagePoster.ImageType = (int)im.ImageType;
                    }
                }
                AniDB_Anime_DefaultImage defaultFanart = null;
                if (passedDefaultImages)
                {
                    defaultFanart = defFanart;
                }
                else
                {
                    defaultFanart = animeRec.GetDefaultFanart();
                }

                if (defaultFanart == null)
                {
                    animecontract.DefaultImageFanart = null;
                }
                else
                {
                    animecontract.DefaultImageFanart = defaultFanart.ToContract();
                }

                if ((animecontract.DefaultImagePoster == null) && (forceimages))
                {
                    ImageDetails im = animeRec.GetDefaultFanartDetailsNoBlanks();
                    if (im != null)
                    {
                        animecontract.DefaultImageFanart           = new Contract_AniDB_Anime_DefaultImage();
                        animecontract.DefaultImageFanart.AnimeID   = im.ImageID;
                        animecontract.DefaultImageFanart.ImageType = (int)im.ImageType;
                    }
                }

                AniDB_Anime_DefaultImage defaultWideBanner = null;
                if (passedDefaultImages)
                {
                    defaultWideBanner = defWideBanner;
                }
                else
                {
                    defaultWideBanner = animeRec.GetDefaultWideBanner();
                }

                if (defaultWideBanner == null)
                {
                    animecontract.DefaultImageWideBanner = null;
                }
                else
                {
                    animecontract.DefaultImageWideBanner = defaultWideBanner.ToContract();
                }

                contract.AniDBAnime = animecontract;
            }

            contract.CrossRefAniDBTvDBV2 = new List <Contract_CrossRef_AniDB_TvDBV2>();
            foreach (CrossRef_AniDB_TvDBV2 tvXref in tvDBCrossRefs)
            {
                contract.CrossRefAniDBTvDBV2.Add(tvXref.ToContract());
            }


            contract.TvDB_Series = new List <Contract_TvDB_Series>();
            foreach (TvDB_Series ser in tvseries)
            {
                contract.TvDB_Series.Add(ser.ToContract());
            }

            contract.CrossRefAniDBMovieDB = null;
            if (movieDBCrossRef != null)
            {
                contract.CrossRefAniDBMovieDB = movieDBCrossRef.ToContract();
            }

            contract.CrossRefAniDBMAL = new List <Contract_CrossRef_AniDB_MAL>();
            if (malDBCrossRef != null)
            {
                foreach (CrossRef_AniDB_MAL xref in malDBCrossRef)
                {
                    contract.CrossRefAniDBMAL.Add(xref.ToContract());
                }
            }

            return(contract);
        }
Example #5
0
        public static Directory FromSerie(Contract_AnimeSeries ser, int userid)
        {
            Directory p = new Directory();

            Contract_AniDBAnime anime = ser.AniDBAnime;

            p.Key = ServerUrl(int.Parse(ServerSettings.JMMServerPort),
                              MainWindow.PathAddressKodi + "/GetMetadata/" + userid + "/" + (int)JMMType.Serie + "/" +
                              ser.AnimeSeriesID);

            if (ser.AniDBAnime.Restricted > 0)
            {
                p.ContentRating = "R";
            }
            p.Title   = anime.MainTitle;
            p.Summary = anime.Description;
            if (string.IsNullOrEmpty(p.Summary) && ser.MovieDB_Movie != null)
            {
                p.Summary = ser.MovieDB_Movie.Overview;
            }
            if (string.IsNullOrEmpty(p.Summary) && ser.TvDB_Series != null && ser.TvDB_Series.Count > 0)
            {
                p.Summary = ser.TvDB_Series[0].Overview;
            }
            p.Type    = "season";
            p.AirDate = DateTime.MinValue;

            if (!string.IsNullOrEmpty(anime.AllCategories))
            {
                p.Genres = new List <Tag> {
                    new Tag {
                        Value = anime.AllCategories.Replace("|", ",")
                    }
                };
            }
            if (!string.IsNullOrEmpty(anime.AllTags))
            {
                p.Tags = new List <Tag> {
                    new Tag {
                        Value = anime.AllTags.Replace("|", ",")
                    }
                };
            }
            p.OriginalTitle = anime.AllTitles;
            if (anime.AirDate.HasValue)
            {
                p.AirDate = anime.AirDate.Value;
                p.OriginallyAvailableAt = anime.AirDate.Value.Year.ToString("0000") + "-" + anime.AirDate.Value.Month.ToString("00") + "-" +
                                          anime.AirDate.Value.Day.ToString("00");
                p.Year = anime.AirDate.Value.Year.ToString();
            }
            p.LeafCount       = anime.EpisodeCount.ToString();
            p.ViewedLeafCount = ser.WatchedEpisodeCount.ToString();
            p.Rating          = (anime.Rating / 100F).ToString(CultureInfo.InvariantCulture);
            p.Votes           = anime.VoteCount.ToString();
            List <Contract_CrossRef_AniDB_TvDBV2> ls = ser.CrossRefAniDBTvDBV2;

            if (ls.Count > 0)
            {
                foreach (Contract_CrossRef_AniDB_TvDBV2 c in ls)
                {
                    if (c.TvDBSeasonNumber != 0)
                    {
                        p.Season = c.TvDBSeasonNumber.ToString();
                    }
                }
            }
            Contract_AniDB_Anime_DefaultImage poster = anime.DefaultImagePoster;
            Contract_AniDB_Anime_DefaultImage fanart = anime.DefaultImageFanart;

            p.Thumb = poster != null?poster.GenPoster() : ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetSupportImage/plex_404V.png");

            if (fanart != null)
            {
                p.Art = fanart.GenArt();
            }


            /*
             *  List<AniDB_Anime_Character> chars = anime.GetAnimeCharacters(session);
             *
             *  List<string> sey=new List<string>();
             *
             *  if (chars != null)
             *  {
             *      foreach (AniDB_Anime_Character c in chars)
             *      {
             *          AniDB_Character cha = c.GetCharacter(session);
             *          if (cha != null)
             *          {
             *              AniDB_Seiyuu seiyuu = cha.GetSeiyuu(session);
             *              if (seiyuu!=null)
             *                  sey.Add(seiyuu.SeiyuuName);
             *          }
             *      }
             *  }
             *  if (sey.Count > 0)
             *      p.Roles = sey.Select(a => new Tag() {Value = a}).ToList();
             */

            //community support

            //CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository();
            //List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(anime.AnimeID);
            //if (Trakt != null)
            //{
            //    if (Trakt.Count > 0)
            //    {
            //        p.Trakt = Trakt[0].TraktID;
            //    }
            //}

            //CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository();
            //List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(anime.AnimeID);
            //if (TvDB != null)
            //{
            //    if (TvDB.Count > 0)
            //    {
            //        p.TvDB = TvDB[0].TvDBID.ToString();
            //    }
            //}

            //community support END


            return(p);
        }
Example #6
0
        public static void FillSerie(Video p, AnimeSeries aser, AniDB_Anime anidb, Contract_AnimeSeries ser, int userid)
        {
            using (ISession session = JMMService.SessionFactory.OpenSession())
            {
                Contract_AniDBAnime anime = ser.AniDBAnime;
                p.Key = ConstructSerieIdUrl(userid, ser.AnimeSeriesID.ToString());
                if (ser.AniDBAnime.Restricted > 0)
                {
                    p.ContentRating = "R";
                }
                p.Title   = aser.GetSeriesName(session);
                p.Summary = SummaryFromAnimeContract(ser);
                p.Type    = "show";
                p.AirDate = DateTime.MinValue;
                TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
                if (!string.IsNullOrEmpty(anime.AllTags))
                {
                    p.Genres = new List <Tag>();
                    anime.AllTags.Split('|').ToList().ForEach(a => p.Genres.Add(new Tag {
                        Value = textInfo.ToTitleCase(a.Trim())
                    }));
                }
                //p.OriginalTitle
                if (anime.AirDate.HasValue)
                {
                    p.AirDate = anime.AirDate.Value;
                    p.OriginallyAvailableAt = anime.AirDate.Value.ToPlexDate();
                    p.Year = anime.AirDate.Value.Year.ToString();
                }
                p.LeafCount = anime.EpisodeCount.ToString();
                //p.ChildCount = p.LeafCount;
                p.ViewedLeafCount = ser.WatchedEpisodeCount.ToString();
                p.Rating          = (anime.Rating / 100F).ToString(CultureInfo.InvariantCulture);
                List <Contract_CrossRef_AniDB_TvDBV2> ls = ser.CrossRefAniDBTvDBV2;
                if (ls != null && ls.Count > 0)
                {
                    foreach (Contract_CrossRef_AniDB_TvDBV2 c in ls)
                    {
                        if (c.TvDBSeasonNumber != 0)
                        {
                            p.Season = c.TvDBSeasonNumber.ToString();
                            p.Index  = p.Season;
                        }
                    }
                }
                p.Thumb = anime.DefaultImagePoster.GenPoster();
                p.Art   = anime.DefaultImageFanart.GenArt();
                List <AniDB_Anime_Character> chars = anidb.GetAnimeCharacters(session);

                p.Roles = new List <Tag>();
                if (chars != null)
                {
                    foreach (AniDB_Anime_Character c in chars)
                    {
                        AniDB_Character cha    = c.GetCharacter(session);
                        AniDB_Seiyuu    seiyuu = cha?.GetSeiyuu(session);
                        if (seiyuu != null)
                        {
                            p.Roles.Add(new Tag
                            {
                                Value = seiyuu.SeiyuuName,
                                Role  = cha.CharName
                            });
                        }
                    }
                }
            }
        }