コード例 #1
0
 public void PopulateSeries(VM_AnimeSeries_User seriesContract)
 {
     if (seriesContract != null)
     {
         AnimeSeries = seriesContract;
     }
 }
コード例 #2
0
 public void Populate(VM_AnimeSeries_User contract)
 {
     //TODO we can get detailed in here
     AniDBAnime                = contract.AniDBAnime;
     CrossRefAniDBTvDBV2       = contract.CrossRefAniDBTvDBV2;
     TvDB_Series               = contract.TvDB_Series;
     CrossRefAniDBMovieDB      = contract.CrossRefAniDBMovieDB;
     CrossRefAniDBMAL          = contract.CrossRefAniDBMAL;
     AniDB_ID                  = contract.AniDB_ID;
     AnimeGroupID              = contract.AnimeGroupID;
     AnimeSeriesID             = contract.AnimeSeriesID;
     DateTimeUpdated           = contract.DateTimeUpdated;
     DateTimeCreated           = contract.DateTimeCreated;
     DefaultAudioLanguage      = contract.DefaultAudioLanguage;
     DefaultSubtitleLanguage   = contract.DefaultSubtitleLanguage;
     SeriesNameOverride        = contract.SeriesNameOverride;
     DefaultFolder             = contract.DefaultFolder;
     LatestLocalEpisodeNumber  = contract.LatestLocalEpisodeNumber;
     PlayedCount               = contract.PlayedCount;
     StoppedCount              = contract.StoppedCount;
     UnwatchedEpisodeCount     = contract.UnwatchedEpisodeCount;
     WatchedCount              = contract.WatchedCount;
     WatchedDate               = contract.WatchedDate;
     EpisodeAddedDate          = contract.EpisodeAddedDate;
     WatchedEpisodeCount       = contract.WatchedEpisodeCount;
     MissingEpisodeCount       = contract.MissingEpisodeCount;
     MissingEpisodeCountGroups = contract.MissingEpisodeCountGroups;
     Refresh();
 }
コード例 #3
0
 public bool EvaluateGroupFilter(VM_AnimeSeries_User ser)
 {
     if (Series == null || !Series.ContainsKey(VM_ShokoServer.Instance.CurrentUser.JMMUserID))
     {
         return(false);
     }
     if (ser.AnimeSeriesID != 0)
     {
         return(Series[VM_ShokoServer.Instance.CurrentUser.JMMUserID].Contains(ser.AnimeSeriesID));
     }
     return(false);
 }
コード例 #4
0
        public void RefreshAnime(bool forced)
        {
            if (VM_MainListHelper.Instance.AllSeriesDictionary.ContainsKey(AnimeSeriesID))
            {
                VM_AnimeSeries_User ser = VM_MainListHelper.Instance.AllSeriesDictionary[AnimeSeriesID];
                aniDB_Anime = ser.AniDBAnime.AniDBAnime;
            }

            if (forced && aniDB_Anime != null)
            {
                VM_MainListHelper.Instance.UpdateAnime(aniDB_Anime.AnimeID);
            }

            if (forced && aniDB_Anime == null)
            {
                VM_MainListHelper.Instance.UpdateAnime(AnimeSeries.AniDBAnime.AniDBAnime.AnimeID);
                if (AnimeSeries?.AniDBAnime.AniDBAnime != null)
                {
                    aniDB_Anime = AnimeSeries.AniDBAnime.AniDBAnime;
                }
            }
        }
