public static void Init() { JMMUser.Populate(a => a.JMMUserID); CloudAccount.Populate(a => a.CloudID); ImportFolder.Populate(a => a.ImportFolderID); AniDB_Anime.Populate(a => a.AniDB_AnimeID); AniDB_Episode.Populate(a => a.AniDB_EpisodeID); AniDB_File.Populate(a => a.AniDB_FileID); AniDB_Anime_Title.Populate(a => a.AniDB_Anime_TitleID); AniDB_Anime_Tag.Populate(a => a.AniDB_Anime_TagID); AniDB_Tag.Populate(a => a.AniDB_TagID); CustomTag.Populate(a => a.CustomTagID); CrossRef_CustomTag.Populate(a => a.CrossRef_CustomTagID); CrossRef_File_Episode.Populate(a => a.CrossRef_File_EpisodeID); VideoLocalPlace.Populate(a => a.VideoLocal_Place_ID); VideoLocal.Populate(a => a.VideoLocalID); VideoLocalUser.Populate(a => a.VideoLocal_UserID); GroupFilter.Populate(a => a.GroupFilterID); AnimeEpisode.Populate(a => a.AnimeEpisodeID); AnimeEpisode_User.Populate(a => a.AnimeEpisode_UserID); AnimeSeries.Populate(a => a.AnimeSeriesID); AnimeSeries_User.Populate(a => a.AnimeSeries_UserID); AnimeGroup.Populate(a => a.AnimeGroupID); AnimeGroup_User.Populate(a => a.AnimeGroup_UserID); GroupFilter.PostProcess(); CleanUpMemory(); }
/// <summary> /// Creates a single <see cref="AnimeGroup"/> for each <see cref="AnimeSeries"/> in <paramref name="seriesList"/>. /// </summary> /// <remarks> /// This method assumes that there are no active transactions on the specified <paramref name="session"/>. /// </remarks> /// <param name="session">The NHibernate session.</param> /// <param name="seriesList">The list of <see cref="AnimeSeries"/> to create groups for.</param> /// <returns>A sequence of the created <see cref="AnimeGroup"/>s.</returns> private IEnumerable <AnimeGroup> CreateGroupPerSeries(ISessionWrapper session, IReadOnlyList <AnimeSeries> seriesList) { _log.Info("Generating AnimeGroups for {0} AnimeSeries", seriesList.Count); DateTime now = DateTime.Now; var newGroupsToSeries = new Tuple <AnimeGroup, AnimeSeries> [seriesList.Count]; // Create one group per series for (int grp = 0; grp < seriesList.Count; grp++) { AnimeGroup group = new AnimeGroup(); AnimeSeries series = seriesList[grp]; group.Populate(series, now); newGroupsToSeries[grp] = new Tuple <AnimeGroup, AnimeSeries>(group, series); } using (ITransaction trans = session.BeginTransaction()) { _animeGroupRepo.InsertBatch(session, newGroupsToSeries.Select(gts => gts.Item1).AsReadOnlyCollection()); trans.Commit(); } // Anime groups should have IDs now they've been inserted. Now assign the group ID's to their respective series // (The caller of this method will be responsible for saving the AnimeSeries) foreach (Tuple <AnimeGroup, AnimeSeries> groupAndSeries in newGroupsToSeries) { groupAndSeries.Item2.AnimeGroupID = groupAndSeries.Item1.AnimeGroupID; } _log.Info("Generated {0} AnimeGroups", newGroupsToSeries.Length); return(newGroupsToSeries.Select(gts => gts.Item1)); }
public static void Init() { JMMUser.Populate(); CloudAccount.Populate(); ImportFolder.Populate(); AniDB_Anime.Populate(); AniDB_Episode.Populate(); AniDB_File.Populate(); AniDB_Anime_Title.Populate(); AniDB_Anime_Tag.Populate(); AniDB_Tag.Populate(); CustomTag.Populate(); CrossRef_CustomTag.Populate(); CrossRef_File_Episode.Populate(); VideoLocalPlace.Populate(); VideoLocal.Populate(); VideoLocalUser.Populate(); GroupFilter.Populate(); AnimeEpisode.Populate(); AnimeEpisode_User.Populate(); AnimeSeries.Populate(); AnimeSeries_User.Populate(); AnimeGroup.Populate(); AnimeGroup_User.Populate(); // Update Contracts if necessary try { JMMUser.RegenerateDb(); CloudAccount.RegenerateDb(); ImportFolder.RegenerateDb(); AniDB_Anime.RegenerateDb(); AniDB_Episode.RegenerateDb(); AniDB_File.RegenerateDb(); AniDB_Anime_Title.RegenerateDb(); AniDB_Anime_Tag.RegenerateDb(); AniDB_Tag.RegenerateDb(); CustomTag.RegenerateDb(); CrossRef_CustomTag.RegenerateDb(); CrossRef_File_Episode.RegenerateDb(); VideoLocalPlace.RegenerateDb(); VideoLocal.RegenerateDb(); VideoLocalUser.RegenerateDb(); AnimeEpisode.RegenerateDb(); AnimeEpisode_User.RegenerateDb(); AnimeSeries.RegenerateDb(); AnimeSeries_User.RegenerateDb(); AnimeGroup.RegenerateDb(); AnimeGroup_User.RegenerateDb(); GroupFilter.RegenerateDb(); GroupFilter.PostProcess(); } catch (Exception e) { LogManager.GetCurrentClassLogger().Error(e, "There was an error starting the Database Factory"); } CleanUpMemory(); }
public static void Init() { JMMUser.Populate(); CloudAccount.Populate(); ImportFolder.Populate(); AniDB_Anime.Populate(); AniDB_Episode.Populate(); AniDB_File.Populate(); AniDB_Anime_Title.Populate(); AniDB_Anime_Tag.Populate(); AniDB_Tag.Populate(); CustomTag.Populate(); CrossRef_CustomTag.Populate(); CrossRef_File_Episode.Populate(); VideoLocalPlace.Populate(); VideoLocal.Populate(); VideoLocalUser.Populate(); GroupFilter.Populate(); AnimeEpisode.Populate(); AnimeEpisode_User.Populate(); AnimeSeries.Populate(); AnimeSeries_User.Populate(); AnimeGroup.Populate(); AnimeGroup_User.Populate(); // Update Contracts if necessary JMMUser.RegenerateDb(); CloudAccount.RegenerateDb(); ImportFolder.RegenerateDb(); AniDB_Anime.RegenerateDb(); AniDB_Episode.RegenerateDb(); AniDB_File.RegenerateDb(); AniDB_Anime_Title.RegenerateDb(); AniDB_Anime_Tag.RegenerateDb(); AniDB_Tag.RegenerateDb(); CustomTag.RegenerateDb(); CrossRef_CustomTag.RegenerateDb(); CrossRef_File_Episode.RegenerateDb(); VideoLocalPlace.RegenerateDb(); VideoLocal.RegenerateDb(); VideoLocalUser.RegenerateDb(); AnimeEpisode.RegenerateDb(); AnimeEpisode_User.RegenerateDb(); AnimeSeries.RegenerateDb(); AnimeSeries_User.RegenerateDb(); AnimeGroup.RegenerateDb(); AnimeGroup_User.RegenerateDb(); GroupFilter.RegenerateDb(); GroupFilter.PostProcess(); CleanUpMemory(); }
/// <summary> /// Creates an <see cref="AnimeGroup"/> instance. /// </summary> /// <remarks> /// This method only creates an <see cref="AnimeGroup"/> instance. It does NOT save it to the database. /// </remarks> /// <param name="session">The NHibernate session.</param> /// <param name="mainSeries">The <see cref="AnimeSeries"/> whose name will represent the group (Optional. Pass <c>null</c> if not available).</param> /// <param name="mainAnimeId">The ID of the anime whose name will represent the group if <paramref name="mainSeries"/> is <c>null</c>.</param> /// <param name="now">The current date/time.</param> /// <returns>The created <see cref="AnimeGroup"/>.</returns> private AnimeGroup CreateAnimeGroup(ISessionWrapper session, AnimeSeries mainSeries, int mainAnimeId, DateTime now) { AnimeGroup animeGroup = new AnimeGroup(); string groupName = null; if (mainSeries != null) { animeGroup.Populate(mainSeries, now); groupName = mainSeries.GetSeriesName(session); } else // The anime chosen as the group's main anime doesn't actually have a series { AniDB_Anime mainAnime = _aniDbAnimeRepo.GetByAnimeID(mainAnimeId); animeGroup.Populate(mainAnime, now); groupName = mainAnime.GetFormattedTitle(); } groupName = _truncateYearRegex.Replace(groupName, String.Empty); // If the title appears to end with a year suffix, then remove it animeGroup.GroupName = groupName; animeGroup.SortName = groupName; return(animeGroup); }
/// <summary> /// Gets or creates an <see cref="AnimeGroup"/> for the specified series. /// </summary> /// <param name="session">The NHibernate session.</param> /// <param name="series">The series for which the group is to be created/retrieved (Must be initialised first).</param> /// <returns>The <see cref="AnimeGroup"/> to use for the specified series.</returns> /// <exception cref="ArgumentNullException"><paramref name="session"/> or <paramref name="series"/> is <c>null</c>.</exception> public AnimeGroup GetOrCreateSingleGroupForSeries(ISessionWrapper session, AnimeSeries series) { if (session == null) { throw new ArgumentNullException(nameof(session)); } if (series == null) { throw new ArgumentNullException(nameof(series)); } AnimeGroup animeGroup = null; if (_autoGroupSeries) { var grpCalculator = AutoAnimeGroupCalculator.CreateFromServerSettings(session); IReadOnlyList <int> grpAnimeIds = grpCalculator.GetIdsOfAnimeInSameGroup(series.AniDB_ID); // Try to find an existing AnimeGroup to add the series to // We basically pick the first group that any of the related series belongs to already animeGroup = grpAnimeIds.Select(id => RepoFactory.AnimeSeries.GetByAnimeID(id)) .Where(s => s != null) .Select(s => RepoFactory.AnimeGroup.GetByID(s.AnimeGroupID)) .FirstOrDefault(); if (animeGroup == null) { // No existing group was found, so create a new one int mainAnimeId = grpCalculator.GetGroupAnimeId(series.AniDB_ID); AnimeSeries mainSeries = _animeSeriesRepo.GetByAnimeID(mainAnimeId); animeGroup = CreateAnimeGroup(session, mainSeries, mainAnimeId, DateTime.Now); RepoFactory.AnimeGroup.Save(animeGroup, true, true); } } else // We're not auto grouping (e.g. we're doing group per series) { animeGroup = new AnimeGroup(); animeGroup.Populate(series, DateTime.Now); RepoFactory.AnimeGroup.Save(animeGroup, true, true); } return(animeGroup); }