Some fixes for the DVB-NIP and DVB-I PostgreSQL integration.

This commit is contained in:
feyris-tan 2025-06-29 15:29:58 +02:00
parent 26ee56172c
commit 645b10959e
3 changed files with 101 additions and 8 deletions

View File

@ -254,7 +254,8 @@ namespace skyscraper5.Data
public bool DvbNipTestForFile(string announcedFileContentLocation)
{
string path = "/nip/" + DvbNipUtilities.MakeFilename(announcedFileContentLocation);
return FileExists(path);
bool result = FileExists(path);
return result;
}
public void DvbNipFileArrival(NipActualCarrierInformation carrier, FluteListener listener)

View File

@ -395,7 +395,7 @@ namespace skyscraper5.Data.PostgreSql
command.Parameters.AddWithValue("@ordinal", NpgsqlDbType.Integer, ordinal);
command.Parameters.AddWithValue("@cppp", NpgsqlDbType.Text, multicastSessionTypePresentationManifestLocator.contentPlaybackPathPattern);
command.Parameters.AddWithValue("@ct", NpgsqlDbType.Text, multicastSessionTypePresentationManifestLocator.contentType);
command.Parameters.AddWithValue("@mi", NpgsqlDbType.Uuid, Guid.Parse(multicastSessionTypePresentationManifestLocator.manifestId));
command.Parameters.AddWithValue("@mi", NpgsqlDbType.Text, multicastSessionTypePresentationManifestLocator.manifestId);
command.Parameters.AddWithValue("@to", NpgsqlDbType.Text, multicastSessionTypePresentationManifestLocator.transportObjectURI);
int executeNonQuery = command.ExecuteNonQuery();
if (executeNonQuery != 1)
@ -413,11 +413,28 @@ namespace skyscraper5.Data.PostgreSql
command.Parameters.AddWithValue("@serial", NpgsqlDbType.Integer, serial);
command.Parameters.AddWithValue("@ordinal", NpgsqlDbType.Integer, ordinal);
command.Parameters.AddWithValue("@id", NpgsqlDbType.Text, transport.id);
command.Parameters.AddWithValue("@average", NpgsqlDbType.Integer, int.Parse(transport.BitRate.average));
command.Parameters.AddWithValue("@maximum", NpgsqlDbType.Integer, int.Parse(transport.BitRate.maximum));
if (!string.IsNullOrEmpty(transport.BitRate.average))
{
command.Parameters.AddWithValue("@average", NpgsqlDbType.Integer, int.Parse(transport.BitRate.average));
}
else
{
command.Parameters.AddWithValue("@average", NpgsqlDbType.Integer, DBNull.Value);
}
command.Parameters.AddWithValue("@maximum", NpgsqlDbType.Integer, int.Parse(transport.BitRate.maximum));
command.Parameters.AddWithValue("@mediaTsi", NpgsqlDbType.Integer, int.Parse(transport.EndpointAddress[0].MediaTransportSessionIdentifier));
command.Parameters.AddWithValue("@dstaddr", NpgsqlDbType.Inet, IPAddress.Parse(transport.EndpointAddress[0].NetworkDestinationGroupAddress));
command.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, IPAddress.Parse(transport.EndpointAddress[0].NetworkSourceAddress));
if (!string.IsNullOrEmpty(transport.EndpointAddress[0].NetworkSourceAddress))
{
command.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, IPAddress.Parse(transport.EndpointAddress[0].NetworkSourceAddress));
}
else
{
command.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, DBNull.Value);
}
command.Parameters.AddWithValue("@dstport", NpgsqlDbType.Integer, int.Parse(transport.EndpointAddress[0].TransportDestinationPort));
command.Parameters.AddWithValue("@protocolId", NpgsqlDbType.Text, transport.TransportProtocol.protocolIdentifier);
command.Parameters.AddWithValue("@protocolVersion", NpgsqlDbType.Integer, int.Parse(transport.TransportProtocol.protocolVersion));
@ -425,6 +442,7 @@ namespace skyscraper5.Data.PostgreSql
command.Parameters.AddWithValue("@sessionIdleTimeout", NpgsqlDbType.Integer, int.Parse(transport.sessionIdleTimeout));
command.Parameters.AddWithValue("@transmissionMode", NpgsqlDbType.Integer, (int)transport.transmissionMode);
command.Parameters.AddWithValue("@transportSecurity", NpgsqlDbType.Integer, (int)transport.transportSecurity);
NpgsqlDataReader dataReader = command.ExecuteReader();
dataReader.Read();
Guid uuid = dataReader.GetGuid(0);
@ -463,7 +481,7 @@ namespace skyscraper5.Data.PostgreSql
command.Parameters.AddWithValue("@guid", NpgsqlDbType.Uuid, uuid);
command.Parameters.AddWithValue("@ordinal", NpgsqlDbType.Integer, i);
command.Parameters.Add("@xsiType", NpgsqlDbType.Integer);
command.Parameters.AddWithValue("@manifestId", NpgsqlDbType.Uuid, Guid.Parse(serviceComponentIdentifier.manifestIdRef));
command.Parameters.AddWithValue("@manifestId", NpgsqlDbType.Text, serviceComponentIdentifier.manifestIdRef);
command.Parameters.Add("@representation_id", NpgsqlDbType.Text);
command.Parameters.Add("@period_id", NpgsqlDbType.Text);
command.Parameters.Add("@adaption_set_id", NpgsqlDbType.Integer);
@ -545,17 +563,47 @@ namespace skyscraper5.Data.PostgreSql
private void DvbNipInsertMulticastGatewayConfigurationTransportSessionEx(NpgsqlConnection connection, NipActualCarrierInformation carrier, MulticastEndpointAddressType multicastEndpointAddressType)
{
DatabaseKeyNipMulticastGatewayConfigurationTransportSession key = new DatabaseKeyNipMulticastGatewayConfigurationTransportSession(carrier, multicastEndpointAddressType);
if (_knownNipMulticastGatewayConfigurationTransportSessions.Contains(key))
return;
_knownNipMulticastGatewayConfigurationTransportSessions.Add(key);
NpgsqlCommand checkCommand = connection.CreateCommand();
checkCommand.CommandText =
"SELECT dateadded FROM dvbnip_multicast_gateway_configuration_transport_sessions WHERE network_id = @nid " +
"AND carrier_id = @cid AND link_id = @lid AND service_id = @sid AND source_address = @srcaddr " +
"AND destination_address = @dstaddr AND destination_port = @dstport AND tsi = @tsi";
checkCommand.Parameters.AddWithValue("@nid", NpgsqlDbType.Integer, (int)key.NetworkId);
checkCommand.Parameters.AddWithValue("@cid", NpgsqlDbType.Integer, (int)key.CarrierId);
checkCommand.Parameters.AddWithValue("@lid", NpgsqlDbType.Integer, (int)key.LinkId);
checkCommand.Parameters.AddWithValue("@sid", NpgsqlDbType.Integer, (int)key.ServiceId);
if (key.SourceAddress != null)
checkCommand.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, key.SourceAddress);
else
checkCommand.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, new IPAddress(0));
checkCommand.Parameters.AddWithValue("@dstaddr", NpgsqlDbType.Inet, key.DestinationAddress);
checkCommand.Parameters.AddWithValue("@dstport", NpgsqlDbType.Integer, (int)key.DestinationPort);
checkCommand.Parameters.AddWithValue("@tsi", NpgsqlDbType.Integer, key.TSI);
NpgsqlDataReader dataReader = checkCommand.ExecuteReader();
bool alreadyExist = dataReader.Read();
dataReader.Close();
checkCommand.Dispose();
if (alreadyExist)
return;
NpgsqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO dvbnip_multicast_gateway_configuration_transport_sessions VALUES (@nid,@cid,@lid,@sid,@srcaddr,@dstaddr,@dstport,@tsi,DEFAULT)";
command.Parameters.AddWithValue("@nid", NpgsqlDbType.Integer, (int)key.NetworkId);
command.Parameters.AddWithValue("@cid", NpgsqlDbType.Integer, (int)key.CarrierId);
command.Parameters.AddWithValue("@lid", NpgsqlDbType.Integer, (int)key.LinkId);
command.Parameters.AddWithValue("@sid", NpgsqlDbType.Integer, (int)key.ServiceId);
command.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, key.SourceAddress);
if (key.SourceAddress != null)
command.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, key.SourceAddress);
else
command.Parameters.AddWithValue("@srcaddr", NpgsqlDbType.Inet, new IPAddress(0));
command.Parameters.AddWithValue("@dstaddr", NpgsqlDbType.Inet, key.DestinationAddress);
command.Parameters.AddWithValue("@dstport", NpgsqlDbType.Integer, (int)key.DestinationPort);
command.Parameters.AddWithValue("@tsi", NpgsqlDbType.Integer, key.TSI);
SetNulls(command);
int executeNonQuery = command.ExecuteNonQuery();
if (executeNonQuery != 1)
throw new DataException(String.Format("Expected to insert {0} rows, but it were {1}", 1, executeNonQuery));

