private void InsertDefaultLanguages(IDbConnection conn, IDbTransaction tran)
        {
            var profiles          = GetLanguageProfiles(conn, tran);
            var languageConverter = new EmbeddedDocumentConverter(new LanguageIntConverter());

            foreach (var profile in profiles.OrderBy(p => p.Id))
            {
                using (IDbCommand insertNewLanguageProfileCmd = conn.CreateCommand())
                {
                    var itemsJson = languageConverter.ToDB(profile.Languages);
                    insertNewLanguageProfileCmd.Transaction = tran;
                    insertNewLanguageProfileCmd.CommandText = "INSERT INTO LanguageProfiles (Id, Name, Cutoff, Languages) VALUES (?, ?, ?, ?)";
                    insertNewLanguageProfileCmd.AddParameter(profile.Id);
                    insertNewLanguageProfileCmd.AddParameter(profile.Name);
                    insertNewLanguageProfileCmd.AddParameter(profile.Cutoff.Id);
                    insertNewLanguageProfileCmd.AddParameter(itemsJson);

                    insertNewLanguageProfileCmd.ExecuteNonQuery();
                }

                using (IDbCommand updateSeriesCmd = conn.CreateCommand())
                {
                    foreach (var profileId in profile.ProfileIds)
                    {
                        updateSeriesCmd.Transaction = tran;
                        updateSeriesCmd.CommandText = "UPDATE Series SET LanguageProfileId = ? WHERE ProfileId = ?";
                        updateSeriesCmd.AddParameter(profile.Id);
                        updateSeriesCmd.AddParameter(profileId);
                        updateSeriesCmd.ExecuteNonQuery();
                    }
                }
            }
        }
示例#2
0
        private static void RegisterEmbeddedConverter()
        {
            var embeddedTypes = typeof(IEmbeddedDocument).Assembly.ImplementationsOf <IEmbeddedDocument>();

            var embeddedConvertor     = new EmbeddedDocumentConverter();
            var genericListDefinition = typeof(List <>).GetGenericTypeDefinition();

            foreach (var embeddedType in embeddedTypes)
            {
                var embeddedListType = genericListDefinition.MakeGenericType(embeddedType);
                MapRepository.Instance.RegisterTypeConverter(embeddedType, embeddedConvertor);
                MapRepository.Instance.RegisterTypeConverter(embeddedListType, embeddedConvertor);
            }
        }
示例#3
0
        private static void RegisterEmbeddedConverter()
        {
            var embeddedTypes = typeof(IEmbeddedDocument).Assembly.GetTypes()
                                .Where(c => c.GetInterfaces().Any(i => i == typeof(IEmbeddedDocument)));


            var embeddedConvertor     = new EmbeddedDocumentConverter();
            var genericListDefinition = typeof(List <>).GetGenericTypeDefinition();

            foreach (var embeddedType in embeddedTypes)
            {
                var embeddedListType = genericListDefinition.MakeGenericType(embeddedType);
                MapRepository.Instance.RegisterTypeConverter(embeddedType, embeddedConvertor);
                MapRepository.Instance.RegisterTypeConverter(embeddedListType, embeddedConvertor);
            }
        }