コード例 #5
0
        public void Drop(IDropInfo dropInfo)
        {
            PlaylistItemType itemType = PlaylistItemType.AnimeSeries;
            int objIDOld = -1;

            VM_PlaylistItem pli = dropInfo.Data as VM_PlaylistItem;

            if (pli == null)
            {
                return;
            }

            if (pli.ItemType == PlaylistItemType.Episode)
            {
                VM_AnimeEpisode_User ep = (VM_AnimeEpisode_User)pli.PlaylistItem;
                itemType = PlaylistItemType.Episode;
                objIDOld = ep.AnimeEpisodeID;
            }
            if (pli.ItemType == PlaylistItemType.AnimeSeries)
            {
                VM_AnimeSeries_User ep = (VM_AnimeSeries_User)pli.PlaylistItem;
                itemType = PlaylistItemType.AnimeSeries;
                objIDOld = ep.AnimeSeriesID;
            }

            int iType = (int)itemType;

            // find where this item was previously

            if (string.IsNullOrEmpty(PlaylistItems))
            {
                return;
            }

            string[] items = PlaylistItems.Split('|');

            // create a new list without the moved item
            string newItemList = "";

            foreach (string pitem in items)
            {
                string[] parms = pitem.Split(';');
                if (parms.Length != 2)
                {
                    continue;
                }

                int objType;
                int objID;

                if (!int.TryParse(parms[0], out objType))
                {
                    continue;
                }
                if (!int.TryParse(parms[1], out objID))
                {
                    continue;
                }

                if (objType == iType && objID == objIDOld)
                {
                    // skip the old item
                }
                else
                {
                    if (newItemList.Length > 0)
                    {
                        newItemList += "|";
                    }
                    newItemList += $"{objType};{objID}";
                }
            }

            // insert the moved item into it's new position
            items = newItemList.Split('|');

            PlaylistItems = "";
            int curPos = 0;

            if (string.IsNullOrEmpty(newItemList))
            {
                // means there was only one item in list to begin with
                PlaylistItems += $"{iType};{objIDOld}";
            }
            else
            {
                foreach (string pitem in items)
                {
                    string[] parms = pitem.Split(';');
                    if (parms.Length != 2)
                    {
                        continue;
                    }

                    int objType;
                    int objID;

                    int.TryParse(parms[0], out objType);
                    int.TryParse(parms[1], out objID);

                    if (curPos == dropInfo.InsertIndex)
                    {
                        // insert moved item
                        if (PlaylistItems.Length > 0)
                        {
                            PlaylistItems += "|";
                        }
                        PlaylistItems += $"{iType};{objIDOld}";
                    }


                    if (PlaylistItems.Length > 0)
                    {
                        PlaylistItems += "|";
                    }
                    PlaylistItems += $"{objType};{objID}";

                    curPos++;
                }
            }

            // moved to the end of the list
            if (dropInfo.InsertIndex > items.Length)
            {
                if (PlaylistItems.Length > 0)
                {
                    PlaylistItems += "|";
                }
                PlaylistItems += $"{iType};{objIDOld}";
            }

            Save();
            PopulatePlaylistObjects();

            VM_PlaylistHelper.Instance.OnPlaylistModified(new PlaylistModifiedEventArgs(PlaylistID));
        }
コード例 #6
0
        public List <VM_AnimeEpisode_User> GetAllEpisodes(bool onlyRandom)
        {
            List <VM_AnimeEpisode_User> allEps = new List <VM_AnimeEpisode_User>();

            // find the next episode to play
            if (DefaultPlayOrderEnum == PlaylistPlayOrder.Sequential && !onlyRandom)
            {
                foreach (VM_PlaylistItem pli in PlaylistObjects)
                {
                    if (pli.ItemType == PlaylistItemType.Episode)
                    {
                        VM_AnimeEpisode_User epTemp = pli.PlaylistItem as VM_AnimeEpisode_User;
                        if (CanUseEpisode(this, epTemp))
                        {
                            allEps.Add(epTemp);
                        }
                    }

                    if (pli.ItemType == PlaylistItemType.AnimeSeries)
                    {
                        VM_AnimeSeries_User ser = (VM_AnimeSeries_User)pli.PlaylistItem;
                        VM_MainListHelper.Instance.UpdateAll();
                        ser.RefreshEpisodes();

                        List <VM_AnimeEpisode_User> eps = ser.AllEpisodes.OrderBy(a => a.EpisodeType).ThenBy(a => a.EpisodeNumber).ToList();

                        foreach (VM_AnimeEpisode_User epTemp in eps)
                        {
                            if (epTemp.EpisodeTypeEnum == EpisodeType.Episode || epTemp.EpisodeTypeEnum == EpisodeType.Special)
                            {
                                if (CanUseEpisode(this, epTemp))
                                {
                                    allEps.Add(epTemp);
                                }
                            }
                        }
                    }
                }
            }
            else // random
            {
                foreach (VM_PlaylistItem pli in PlaylistObjects)
                {
                    if (pli.ItemType == PlaylistItemType.Episode)
                    {
                        VM_AnimeEpisode_User epTemp = pli.PlaylistItem as VM_AnimeEpisode_User;
                        if (CanUseEpisode(this, epTemp))
                        {
                            allEps.Add(epTemp);
                        }
                    }

                    if (pli.ItemType == PlaylistItemType.AnimeSeries)
                    {
                        VM_AnimeSeries_User ser = (VM_AnimeSeries_User)pli.PlaylistItem;
                        VM_MainListHelper.Instance.UpdateAll();
                        ser.RefreshEpisodes();

                        List <VM_AnimeEpisode_User> eps = ser.AllEpisodes;

                        foreach (VM_AnimeEpisode_User epTemp in eps)
                        {
                            if (epTemp.EpisodeTypeEnum == EpisodeType.Episode || epTemp.EpisodeTypeEnum == EpisodeType.Special)
                            {
                                if (CanUseEpisode(this, epTemp))
                                {
                                    allEps.Add(epTemp);
                                }
                            }
                        }
                    }
                }

                allEps.Shuffle();
            }

            return(allEps);
        }
