Example #1
0
        public static Video MayReplaceVideo(Video v1, AnimeSeries ser, Contract_AnimeSeries cserie, AniDB_Anime anime, JMMType type, int userid, bool all = true)
        {
            int epcount = all ? ser.GetAnimeEpisodesCountWithVideoLocal() :  ser.GetAnimeEpisodesNormalCountWithVideoLocal();

            if ((epcount == 1) && (anime.AnimeTypeEnum == enAnimeType.OVA || anime.AnimeTypeEnum == enAnimeType.Movie))
            {
                List <AnimeEpisode> episodes = ser.GetAnimeEpisodes();
                List <VideoLocal>   l        = episodes[0].GetVideoLocals();
                if (l.Count > 0)
                {
                    Video v2 = new Video();
                    try
                    {
                        if (PopulateVideo(v2, l[0], episodes[0], ser, cserie, anime, v1, JMMType.File, userid))
                        {
                            v2.Thumb = anime.GetDefaultPosterDetailsNoBlanks().GenPoster();
                            return(v2);
                        }
                    }
                    catch (Exception e)
                    {
                        //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
                    }
                }
            }
            return(v1);
        }
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
        public void UpdateGroupFilters()
        {
            List <GroupFilter> gfs       = RepoFactory.GroupFilter.GetAll();
            List <AnimeGroup>  allGrps   = RepoFactory.AnimeGroup.GetAllTopLevelGroups(); // No Need of subgroups
            List <AnimeSeries> allSeries = RepoFactory.AnimeSeries.GetAll();

            foreach (GroupFilter gf in gfs)
            {
                bool change = false;
                foreach (AnimeGroup grp in allGrps)
                {
                    Contract_AnimeGroup cgrp = grp.GetUserContract(this.JMMUserID);
                    change |= gf.CalculateGroupFilterGroups(cgrp, Contract, JMMUserID);
                }
                foreach (AnimeSeries ser in allSeries)
                {
                    Contract_AnimeSeries cser = ser.GetUserContract(this.JMMUserID);
                    change |= gf.CalculateGroupFilterSeries(cser, Contract, JMMUserID);
                }
                if (change)
                {
                    RepoFactory.GroupFilter.Save(gf);
                }
            }
        }
Example #4
0
        public static Video MayReplaceVideo(Video v1, AnimeSeries ser, Contract_AnimeSeries cserie, int userid,
                                            bool all = true, Video serie = null)
        {
            int epcount = all
                ? ser.GetAnimeEpisodesCountWithVideoLocal()
                : ser.GetAnimeEpisodesNormalCountWithVideoLocal();

            if ((epcount == 1) &&
                (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.OVA ||
                 cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.Movie))
            {
                try
                {
                    List <AnimeEpisode> episodes = ser.GetAnimeEpisodes();
                    Video v2 = episodes[0].PlexContract;
                    if (v2.IsMovie)
                    {
                        AddInformationFromMasterSeries(v2, cserie, serie ?? v1);
                        v2.Thumb = (serie ?? v1).Thumb;
                        return(v2);
                    }
                }
                catch (Exception e)
                {
                    //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
                }
            }
            return(v1);
        }
Example #5
0
        public static Video VideoFromAnimeGroup(ISession session, AnimeGroup grp, int userid, List <AnimeSeries> allSeries)
        {
            Contract_AnimeGroup cgrp = grp.ToContract(grp.GetUserRecord(session, userid));

            if (StatsCache.Instance.StatGroupSeriesCount[grp.AnimeGroupID] == 1)
            {
                AnimeSeries ser = JMMServiceImplementation.GetSeriesForGroup(grp.AnimeGroupID, allSeries);
                if (ser != null)
                {
                    Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(session, userid), true);
                    Video v = FromSerieWithPossibleReplacement(cserie, ser, userid);
                    v.AirDate = ser.AirDate.HasValue ? ser.AirDate.Value : DateTime.MinValue;
                    v.Group   = cgrp;
                    return(v);
                }
            }
            else
            {
                AnimeSeries ser = grp.DefaultAnimeSeriesID.HasValue ? allSeries.FirstOrDefault(a => a.AnimeSeriesID == grp.DefaultAnimeSeriesID.Value) : JMMServiceImplementation.GetSeriesForGroup(grp.AnimeGroupID, allSeries);
                if (ser != null)
                {
                    Video v = FromGroup(cgrp, ser.ToContract(ser.GetUserRecord(session, userid), true), userid);
                    v.Group   = cgrp;
                    v.AirDate = cgrp.Stat_AirDate_Min.HasValue ? cgrp.Stat_AirDate_Min.Value : DateTime.MinValue;
                    return(v);
                }
            }
            return(null);
        }
Example #6
0
        public static Video FromSerieWithPossibleReplacement(Contract_AnimeSeries cserie, AnimeSeries ser, int userid)
        {
            Video v = KodiHelper.FromSerie(cserie, userid);

            //if (ser.GetAnimeNumberOfEpisodeTypes() > 1)
            v.Type = "show";
            //else if ((cserie.AniDBAnime.AnimeType == (int)enAnimeType.Movie) || (cserie.AniDBAnime.AnimeType == (int)enAnimeType.OVA))
            //{
            //    v = MayReplaceVideo((Directory)v, ser, ser.GetAnime(), JMMType.File, userid);
            //}
            return(v);
        }
