public static void SetTvDBInfo(AniDB_Anime anime, AniDB_Episode ep, ref MetroContract_Anime_Episode contract) { TvDBSummary tvSummary = new TvDBSummary(); tvSummary.Populate(anime.AnimeID); SetTvDBInfo(tvSummary, ep, ref contract); }
public void Save(AniDB_Anime obj) { using (var session = JMMService.SessionFactory.OpenSession()) { Save(session, obj); } }
public static void Send_AnimeFull(JMMServer.Entities.AniDB_Anime data) { //if (!ServerSettings.WebCache_XRefFileEpisode_Send) return; string uri = string.Format(@"http://{0}/api/animefull", azureHostBaseAddress); AnimeFull obj = data.ToContractAzure(); string json = JSONHelper.Serialize <AnimeFull>(obj); SendData(uri, json, "POST"); }
public void Save(ISession session, AniDB_Anime obj) { // populate the database using (var transaction = session.BeginTransaction()) { session.SaveOrUpdate(obj); transaction.Commit(); } }
public Contract_AniDB_Anime_Relation ToContract(AniDB_Anime anime, AnimeSeries ser, int userID) { Contract_AniDB_Anime_Relation contract = new Contract_AniDB_Anime_Relation(); contract.AniDB_Anime_RelationID = this.AniDB_Anime_RelationID; contract.AnimeID = this.AnimeID; contract.RelationType = this.RelationType; contract.RelatedAnimeID = this.RelatedAnimeID; contract.AniDB_Anime = anime?.Contract?.AniDBAnime; contract.AnimeSeries = ser?.GetUserContract(userID); return contract; }
public Contract_AniDB_Anime_Similar ToContract(AniDB_Anime anime, AnimeSeries ser, int userID) { Contract_AniDB_Anime_Similar contract = new Contract_AniDB_Anime_Similar(); contract.AniDB_Anime_SimilarID = this.AniDB_Anime_SimilarID; contract.AnimeID = this.AnimeID; contract.SimilarAnimeID = this.SimilarAnimeID; contract.Approval = this.Approval; contract.Total = this.Total; contract.AniDB_Anime = anime?.Contract?.AniDBAnime; contract.AnimeSeries = ser?.GetUserContract(userID); return contract; }
/// <summary> /// Returns whether a user is allowed to view this anime /// </summary> /// <param name="ser"></param> /// <returns></returns> public bool AllowedAnime(AniDB_Anime anime) { if (string.IsNullOrEmpty(HideCategories)) return true; string[] cats = HideCategories.ToLower().Split(','); string[] animeCats = anime.AllCategories.ToLower().Split('|'); foreach (string cat in cats) { if (!string.IsNullOrEmpty(cat) && animeCats.Contains(cat)) { return false; } } return true; }
public Contract_AniDB_Anime_Relation ToContract(AniDB_Anime anime, AnimeSeries ser, int userID) { Contract_AniDB_Anime_Relation contract = new Contract_AniDB_Anime_Relation(); contract.AniDB_Anime_RelationID = this.AniDB_Anime_RelationID; contract.AnimeID = this.AnimeID; contract.RelationType = this.RelationType; contract.RelatedAnimeID = this.RelatedAnimeID; contract.AniDB_Anime = null; if (anime != null) contract.AniDB_Anime = anime.ToContract(); contract.AnimeSeries = null; if (ser != null) contract.AnimeSeries = ser.ToContract(ser.GetUserRecord(userID)); return contract; }
public Contract_AniDB_Anime_Similar ToContract(AniDB_Anime anime, AnimeSeries ser, int userID) { Contract_AniDB_Anime_Similar contract = new Contract_AniDB_Anime_Similar(); contract.AniDB_Anime_SimilarID = this.AniDB_Anime_SimilarID; contract.AnimeID = this.AnimeID; contract.SimilarAnimeID = this.SimilarAnimeID; contract.Approval = this.Approval; contract.Total = this.Total; contract.AniDB_Anime = null; if (anime != null) contract.AniDB_Anime = anime.ToContract(); contract.AnimeSeries = null; if (ser != null) contract.AnimeSeries = ser.ToContract(ser.GetUserRecord(userID)); return contract; }
private static void PerformActionOnFileNameREPLACE(ref string newFileName, string action, VideoLocal vid, AniDB_File aniFile, List<AniDB_Episode> episodes, AniDB_Anime anime, VideoInfo vi) { try { action = action.Trim(); int posStart1 = action.IndexOf("'", 0); if (posStart1 < 0) return; int posEnd1 = action.IndexOf("'", posStart1 + 1); if (posEnd1 < 0) return; string toReplace = action.Substring(posStart1 + 1, posEnd1 - posStart1 - 1); int posStart2 = action.IndexOf("'", posEnd1 + 1); if (posStart2 < 0) return; int posEnd2 = action.IndexOf("'", posStart2 + 1); if (posEnd2 < 0) return; string replaceWith = action.Substring(posStart2 + 1, posEnd2 - posStart2 - 1); newFileName = newFileName.Replace(toReplace, replaceWith); } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); } }
private static void PerformActionOnFileNameADD(ref string newFileName, string action, VideoLocal vid, AniDB_File aniFile, List<AniDB_Episode> episodes, AniDB_Anime anime, VideoInfo vi) { // TODO Remove illegal characters // TODO check for double episodes // TODO allow for synonyms to be used // TODO allow a strategy for episode numbers // fixed 0 padding, look at number of episodes in series newFileName += action; newFileName = newFileName.Replace("'", ""); #region Anime ID if (action.Trim().ToLower().Contains(Constants.FileRenameTag.AnimeID.ToLower())) { newFileName = newFileName.Replace(Constants.FileRenameTag.AnimeID, anime.AnimeID.ToString()); } #endregion #region English title if (action.Trim().ToLower().Contains(Constants.FileRenameTag.AnimeNameEnglish.ToLower())) { foreach (AniDB_Anime_Title ti in anime.GetTitles()) { if (ti.Language.Equals(Constants.AniDBLanguageType.English, StringComparison.InvariantCultureIgnoreCase)) { if (ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Main, StringComparison.InvariantCultureIgnoreCase) || ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Official, StringComparison.InvariantCultureIgnoreCase)) { newFileName = newFileName.Replace(Constants.FileRenameTag.AnimeNameEnglish, ti.Title); } } } } #endregion #region Romaji title if (action.Trim().ToLower().Contains(Constants.FileRenameTag.AnimeNameRomaji.ToLower())) { foreach (AniDB_Anime_Title ti in anime.GetTitles()) { if (ti.Language.Equals(Constants.AniDBLanguageType.Romaji, StringComparison.InvariantCultureIgnoreCase)) { if (ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Main, StringComparison.InvariantCultureIgnoreCase) || ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Official, StringComparison.InvariantCultureIgnoreCase)) { newFileName = newFileName.Replace(Constants.FileRenameTag.AnimeNameRomaji, ti.Title); } } } } #endregion #region Kanji title if (action.Trim().ToLower().Contains(Constants.FileRenameTag.AnimeNameKanji.ToLower())) { foreach (AniDB_Anime_Title ti in anime.GetTitles()) { if (ti.Language.Equals(Constants.AniDBLanguageType.Kanji, StringComparison.InvariantCultureIgnoreCase)) { if (ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Main, StringComparison.InvariantCultureIgnoreCase) || ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Official, StringComparison.InvariantCultureIgnoreCase)) { newFileName = newFileName.Replace(Constants.FileRenameTag.AnimeNameKanji, ti.Title); } } } } #endregion #region Episode Number if (action.Trim().ToLower().Contains(Constants.FileRenameTag.EpisodeNumber.ToLower())) { int zeroPadding = 2; string prefix = ""; if (episodes[0].EpisodeTypeEnum == AniDBAPI.enEpisodeType.Credits) prefix = "C"; if (episodes[0].EpisodeTypeEnum == AniDBAPI.enEpisodeType.Other) prefix = "O"; if (episodes[0].EpisodeTypeEnum == AniDBAPI.enEpisodeType.Parody) prefix = "P"; if (episodes[0].EpisodeTypeEnum == AniDBAPI.enEpisodeType.Special) prefix = "S"; if (episodes[0].EpisodeTypeEnum == AniDBAPI.enEpisodeType.Trailer) prefix = "T"; int epCount = 1; if (episodes[0].EpisodeTypeEnum == AniDBAPI.enEpisodeType.Episode) epCount = anime.EpisodeCountNormal; if (episodes[0].EpisodeTypeEnum == AniDBAPI.enEpisodeType.Special) epCount = anime.EpisodeCountSpecial; if (epCount > 10 && epCount < 100) zeroPadding = 2; if (epCount > 99 && epCount < 1000) zeroPadding = 3; if (epCount > 999) zeroPadding = 4; string episodeNumber = ""; // normal episode episodeNumber = prefix + episodes[0].EpisodeNumber.ToString().PadLeft(zeroPadding, '0'); if (episodes.Count > 1) episodeNumber += "-" + episodes[episodes.Count - 1].EpisodeNumber.ToString().PadLeft(zeroPadding, '0'); newFileName = newFileName.Replace(Constants.FileRenameTag.EpisodeNumber, episodeNumber); } #endregion #region Episode name (english) if (action.Trim().ToLower().Contains(Constants.FileRenameTag.EpisodeNameEnglish.ToLower())) newFileName = newFileName.Replace(Constants.FileRenameTag.EpisodeNameEnglish, episodes[0].EnglishName); #endregion #region Episode name (romaji) if (action.Trim().ToLower().Contains(Constants.FileRenameTag.EpisodeNameRomaji.ToLower())) newFileName = newFileName.Replace(Constants.FileRenameTag.EpisodeNameRomaji, episodes[0].RomajiName); #endregion #region sub group name (short) if (action.Trim().ToLower().Contains(Constants.FileRenameTag.GroupShortName.ToLower())) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.GroupShortName, aniFile.Anime_GroupNameShort); } #endregion #region sub group name (long) if (action.Trim().ToLower().Contains(Constants.FileRenameTag.GroupLongName.ToLower())) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.GroupLongName, aniFile.Anime_GroupName); } #endregion #region ED2k hash (upper) if (action.Trim().Contains(Constants.FileRenameTag.ED2KUpper)) { newFileName = newFileName.Replace(Constants.FileRenameTag.ED2KUpper, vid.Hash.ToUpper()); } #endregion #region ED2k hash (lower) if (action.Trim().Contains(Constants.FileRenameTag.ED2KLower)) { newFileName = newFileName.Replace(Constants.FileRenameTag.ED2KLower, vid.Hash.ToLower()); } #endregion #region CRC (upper) if (action.Trim().Contains(Constants.FileRenameTag.CRCUpper)) { string crc = vid.CRC32; if (string.IsNullOrEmpty(crc) && aniFile != null) crc = aniFile.CRC; if (!string.IsNullOrEmpty(crc)) { crc = crc.ToUpper(); newFileName = newFileName.Replace(Constants.FileRenameTag.CRCUpper, crc); } } #endregion #region CRC (lower) if (action.Trim().Contains(Constants.FileRenameTag.CRCLower)) { string crc = vid.CRC32; if (string.IsNullOrEmpty(crc) && aniFile != null) crc = aniFile.CRC; if (!string.IsNullOrEmpty(crc)) { crc = crc.ToLower(); newFileName = newFileName.Replace(Constants.FileRenameTag.CRCLower, crc); } } #endregion #region File Version if (action.Trim().Contains(Constants.FileRenameTag.FileVersion)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.FileVersion, aniFile.FileVersion.ToString()); } #endregion #region Audio languages (dub) if (action.Trim().Contains(Constants.FileRenameTag.DubLanguage)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.DubLanguage, aniFile.LanguagesRAW); } #endregion #region Subtitle languages (sub) if (action.Trim().Contains(Constants.FileRenameTag.SubLanguage)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.SubLanguage, aniFile.SubtitlesRAW); } #endregion #region Video Codec if (action.Trim().Contains(Constants.FileRenameTag.VideoCodec)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.VideoCodec, aniFile.File_VideoCodec); } #endregion #region Audio Codec if (action.Trim().Contains(Constants.FileRenameTag.AudioCodec)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.AudioCodec, aniFile.File_AudioCodec); } #endregion #region Video Bit Depth if (action.Trim().Contains(Constants.FileRenameTag.VideoBitDepth)) { newFileName = newFileName.Replace(Constants.FileRenameTag.VideoBitDepth, vi.VideoBitDepth); } #endregion #region Video Source if (action.Trim().Contains(Constants.FileRenameTag.Source)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.Source, aniFile.File_Source); } #endregion #region Anime Type if (action.Trim().Contains(Constants.FileRenameTag.Type)) { newFileName = newFileName.Replace(Constants.FileRenameTag.Type, anime.AnimeTypeRAW); } #endregion #region Video Resolution if (action.Trim().Contains(Constants.FileRenameTag.Resolution)) { string res = ""; bool hasResolution = true; if (aniFile != null) { res = aniFile.File_VideoResolution; if (aniFile.File_VideoResolution.Equals("0x0", StringComparison.InvariantCultureIgnoreCase)) hasResolution = false; if (aniFile.File_VideoResolution.Equals(Constants.FileRenameReserved.Unknown, StringComparison.InvariantCultureIgnoreCase)) hasResolution = false; } else hasResolution = false; if (!hasResolution) { // try the video info if (vi != null) res = vi.VideoResolution; } newFileName = newFileName.Replace(Constants.FileRenameTag.Resolution, res.Trim()); } #endregion #region Year if (action.Trim().Contains(Constants.FileRenameTag.Year)) { newFileName = newFileName.Replace(Constants.FileRenameTag.Year, anime.BeginYear.ToString()); } #endregion #region File ID if (action.Trim().Contains(Constants.FileRenameTag.FileID)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.FileID, aniFile.FileID.ToString()); } #endregion #region Episode ID if (action.Trim().Contains(Constants.FileRenameTag.EpisodeID)) { newFileName = newFileName.Replace(Constants.FileRenameTag.EpisodeID, episodes[0].EpisodeID.ToString()); } #endregion #region Group ID if (action.Trim().Contains(Constants.FileRenameTag.GroupID)) { if (aniFile != null) newFileName = newFileName.Replace(Constants.FileRenameTag.GroupID, aniFile.GroupID.ToString()); } #endregion #region Original File Name if (action.Trim().Contains(Constants.FileRenameTag.OriginalFileName)) { // remove the extension first if (aniFile != null) { string ext = Path.GetExtension(aniFile.FileName); string partial = aniFile.FileName.Substring(0, aniFile.FileName.Length - ext.Length); newFileName = newFileName.Replace(Constants.FileRenameTag.OriginalFileName, partial); } } #endregion #region Censored if (action.Trim().Contains(Constants.FileRenameTag.Censored)) { newFileName = newFileName.Replace(Constants.FileRenameTag.Censored, "cen"); } #endregion #region Deprecated if (action.Trim().Contains(Constants.FileRenameTag.Deprecated)) { newFileName = newFileName.Replace(Constants.FileRenameTag.Deprecated, "depr"); } #endregion }
private static void PerformActionOnFileName(ref string newFileName, string action, VideoLocal vid, AniDB_File aniFile, List<AniDB_Episode> episodes, AniDB_Anime anime, VideoInfo vi) { // find the first test int posStart = action.IndexOf(" "); if (posStart < 0) return; string actionType = action.Substring(0, posStart); string parameter = action.Substring(posStart + 1, action.Length - posStart - 1); try { // action is to add the the new file name if (actionType.Trim().Equals(Constants.FileRenameReserved.Add, StringComparison.InvariantCultureIgnoreCase)) PerformActionOnFileNameADD(ref newFileName, parameter, vid, aniFile, episodes, anime, vi); if (actionType.Trim().Equals(Constants.FileRenameReserved.Replace, StringComparison.InvariantCultureIgnoreCase)) PerformActionOnFileNameREPLACE(ref newFileName, parameter, vid, aniFile, episodes, anime, vi); } catch (Exception ex) { throw; } }
private static bool EvaluateTest(string line, VideoLocal vid, AniDB_File aniFile, List<AniDB_Episode> episodes, AniDB_Anime anime, VideoInfo vi) { line = line.Trim(); // determine if this line has a test foreach (char c in validTests) { string prefix = string.Format("IF {0}(", c); if (line.ToUpper().StartsWith(prefix)) { // find the first test int posStart = line.IndexOf('('); int posEnd = line.IndexOf(')'); int posStartOrig = posStart; if (posEnd < posStart) return false; string condition = line.Substring(posStart + 1, posEnd - posStart - 1); bool passed = EvaluateTest(c, condition, vid, aniFile, episodes, anime, vi); // check for OR's and AND's bool foundAND= false; while (posStart > 0) { posStart = line.IndexOf(';', posStart); if (posStart > 0) { foundAND = true; string thisLineRemainder = line.Substring(posStart + 1, line.Length - posStart - 1).Trim(); // remove any spacing //char thisTest = line.Substring(posStart + 1, 1).ToCharArray()[0]; char thisTest = thisLineRemainder.Substring(0, 1).ToCharArray()[0]; int posStartNew = thisLineRemainder.IndexOf('('); int posEndNew = thisLineRemainder.IndexOf(')'); condition = thisLineRemainder.Substring(posStartNew + 1, posEndNew - posStartNew - 1); bool thisPassed = EvaluateTest(thisTest, condition, vid, aniFile, episodes, anime, vi); if (!passed || !thisPassed) return false; posStart = posStart + 1; } } // if the first test passed, and we only have OR's left then it is an automatic success if (passed) return true; if (!foundAND) { posStart = posStartOrig; while (posStart > 0) { posStart = line.IndexOf(',', posStart); if (posStart > 0) { string thisLineRemainder = line.Substring(posStart + 1, line.Length - posStart - 1).Trim(); // remove any spacing //char thisTest = line.Substring(posStart + 1, 1).ToCharArray()[0]; char thisTest = thisLineRemainder.Substring(0, 1).ToCharArray()[0]; int posStartNew = thisLineRemainder.IndexOf('('); int posEndNew = thisLineRemainder.IndexOf(')'); condition = thisLineRemainder.Substring(posStartNew + 1, posEndNew - posStartNew - 1); bool thisPassed = EvaluateTest(thisTest, condition, vid, aniFile, episodes, anime, vi); if (thisPassed) return true; posStart = posStart + 1; } } } } } return false; }
private static bool EvaluateTestY(string test, VideoLocal vid, AniDB_Anime anime) { try { bool notCondition = false; bool greaterThan = false; bool greaterThanEqual = false; bool lessThan = false; bool lessThanEqual = false; ProcessNumericalOperators(ref test, ref notCondition, ref greaterThan, ref greaterThanEqual, ref lessThan, ref lessThanEqual); int testYear = 0; int.TryParse(test, out testYear); bool hasFileVersionOperator = greaterThan | greaterThanEqual | lessThan | lessThanEqual; if (!hasFileVersionOperator) { if (!notCondition) { if (anime.BeginYear == testYear) return true; else return false; } else { if (anime.BeginYear == testYear) return false; else return true; } } else { if (greaterThan) { if (anime.BeginYear > testYear) return true; else return false; } if (greaterThanEqual) { if (anime.BeginYear >= testYear) return true; else return false; } if (lessThan) { if (anime.BeginYear < testYear) return true; else return false; } if (lessThanEqual) { if (anime.BeginYear <= testYear) return true; else return false; } } return false; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return false; } }
private static bool EvaluateTestX(string test, VideoLocal vid, AniDB_Anime anime) { try { bool notCondition = false; bool greaterThan = false; bool greaterThanEqual = false; bool lessThan = false; bool lessThanEqual = false; ProcessNumericalOperators(ref test, ref notCondition, ref greaterThan, ref greaterThanEqual, ref lessThan, ref lessThanEqual); int epCount = 0; int.TryParse(test, out epCount); bool hasFileVersionOperator = greaterThan | greaterThanEqual | lessThan | lessThanEqual; if (!hasFileVersionOperator) { if (!notCondition) { if (anime.EpisodeCountNormal == epCount) return true; else return false; } else { if (anime.EpisodeCountNormal == epCount) return false; else return true; } } else { if (greaterThan) { if (anime.EpisodeCountNormal > epCount) return true; else return false; } if (greaterThanEqual) { if (anime.EpisodeCountNormal >= epCount) return true; else return false; } if (lessThan) { if (anime.EpisodeCountNormal < epCount) return true; else return false; } if (lessThanEqual) { if (anime.EpisodeCountNormal <= epCount) return true; else return false; } } return false; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return false; } }
//experiment private List<Character> GetCharactersFromAniDB( AniDB_Anime anidb_anime) { List<Character> char_list = new List<Character>(); foreach (AniDB_Anime_Character achar in anidb_anime.GetAnimeCharacters()) { AniDB_Character x = achar.GetCharacter(); Character c = new Character(); c.CharID = x.AniDB_CharacterID; c.CharName = x.CharName; c.Description = x.CharDescription; c.Picture = KodiHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressREST + "/GetImage/2/" + c.CharID); c.SeiyuuName = ""; c.SeiyuuPic = ""; char_list.Add(c); } return char_list; }
private static int? GetTraktEpisodeIdV2(TraktSummaryContainer traktSummary, AniDB_Anime anime, AniDB_Episode ep, ref string traktID, ref int season, ref int epNumber) { try { int? traktEpId = null; #region normal episodes // now do stuff to improve performance if (ep.EpisodeTypeEnum == enEpisodeType.Episode) { if (traktSummary != null && traktSummary.CrossRefTraktV2 != null && traktSummary.CrossRefTraktV2.Count > 0) { // find the xref that is right // relies on the xref's being sorted by season number and then episode number (desc) List<SortPropOrFieldAndDirection> sortCriteria = new List<SortPropOrFieldAndDirection>(); sortCriteria.Add(new SortPropOrFieldAndDirection("AniDBStartEpisodeNumber", true, SortType.eInteger)); List<CrossRef_AniDB_TraktV2> traktCrossRef = Sorting.MultiSort<CrossRef_AniDB_TraktV2>(traktSummary.CrossRefTraktV2, sortCriteria); bool foundStartingPoint = false; CrossRef_AniDB_TraktV2 xrefBase = null; foreach (CrossRef_AniDB_TraktV2 xrefTrakt in traktCrossRef) { if (xrefTrakt.AniDBStartEpisodeType != (int)enEpisodeType.Episode) continue; if (ep.EpisodeNumber >= xrefTrakt.AniDBStartEpisodeNumber) { foundStartingPoint = true; xrefBase = xrefTrakt; break; } } // we have found the starting epiosde numbder from AniDB // now let's check that the Trakt Season and Episode Number exist if (foundStartingPoint) { Dictionary<int, int> dictTraktSeasons = null; Dictionary<int, Trakt_Episode> dictTraktEpisodes = null; foreach (TraktDetailsContainer det in traktSummary.TraktDetails.Values) { if (det.TraktID == xrefBase.TraktID) { dictTraktSeasons = det.DictTraktSeasons; dictTraktEpisodes = det.DictTraktEpisodes; break; } } if (dictTraktSeasons.ContainsKey(xrefBase.TraktSeasonNumber)) { int episodeNumber = dictTraktSeasons[xrefBase.TraktSeasonNumber] + (ep.EpisodeNumber + xrefBase.TraktStartEpisodeNumber - 2) - (xrefBase.AniDBStartEpisodeNumber - 1); if (dictTraktEpisodes.ContainsKey(episodeNumber)) { Trakt_Episode traktep = dictTraktEpisodes[episodeNumber]; traktID = xrefBase.TraktID; season = traktep.Season; epNumber = traktep.EpisodeNumber; traktEpId = traktep.TraktID; } } } } } #endregion #region special episodes if (ep.EpisodeTypeEnum == enEpisodeType.Special) { // find the xref that is right // relies on the xref's being sorted by season number and then episode number (desc) List<SortPropOrFieldAndDirection> sortCriteria = new List<SortPropOrFieldAndDirection>(); sortCriteria.Add(new SortPropOrFieldAndDirection("AniDBStartEpisodeNumber", true, SortType.eInteger)); List<CrossRef_AniDB_TraktV2> traktCrossRef = Sorting.MultiSort<CrossRef_AniDB_TraktV2>(traktSummary.CrossRefTraktV2, sortCriteria); bool foundStartingPoint = false; CrossRef_AniDB_TraktV2 xrefBase = null; foreach (CrossRef_AniDB_TraktV2 xrefTrakt in traktCrossRef) { if (xrefTrakt.AniDBStartEpisodeType != (int)enEpisodeType.Special) continue; if (ep.EpisodeNumber >= xrefTrakt.AniDBStartEpisodeNumber) { foundStartingPoint = true; xrefBase = xrefTrakt; break; } } if (traktSummary != null && traktSummary.CrossRefTraktV2 != null && traktSummary.CrossRefTraktV2.Count > 0) { // we have found the starting epiosde numbder from AniDB // now let's check that the Trakt Season and Episode Number exist if (foundStartingPoint) { Dictionary<int, int> dictTraktSeasons = null; Dictionary<int, Trakt_Episode> dictTraktEpisodes = null; foreach (TraktDetailsContainer det in traktSummary.TraktDetails.Values) { if (det.TraktID == xrefBase.TraktID) { dictTraktSeasons = det.DictTraktSeasons; dictTraktEpisodes = det.DictTraktEpisodes; break; } } if (dictTraktSeasons.ContainsKey(xrefBase.TraktSeasonNumber)) { int episodeNumber = dictTraktSeasons[xrefBase.TraktSeasonNumber] + (ep.EpisodeNumber + xrefBase.TraktStartEpisodeNumber - 2) - (xrefBase.AniDBStartEpisodeNumber - 1); if (dictTraktEpisodes.ContainsKey(episodeNumber)) { Trakt_Episode traktep = dictTraktEpisodes[episodeNumber]; traktID = xrefBase.TraktID; season = traktep.Season; epNumber = traktep.EpisodeNumber; traktEpId = traktep.TraktID; } } } } } #endregion return traktEpId; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return null; } }
private static int? GetTraktEpisodeIdV2(AniDB_Anime anime, AniDB_Episode ep, ref string traktID, ref int season, ref int epNumber) { TraktSummaryContainer traktSummary = new TraktSummaryContainer(); traktSummary.Populate(anime.AnimeID); return GetTraktEpisodeIdV2(traktSummary, anime, ep, ref traktID, ref season, ref epNumber); }
private AniDB_Anime SaveResultsForAnimeXML(ISession session, int animeID, bool downloadRelations, AniDBHTTPCommand_GetFullAnime getAnimeCmd) { AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AniDB_Anime anime = null; logger.Trace("cmdResult.Anime: {0}", getAnimeCmd.Anime); anime = repAnime.GetByAnimeID(session, animeID); if (anime == null) anime = new AniDB_Anime(); anime.PopulateAndSaveFromHTTP(session, getAnimeCmd.Anime, getAnimeCmd.Episodes, getAnimeCmd.Titles, getAnimeCmd.Categories, getAnimeCmd.Tags, getAnimeCmd.Characters, getAnimeCmd.Relations, getAnimeCmd.SimilarAnime, getAnimeCmd.Recommendations, downloadRelations); // Request an image download CommandRequest_DownloadImage cmd = new CommandRequest_DownloadImage(anime.AniDB_AnimeID, JMMImageType.AniDB_Cover, false); cmd.Save(session); // create AnimeEpisode records for all episodes in this anime // only if we have a series AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); AnimeSeries ser = repSeries.GetByAnimeID(session, animeID); if (ser != null) { ser.CreateAnimeEpisodes(session); } // update any files, that may have been linked /*CrossRef_File_EpisodeRepository repCrossRefs = new CrossRef_File_EpisodeRepository(); repCrossRefs.GetByAnimeID(*/ // update cached stats StatsCache.Instance.UpdateUsingAnime(session, anime.AnimeID); StatsCache.Instance.UpdateAnimeContract(session, anime.AnimeID); // download character images foreach (AniDB_Anime_Character animeChar in anime.GetAnimeCharacters(session)) { AniDB_Character chr = animeChar.GetCharacter(session); if (chr == null) continue; if (ServerSettings.AniDB_DownloadCharacters) { if (!string.IsNullOrEmpty(chr.PosterPath) && !File.Exists(chr.PosterPath)) { logger.Debug("Downloading character image: {0} - {1}({2}) - {3}", anime.MainTitle, chr.CharName, chr.CharID, chr.PosterPath); cmd = new CommandRequest_DownloadImage(chr.AniDB_CharacterID, JMMImageType.AniDB_Character, false); cmd.Save(); } } if (ServerSettings.AniDB_DownloadCreators) { AniDB_Seiyuu seiyuu = chr.GetSeiyuu(session); if (seiyuu == null || string.IsNullOrEmpty(seiyuu.PosterPath)) continue; if (!File.Exists(seiyuu.PosterPath)) { logger.Debug("Downloading seiyuu image: {0} - {1}({2}) - {3}", anime.MainTitle, seiyuu.SeiyuuName, seiyuu.SeiyuuID, seiyuu.PosterPath); cmd = new CommandRequest_DownloadImage(seiyuu.AniDB_SeiyuuID, JMMImageType.AniDB_Creator, false); cmd.Save(); } } } return anime; }
public AniDB_Anime GetAnimeInfoUDP(int animeID, bool forceRefresh) { AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AniDB_Anime anime = null; bool skip = true; if (forceRefresh) skip = false; else { anime = repAnime.GetByAnimeID(animeID); if (anime == null) skip = false; } if (skip) { if (anime == null) anime = repAnime.GetByAnimeID(animeID); return anime; } if (!Login()) return null; enHelperActivityType ev = enHelperActivityType.NoSuchAnime; AniDBCommand_GetAnimeInfo getAnimeCmd = null; lock (lockAniDBConnections) { Pause(); getAnimeCmd = new AniDBCommand_GetAnimeInfo(); getAnimeCmd.Init(animeID, forceRefresh); SetWaitingOnResponse(true); ev = getAnimeCmd.Process(ref soUdp, ref remoteIpEndPoint, curSessionID, new UnicodeEncoding(true, false)); SetWaitingOnResponse(false); } if (ev == enHelperActivityType.GotAnimeInfo && getAnimeCmd.AnimeInfo != null) { // check for an existing record so we don't over write the description anime = repAnime.GetByAnimeID(getAnimeCmd.AnimeInfo.AnimeID); if (anime == null) anime = new AniDB_Anime(); anime.PopulateAndSaveFromUDP(getAnimeCmd.AnimeInfo); } return anime; }
private static bool EvaluateTest(char testChar, string testCondition, VideoLocal vid, AniDB_File aniFile, List<AniDB_Episode> episodes, AniDB_Anime anime, VideoInfo vi) { testCondition = testCondition.Trim(); switch (testChar) { case 'A': return EvaluateTestA(testCondition, vid, aniFile, episodes); case 'G': return EvaluateTestG(testCondition, vid, aniFile); case 'D': return EvaluateTestD(testCondition, vid, aniFile); case 'S': return EvaluateTestS(testCondition, vid, aniFile); case 'F': return EvaluateTestF(testCondition, vid, aniFile); case 'R': return EvaluateTestR(testCondition, vid, aniFile); case 'Z': return EvaluateTestZ(testCondition, vid, vi); case 'T': return EvaluateTestT(testCondition, vid, anime); case 'Y': return EvaluateTestY(testCondition, vid, anime); case 'E': return EvaluateTestE(testCondition, vid, episodes); case 'H': return EvaluateTestH(testCondition, vid, episodes); case 'X': return EvaluateTestX(testCondition, vid, anime); case 'C': return EvaluateTestC(testCondition, vid, aniFile); case 'J': return EvaluateTestJ(testCondition, vid, aniFile); case 'I': return EvaluateTestI(testCondition, vid, aniFile, episodes, anime, vi); case 'W': return EvaluateTestW(testCondition, vid, aniFile, vi); case 'U': return EvaluateTestU(testCondition, vid, aniFile, vi); case 'M': return EvaluateTestM(testCondition, aniFile, episodes); case 'N': return EvaluateTestN(testCondition, aniFile, episodes); } return false; }
/// <summary> /// Test whether the specified tag has a value /// </summary> /// <param name="test"></param> /// <param name="vid"></param> /// <param name="anime"></param> /// <returns></returns> private static bool EvaluateTestI(string test, VideoLocal vid, AniDB_File aniFile, List<AniDB_Episode> episodes, AniDB_Anime anime, VideoInfo vi) { try { bool notCondition = false; if (test.Substring(0, 1).Equals("!")) { notCondition = true; test = test.Substring(1, test.Length - 1); } if (anime == null) return false; #region Test if Anime ID exists // Test if Anime ID exists string tagAnimeID = Constants.FileRenameTag.AnimeID.Substring(1, Constants.FileRenameTag.AnimeID.Length - 1); // remove % at the front if (test.Trim().Equals(tagAnimeID, StringComparison.InvariantCultureIgnoreCase)) { // manually linked files won't have an anime id if (aniFile != null) { if (notCondition) return false; else return true; } else { if (notCondition) return true; else return false; } } #endregion #region Test if Group ID exists // Test if Group ID exists string tagGroupID = Constants.FileRenameTag.GroupID.Substring(1, Constants.FileRenameTag.GroupID.Length - 1); // remove % at the front if (test.Trim().Equals(tagGroupID, StringComparison.InvariantCultureIgnoreCase)) { // manually linked files won't have an group id if (aniFile != null) { if (notCondition) return false; else return true; } else { if (notCondition) return false; else return true; } } #endregion #region Test if Original File Name exists // Test if Original File Nameexists string tagOriginalFileName = Constants.FileRenameTag.OriginalFileName.Substring(1, Constants.FileRenameTag.OriginalFileName.Length - 1); // remove % at the front if (test.Trim().Equals(tagOriginalFileName, StringComparison.InvariantCultureIgnoreCase)) { // manually linked files won't have an Original File Name if (aniFile != null) { if (string.IsNullOrEmpty(aniFile.FileName)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } else { if (notCondition) return true; else return false; } } #endregion #region Test if Episode Number exists // Test if Episode Number exists string tagEpisodeNumber = Constants.FileRenameTag.EpisodeNumber.Substring(1, Constants.FileRenameTag.EpisodeNumber.Length - 1); // remove % at the front if (test.Trim().Equals(tagEpisodeNumber, StringComparison.InvariantCultureIgnoreCase)) { // manually linked files won't have an Episode Number if (aniFile != null) { if (notCondition) return false; else return true; } else { if (notCondition) return true; else return false; } } #endregion #region Test file version // Test if Group Short Name exists - yes it always does string tagFileVersion = Constants.FileRenameTag.FileVersion.Substring(1, Constants.FileRenameTag.FileVersion.Length - 1); // remove % at the front if (test.Trim().Equals(tagFileVersion, StringComparison.InvariantCultureIgnoreCase)) { // manually linked files won't have an anime id if (aniFile != null) { if (notCondition) return false; else return true; } else { if (notCondition) return true; else return false; } } #endregion #region Test if ED2K Upper exists // Test if Group Short Name exists - yes it always does string tagED2KUpper = Constants.FileRenameTag.ED2KUpper.Substring(1, Constants.FileRenameTag.ED2KUpper.Length - 1); // remove % at the front if (test.Trim().Equals(tagED2KUpper, StringComparison.InvariantCultureIgnoreCase)) { if (notCondition) return false; else return true; } #endregion #region Test if ED2K Lower exists // Test if Group Short Name exists - yes it always does string tagED2KLower = Constants.FileRenameTag.ED2KLower.Substring(1, Constants.FileRenameTag.ED2KLower.Length - 1); // remove % at the front if (test.Trim().Equals(tagED2KLower, StringComparison.InvariantCultureIgnoreCase)) { if (notCondition) return false; else return true; } #endregion #region Test if English title exists string tagAnimeNameEnglish = Constants.FileRenameTag.AnimeNameEnglish.Substring(1, Constants.FileRenameTag.AnimeNameEnglish.Length - 1); // remove % at the front if (test.Trim().Equals(tagAnimeNameEnglish, StringComparison.InvariantCultureIgnoreCase)) { foreach (AniDB_Anime_Title ti in anime.GetTitles()) { if (ti.Language.Equals(Constants.AniDBLanguageType.English, StringComparison.InvariantCultureIgnoreCase)) { if (ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Main, StringComparison.InvariantCultureIgnoreCase) || ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Official, StringComparison.InvariantCultureIgnoreCase)) { if (notCondition) return false; else return true; } } } if (notCondition) return true; else return false; } #endregion #region Test if Kanji title exists string tagAnimeNameKanji = Constants.FileRenameTag.AnimeNameKanji.Substring(1, Constants.FileRenameTag.AnimeNameKanji.Length - 1); // remove % at the front if (test.Trim().Equals(tagAnimeNameKanji, StringComparison.InvariantCultureIgnoreCase)) { foreach (AniDB_Anime_Title ti in anime.GetTitles()) { if (ti.Language.Equals(Constants.AniDBLanguageType.Kanji, StringComparison.InvariantCultureIgnoreCase)) { if (ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Main, StringComparison.InvariantCultureIgnoreCase) || ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Official, StringComparison.InvariantCultureIgnoreCase)) { if (notCondition) return false; else return true; } } } if (notCondition) return true; else return false; } #endregion #region Test if Romaji title exists string tagAnimeNameRomaji = Constants.FileRenameTag.AnimeNameRomaji.Substring(1, Constants.FileRenameTag.AnimeNameRomaji.Length - 1); // remove % at the front if (test.Trim().Equals(tagAnimeNameRomaji, StringComparison.InvariantCultureIgnoreCase)) { foreach (AniDB_Anime_Title ti in anime.GetTitles()) { if (ti.Language.Equals(Constants.AniDBLanguageType.Romaji, StringComparison.InvariantCultureIgnoreCase)) { if (ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Main, StringComparison.InvariantCultureIgnoreCase) || ti.TitleType.Trim().Equals(Constants.AnimeTitleType.Official, StringComparison.InvariantCultureIgnoreCase)) { if (notCondition) return false; else return true; } } } if (notCondition) return true; else return false; } #endregion #region Test if episode name (english) exists string tagEpisodeNameEnglish = Constants.FileRenameTag.EpisodeNameEnglish.Substring(1, Constants.FileRenameTag.EpisodeNameEnglish.Length - 1); // remove % at the front if (test.Trim().Equals(tagEpisodeNameEnglish, StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrEmpty(episodes[0].EnglishName)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if episode name (romaji) exists string tagEpisodeNameRomaji = Constants.FileRenameTag.EpisodeNameRomaji.Substring(1, Constants.FileRenameTag.EpisodeNameRomaji.Length - 1); // remove % at the front if (test.Trim().Equals(tagEpisodeNameRomaji, StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrEmpty(episodes[0].RomajiName)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if group name short exists // Test if Group Short Name exists - yes it always does string tagGroupShortName = Constants.FileRenameTag.GroupShortName.Substring(1, Constants.FileRenameTag.GroupShortName.Length - 1); // remove % at the front if (test.Trim().Equals(tagGroupShortName, StringComparison.InvariantCultureIgnoreCase)) { if (aniFile == null || string.IsNullOrEmpty(aniFile.Anime_GroupNameShort)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if group name long exists // Test if Group Short Name exists - yes it always does string tagGroupLongName = Constants.FileRenameTag.GroupLongName.Substring(1, Constants.FileRenameTag.GroupLongName.Length - 1); // remove % at the front if (test.Trim().Equals(tagGroupLongName, StringComparison.InvariantCultureIgnoreCase)) { if (aniFile == null || string.IsNullOrEmpty(aniFile.Anime_GroupName)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if CRC Lower exists // Test if Group Short Name exists - yes it always does string tagCRCLower = Constants.FileRenameTag.CRCLower.Substring(1, Constants.FileRenameTag.CRCLower.Length - 1); // remove % at the front if (test.Trim().Equals(tagCRCLower, StringComparison.InvariantCultureIgnoreCase)) { string crc = vid.CRC32; if (string.IsNullOrEmpty(crc) && aniFile != null) crc = aniFile.CRC; if (string.IsNullOrEmpty(crc)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if CRC Upper exists // Test if Group Short Name exists - yes it always does string tagCRCUpper = Constants.FileRenameTag.CRCUpper.Substring(1, Constants.FileRenameTag.CRCUpper.Length - 1); // remove % at the front if (test.Trim().Equals(tagCRCUpper, StringComparison.InvariantCultureIgnoreCase)) { string crc = vid.CRC32; if (string.IsNullOrEmpty(crc) && aniFile != null) crc = aniFile.CRC; if (string.IsNullOrEmpty(crc)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test file has an audio track string tagDubLanguage = Constants.FileRenameTag.DubLanguage.Substring(1, Constants.FileRenameTag.DubLanguage.Length - 1); // remove % at the front if (test.Trim().Equals(tagDubLanguage, StringComparison.InvariantCultureIgnoreCase)) { if (aniFile == null || aniFile.Languages.Count == 0) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test file has a subtitle track string tagSubLanguage = Constants.FileRenameTag.SubLanguage.Substring(1, Constants.FileRenameTag.SubLanguage.Length - 1); // remove % at the front if (test.Trim().Equals(tagSubLanguage, StringComparison.InvariantCultureIgnoreCase)) { if (aniFile == null || aniFile.Subtitles.Count == 0) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if Video resolution exists string tagVidRes = Constants.FileRenameTag.Resolution.Substring(1, Constants.FileRenameTag.Resolution.Length - 1); // remove % at the front if (test.Trim().Equals(tagVidRes, StringComparison.InvariantCultureIgnoreCase)) { string vidRes = ""; if (aniFile != null) vidRes = aniFile.File_VideoResolution; if (string.IsNullOrEmpty(vidRes) && vi != null) vidRes = vi.VideoResolution; if (string.IsNullOrEmpty(vidRes)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test file has a video codec defined string tagVideoCodec = Constants.FileRenameTag.VideoCodec.Substring(1, Constants.FileRenameTag.VideoCodec.Length - 1); // remove % at the front if (test.Trim().Equals(tagVideoCodec, StringComparison.InvariantCultureIgnoreCase)) { if (aniFile == null || string.IsNullOrEmpty(aniFile.File_VideoCodec)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test file has an audio codec defined string tagAudioCodec = Constants.FileRenameTag.AudioCodec.Substring(1, Constants.FileRenameTag.AudioCodec.Length - 1); // remove % at the front if (test.Trim().Equals(tagAudioCodec, StringComparison.InvariantCultureIgnoreCase)) { if (aniFile == null || string.IsNullOrEmpty(aniFile.File_AudioCodec)) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test file has Video Bit Depth defined string tagVideoBitDepth = Constants.FileRenameTag.VideoBitDepth.Substring(1, Constants.FileRenameTag.VideoBitDepth.Length - 1); // remove % at the front if (test.Trim().Equals(tagVideoBitDepth, StringComparison.InvariantCultureIgnoreCase)) { bool bitDepthExists = false; if (vi != null) { if (!string.IsNullOrEmpty(vi.VideoBitDepth)) { int bitDepth = 0; int.TryParse(vi.VideoBitDepth, out bitDepth); if (bitDepth > 0) bitDepthExists = true; } } if (!bitDepthExists) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if censored string tagCensored = Constants.FileRenameTag.Censored.Substring(1, Constants.FileRenameTag.Censored.Length - 1); // remove % at the front if (test.Trim().Equals(tagCensored, StringComparison.InvariantCultureIgnoreCase)) { bool isCensored = false; if (aniFile != null) isCensored = aniFile.IsCensored == 1; if (!isCensored) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if Deprecated string tagDeprecated = Constants.FileRenameTag.Deprecated.Substring(1, Constants.FileRenameTag.Deprecated.Length - 1); // remove % at the front if (test.Trim().Equals(tagDeprecated, StringComparison.InvariantCultureIgnoreCase)) { bool isDeprecated = false; if (aniFile != null) isDeprecated = aniFile.IsDeprecated == 1; if (!isDeprecated) { if (notCondition) return true; else return false; } else { if (notCondition) return false; else return true; } } #endregion #region Test if file has more than one episode #endregion return false; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return false; } }
private static bool EvaluateTestT(string test, VideoLocal vid, AniDB_Anime anime) { try { bool notCondition = false; if (test.Substring(0, 1).Equals("!")) { notCondition = true; test = test.Substring(1, test.Length - 1); } bool hasType = !string.IsNullOrEmpty(anime.AnimeTypeRAW); if (test.Trim().Equals(Constants.FileRenameReserved.Unknown, StringComparison.InvariantCultureIgnoreCase) && !hasType) { if (notCondition) return false; else return true; } if (test.Trim().Equals(anime.AnimeTypeRAW, StringComparison.InvariantCultureIgnoreCase)) { if (notCondition) return false; else return true; } else { if (notCondition) return true; else return false; } } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return false; } }