View File

@ -181,6 +181,17 @@ namespace skyscraper5.Data.PostgreSql
private void AddDvbiServiceToServiceList(NpgsqlConnection x, string id, string serviceListId)
{
NpgsqlCommand checkCommand = x.CreateCommand();
checkCommand.CommandText = "SELECT dateadded FROM dvbi_services_to_service_lists WHERE service = @service AND service_list = @service_list";
checkCommand.Parameters.AddWithValue("@service", NpgsqlDbType.Text, id);
checkCommand.Parameters.AddWithValue("@servicelist", NpgsqlDbType.Text, serviceListId);
NpgsqlDataReader dataReader = checkCommand.ExecuteReader();
bool alreadyKnown = dataReader.Read();
dataReader.Close();
checkCommand.Dispose();
if (alreadyKnown)
return;
NpgsqlCommand command = x.CreateCommand();
command.CommandText = "INSERT INTO dvbi_services_to_service_lists VALUES (@service,@servicelist,DEFAULT)";
command.Parameters.AddWithValue("@service", NpgsqlDbType.Text, id);
@ -200,6 +211,7 @@ namespace skyscraper5.Data.PostgreSql
int version;
using (NpgsqlConnection connection = new NpgsqlConnection(connectionStringBuilder.ToString()))
{
connection.Open();
NpgsqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT version FROM dvbi_services WHERE id = @id";
command.Parameters.AddWithValue("@id", NpgsqlDbType.Text, id);
@ -216,7 +228,39 @@ namespace skyscraper5.Data.PostgreSql
public void UpdateDvbiService(DvbIService service)
{
throw new NotImplementedException();
EnqueueTask(x => UpdateDvbiServiceEx(x, service));
}
private void UpdateDvbiServiceEx(NpgsqlConnection connection, DvbIService service)
{
NpgsqlCommand command = connection.CreateCommand();
command.CommandText = "update dvbi_services SET\r\nprovider_name = @provider_name, logo_url = @logo_url, onid = @onid, sid = @sid, tsid = @tsid, fec = @fec,\r\nfrequency = @frequency, modcod = @modcod, modulation_system = @modulation_system, modulation_type = @modulation_type,\r\norbital_position = @orbital_position, polarization = @polarization, roll_off = @roll_off, symbol_rate = @symbol_rate,\r\nsat_ip_query_parameters = @sat_ip_query_parameters, service_name = @service_name, service_type = @service_type, \r\nversion = @version, related_item = @related_item, country = @country, ranking = @ranking, region = @region, \r\nservice_description = @service_description\r\nWHERE id = @id";
command.Parameters.AddWithValue("@id", NpgsqlDbType.Text, service.Id);
command.Parameters.AddWithValue("@provider_name", NpgsqlDbType.Text, service.ProviderName);
command.Parameters.AddWithValue("@logo_url", NpgsqlDbType.Text, service.LogoURL);
command.Parameters.AddWithValue("@onid", NpgsqlDbType.Integer, (int)service.OriginalNetworkId);
command.Parameters.AddWithValue("@sid", NpgsqlDbType.Integer, (int)service.ServiceId);
command.Parameters.AddWithValue("@tsid", NpgsqlDbType.Integer, (int)service.TransportStreamId);
command.Parameters.AddWithValue("@fec", NpgsqlDbType.Integer, (int)service.FEC);
command.Parameters.AddWithValue("@frequency", NpgsqlDbType.Text, service.Frequency);
command.Parameters.AddWithValue("@modcod", NpgsqlDbType.Integer, (int)service.Modcod);
command.Parameters.AddWithValue("@modulation_system", NpgsqlDbType.Integer, (int)service.ModulationSystem);
command.Parameters.AddWithValue("@modulation_type", NpgsqlDbType.Integer, (int)service.ModulationType);
command.Parameters.AddWithValue("@orbital_position", NpgsqlDbType.Double, service.OrbitalPosition);
command.Parameters.AddWithValue("@polarization", NpgsqlDbType.Integer, (int)service.Polarization);
command.Parameters.AddWithValue("@roll_off", NpgsqlDbType.Integer, (int)service.RollOff);
command.Parameters.AddWithValue("@symbol_rate", NpgsqlDbType.Text, service.SymbolRate);
command.Parameters.AddWithValue("@sat_ip_query_parameters", NpgsqlDbType.Text, service.SatIpQueryParameters);
command.Parameters.AddWithValue("@service_name", NpgsqlDbType.Text, service.ServiceName);
command.Parameters.AddWithValue("@service_type", NpgsqlDbType.Text, service.ServiceType);
command.Parameters.AddWithValue("@version", NpgsqlDbType.Integer, service.Version);
command.Parameters.AddWithValue("@related_item", NpgsqlDbType.Text, service.RelatedItem);
command.Parameters.AddWithValue("@country", NpgsqlDbType.Text, service.Country);
command.Parameters.AddWithValue("@ranking", NpgsqlDbType.Integer, service.Ranking);
command.Parameters.AddWithValue("@region", NpgsqlDbType.Text, service.Region);
command.Parameters.AddWithValue("@service_description", NpgsqlDbType.Text, service.ServiceDescription);
SetNulls(command);
command.ExecuteNonQuery();
}
private Dictionary<long, DateTime> _knownDvbiServiceListEntryPointUpdateDates;