Example #7
0
 private void UpdatePlexKodiContracts(AnimeSeries_User ugrp)
 {
     using (var session = DatabaseFactory.SessionFactory.OpenSession())
     {
         AnimeSeries          ser = RepoFactory.AnimeSeries.GetByID(ugrp.AnimeSeriesID);
         Contract_AnimeSeries con = ser?.GetUserContract(ugrp.JMMUserID);
         if (con == null)
         {
             return;
         }
         ugrp.PlexContract = Helper.GenerateFromSeries(con, ser, ser.GetAnime(), ugrp.JMMUserID);
     }
 }
Example #8
0
        private static string SummaryFromAnimeContract(Contract_AnimeSeries c)
        {
            string s = c.AniDBAnime.AniDBAnime.Description;

            if (string.IsNullOrEmpty(s) && c.MovieDB_Movie != null)
            {
                s = c.MovieDB_Movie.Overview;
            }
            if (string.IsNullOrEmpty(s) && c.TvDB_Series != null && c.TvDB_Series.Count > 0)
            {
                s = c.TvDB_Series[0].Overview;
            }
            return(s);
        }
        public System.IO.Stream GetItemsFromGroup(int userid, string GroupId)
        {
            KodiObject ret = new KodiObject(KodiHelper.NewMediaContainer("Groups", true));

            if (!ret.Init())
            {
                return(new MemoryStream());
            }
            int groupID;

            int.TryParse(GroupId, out groupID);
            List <Video> retGroups = new List <Video>();

            if (groupID == -1)
            {
                return(new MemoryStream());
            }

            using (var session = JMMService.SessionFactory.OpenSession())
            {
                AnimeGroupRepository repGroups = new AnimeGroupRepository();
                AnimeGroup           grp       = repGroups.GetByID(groupID);
                if (grp != null)
                {
                    Contract_AnimeGroup basegrp = grp.ToContract(grp.GetUserRecord(session, userid));
                    ret.MediaContainer.Title1 = ret.MediaContainer.Title2 = basegrp.GroupName;
                    List <AnimeSeries> sers2 = grp.GetSeries(session);
                    ret.MediaContainer.Art = KodiHelper.GetRandomFanartFromSeries(sers2, session);
                    foreach (AnimeGroup grpChild in grp.GetChildGroups())
                    {
                        Video v = StatsCache.Instance.StatKodiGroupsCache[userid][grpChild.AnimeGroupID];
                        v.Type = "show";
                        if (v != null)
                        {
                            retGroups.Add(v.Clone());
                        }
                    }
                    foreach (AnimeSeries ser in grp.GetSeries())
                    {
                        Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(session, userid), true);
                        Video v = KodiHelper.FromSerieWithPossibleReplacement(cserie, ser, userid);
                        v.AirDate = ser.AirDate.HasValue ? ser.AirDate.Value : DateTime.MinValue;
                        v.Group   = basegrp;
                        retGroups.Add(v);
                    }
                }
                ret.Childrens = retGroups.OrderBy(a => a.AirDate).ToList();
                return(ret.GetStream());
            }
        }
 private void UpdatePlexKodiContracts(AnimeSeries_User ugrp)
 {
     using (var session = JMMService.SessionFactory.OpenSession())
     {
         AnimeSeriesRepository repo = new AnimeSeriesRepository();
         AnimeSeries           ser  = repo.GetByID(ugrp.AnimeSeriesID);
         Contract_AnimeSeries  con  = ser?.GetUserContract(ugrp.JMMUserID);
         if (con == null)
         {
             return;
         }
         ugrp.PlexContract = Helper.GenerateFromSeries(con, ser, ser.GetAnime(session), ugrp.JMMUserID);
     }
 }
Example #11
0
        internal static Video FromGroup(Contract_AnimeGroup grp, Contract_AnimeSeries ser, int userid)
        {
            Directory p = new Directory();

            p.Key             = ConstructGroupIdUrl(userid, grp.AnimeGroupID);
            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;
            p.Thumb           = ser.AniDBAnime?.DefaultImagePoster.GenPoster();
            p.Art             = ser.AniDBAnime?.DefaultImageFanart.GenArt();
            p.LeafCount       = (grp.UnwatchedEpisodeCount + grp.WatchedEpisodeCount).ToString();
            p.ViewedLeafCount = grp.WatchedEpisodeCount.ToString();
            return(p);
        }
