From 0a6c1a9acd2f65558d5723027d2d3041755f6b53 Mon Sep 17 00:00:00 2001 From: feyris-tan <4116042+feyris-tan@users.noreply.github.com> Date: Wed, 25 Jun 2025 21:22:46 +0200 Subject: [PATCH] Implemented DvbNipTestForNetwork and DvbNipInsertNetwork in PostgreSQL. --- .../skyscraper5.Data.PostgreSql/DvbNip.cs | 72 +++++++++++++++++-- 1 file changed, 67 insertions(+), 5 deletions(-) diff --git a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs index ce4a338..b66fa44 100644 --- a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs +++ b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs @@ -1,12 +1,13 @@ -using skyscraper8.DvbNip; +using Npgsql; +using NpgsqlTypes; +using skyscraper8.DvbNip; using System; using System.Collections.Generic; using System.Data; using System.Linq; +using System.Net; using System.Text; using System.Threading.Tasks; -using Npgsql; -using NpgsqlTypes; namespace skyscraper5.Data.PostgreSql { @@ -75,14 +76,75 @@ namespace skyscraper5.Data.PostgreSql throw new NotImplementedException(); } + private bool[] _dvbNipKnownNetworks; public bool DvbNipTestForNetwork(BroadcastNetworkType network) { - throw new NotImplementedException(); + if (_dvbNipKnownNetworks == null) + _dvbNipKnownNetworks = new bool[ushort.MaxValue]; + + if (_dvbNipKnownNetworks[network.NIPNetworkID]) + return true; + + bool result = false; + using (NpgsqlConnection connection = new NpgsqlConnection(connectionStringBuilder.ToString())) + { + connection.Open(); + NpgsqlCommand command = connection.CreateCommand(); + command.CommandText = "SELECT dateadded FROM dvbnip_network WHERE nid = @nid"; + command.Parameters.AddWithValue("@nid", NpgsqlDbType.Integer, (int)network.NIPNetworkID); + NpgsqlDataReader dataReader = command.ExecuteReader(); + if (dataReader.Read()) + { + _dvbNipKnownNetworks[network.NIPNetworkID] = true; + result = true; + } + dataReader.Close(); + connection.Close(); + } + + return result; } public void DvbNipInsertNetwork(BroadcastNetworkType network) { - throw new NotImplementedException(); + _dvbNipKnownNetworks[network.NIPNetworkID] = true; + EnqueueTask(x => DvbNipInsertNetworkEx(x, network)); + } + + private void DvbNipInsertNetworkEx(NpgsqlConnection connection, BroadcastNetworkType network) + { + NpgsqlCommand command = connection.CreateCommand(); + command.CommandText = "INSERT INTO dvbnip_network VALUES (@nid,DEFAULT,@pn,@nn,@nt,@op,@wef)"; + command.Parameters.AddWithValue("@nid", NpgsqlDbType.Integer, (int)network.NIPNetworkID); + command.Parameters.AddWithValue("@pn", NpgsqlDbType.Text, network.NIPNetworkProviderName); + command.Parameters.AddWithValue("@nn", NpgsqlDbType.Text, network.NetworkName); + command.Parameters.AddWithValue("@nt", NpgsqlDbType.Integer, (int)network.NetworkType); + command.Parameters.AddWithValue("@op", NpgsqlDbType.Double, network.SatellitePosition.OrbitalPosition); + command.Parameters.AddWithValue("@wef", NpgsqlDbType.Integer, (int)network.SatellitePosition.West_East_flag); + command.ExecuteNonQuery(); + command.Dispose(); + + foreach (NIPStreamType nipStreamType in network.NIPStream) + { + DvbNipInsertNetworkStreamType(connection, network.NIPNetworkID, nipStreamType); + } + } + + private void DvbNipInsertNetworkStreamType(NpgsqlConnection connection, ushort networkNipNetworkId, NIPStreamType nipStreamType) + { + NpgsqlCommand command = connection.CreateCommand(); + command.CommandText = "INSERT INTO dvbnip_network_stream VALUES (@nid,@cid,@lid,@sid,@spn,DEFAULT,@llf,@bt,@s)"; + command.Parameters.AddWithValue("@nid", NpgsqlDbType.Integer, (int)networkNipNetworkId); + command.Parameters.AddWithValue("@cid", NpgsqlDbType.Integer, int.Parse(nipStreamType.NIPCarrierID)); + command.Parameters.AddWithValue("@lid", NpgsqlDbType.Integer, int.Parse(nipStreamType.NIPLinkID)); + command.Parameters.AddWithValue("@sid", NpgsqlDbType.Integer, (int)nipStreamType.NIPServiceID); + command.Parameters.AddWithValue("@spn", NpgsqlDbType.Text, nipStreamType.NIPStreamProviderName); + command.Parameters.AddWithValue("@llf", NpgsqlDbType.Integer, (int)nipStreamType.LinkLayerFormat); + command.Parameters.AddWithValue("@bt", NpgsqlDbType.Integer, (int)nipStreamType.BootstrapStream.BootstrapType); + command.Parameters.AddWithValue("@s", NpgsqlDbType.Integer, (int)nipStreamType.BootstrapStream.Status); + command.ExecuteNonQuery(); + command.Dispose(); + } public bool DvbNipTestForService(BroadcastMediaStreamType broadcastMediaStreamType)