コード例 #7
0
        public void SetNextEpisode(bool onlyRandom)
        {
            if (PlaylistObjects.Count == 0)
            {
                return;
            }

            // find the next episode to play
            NextEpisode = null;
            if (DefaultPlayOrderEnum == PlaylistPlayOrder.Sequential && !onlyRandom)
            {
                while (true)
                {
                    foreach (VM_PlaylistItem pli in PlaylistObjects)
                    {
                        if (pli.ItemType == PlaylistItemType.Episode)
                        {
                            VM_AnimeEpisode_User epTemp = pli.PlaylistItem as VM_AnimeEpisode_User;
                            if (CanUseEpisode(this, epTemp))
                            {
                                NextEpisode = epTemp;
                                break;
                            }
                        }

                        if (pli.ItemType == PlaylistItemType.AnimeSeries)
                        {
                            VM_AnimeSeries_User ser = (VM_AnimeSeries_User)pli.PlaylistItem;
                            VM_MainListHelper.Instance.UpdateAll();
                            ser.RefreshEpisodes();

                            List <VM_AnimeEpisode_User> eps = ser.AllEpisodes.OrderBy(a => a.EpisodeType).ThenBy(a => a.EpisodeNumber).ToList();

                            bool foundEp = false;
                            foreach (VM_AnimeEpisode_User epTemp in eps)
                            {
                                if (epTemp.EpisodeTypeEnum == EpisodeType.Episode || epTemp.EpisodeTypeEnum == EpisodeType.Special)
                                {
                                    if (CanUseEpisode(this, epTemp))
                                    {
                                        NextEpisode = epTemp;
                                        foundEp     = true;
                                        break;
                                    }
                                }
                            }

                            if (foundEp)
                            {
                                break;
                            }
                        }
                    }
                    break;
                }
            }
            else // random
            {
                // get all the candidate episodes
                List <VM_AnimeEpisode_User> canidateEps = new List <VM_AnimeEpisode_User>();

                foreach (VM_PlaylistItem pli in PlaylistObjects)
                {
                    if (pli.ItemType == PlaylistItemType.Episode)
                    {
                        VM_AnimeEpisode_User epTemp = pli.PlaylistItem as VM_AnimeEpisode_User;
                        if (CanUseEpisode(this, epTemp))
                        {
                            canidateEps.Add(epTemp);
                        }
                    }

                    if (pli.ItemType == PlaylistItemType.AnimeSeries)
                    {
                        VM_AnimeSeries_User ser = (VM_AnimeSeries_User)pli.PlaylistItem;
                        VM_MainListHelper.Instance.UpdateAll();
                        ser.RefreshEpisodes();

                        List <VM_AnimeEpisode_User> eps = ser.AllEpisodes;

                        foreach (VM_AnimeEpisode_User epTemp in eps)
                        {
                            if (epTemp.EpisodeTypeEnum == EpisodeType.Episode || epTemp.EpisodeTypeEnum == EpisodeType.Special)
                            {
                                if (CanUseEpisode(this, epTemp))
                                {
                                    canidateEps.Add(epTemp);
                                }
                            }
                        }
                    }
                }

                // pick a random object from the play list
                if (canidateEps.Count > 0)
                {
                    NextEpisode = canidateEps[epRandom.Next(0, canidateEps.Count)];
                }
            }

            if (NextEpisode != null)
            {
                NextEpisode.SetTvDBInfo();
                NextEpisode.RefreshAnime();
                AniDB_Anime = NextEpisode.AniDBAnime;

                if (VM_MainListHelper.Instance.AllSeriesDictionary.ContainsKey(NextEpisode.AnimeSeriesID))
                {
                    Series = VM_MainListHelper.Instance.AllSeriesDictionary[NextEpisode.AnimeSeriesID];
                }
            }
        }
コード例 #8
0
ファイル: VM_JMMUser.cs プロジェクト: samnyan/ShokoDesktop
 public bool EvaluateSeries(VM_AnimeSeries_User ser)
 {
     // make sure the user has not filtered this out
     return(EvaluateTags(ser.AllTags));
 }