Example #12
0
        public static Video FromSerieWithPossibleReplacement(Contract_AnimeSeries cserie, AnimeSeries ser, AniDB_Anime anidb, int userid)
        {
            Video v = new Directory();

            FillSerie(v, ser, anidb, cserie, userid);
            if (ser.GetAnimeNumberOfEpisodeTypes() > 1)
            {
                v.Type = "show";
            }
            else if ((cserie.AniDBAnime.AnimeType == (int)enAnimeType.Movie) || (cserie.AniDBAnime.AnimeType == (int)enAnimeType.OVA))
            {
                v = MayReplaceVideo(v, ser, cserie, ser.GetAnime(), JMMType.File, userid);
            }
            return(v);
        }
        public System.IO.Stream GetItemsFromGroup(int userid, string GroupId, HistoryInfo info)
        {
            PlexObject ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show, info, false));

            if (!ret.Init())
            {
                return(new MemoryStream());
            }
            int groupID;

            int.TryParse(GroupId, out groupID);
            List <Video> retGroups = new List <Video>();

            if (groupID == -1)
            {
                return(new MemoryStream());
            }

            using (var session = JMMService.SessionFactory.OpenSession())
            {
                AnimeGroupRepository repGroups = new AnimeGroupRepository();
                AnimeGroup           grp       = repGroups.GetByID(groupID);
                if (grp != null)
                {
                    Contract_AnimeGroup basegrp = grp.ToContract(grp.GetUserRecord(session, userid));
                    List <AnimeSeries>  sers2   = grp.GetSeries(session);
                    foreach (AnimeGroup grpChild in grp.GetChildGroups())
                    {
                        Video v = StatsCache.Instance.StatPlexGroupsCache[userid][grpChild.AnimeGroupID];
                        if (v != null)
                        {
                            retGroups.Add(v.Clone(), info);
                        }
                    }
                    foreach (AnimeSeries ser in grp.GetSeries())
                    {
                        Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(session, userid), true);
                        Video v = PlexHelper.FromSerieWithPossibleReplacement(cserie, ser, ser.GetAnime(), userid);
                        v.AirDate = ser.AirDate.HasValue ? ser.AirDate.Value : DateTime.MinValue;
                        v.Group   = basegrp;
                        retGroups.Add(v, info);
                    }
                }
                ret.Childrens = PlexHelper.ConvertToDirectoryIfNotUnique(retGroups.OrderBy(a => a.AirDate).ToList());
                return(ret.GetStream());
            }
        }
Example #14
0
        public static bool PopulateVideo(Video l, VideoLocal v, JMMType type, int userid)
        {
            PopulateVideoEpisodeFromVideoLocal(l, v, type);
            List <AnimeEpisode> eps = v.GetAnimeEpisodes();

            if (eps.Count > 0)
            {
                PopulateVideoEpisodeFromAnimeEpisode(l, eps[0], userid);
                AnimeSeries series = eps[0].GetAnimeSeries();
                if (series != null)
                {
                    Contract_AnimeSeries cseries = series.ToContract(series.GetUserRecord(userid), true);
                    Video       nv  = FromSerie(cseries, userid);
                    AniDB_Anime ani = series.GetAnime();
                    return(PopulateVideoEpisodeFromAnime(l, ani, nv));
                }
            }
            return(false);
        }
Example #15
0
        public static Video GenerateFromSeries(Contract_AnimeSeries cserie, AnimeSeries ser, AniDB_Anime anidb,
                                               int userid)
        {
            Video v = new Directory();
            Dictionary <AnimeEpisode, Contract_AnimeEpisode> episodes = ser.GetAnimeEpisodes()
                                                                        .ToDictionary(a => a, a => a.GetUserContract(userid));

            episodes = episodes.Where(a => a.Value == null || a.Value.LocalFileCount > 0)
                       .ToDictionary(a => a.Key, a => a.Value);
            FillSerie(v, ser, episodes, anidb, cserie, userid);
            if (ser.GetAnimeNumberOfEpisodeTypes() > 1)
            {
                v.Type = "show";
            }
            else if ((cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.Movie) ||
                     (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.OVA))
            {
                v = MayReplaceVideo(v, ser, cserie, userid);
            }
            return(v);
        }
Example #16
0
        private static Video FromGroup(Contract_AnimeGroup grp, Contract_AnimeSeries ser, int userid, int subgrpcnt)
        {
            Directory p = new Directory();

            p.Id        = grp.AnimeGroupID.ToString();
            p.AnimeType = JMMContracts.PlexAndKodi.AnimeTypes.AnimeGroup.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;
            if (ser != null)
            {
                p.Thumb = ser.AniDBAnime?.AniDBAnime.DefaultImagePoster.GenPoster();
                p.Art   = ser.AniDBAnime?.AniDBAnime.DefaultImageFanart.GenArt();
            }
            p.LeafCount       = (grp.UnwatchedEpisodeCount + grp.WatchedEpisodeCount).ToString();
            p.ViewedLeafCount = grp.WatchedEpisodeCount.ToString();
            p.ChildCount      = (grp.Stat_SeriesCount + subgrpcnt).ToString();
            if ((grp.UnwatchedEpisodeCount == 0) && grp.WatchedDate.HasValue)
            {
                p.LastViewedAt = grp.WatchedDate.Value.ToUnixTime();
            }
            return(p);
        }
        public System.IO.Stream Search(string UserId, string limit, string query, bool searchTag)
        {
            KodiObject ret = new KodiObject(KodiHelper.NewMediaContainer("Search", false));

            ret.MediaContainer.Title2 = "Search Results for '" + query + "'...";
            AniDB_AnimeRepository repAnime  = new AniDB_AnimeRepository();
            AnimeSeriesRepository repSeries = new AnimeSeriesRepository();

            int lim;

            if (!int.TryParse(limit, out lim))
            {
                lim = 100;
            }
            JMMUser user = KodiHelper.GetUser(UserId);

            if (user == null)
            {
                return(new MemoryStream());
            }
            List <Video>       ls  = new List <Video>();
            int                cnt = 0;
            List <AniDB_Anime> animes;

            if (searchTag)
            {
                animes = repAnime.SearchByTag(query);
            }
            else
            {
                animes = repAnime.SearchByName(query);
            }
            foreach (AniDB_Anime anidb_anime in animes)
            {
                if (!user.AllowedAnime(anidb_anime))
                {
                    continue;
                }
                AnimeSeries ser = repSeries.GetByAnimeID(anidb_anime.AnimeID);
                if (ser != null)
                {
                    Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(user.JMMUserID), true);
                    Video v = KodiHelper.FromSerieWithPossibleReplacement(cserie, ser, user.JMMUserID);

                    //proper naming
                    v.OriginalTitle = "";
                    foreach (AniDB_Anime_Title title in anidb_anime.GetTitles())
                    {
                        if (title.TitleType == "official" || title.TitleType == "main")
                        {
                            v.OriginalTitle += "{" + title.TitleType + ":" + title.Language + "}" + title.Title + "|";
                        }
                    }
                    v.OriginalTitle = v.OriginalTitle.Substring(0, v.OriginalTitle.Length - 1);
                    //proper naming end

                    //experiment
                    Characters c = new Characters();
                    c.CharactersList = new List <Character>();
                    c.CharactersList = GetCharactersFromAniDB(anidb_anime);
                    v.CharactersList = new List <Characters>();
                    v.CharactersList.Add(c);
                    //experiment END

                    switch (anidb_anime.AnimeTypeEnum)
                    {
                    case enAnimeType.Movie:
                        v.SourceTitle = "Anime Movies";
                        break;

                    case enAnimeType.OVA:
                        v.SourceTitle = "Anime Ovas";
                        break;

                    case enAnimeType.Other:
                        v.SourceTitle = "Anime Others";
                        break;

                    case enAnimeType.TVSeries:
                        v.SourceTitle = "Anime Series";
                        break;

                    case enAnimeType.TVSpecial:
                        v.SourceTitle = "Anime Specials";
                        break;

                    case enAnimeType.Web:
                        v.SourceTitle = "Anime Web Clips";
                        break;
                    }

                    ls.Add(v);
                    cnt++;
                    if (cnt == lim)
                    {
                        break;
                    }
                }
            }
            ret.MediaContainer.Childrens = ls;
            return(ret.GetStream());
        }
