diff --git a/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs b/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs index 59ac932..3a26093 100644 --- a/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs +++ b/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs @@ -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) diff --git a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs index 7a4cd40..62c48e7 100644 --- a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs +++ b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs @@ -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)); diff --git a/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs b/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs index 0f56926..0136f42 100644 --- a/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs +++ b/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs @@ -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 _knownDvbiServiceListEntryPointUpdateDates;