示例#4
0
        private void ConvertQualityModel(IDbConnection conn, IDbTransaction tran, string tableName)
        {
            var qualityModelConverter = new EmbeddedDocumentConverter(new QualityIntConverter());

            using (IDbCommand qualityModelCmd = conn.CreateCommand())
            {
                qualityModelCmd.Transaction = tran;
                qualityModelCmd.CommandText = @"SELECT Distinct Quality FROM " + tableName;
                using (IDataReader qualityModelReader = qualityModelCmd.ExecuteReader())
                {
                    while (qualityModelReader.Read())
                    {
                        var qualityJson = qualityModelReader.GetString(0);

                        SourceQualityModel036 sourceQuality;

                        if (!Json.TryDeserialize <SourceQualityModel036>(qualityJson, out sourceQuality))
                        {
                            continue;
                        }

                        var qualityNewJson = qualityModelConverter.ToDB(new DestinationQualityModel036
                        {
                            Quality = sourceQuality.Quality.Id,
                            Proper  = sourceQuality.Proper
                        });

                        using (IDbCommand updateCmd = conn.CreateCommand())
                        {
                            updateCmd.Transaction = tran;
                            updateCmd.CommandText = "UPDATE " + tableName + " SET Quality = ? WHERE Quality = ?";
                            updateCmd.AddParameter(qualityNewJson);
                            updateCmd.AddParameter(qualityJson);

                            updateCmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
示例#5
0
        private void ConvertQualityProfiles(IDbConnection conn, IDbTransaction tran)
        {
            var qualityProfileItemConverter = new EmbeddedDocumentConverter(new QualityIntConverter());

            // Convert 'Allowed' column in QualityProfiles from Json List<object> to Json List<int> (int = Quality)
            using (IDbCommand qualityProfileCmd = conn.CreateCommand())
            {
                qualityProfileCmd.Transaction = tran;
                qualityProfileCmd.CommandText = @"SELECT Id, Allowed FROM QualityProfiles";
                using (IDataReader qualityProfileReader = qualityProfileCmd.ExecuteReader())
                {
                    while (qualityProfileReader.Read())
                    {
                        var id          = qualityProfileReader.GetInt32(0);
                        var allowedJson = qualityProfileReader.GetString(1);

                        var allowed = Json.Deserialize <List <Quality> >(allowedJson);

                        var items = Quality.DefaultQualityDefinitions.OrderBy(v => v.Weight).Select(v => new ProfileQualityItem {
                            Quality = v.Quality, Allowed = allowed.Contains(v.Quality)
                        }).ToList();

                        var allowedNewJson = qualityProfileItemConverter.ToDB(items);

                        using (IDbCommand updateCmd = conn.CreateCommand())
                        {
                            updateCmd.Transaction = tran;
                            updateCmd.CommandText = "UPDATE QualityProfiles SET Items = ? WHERE Id = ?";
                            updateCmd.AddParameter(allowedNewJson);
                            updateCmd.AddParameter(id);

                            updateCmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
示例#6
0
        private void InsertDefaultQualityProfiles(IDbConnection conn, IDbTransaction tran)
        {
            var profiles             = GetDefaultQualityProfiles(conn);
            var formatItemConverter  = new EmbeddedDocumentConverter <List <ProfileFormatItem180> >(new CustomFormatIntConverter());
            var profileItemConverter = new EmbeddedDocumentConverter <List <QualityProfileItem111> >(new QualityIntConverter());
            var profileId            = 1;

            foreach (var profile in profiles.OrderBy(p => p.Id))
            {
                using (IDbCommand insertNewLanguageProfileCmd = conn.CreateCommand())
                {
                    insertNewLanguageProfileCmd.Transaction = tran;
                    insertNewLanguageProfileCmd.CommandText = "INSERT INTO Profiles (Id, Name, Cutoff, Items, Language, FormatItems, MinFormatScore, CutoffFormatScore, UpgradeAllowed) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
                    insertNewLanguageProfileCmd.AddParameter(profileId);
                    insertNewLanguageProfileCmd.AddParameter(profile.Name);
                    insertNewLanguageProfileCmd.AddParameter(profile.Cutoff);

                    var paramItems = insertNewLanguageProfileCmd.CreateParameter();
                    profileItemConverter.SetValue(paramItems, profile.Items);

                    insertNewLanguageProfileCmd.Parameters.Add(paramItems);
                    insertNewLanguageProfileCmd.AddParameter(profile.Language.Id);

                    var paramFormats = insertNewLanguageProfileCmd.CreateParameter();
                    formatItemConverter.SetValue(paramFormats, profile.FormatItems);

                    insertNewLanguageProfileCmd.Parameters.Add(paramFormats);
                    insertNewLanguageProfileCmd.AddParameter(profile.MinFormatScore);
                    insertNewLanguageProfileCmd.AddParameter(profile.CutoffFormatScore);
                    insertNewLanguageProfileCmd.AddParameter(profile.UpgradeAllowed);

                    insertNewLanguageProfileCmd.ExecuteNonQuery();
                }

                profileId += 1;
            }
        }
        private void UpdateLanguage(IDbConnection conn, IDbTransaction tran)
        {
            var languageConverter = new EmbeddedDocumentConverter <List <Language> >(new LanguageIntConverter());

            var profileLanguages = new Dictionary <int, int>();

            using (IDbCommand getProfileCmd = conn.CreateCommand())
            {
                getProfileCmd.Transaction = tran;
                getProfileCmd.CommandText = "SELECT Id, Language FROM Profiles";

                IDataReader profilesReader = getProfileCmd.ExecuteReader();
                while (profilesReader.Read())
                {
                    var profileId     = profilesReader.GetInt32(0);
                    var movieLanguage = Language.English.Id;
                    try
                    {
                        movieLanguage = profilesReader.GetInt32(1) != -1 ? profilesReader.GetInt32(1) : 1;
                    }
                    catch (InvalidCastException e)
                    {
                        _logger.Debug("Language field not found in Profiles, using English as default." + e.Message);
                    }

                    profileLanguages[profileId] = movieLanguage;
                }
            }

            var movieLanguages = new Dictionary <int, int>();

            using (IDbCommand getSeriesCmd = conn.CreateCommand())
            {
                getSeriesCmd.Transaction = tran;
                getSeriesCmd.CommandText = @"SELECT Id, ProfileId FROM Movies";
                using (IDataReader moviesReader = getSeriesCmd.ExecuteReader())
                {
                    while (moviesReader.Read())
                    {
                        var movieId        = moviesReader.GetInt32(0);
                        var movieProfileId = moviesReader.GetInt32(1);

                        movieLanguages[movieId] = profileLanguages.GetValueOrDefault(movieProfileId, Language.English.Id);
                    }
                }
            }

            var movieFileLanguages = new Dictionary <int, List <Language> >();
            var releaseLanguages   = new Dictionary <string, List <Language> >();

            using (IDbCommand getSeriesCmd = conn.CreateCommand())
            {
                getSeriesCmd.Transaction = tran;
                getSeriesCmd.CommandText = @"SELECT Id, MovieId, SceneName, MediaInfo FROM MovieFiles";
                using (IDataReader movieFilesReader = getSeriesCmd.ExecuteReader())
                {
                    while (movieFilesReader.Read())
                    {
                        var movieFileId        = movieFilesReader.GetInt32(0);
                        var movieId            = movieFilesReader.GetInt32(1);
                        var movieFileSceneName = movieFilesReader.IsDBNull(2) ? null : movieFilesReader.GetString(2);
                        var movieFileMediaInfo = movieFilesReader.IsDBNull(3) ? null : Json.Deserialize <MediaInfo154>(movieFilesReader.GetString(3));
                        var languages          = new List <Language>();

                        if (movieFileMediaInfo != null && movieFileMediaInfo.AudioLanguages.IsNotNullOrWhiteSpace())
                        {
                            var mediaInfolanguages = movieFileMediaInfo.AudioLanguages.Split('/').Select(l => l.Trim()).Distinct().ToList();

                            foreach (var audioLanguage in mediaInfolanguages)
                            {
                                var language = IsoLanguages.FindByName(audioLanguage)?.Language;
                                languages.AddIfNotNull(language);
                            }
                        }

                        if (!languages.Any(l => l.Id != 0) && movieFileSceneName.IsNotNullOrWhiteSpace())
                        {
                            languages = LanguageParser.ParseLanguages(movieFileSceneName);
                        }

                        if (!languages.Any(l => l.Id != 0))
                        {
                            languages = new List <Language> {
                                Language.FindById(movieLanguages[movieId])
                            };
                        }

                        if (movieFileSceneName.IsNotNullOrWhiteSpace())
                        {
                            // Store languages for this scenerelease so we can use in history later
                            releaseLanguages[movieFileSceneName] = languages;
                        }

                        movieFileLanguages[movieFileId] = languages;
                    }
                }
            }

            var historyLanguages = new Dictionary <int, List <Language> >();

            using (IDbCommand getSeriesCmd = conn.CreateCommand())
            {
                getSeriesCmd.Transaction = tran;
                getSeriesCmd.CommandText = @"SELECT Id, SourceTitle, MovieId FROM History";
                using (IDataReader historyReader = getSeriesCmd.ExecuteReader())
                {
                    while (historyReader.Read())
                    {
                        var historyId          = historyReader.GetInt32(0);
                        var historySourceTitle = historyReader.IsDBNull(1) ? null : historyReader.GetString(1);
                        var movieId            = historyReader.GetInt32(2);
                        var languages          = new List <Language>();

                        if (historySourceTitle.IsNotNullOrWhiteSpace() && releaseLanguages.ContainsKey(historySourceTitle))
                        {
                            languages = releaseLanguages[historySourceTitle];
                        }

                        if (!languages.Any(l => l.Id != 0) && historySourceTitle.IsNotNullOrWhiteSpace())
                        {
                            languages = LanguageParser.ParseLanguages(historySourceTitle);
                        }

                        if (!languages.Any(l => l.Id != 0))
                        {
                            languages = new List <Language> {
                                Language.FindById(movieLanguages[movieId])
                            };
                        }

                        historyLanguages[historyId] = languages;
                    }
                }
            }

            var blacklistLanguages = new Dictionary <int, List <Language> >();

            using (IDbCommand getSeriesCmd = conn.CreateCommand())
            {
                getSeriesCmd.Transaction = tran;
                getSeriesCmd.CommandText = @"SELECT Id, SourceTitle, MovieId FROM Blacklist";
                using (IDataReader blacklistReader = getSeriesCmd.ExecuteReader())
                {
                    while (blacklistReader.Read())
                    {
                        var blacklistId          = blacklistReader.GetInt32(0);
                        var blacklistSourceTitle = blacklistReader.IsDBNull(1) ? null : blacklistReader.GetString(1);
                        var movieId   = blacklistReader.GetInt32(2);
                        var languages = new List <Language>();

                        if (blacklistSourceTitle.IsNotNullOrWhiteSpace())
                        {
                            languages = LanguageParser.ParseLanguages(blacklistSourceTitle);
                        }

                        if (!languages.Any(l => l.Id != 0))
                        {
                            languages = new List <Language> {
                                Language.FindById(movieLanguages[movieId])
                            };
                        }

                        blacklistLanguages[blacklistId] = languages;
                    }
                }
            }

            foreach (var group in movieFileLanguages.GroupBy(v => v.Value, v => v.Key))
            {
                var languages = group.Key;

                var movieFileIds = group.Select(v => v.ToString()).Join(",");

                using (IDbCommand updateMovieFilesCmd = conn.CreateCommand())
                {
                    updateMovieFilesCmd.Transaction = tran;
                    updateMovieFilesCmd.CommandText = $"UPDATE MovieFiles SET Languages = ? WHERE Id IN ({movieFileIds})";
                    var param = updateMovieFilesCmd.CreateParameter();
                    languageConverter.SetValue(param, languages);
                    updateMovieFilesCmd.Parameters.Add(param);

                    updateMovieFilesCmd.ExecuteNonQuery();
                }
            }

            foreach (var group in historyLanguages.GroupBy(v => v.Value, v => v.Key))
            {
                var languages = group.Key;

                var historyIds = group.Select(v => v.ToString()).Join(",");

                using (IDbCommand updateHistoryCmd = conn.CreateCommand())
                {
                    updateHistoryCmd.Transaction = tran;
                    updateHistoryCmd.CommandText = $"UPDATE History SET Languages = ? WHERE Id IN ({historyIds})";
                    var param = updateHistoryCmd.CreateParameter();
                    languageConverter.SetValue(param, languages);
                    updateHistoryCmd.Parameters.Add(param);

                    updateHistoryCmd.ExecuteNonQuery();
                }
            }

            foreach (var group in blacklistLanguages.GroupBy(v => v.Value, v => v.Key))
            {
                var languages = group.Key;

                var blacklistIds = group.Select(v => v.ToString()).Join(",");

                using (IDbCommand updateBlacklistCmd = conn.CreateCommand())
                {
                    updateBlacklistCmd.Transaction = tran;
                    updateBlacklistCmd.CommandText = $"UPDATE Blacklist SET Languages = ? WHERE Id IN ({blacklistIds})";
                    var param = updateBlacklistCmd.CreateParameter();
                    languageConverter.SetValue(param, languages);
                    updateBlacklistCmd.Parameters.Add(param);

                    updateBlacklistCmd.ExecuteNonQuery();
                }
            }
        }
        private void UpdateLanguage(IDbConnection conn, IDbTransaction tran)
        {
            var LanguageConverter = new EmbeddedDocumentConverter(new LanguageIntConverter());

            var profileLanguages = new Dictionary <int, int>();

            using (IDbCommand getProfileCmd = conn.CreateCommand())
            {
                getProfileCmd.Transaction = tran;
                getProfileCmd.CommandText = "SELECT Id, Language FROM Profiles";

                IDataReader profilesReader = getProfileCmd.ExecuteReader();
                while (profilesReader.Read())
                {
                    var profileId       = profilesReader.GetInt32(0);
                    var episodeLanguage = Language.English.Id;
                    try
                    {
                        episodeLanguage = profilesReader.GetInt32(1);
                    }
                    catch (InvalidCastException e)
                    {
                        _logger.Debug("Language field not found in Profiles, using English as default." + e.Message);
                    }

                    profileLanguages[profileId] = episodeLanguage;
                }
            }

            var seriesLanguages = new Dictionary <int, int>();

            using (IDbCommand getSeriesCmd = conn.CreateCommand())
            {
                getSeriesCmd.Transaction = tran;
                getSeriesCmd.CommandText = @"SELECT Id, ProfileId FROM Series";
                using (IDataReader seriesReader = getSeriesCmd.ExecuteReader())
                {
                    while (seriesReader.Read())
                    {
                        var seriesId        = seriesReader.GetInt32(0);
                        var seriesProfileId = seriesReader.GetInt32(1);

                        seriesLanguages[seriesId] = profileLanguages.GetValueOrDefault(seriesProfileId, Language.English.Id);
                    }
                }
            }

            foreach (var group in seriesLanguages.GroupBy(v => v.Value, v => v.Key))
            {
                var languageJson = LanguageConverter.ToDB(Language.FindById(group.Key));

                var seriesIds = group.Select(v => v.ToString()).Join(",");

                using (IDbCommand updateEpisodeFilesCmd = conn.CreateCommand())
                {
                    updateEpisodeFilesCmd.Transaction = tran;
                    updateEpisodeFilesCmd.CommandText = $"UPDATE EpisodeFiles SET Language = ? WHERE SeriesId IN ({seriesIds})";
                    updateEpisodeFilesCmd.AddParameter(languageJson);

                    updateEpisodeFilesCmd.ExecuteNonQuery();
                }

                using (IDbCommand updateHistoryCmd = conn.CreateCommand())
                {
                    updateHistoryCmd.Transaction = tran;
                    updateHistoryCmd.CommandText = $"UPDATE History SET Language = ? WHERE SeriesId IN ({seriesIds})";
                    updateHistoryCmd.AddParameter(languageJson);

                    updateHistoryCmd.ExecuteNonQuery();
                }

                using (IDbCommand updateBlacklistCmd = conn.CreateCommand())
                {
                    updateBlacklistCmd.Transaction = tran;
                    updateBlacklistCmd.CommandText = $"UPDATE Blacklist SET Language = ? WHERE SeriesId IN ({seriesIds})";
                    updateBlacklistCmd.AddParameter(languageJson);

                    updateBlacklistCmd.ExecuteNonQuery();
                }
            }
        }