Example #18
0
        public static Video GenerateFromAnimeGroup(ISession session, AnimeGroup grp, int userid,
                                                   List <AnimeSeries> allSeries)
        {
            Contract_AnimeGroup cgrp = grp.GetUserContract(userid);
            int subgrpcnt            = grp.GetAllChildGroups().Count;

            if ((cgrp.Stat_SeriesCount == 1) && (subgrpcnt == 0))
            {
                AnimeSeries ser = JMMServiceImplementation.GetSeriesForGroup(grp.AnimeGroupID, allSeries);
                if (ser != null)
                {
                    Contract_AnimeSeries cserie = ser.GetUserContract(userid);
                    if (cserie != null)
                    {
                        Video v = GenerateFromSeries(cserie, ser, ser.GetAnime(session), userid);
                        v.AirDate   = ser.AirDate;
                        v.UpdatedAt = ser.LatestEpisodeAirDate.HasValue
                            ? ser.LatestEpisodeAirDate.Value.ToUnixTime()
                            : null;
                        v.Group = cgrp;
                        return(v);
                    }
                }
            }
            else
            {
                AnimeSeries ser = grp.DefaultAnimeSeriesID.HasValue
                    ? allSeries.FirstOrDefault(a => a.AnimeSeriesID == grp.DefaultAnimeSeriesID.Value)
                    : allSeries.Find(a => a.AirDate != DateTime.MinValue);
                if ((ser == null) && (allSeries != null && allSeries.Count > 0))
                {
                    ser = allSeries[0];
                }
                Contract_AnimeSeries cserie = ser?.GetUserContract(userid);
                Video v = FromGroup(cgrp, cserie, userid, subgrpcnt);
                v.Group     = cgrp;
                v.AirDate   = cgrp.Stat_AirDate_Min ?? DateTime.MinValue;
                v.UpdatedAt = cgrp.LatestEpisodeAirDate?.ToUnixTime();
                v.Rating    = "" + Math.Round((grp.AniDBRating / 100), 1);
                List <Tag> newTags = new List <Tag>();
                foreach (AniDB_Tag tag in grp.Tags)
                {
                    Tag      newTag   = new Tag();
                    TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
                    newTag.Value = textInfo.ToTitleCase(tag.TagName.Trim());
                    if (!newTags.Contains(newTag))
                    {
                        newTags.Add(newTag);
                    }
                }
                v.Genres = newTags;
                if (ser != null)
                {
                    List <AnimeTitle> newTitles = new List <AnimeTitle>();
                    foreach (AniDB_Anime_Title title in ser.GetAnime(session).GetTitles())
                    {
                        AnimeTitle newTitle = new AnimeTitle();
                        newTitle.Title    = title.Title;
                        newTitle.Language = title.Language;
                        newTitle.Type     = title.TitleType;
                        newTitles.Add(newTitle);
                    }
                    v.Titles = newTitles;

                    v.Roles = new List <RoleTag>();

                    //TODO Character implementation is limited in JMM, One Character, could have more than one Seiyuu
                    if (ser.GetAnime(session).Contract?.AniDBAnime?.Characters != null)
                    {
                        foreach (Contract_AniDB_Character c in ser.GetAnime(session).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);
                                v.Roles.Add(t);
                            }
                        }
                    }
                }
                return(v);
            }
            return(null);
        }
        public System.IO.Stream GetItemsFromSerie(int userid, string SerieId, HistoryInfo info)
        {
            PlexObject    ret    = null;
            enEpisodeType?eptype = null;
            int           serieID;

            if (SerieId.Contains("_"))
            {
                int      ept;
                string[] ndata = SerieId.Split('_');
                if (!int.TryParse(ndata[0], out ept))
                {
                    return(new MemoryStream());
                }
                eptype = (enEpisodeType)ept;
                if (!int.TryParse(ndata[1], out serieID))
                {
                    return(new MemoryStream());
                }
            }
            else
            {
                if (!int.TryParse(SerieId, out serieID))
                {
                    return(new MemoryStream());
                }
            }


            using (var session = JMMService.SessionFactory.OpenSession())
            {
                if (serieID == -1)
                {
                    return(new MemoryStream());
                }
                AnimeSeriesRepository repSeries = new AnimeSeriesRepository();
                AnimeSeries           ser       = repSeries.GetByID(session, serieID);
                if (ser == null)
                {
                    return(new MemoryStream());
                }
                AniDB_Anime anime = ser.GetAnime();
                if (anime == null)
                {
                    return(new MemoryStream());
                }
                Contract_AnimeSeries cseries = ser.ToContract(ser.GetUserRecord(userid), true);
                ImageDetails         fanart  = anime.GetDefaultFanartDetailsNoBlanks(session);

                //iOS Hack, since it uses the previous thumb, as overlay image on the episodes
                bool iosHack = false;
                if (WebOperationContext.Current != null && WebOperationContext.Current.IncomingRequest.Headers.AllKeys.Contains("X-Plex-Product"))
                {
                    string kh = WebOperationContext.Current.IncomingRequest.Headers.Get("X-Plex-Product").ToUpper();
                    if (kh.Contains(" IOS"))
                    {
                        iosHack = true;
                    }
                }

                List <AnimeEpisode> episodes = ser.GetAnimeEpisodes(session).Where(a => a.GetVideoLocals(session).Count > 0).ToList();
                if (eptype.HasValue)
                {
                    ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Episode, info, true));
                    if (!ret.Init())
                    {
                        return(new MemoryStream());
                    }
                    ret.MediaContainer.LeafCount       = (cseries.WatchedEpisodeCount + cseries.UnwatchedEpisodeCount).ToString();
                    ret.MediaContainer.ViewedLeafCount = cseries.WatchedEpisodeCount.ToString();
                    episodes = episodes.Where(a => a.EpisodeTypeEnum == eptype.Value).ToList();
                }
                else
                {
                    ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show, info, true));
                    if (!ret.Init())
                    {
                        return(new MemoryStream());
                    }

                    ret.MediaContainer.LeafCount       = (cseries.WatchedEpisodeCount + cseries.UnwatchedEpisodeCount).ToString();
                    ret.MediaContainer.ViewedLeafCount = cseries.WatchedEpisodeCount.ToString();
                    List <enEpisodeType> types = episodes.Select(a => a.EpisodeTypeEnum).Distinct().ToList();
                    if (types.Count > 1)
                    {
                        List <PlexEpisodeType> eps = new List <PlexEpisodeType>();
                        foreach (enEpisodeType ee in types)
                        {
                            PlexEpisodeType k2 = new PlexEpisodeType();
                            PlexEpisodeType.EpisodeTypeTranslated(k2, ee, (AnimeTypes)anime.AnimeType, episodes.Count(a => a.EpisodeTypeEnum == ee));
                            eps.Add(k2);
                        }
                        List <SortPropOrFieldAndDirection> sortCriteria = new List <SortPropOrFieldAndDirection>();
                        sortCriteria.Add(new SortPropOrFieldAndDirection("Name", SortType.eString));
                        eps = Sorting.MultiSort(eps, sortCriteria);
                        List <Video> dirs            = new List <Video>();
                        bool         converttoseason = true;

                        foreach (PlexEpisodeType ee in  eps)
                        {
                            Video v = new Directory();
                            if (fanart != null)
                            {
                                v.Art = fanart.GenArt();
                            }
                            v.Title           = ee.Name;
                            v.LeafCount       = ee.Count.ToString();
                            v.ChildCount      = v.LeafCount;
                            v.ViewedLeafCount = "0";
                            v.Key             = PlexHelper.ConstructSerieIdUrl(userid, ee.Type + "_" + ser.AnimeSeriesID);
                            v.Thumb           = PlexHelper.ConstructSupportImageLink(ee.Image);
                            if ((ee.AnimeType == AnimeTypes.Movie) || (ee.AnimeType == AnimeTypes.OVA))
                            {
                                v = PlexHelper.MayReplaceVideo(v, ser, cseries, anime, JMMType.File, userid, false);
                            }
                            dirs.Add(v, info);
                            if (iosHack)
                            {
                                v.Thumb            = ret.MediaContainer.ParentThumb;
                                v.ParentThumb      = ret.MediaContainer.GrandparentThumb;
                                v.GrandparentThumb = ret.MediaContainer.GrandparentThumb;
                                v.ParentKey        = v.GrandparentKey;
                            }
                        }
                        ret.Childrens = dirs;
                        return(ret.GetStream());
                    }
                }
                List <Video> vids = new List <Video>();
                Video        nv   = new Video();
                PlexHelper.FillSerie(nv, ser, anime, cseries, userid);
                foreach (AnimeEpisode ep in episodes)
                {
                    Video             v      = new Video();
                    List <VideoLocal> locals = ep.GetVideoLocals(session);
                    if ((locals == null) || (locals.Count == 0))
                    {
                        continue;
                    }
                    AniDB_Episode aep = ep.AniDB_Episode;
                    if (aep == null)
                    {
                        continue;
                    }
                    VideoLocal current = locals[0];
                    try
                    {
                        PlexHelper.PopulateVideo(v, current, ep, ser, cseries, anime, nv, JMMType.File, userid);
                        vids.Add(v, info);
                        if (iosHack)
                        {
                            v.Art   = v.Thumb;
                            v.Thumb = ret.MediaContainer.ParentThumb;
                        }
                    }
                    catch (Exception e)
                    {
                        //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
                    }
                }

                List <SortPropOrFieldAndDirection> sortCriteria2 = new List <SortPropOrFieldAndDirection>();
                sortCriteria2.Add(new SortPropOrFieldAndDirection("EpNumber", SortType.eInteger));
                vids          = Sorting.MultiSort(vids, sortCriteria2);
                ret.Childrens = vids;

                return(ret.GetStream());
            }
        }
