public Contract_AniDB_AnimeDetailed ToContractDetailed(ISession session) { AniDB_Anime_TitleRepository repTitles = new AniDB_Anime_TitleRepository(); AniDB_TagRepository repTags = new AniDB_TagRepository(); Contract_AniDB_AnimeDetailed contract = new Contract_AniDB_AnimeDetailed(); contract.AnimeTitles = new List<Contract_AnimeTitle>(); contract.Tags = new List<Contract_AnimeTag>(); contract.CustomTags = new List<Contract_CustomTag>(); contract.AniDBAnime = this.ToContract(session); // get all the anime titles List<AniDB_Anime_Title> animeTitles = repTitles.GetByAnimeID(session, AnimeID); if (animeTitles != null) { foreach (AniDB_Anime_Title title in animeTitles) { Contract_AnimeTitle ctitle = new Contract_AnimeTitle(); ctitle.AnimeID = title.AnimeID; ctitle.Language = title.Language; ctitle.Title = title.Title; ctitle.TitleType = title.TitleType; contract.AnimeTitles.Add(ctitle); } } Dictionary<int, AniDB_Anime_Tag> dictAnimeTags = new Dictionary<int, AniDB_Anime_Tag>(); foreach (AniDB_Anime_Tag animeTag in GetAnimeTags(session)) dictAnimeTags[animeTag.TagID] = animeTag; foreach (AniDB_Tag tag in GetAniDBTags(session)) { Contract_AnimeTag ctag = new Contract_AnimeTag(); ctag.GlobalSpoiler = tag.GlobalSpoiler; ctag.LocalSpoiler = tag.LocalSpoiler; //ctag.Spoiler = tag.Spoiler; //ctag.TagCount = tag.TagCount; ctag.TagDescription = tag.TagDescription; ctag.TagID = tag.TagID; ctag.TagName = tag.TagName; if (dictAnimeTags.ContainsKey(tag.TagID)) ctag.Weight = dictAnimeTags[tag.TagID].Weight; else ctag.Weight = 0; contract.Tags.Add(ctag); } // Get all the custom tags foreach (CustomTag custag in GetCustomTagsForAnime(session)) contract.CustomTags.Add(custag.ToContract()); if (this.UserVote != null) contract.UserVote = this.UserVote.ToContract(); AdhocRepository repAdHoc = new AdhocRepository(); List<string> audioLanguages = new List<string>(); List<string> subtitleLanguages = new List<string>(); //logger.Trace(" XXXX 06"); // audio languages Dictionary<int, LanguageStat> dicAudio = repAdHoc.GetAudioLanguageStatsByAnime(session, this.AnimeID); foreach (KeyValuePair<int, LanguageStat> kvp in dicAudio) { foreach (string lanName in kvp.Value.LanguageNames) { if (!audioLanguages.Contains(lanName)) audioLanguages.Add(lanName); } } //logger.Trace(" XXXX 07"); // subtitle languages Dictionary<int, LanguageStat> dicSubtitle = repAdHoc.GetSubtitleLanguageStatsByAnime(session, this.AnimeID); foreach (KeyValuePair<int, LanguageStat> kvp in dicSubtitle) { foreach (string lanName in kvp.Value.LanguageNames) { if (!subtitleLanguages.Contains(lanName)) subtitleLanguages.Add(lanName); } } //logger.Trace(" XXXX 08"); contract.Stat_AudioLanguages = ""; foreach (string audioLan in audioLanguages) { if (contract.Stat_AudioLanguages.Length > 0) contract.Stat_AudioLanguages += ","; contract.Stat_AudioLanguages += audioLan; } //logger.Trace(" XXXX 09"); contract.Stat_SubtitleLanguages = ""; foreach (string subLan in subtitleLanguages) { if (contract.Stat_SubtitleLanguages.Length > 0) contract.Stat_SubtitleLanguages += ","; contract.Stat_SubtitleLanguages += subLan; } //logger.Trace(" XXXX 10"); contract.Stat_AllVideoQuality = repAdHoc.GetAllVideoQualityForAnime(session, this.AnimeID); contract.Stat_AllVideoQuality_Episodes = ""; AnimeVideoQualityStat stat = repAdHoc.GetEpisodeVideoQualityStatsForAnime(session, this.AnimeID); if (stat != null && stat.VideoQualityEpisodeCount.Count > 0) { foreach (KeyValuePair<string, int> kvp in stat.VideoQualityEpisodeCount) { if (kvp.Value >= EpisodeCountNormal) { if (contract.Stat_AllVideoQuality_Episodes.Length > 0) contract.Stat_AllVideoQuality_Episodes += ","; contract.Stat_AllVideoQuality_Episodes += kvp.Key; } } } //logger.Trace(" XXXX 11"); return contract; }
public List<Contract_AniDB_AnimeDetailed> GetAllAnimeDetailed() { List<Contract_AniDB_AnimeDetailed> contracts = new List<Contract_AniDB_AnimeDetailed>(); int countElements = 0; try { DateTime start = DateTime.Now; AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); // build a dictionary of titles AniDB_Anime_TitleRepository repTitles = new AniDB_Anime_TitleRepository(); List<AniDB_Anime_Title> allTitles = repTitles.GetAll(); Dictionary<int, List<AniDB_Anime_Title>> allTitlesDict = new Dictionary<int, List<AniDB_Anime_Title>>(); foreach (AniDB_Anime_Title title in allTitles) { if (!allTitlesDict.ContainsKey(title.AnimeID)) allTitlesDict[title.AnimeID] = new List<AniDB_Anime_Title>(); allTitlesDict[title.AnimeID].Add(title); } // build a dictionary of tags AniDB_TagRepository repTags = new AniDB_TagRepository(); AniDB_Anime_TagRepository repAnimeTag = new AniDB_Anime_TagRepository(); List<AniDB_Tag> allTags = repTags.GetAll(); Dictionary<int, AniDB_Tag> allTagsDict = new Dictionary<int, AniDB_Tag>(); foreach (AniDB_Tag tag in allTags) allTagsDict[tag.TagID] = tag; List<AniDB_Anime_Tag> allAnimeTags = repAnimeTag.GetAll(); Dictionary<int, List<AniDB_Anime_Tag>> allAnimeTagsDict = new Dictionary<int, List<AniDB_Anime_Tag>>(); // foreach (AniDB_Anime_Tag aniTag in allAnimeTags) { if (!allAnimeTagsDict.ContainsKey(aniTag.AnimeID)) allAnimeTagsDict[aniTag.AnimeID] = new List<AniDB_Anime_Tag>(); allAnimeTagsDict[aniTag.AnimeID].Add(aniTag); } // build a dictionary of custom tags CustomTagRepository repCustomTags = new CustomTagRepository(); CrossRef_CustomTagRepository repXRefCustomTags = new CrossRef_CustomTagRepository(); List<CustomTag> allCustomTags = repCustomTags.GetAll(); Dictionary<int, CustomTag> allCustomTagsDict = new Dictionary<int, CustomTag>(); foreach (CustomTag tag in allCustomTags) allCustomTagsDict[tag.CustomTagID] = tag; List<CrossRef_CustomTag> allCustomTagsXRefs = repXRefCustomTags.GetAll(); Dictionary<int, List<CrossRef_CustomTag>> allCustomTagsXRefDict = new Dictionary<int, List<CrossRef_CustomTag>>(); // foreach (CrossRef_CustomTag aniTag in allCustomTagsXRefs) { if (!allCustomTagsXRefDict.ContainsKey(aniTag.CrossRefID)) allCustomTagsXRefDict[aniTag.CrossRefID] = new List<CrossRef_CustomTag>(); allCustomTagsXRefDict[aniTag.CrossRefID].Add(aniTag); } // build a dictionary of languages AdhocRepository rep = new AdhocRepository(); Dictionary<int, LanguageStat> dictAudioStats = rep.GetAudioLanguageStatsForAnime(); Dictionary<int, LanguageStat> dictSubtitleStats = rep.GetSubtitleLanguageStatsForAnime(); Dictionary<int, string> dictAnimeVideoQualStats = rep.GetAllVideoQualityByAnime(); Dictionary<int, AnimeVideoQualityStat> dictAnimeEpisodeVideoQualStats = rep.GetEpisodeVideoQualityStatsByAnime(); List<AniDB_Anime> animes = repAnime.GetAll(); // user votes AniDB_VoteRepository repVotes = new AniDB_VoteRepository(); List<AniDB_Vote> allVotes = repVotes.GetAll(); int i = 0; foreach (AniDB_Anime anime in animes) { i++; //if (i >= 10) continue; countElements++; Contract_AniDB_AnimeDetailed contract = new Contract_AniDB_AnimeDetailed(); contract.AnimeTitles = new List<Contract_AnimeTitle>(); contract.Tags = new List<Contract_AnimeTag>(); contract.CustomTags = new List<Contract_CustomTag>(); contract.UserVote = null; contract.AniDBAnime = anime.ToContract(); if (dictAnimeVideoQualStats.ContainsKey(anime.AnimeID)) contract.Stat_AllVideoQuality = dictAnimeVideoQualStats[anime.AnimeID]; else contract.Stat_AllVideoQuality = ""; contract.Stat_AllVideoQuality_Episodes = ""; // All Video Quality Episodes // Try to determine if this anime has all the episodes available at a certain video quality // e.g. the series has all episodes in blu-ray if (dictAnimeEpisodeVideoQualStats.ContainsKey(anime.AnimeID)) { AnimeVideoQualityStat stat = dictAnimeEpisodeVideoQualStats[anime.AnimeID]; foreach (KeyValuePair<string, int> kvp in stat.VideoQualityEpisodeCount) { if (kvp.Value >= anime.EpisodeCountNormal) { if (contract.Stat_AllVideoQuality_Episodes.Length > 0) contract.Stat_AllVideoQuality_Episodes += ","; contract.Stat_AllVideoQuality_Episodes += kvp.Key; } } } List<string> audioLanguageList = new List<string>(); List<string> subtitleLanguageList = new List<string>(); // get audio languages if (dictAudioStats.ContainsKey(anime.AnimeID)) { foreach (string lanName in dictAudioStats[anime.AnimeID].LanguageNames) { if (!audioLanguageList.Contains(lanName)) audioLanguageList.Add(lanName); } } // get subtitle languages if (dictSubtitleStats.ContainsKey(anime.AnimeID)) { foreach (string lanName in dictSubtitleStats[anime.AnimeID].LanguageNames) { if (!subtitleLanguageList.Contains(lanName)) subtitleLanguageList.Add(lanName); } } contract.Stat_AudioLanguages = ""; foreach (string audioLan in audioLanguageList) { if (contract.Stat_AudioLanguages.Length > 0) contract.Stat_AudioLanguages += ","; contract.Stat_AudioLanguages += audioLan; } contract.Stat_SubtitleLanguages = ""; foreach (string subLan in subtitleLanguageList) { if (contract.Stat_SubtitleLanguages.Length > 0) contract.Stat_SubtitleLanguages += ","; contract.Stat_SubtitleLanguages += subLan; } if (allTitlesDict.ContainsKey(anime.AnimeID)) { foreach (AniDB_Anime_Title title in allTitlesDict[anime.AnimeID]) { Contract_AnimeTitle ctitle = new Contract_AnimeTitle(); ctitle.AnimeID = title.AnimeID; ctitle.Language = title.Language; ctitle.Title = title.Title; ctitle.TitleType = title.TitleType; contract.AnimeTitles.Add(ctitle); countElements++; } } if (allAnimeTagsDict.ContainsKey(anime.AnimeID)) { List<AniDB_Anime_Tag> aniTags = allAnimeTagsDict[anime.AnimeID]; foreach (AniDB_Anime_Tag aniTag in aniTags) { if (allTagsDict.ContainsKey(aniTag.TagID)) { AniDB_Tag tag = allTagsDict[aniTag.TagID]; Contract_AnimeTag ctag = new Contract_AnimeTag(); ctag.Weight = aniTag.Weight; ctag.GlobalSpoiler = tag.GlobalSpoiler; ctag.LocalSpoiler = tag.LocalSpoiler; //ctag.Spoiler = tag.Spoiler; //ctag.TagCount = tag.TagCount; ctag.TagDescription = tag.TagDescription; ctag.TagID = tag.TagID; ctag.TagName = tag.TagName; contract.Tags.Add(ctag); countElements++; } } } //TODO - Custom Tags: add custom tags if (allCustomTagsXRefDict.ContainsKey(anime.AnimeID)) { List<CrossRef_CustomTag> aniTags = allCustomTagsXRefDict[anime.AnimeID]; foreach (CrossRef_CustomTag aniTag in aniTags) { if (allCustomTagsDict.ContainsKey(aniTag.CustomTagID)) { contract.CustomTags.Add(allCustomTagsDict[aniTag.CustomTagID].ToContract()); countElements++; } } } // get user vote foreach (AniDB_Vote vote in allVotes) { if (vote.EntityID == anime.AnimeID && (vote.VoteType == (int)AniDBVoteType.Anime || vote.VoteType == (int)AniDBVoteType.AnimeTemp)) { contract.UserVote = vote.ToContract(); break; } } contracts.Add(contract); } TimeSpan ts = DateTime.Now - start; logger.Info("GetAllAnimeDetailed in {0} ms {1}", ts.TotalMilliseconds, countElements); } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); } return contracts; }
public void UpdateContractDetailed(ISessionWrapper session) { List<AniDB_Anime_Title> animeTitles = RepoFactory.AniDB_Anime_Title.GetByAnimeID(AnimeID); Contract_AniDB_AnimeDetailed contract = new Contract_AniDB_AnimeDetailed(); contract.AniDBAnime = GenerateContract(session, animeTitles); contract.AnimeTitles = new List<Contract_AnimeTitle>(); contract.Tags = new List<Contract_AnimeTag>(); contract.CustomTags = new List<Contract_CustomTag>(); // get all the anime titles if (animeTitles != null) { foreach (AniDB_Anime_Title title in animeTitles) { Contract_AnimeTitle ctitle = new Contract_AnimeTitle(); ctitle.AnimeID = title.AnimeID; ctitle.Language = title.Language; ctitle.Title = title.Title; ctitle.TitleType = title.TitleType; contract.AnimeTitles.Add(ctitle); } } Dictionary<int, AniDB_Anime_Tag> dictAnimeTags = new Dictionary<int, AniDB_Anime_Tag>(); foreach (AniDB_Anime_Tag animeTag in GetAnimeTags()) dictAnimeTags[animeTag.TagID] = animeTag; foreach (AniDB_Tag tag in GetAniDBTags()) { Contract_AnimeTag ctag = new Contract_AnimeTag(); ctag.GlobalSpoiler = tag.GlobalSpoiler; ctag.LocalSpoiler = tag.LocalSpoiler; //ctag.Spoiler = tag.Spoiler; //ctag.TagCount = tag.TagCount; ctag.TagDescription = tag.TagDescription; ctag.TagID = tag.TagID; ctag.TagName = tag.TagName; if (dictAnimeTags.ContainsKey(tag.TagID)) ctag.Weight = dictAnimeTags[tag.TagID].Weight; else ctag.Weight = 0; contract.Tags.Add(ctag); } // Get all the custom tags foreach (CustomTag custag in GetCustomTagsForAnime()) contract.CustomTags.Add(custag.ToContract()); if (this.UserVote != null) contract.UserVote = this.UserVote.ToContract(); HashSet<string> audioLanguages = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase); HashSet<string> subtitleLanguages = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase); //logger.Trace(" XXXX 06"); // audio languages Dictionary<int, LanguageStat> dicAudio = RepoFactory.Adhoc.GetAudioLanguageStatsByAnime(session, this.AnimeID); foreach (KeyValuePair<int, LanguageStat> kvp in dicAudio) { foreach (string lanName in kvp.Value.LanguageNames) { if (!audioLanguages.Contains(lanName)) audioLanguages.Add(lanName); } } //logger.Trace(" XXXX 07"); // subtitle languages Dictionary<int, LanguageStat> dicSubtitle = RepoFactory.Adhoc.GetSubtitleLanguageStatsByAnime(session, this.AnimeID); foreach (KeyValuePair<int, LanguageStat> kvp in dicSubtitle) { foreach (string lanName in kvp.Value.LanguageNames) { if (!subtitleLanguages.Contains(lanName)) subtitleLanguages.Add(lanName); } } //logger.Trace(" XXXX 08"); contract.Stat_AudioLanguages = audioLanguages; //logger.Trace(" XXXX 09"); contract.Stat_SubtitleLanguages = subtitleLanguages; //logger.Trace(" XXXX 10"); contract.Stat_AllVideoQuality = RepoFactory.Adhoc.GetAllVideoQualityForAnime(session, this.AnimeID); AnimeVideoQualityStat stat = RepoFactory.Adhoc.GetEpisodeVideoQualityStatsForAnime(session, this.AnimeID); contract.Stat_AllVideoQuality_Episodes = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase); if (stat != null && stat.VideoQualityEpisodeCount.Count > 0) { foreach (KeyValuePair<string, int> kvp in stat.VideoQualityEpisodeCount) { if (kvp.Value >= EpisodeCountNormal) { contract.Stat_AllVideoQuality_Episodes.Add(kvp.Key); } } } //logger.Trace(" XXXX 11"); Contract = contract; }