feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

84 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Npgsql;
using skyscraper5.Skyscraper.Scraper.Storage.Utilities;
namespace skyscraper5.Data.PostgreSql
{
public partial class PostgresqlDataStore
{
private HashSet<DatabaseKeyDsmCcModule> _blacklistedDsmCcModules;
public bool IsDsmCcModuleBlacklisted(int currentNetworkId, int currentTransportStreamId, int elementaryPid, ushort moduleId, byte moduleVersion)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionStringBuilder.ToString()))
{
connection.Open();
NpgsqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT MAX(progress) FROM dsmcc_modules_blacklist WHERE cnid = @cnid AND ctsid = @ctsid AND elementary_pid = @pid AND module_id = @moduleId AND module_version = @moduleVersion";
command.Parameters.AddWithValue("@cnid",NpgsqlTypes.NpgsqlDbType.Integer, currentNetworkId);
command.Parameters.AddWithValue("@ctsid", NpgsqlTypes.NpgsqlDbType.Integer, currentTransportStreamId);
command.Parameters.AddWithValue("@pid", NpgsqlTypes.NpgsqlDbType.Integer, elementaryPid);
command.Parameters.AddWithValue("@moduleId", NpgsqlTypes.NpgsqlDbType.Integer, (int)moduleId);
command.Parameters.AddWithValue("@moduleVersion", NpgsqlTypes.NpgsqlDbType.Integer, (int)moduleVersion);
NpgsqlDataReader dataReader = command.ExecuteReader();
if (!dataReader.Read())
{
dataReader.Close();
command.Dispose();
return false;
}
if (dataReader.IsDBNull(0))
{
dataReader.Close();
command.Dispose();
return false;
}
double bestProgress = dataReader.GetDouble(0);
dataReader.Close();
command.Dispose();
command = connection.CreateCommand();
command.CommandText = "SELECT COUNT(*) FROM dsmcc_modules_blacklist WHERE cnid = @cnid AND ctsid = @ctsid AND elementary_pid = @pid AND module_id = @moduleId AND module_version = @moduleVersion AND progress = @progress";
command.Parameters.AddWithValue("@cnid", NpgsqlTypes.NpgsqlDbType.Integer, currentNetworkId);
command.Parameters.AddWithValue("@ctsid", NpgsqlTypes.NpgsqlDbType.Integer, currentTransportStreamId);
command.Parameters.AddWithValue("@pid", NpgsqlTypes.NpgsqlDbType.Integer, elementaryPid);
command.Parameters.AddWithValue("@moduleId", NpgsqlTypes.NpgsqlDbType.Integer, (int)moduleId);
command.Parameters.AddWithValue("@moduleVersion", NpgsqlTypes.NpgsqlDbType.Integer, (int)moduleVersion);
command.Parameters.AddWithValue("@progress", NpgsqlTypes.NpgsqlDbType.Double, bestProgress);
dataReader = command.ExecuteReader();
dataReader.Read();
long numFailures = dataReader.GetInt64(0);
dataReader.Close();
command.Dispose();
connection.Close();
return numFailures >= 3;
}
}
public void FailDsmCcDownload(DatabaseKeyDsmCcModule key, double value)
{
using (NpgsqlConnection connection = new NpgsqlConnection(connectionStringBuilder.ToString()))
{
connection.Open();
NpgsqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO dsmcc_modules_blacklist (cnid, ctsid, elementary_pid, module_id, module_version, progress) VALUES (@cnid,@ctsid,@pid,@moduleId,@moduleVersion,@progress)";
command.Parameters.AddWithValue("@cnid", NpgsqlTypes.NpgsqlDbType.Integer, key.CurrentNetworkId);
command.Parameters.AddWithValue("@ctsid", NpgsqlTypes.NpgsqlDbType.Integer, key.CurrentTransportStreamId);
command.Parameters.AddWithValue("@pid", NpgsqlTypes.NpgsqlDbType.Integer, key.ElementaryPid);
command.Parameters.AddWithValue("@moduleId", NpgsqlTypes.NpgsqlDbType.Integer, (int)key.ModuleId);
command.Parameters.AddWithValue("@moduleVersion", NpgsqlTypes.NpgsqlDbType.Integer, (int)key.ModuleVersion);
command.Parameters.AddWithValue("@progress", NpgsqlTypes.NpgsqlDbType.Double, value);
int result = command.ExecuteNonQuery();
if (result != 1)
throw new NpgsqlException(String.Format("Excepted to write 1 line, but wrote {0}", result));
command.Dispose();
connection.Close();
}
}
}
}