Example #20
0
        public static void AddInformationFromMasterSeries(Video v, Contract_AnimeSeries cserie, Video nv, bool omitExtraData = false)
        {
            bool ret = false;

            v.Art         = nv.Art;
            v.ParentThumb = v.GrandparentThumb = nv.Thumb;
            if (cserie.AniDBAnime.AniDBAnime.Restricted > 0)
            {
                v.ContentRating = "R";
            }
            if (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.Movie)
            {
                v.Type = "movie";
                if (v.Title.StartsWith("Complete Movie"))
                {
                    v.Title   = nv.Title;
                    v.Summary = nv.Summary;
                    v.Index   = null;
                    ret       = true;
                }
                else if (v.Title.StartsWith("Part "))
                {
                    v.Title   = nv.Title + " - " + v.Title;
                    v.Summary = nv.Summary;
                }
                v.Thumb = nv.Thumb;
            }
            else if (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.OVA)
            {
                if (v.Title == "OVA")
                {
                    v.Title   = nv.Title;
                    v.Type    = "movie";
                    v.Thumb   = nv.Thumb;
                    v.Summary = nv.Summary;
                    v.Index   = null;
                    ret       = true;
                }
            }
            if (string.IsNullOrEmpty(v.Art))
            {
                v.Art = nv.Art;
            }
            if (!omitExtraData)
            {
                if (v.Tags == null)
                {
                    v.Tags = nv.Tags;
                }
                if (v.Genres == null)
                {
                    v.Genres = nv.Genres;
                }
                if (v.Roles == null)
                {
                    v.Roles = nv.Roles;
                }
            }
            if (string.IsNullOrEmpty(v.Rating))
            {
                v.Rating = nv.Rating;
            }
            if (v.Thumb == null)
            {
                v.Thumb = v.ParentThumb;
            }
            v.IsMovie = ret;
        }
