diff --git a/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs b/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs index c224d35..cacc3e6 100644 --- a/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs +++ b/BlobStorages/skyscraper5.Data.Minio/MinioObjectStorage.cs @@ -15,6 +15,7 @@ using System.Globalization; using System.IO; using System.Net; using System.Runtime.InteropServices; +using System.Threading; using System.Threading.Tasks; using Minio.DataModel.Response; using skyscraper5.Dvb.Descriptors; @@ -150,7 +151,11 @@ namespace skyscraper5.Data ObjectNotFoundException objectNotFoundException = minioException as ObjectNotFoundException; if (objectNotFoundException != null) { + + Monitor.Enter(definetlyMissingFiles); definetlyMissingFiles.Add(combine); + Monitor.Exit(definetlyMissingFiles); + return false; } else diff --git a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs index 51b7589..a46da96 100644 --- a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs +++ b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs @@ -412,6 +412,7 @@ namespace skyscraper5.Data.PostgreSql command.Parameters.AddWithValue("@ct", NpgsqlDbType.Text, multicastSessionTypePresentationManifestLocator.contentType); command.Parameters.AddWithValue("@mi", NpgsqlDbType.Text, multicastSessionTypePresentationManifestLocator.manifestId); command.Parameters.AddWithValue("@to", NpgsqlDbType.Text, multicastSessionTypePresentationManifestLocator.transportObjectURI); + 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)); @@ -466,7 +467,10 @@ namespace skyscraper5.Data.PostgreSql if (transport.ForwardErrorCorrectionParameters != null) { - throw new NotImplementedException(nameof(transport.ForwardErrorCorrectionParameters)); + for (int i = 0; i < transport.ForwardErrorCorrectionParameters.Length; i++) + { + InsertForwardErrorCorrectionParameters(connection,uuid, i, transport.ForwardErrorCorrectionParameters[i]); + } } if (transport.EndpointAddress.Length > 1) @@ -489,6 +493,35 @@ namespace skyscraper5.Data.PostgreSql } } + private void InsertForwardErrorCorrectionParameters(NpgsqlConnection connection, Guid uuid, int ordinal, ForwardErrorCorrectionParametersType transportForwardErrorCorrectionParameter) + { + if (transportForwardErrorCorrectionParameter.Any != null) + { + throw new NotImplementedException(nameof(transportForwardErrorCorrectionParameter.Any)); + } + + if (transportForwardErrorCorrectionParameter.AnyAttr != null) + { + throw new NotImplementedException(nameof(transportForwardErrorCorrectionParameter.AnyAttr)); + } + + if (transportForwardErrorCorrectionParameter.EndpointAddress != null) + { + throw new NotImplementedException(nameof(transportForwardErrorCorrectionParameter.EndpointAddress)); + } + + NpgsqlCommand command = connection.CreateCommand(); + command.CommandText = "INSERT INTO dvbnip_forward_error_correction_parameter VALUES (@uuid,@ordinal,DEFAULT,@sidentifier,@opercentage)"; + command.Parameters.AddWithValue("@uuid", NpgsqlDbType.Uuid, uuid); + command.Parameters.AddWithValue("@ordinal", NpgsqlDbType.Integer, ordinal); + command.Parameters.AddWithValue("@sidentifier", NpgsqlDbType.Text, transportForwardErrorCorrectionParameter.SchemeIdentifier); + command.Parameters.AddWithValue("@opercentage", NpgsqlDbType.Integer, Convert.ToInt32(transportForwardErrorCorrectionParameter.OverheadPercentage)); + int executeNonQuery = command.ExecuteNonQuery(); + if (executeNonQuery != 1) + throw new DataException(String.Format("Expected {0}, got {1}", 1, executeNonQuery)); + command.Dispose(); + } + private void DvbNipInsertServiceComponentIdentifier(NpgsqlConnection connection, Guid uuid, int i, ServiceComponentIdentifierType serviceComponentIdentifier) { NpgsqlCommand command = connection.CreateCommand(); @@ -518,6 +551,18 @@ namespace skyscraper5.Data.PostgreSql HLSComponentIdentifierType hls = (HLSComponentIdentifierType)serviceComponentIdentifier; command.Parameters["@media_playlist_locator"].Value = hls.mediaPlaylistLocator; break; + case "ns2:DASHComponentIdentifierType": + command.Parameters["@xsiType"].Value = 3; + DASHComponentIdentifierType dash3 = (DASHComponentIdentifierType)serviceComponentIdentifier; + command.Parameters["@adaption_set_id"].Value = (int)dash3.adaptationSetIdentifier; + command.Parameters["@period_id"].Value = dash3.periodIdentifier; + command.Parameters["@representation_id"].Value = dash3.representationIdentifier; + break; + case "ns2:HLSComponentIdentifierType": + command.Parameters["@xsiType"].Value = 4; + HLSComponentIdentifierType hls4 = (HLSComponentIdentifierType)serviceComponentIdentifier; + command.Parameters["@media_playlist_locator"].Value = hls4.mediaPlaylistLocator; + break; default: throw new NotImplementedException(xsiType); } diff --git a/skyscraper8/Properties/launchSettings.json b/skyscraper8/Properties/launchSettings.json index cd0d871..0095433 100644 --- a/skyscraper8/Properties/launchSettings.json +++ b/skyscraper8/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "skyscraper8": { "commandName": "Project", - "commandLineArgs": "\"Z:\\TelephoneExchange\\11141_h_20250805_2233.ts\"", + "commandLineArgs": "file-live \"C:\\Temp\\12226_v_20250809_2131.ts\"", "remoteDebugEnabled": false }, "Container (Dockerfile)": {