Пример #1
0
		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 categories
				AniDB_CategoryRepository repCats = new AniDB_CategoryRepository();
				AniDB_Anime_CategoryRepository repAnimeCat = new AniDB_Anime_CategoryRepository();

				List<AniDB_Category> allCatgeories = repCats.GetAll();
				Dictionary<int, AniDB_Category> allCatgeoriesDict = new Dictionary<int, AniDB_Category>();
				foreach (AniDB_Category cat in allCatgeories)
					allCatgeoriesDict[cat.CategoryID] = cat;


				List<AniDB_Anime_Category> allAnimeCatgeories = repAnimeCat.GetAll();
				Dictionary<int, List<AniDB_Anime_Category>> allAnimeCatgeoriesDict = new Dictionary<int, List<AniDB_Anime_Category>>(); // 
				foreach (AniDB_Anime_Category aniCat in allAnimeCatgeories)
				{
					if (!allAnimeCatgeoriesDict.ContainsKey(aniCat.AnimeID))
						allAnimeCatgeoriesDict[aniCat.AnimeID] = new List<AniDB_Anime_Category>();

					allAnimeCatgeoriesDict[aniCat.AnimeID].Add(aniCat);
				}

				// 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 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.Categories = new List<Contract_AnimeCategory>();
					contract.Tags = new List<Contract_AnimeTag>();
					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 (allAnimeCatgeoriesDict.ContainsKey(anime.AnimeID))
					{
						List<AniDB_Anime_Category> aniCats = allAnimeCatgeoriesDict[anime.AnimeID];
						foreach (AniDB_Anime_Category aniCat in aniCats)
						{
							if (allCatgeoriesDict.ContainsKey(aniCat.CategoryID))
							{
								AniDB_Category cat = allCatgeoriesDict[aniCat.CategoryID];

								Contract_AnimeCategory ccat = new Contract_AnimeCategory();
								ccat.CategoryDescription = cat.CategoryDescription;
								ccat.CategoryID = cat.CategoryID;
								ccat.CategoryName = cat.CategoryName;
								ccat.IsHentai = cat.IsHentai;
								ccat.ParentID = cat.ParentID;
								ccat.Weighting = aniCat.Weighting;
								contract.Categories.Add(ccat);
								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.Approval = aniTag.Approval;
								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++;
							}
						}
					}

					// 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;
		}
Пример #2
0
		public Contract_AniDB_AnimeDetailed ToContractDetailed(ISession session)
		{
			//logger.Trace(" XXXX 01");
			AniDB_Anime_TitleRepository repTitles = new AniDB_Anime_TitleRepository();
			AniDB_CategoryRepository repCats = new AniDB_CategoryRepository();
			AniDB_TagRepository repTags = new AniDB_TagRepository();

			Contract_AniDB_AnimeDetailed contract = new Contract_AniDB_AnimeDetailed();

			contract.AnimeTitles = new List<Contract_AnimeTitle>();
			contract.Categories = new List<Contract_AnimeCategory>();
			contract.Tags = new List<Contract_AnimeTag>();

			contract.AniDBAnime = this.ToContract(session);

			//logger.Trace(" XXXX 02");

			// 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);
				}
			}

			//logger.Trace(" XXXX 03");

			Dictionary<int, AniDB_Anime_Category> dictAnimeCats = new Dictionary<int, AniDB_Anime_Category>();
			foreach (AniDB_Anime_Category animeCat in GetAnimeCategories(session))
				dictAnimeCats[animeCat.CategoryID] = animeCat;

			foreach (AniDB_Category cat in GetAniDBCategories(session))
			{
				Contract_AnimeCategory ccat = new Contract_AnimeCategory();
				ccat.CategoryDescription = cat.CategoryDescription;
				ccat.CategoryID = cat.CategoryID;
				ccat.CategoryName = cat.CategoryName;
				ccat.IsHentai = cat.IsHentai;
				ccat.ParentID = cat.ParentID;

				if (dictAnimeCats.ContainsKey(cat.CategoryID))
					ccat.Weighting = dictAnimeCats[cat.CategoryID].Weighting;
				else
					ccat.Weighting = 0;
				contract.Categories.Add(ccat);
			}

			//logger.Trace(" XXXX 04");

			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.Approval = dictAnimeTags[tag.TagID].Approval;
				else
					ctag.Approval = 0;
				contract.Tags.Add(ctag);
			}

			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;
		}