Example #21
0
 public static bool PopulateVideo(Video l, VideoLocal v, AnimeEpisode ep, AnimeSeries series, Contract_AnimeSeries cseries, AniDB_Anime ani, Video nv, JMMType type, int userid)
 {
     PopulateVideoEpisodeFromVideoLocal(l, v, type, userid);
     if (ep != null)
     {
         PopulateVideoEpisodeFromAnimeEpisode(l, ep, userid);
         if (series != null)
         {
             return(PopulateVideoEpisodeFromAnime(l, ep, series, cseries, ani, nv));
         }
     }
     return(false);
 }
        public System.IO.Stream GetItemsFromSerie(int userid, string SerieId)
        {
            KodiObject ret = new KodiObject(KodiHelper.NewMediaContainer("Series", true));

            if (!ret.Init())
            {
                return(new MemoryStream());
            }
            enEpisodeType?eptype = null;
            int           serieID;

            if (SerieId.Contains("_"))
            {
                int      ept;
                string[] ndata = SerieId.Split('_');
                if (!int.TryParse(ndata[0], out ept))
                {
                    return(new MemoryStream());
                }
                eptype = (enEpisodeType)ept;
                if (!int.TryParse(ndata[1], out serieID))
                {
                    return(new MemoryStream());
                }
            }
            else
            {
                if (!int.TryParse(SerieId, out serieID))
                {
                    return(new MemoryStream());
                }
            }

            using (var session = JMMService.SessionFactory.OpenSession())
            {
                if (serieID == -1)
                {
                    return(new MemoryStream());
                }
                AnimeSeriesRepository repSeries = new AnimeSeriesRepository();
                AnimeSeries           ser       = repSeries.GetByID(session, serieID);
                if (ser == null)
                {
                    return(new MemoryStream());
                }
                AniDB_Anime anime = ser.GetAnime();
                if (anime == null)
                {
                    return(new MemoryStream());
                }

                ImageDetails fanart = anime.GetDefaultFanartDetailsNoBlanks(session);
                if (fanart != null)
                {
                    ret.MediaContainer.Art = fanart.GenArt();
                }
                ret.MediaContainer.Title2 = ret.MediaContainer.Title1 = anime.MainTitle;
                List <AnimeEpisode> episodes = ser.GetAnimeEpisodes(session).Where(a => a.GetVideoLocals(session).Count > 0).ToList();
                if (eptype.HasValue)
                {
                    episodes = episodes.Where(a => a.EpisodeTypeEnum == eptype.Value).ToList();
                }
                else
                {
                    List <enEpisodeType> types = episodes.Select(a => a.EpisodeTypeEnum).Distinct().ToList();
                    if (types.Count > 1)
                    {
                        List <KodiEpisodeType> eps = new List <KodiEpisodeType>();
                        foreach (enEpisodeType ee in types)
                        {
                            KodiEpisodeType k2 = new KodiEpisodeType();
                            KodiEpisodeType.EpisodeTypeTranslated(k2, ee, (AnimeTypes)anime.AnimeType, episodes.Count(a => a.EpisodeTypeEnum == ee));
                            eps.Add(k2);
                        }
                        List <SortPropOrFieldAndDirection> sortCriteria = new List <SortPropOrFieldAndDirection>();
                        sortCriteria.Add(new SortPropOrFieldAndDirection("Name", SortType.eString));
                        eps = Sorting.MultiSort(eps, sortCriteria);
                        List <Video> dirs = new List <Video>();

                        bool isCharacterSetup_ = false;

                        foreach (KodiEpisodeType ee in  eps)
                        {
                            Video v = new Directory();
                            v.Title           = ee.Name;
                            v.Type            = "season";
                            v.LeafCount       = ee.Count.ToString();
                            v.ViewedLeafCount = "0";
                            v.Key             = KodiHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetMetadata/" + userid + "/" + (int)JMMType.Serie + "/" + ee.Type + "_" + ser.AnimeSeriesID);
                            v.Thumb           = KodiHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort),
                                                                     MainWindow.PathAddressKodi + "/GetSupportImage/" + ee.Image);
                            if ((ee.AnimeType == AnimeTypes.Movie) || (ee.AnimeType == AnimeTypes.OVA))
                            {
                                v = KodiHelper.MayReplaceVideo((Directory)v, ser, anime, JMMType.File, userid, false);
                            }

                            //proper naming
                            v.OriginalTitle = "";
                            foreach (AniDB_Anime_Title title in anime.GetTitles())
                            {
                                if (title.TitleType == "official" || title.TitleType == "main")
                                {
                                    v.OriginalTitle += "{" + title.TitleType + ":" + title.Language + "}" + title.Title + "|";
                                }
                            }
                            v.OriginalTitle = v.OriginalTitle.Substring(0, v.OriginalTitle.Length - 1);
                            //proper naming end

                            //experiment
                            if (!isCharacterSetup_)
                            {
                                Characters ch = new Characters();
                                ch.CharactersList = new List <Character>();
                                ch.CharactersList = GetCharactersFromAniDB(anime);
                                v.CharactersList  = new List <Characters>();
                                v.CharactersList.Add(ch);
                                isCharacterSetup_ = true;
                            }
                            //experimentEND

                            dirs.Add(v);
                        }
                        ret.Childrens = dirs;
                        return(ret.GetStream());
                    }
                }
                List <Video>         vids    = new List <Video>();
                Contract_AnimeSeries cseries = ser.ToContract(ser.GetUserRecord(userid), true);
                Video           nv           = KodiHelper.FromSerie(cseries, userid);
                KodiEpisodeType k            = new KodiEpisodeType();
                if (eptype.HasValue)
                {
                    KodiEpisodeType.EpisodeTypeTranslated(k, (enEpisodeType)eptype.Value, (AnimeTypes)anime.AnimeType,
                                                          episodes.Count);
                }

                bool isCharacterSetup = false;

                foreach (AnimeEpisode ep in episodes)
                {
                    Video             v      = new Video();
                    List <VideoLocal> locals = ep.GetVideoLocals(session);
                    if ((locals == null) || (locals.Count == 0))
                    {
                        continue;
                    }
                    AniDB_Episode aep = ep.AniDB_Episode;
                    if (aep == null)
                    {
                        continue;
                    }
                    VideoLocal current = locals[0];
                    try
                    {
                        KodiHelper.PopulateVideo(v, current, ep, ser, anime, nv, JMMType.File, userid);
                        if (eptype.HasValue)
                        {
                            v.ParentTitle = k.Name;
                        }

                        //experiment
                        if (!isCharacterSetup)
                        {
                            Characters c = new Characters();
                            c.CharactersList = new List <Character>();
                            c.CharactersList = GetCharactersFromAniDB(anime);
                            v.CharactersList = new List <Characters>();
                            v.CharactersList.Add(c);
                            isCharacterSetup = true;
                        }
                        //experimentEND

                        vids.Add(v);
                    }
                    catch (Exception e)
                    {
                        //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null)
                    }
                }

                List <SortPropOrFieldAndDirection> sortCriteria2 = new List <SortPropOrFieldAndDirection>();
                sortCriteria2.Add(new SortPropOrFieldAndDirection("EpNumber", SortType.eInteger));
                vids          = Sorting.MultiSort(vids, sortCriteria2);
                ret.Childrens = vids;

                return(ret.GetStream());
            }
        }
Example #23
0
        private static bool PopulateVideoEpisodeFromAnime(Video v, AnimeEpisode ep, AnimeSeries ser, Contract_AnimeSeries cserie, AniDB_Anime ani, Video nv)
        {
            bool ret = false;

//            v.ParentTitle = "Season 1";
//            v.GrandparentTitle = ser.GetSeriesName();
            v.ParentIndex = "1";
            v.Art         = ani.GetDefaultFanartDetailsNoBlanks().GenArt();
            if (ep.EpisodeTypeEnum != enEpisodeType.Episode)
            {
                //v.ParentTitle = ep.ToString();
                v.ParentIndex = null;
            }
            else if (cserie.CrossRefAniDBTvDBV2 != null && cserie.CrossRefAniDBTvDBV2.Count > 0)
            {
                Contract_CrossRef_AniDB_TvDBV2 c2 =
                    cserie.CrossRefAniDBTvDBV2.FirstOrDefault(
                        a =>
                        a.AniDBStartEpisodeType == ep.AniDB_Episode.EpisodeType &&
                        a.AniDBStartEpisodeNumber <= ep.AniDB_Episode.EpisodeNumber);
                if (c2 != null)
                {
                    //  v.ParentTitle = "Season " + c2.TvDBSeasonNumber;
                    if (c2.TvDBSeasonNumber > 0)
                    {
                        v.ParentIndex = c2.TvDBSeasonNumber.ToString();
                    }
                }
            }
            //v.Title1 = v.GrandparentTitle;
            //v.Title2 = v.ParentTitle;
            if (ani != null)
            {
                if (ani.Restricted > 0)
                {
                    v.ContentRating = "R";
                }
                if (ani.AnimeTypeEnum == enAnimeType.Movie)
                {
                    v.Type = "movie";
                    if (v.Title.StartsWith("Complete Movie"))
                    {
                        v.Title   = nv.Title;
                        v.Summary = nv.Summary;
                        v.Index   = null;
                        ret       = true;
                    }
                    else if (v.Title.StartsWith("Part "))
                    {
                        v.Title   = nv.Title + " - " + v.Title;
                        v.Summary = nv.Summary;
                    }
                    v.Thumb = nv.Thumb;
                }
                else if (ani.AnimeTypeEnum == enAnimeType.OVA)
                {
                    if (v.Title == "OVA")
                    {
                        v.Title   = nv.Title;
                        v.Type    = "movie";
                        v.Thumb   = nv.Thumb;
                        v.Summary = nv.Summary;
                        v.Index   = null;
                        ret       = true;
                    }
                }
                // else
                //   v.ParentTitle = nv.Title;
            }
            if (string.IsNullOrEmpty(v.Art))
            {
                v.Art = nv.Art;
            }
            if (v.Tags == null)
            {
                v.Tags = nv.Tags;
            }
            if (v.Genres == null)
            {
                v.Genres = nv.Genres;
            }
            if (v.Roles == null)
            {
                v.Roles = nv.Roles;
            }
            if (string.IsNullOrEmpty(v.Rating))
            {
                v.Rating = nv.Rating;
            }
            v.Index = ep.AniDB_Episode.EpisodeNumber.ToString();
            return(ret);
        }
Example #24
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
                            });
                        }
                    }
                }
            }
        }
Example #25
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 #26
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 #27
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);
        }
        public System.IO.Stream Search(string UserId, string limit, string query)
        {
            HistoryInfo info = new HistoryInfo {
                Key = PlexHelper.ConstructSearchUrl(UserId, limit, query), Title = "Search for '" + query + "'"
            };

            PlexObject            ret       = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show, info, true));
            AniDB_AnimeRepository repAnime  = new AniDB_AnimeRepository();
            AnimeSeriesRepository repSeries = new AnimeSeriesRepository();
            int lim;

            if (!int.TryParse(limit, out lim))
            {
                lim = 20;
            }
            JMMUser user = PlexHelper.GetUser(UserId);

            if (user == null)
            {
                return(new MemoryStream());
            }
            List <Video>       ls     = new List <Video>();
            int                cnt    = 0;
            List <AniDB_Anime> animes = repAnime.SearchByName(query);

            foreach (AniDB_Anime anidb_anime in animes)
            {
                if (!user.AllowedAnime(anidb_anime))
                {
                    continue;
                }
                AnimeSeries ser = repSeries.GetByAnimeID(anidb_anime.AnimeID);
                if (ser != null)
                {
                    Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(user.JMMUserID), true);
                    Video v = PlexHelper.FromSerieWithPossibleReplacement(cserie, ser, anidb_anime, user.JMMUserID);
                    switch (anidb_anime.AnimeTypeEnum)
                    {
                    case enAnimeType.Movie:
                        v.SourceTitle = "Anime Movies";
                        break;

                    case enAnimeType.OVA:
                        v.SourceTitle = "Anime Ovas";
                        break;

                    case enAnimeType.Other:
                        v.SourceTitle = "Anime Others";
                        break;

                    case enAnimeType.TVSeries:
                        v.SourceTitle = "Anime Series";
                        break;

                    case enAnimeType.TVSpecial:
                        v.SourceTitle = "Anime Specials";
                        break;

                    case enAnimeType.Web:
                        v.SourceTitle = "Anime Web Clips";
                        break;
                    }

                    ls.Add(v, info);
                    cnt++;
                    if (cnt == lim)
                    {
                        break;
                    }
                }
            }
            ret.MediaContainer.Childrens = PlexHelper.ConvertToDirectoryIfNotUnique(ls);
            return(ret.GetStream());
        }