diff --git a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs index 5e0d7d4..21d4a53 100644 --- a/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs +++ b/DataTableStorages/skyscraper5.Data.PostgreSql/DvbNip.cs @@ -71,8 +71,64 @@ namespace skyscraper5.Data.PostgreSql command.Dispose(); } + private Dictionary, DateTime> _dvbNipPrivateDataSpecifiers; public bool DvbNipPrivateDataSpecifier(NipActualCarrierInformation currentCarrierInformation, DateTime versionUpdate, uint privateDataSpecifier, List privateDataSessions) + { + if (_dvbNipPrivateDataSpecifiers == null) + _dvbNipPrivateDataSpecifiers = new Dictionary, DateTime>(); + + Tuple coordinates = new Tuple( + currentCarrierInformation.NipNetworkId, currentCarrierInformation.NipCarrierId, + currentCarrierInformation.NipLinkId, currentCarrierInformation.NipServiceId, privateDataSpecifier); + + if (_dvbNipPrivateDataSpecifiers.ContainsKey(coordinates)) + { + //PDS bereits bekannt. + DateTime lastChecked = _dvbNipPrivateDataSpecifiers[coordinates]; + if (versionUpdate > lastChecked) + { + //Ist neuer, also updaten. + EnqueueTask(x => UpdateDvbNipPrivateDataSpecifier(x,coordinates,versionUpdate,privateDataSessions)); + _dvbNipPrivateDataSpecifiers[coordinates] = versionUpdate; + return true; + } + else + { + //Ist älter oder hat sich nicht geändert. + return false; + } + } + else + { + //PDS noch nicht bekannt + EnqueueTask(x => InsertDvbNipPrivateDataSpecifier(x,coordinates,versionUpdate,privateDataSessions)); + _dvbNipPrivateDataSpecifiers[coordinates] = versionUpdate; + return true; + } + } + + private void InsertDvbNipPrivateDataSpecifier(NpgsqlConnection connection, Tuple coordinates, DateTime versionUpdate, List privateDataSessions) + { + DateTime localUpdate = new DateTime(versionUpdate.Year, versionUpdate.Month, versionUpdate.Day, + versionUpdate.Hour, versionUpdate.Minute, versionUpdate.Second, DateTimeKind.Local); + NpgsqlCommand command = connection.CreateCommand(); + command.CommandText = "INSERT INTO dvbnip_private_data_specifiers VALUES (@nid,@cid,@lid,@sid,@pds,DEFAULT,@vu,@s)"; + command.Parameters.AddWithValue("@nid", NpgsqlDbType.Integer, (int)coordinates.Item1); + command.Parameters.AddWithValue("@cid", NpgsqlDbType.Integer, (int)coordinates.Item2); + command.Parameters.AddWithValue("@lid", NpgsqlDbType.Integer, (int)coordinates.Item3); + command.Parameters.AddWithValue("@sid", NpgsqlDbType.Integer, (int)coordinates.Item4); + command.Parameters.AddWithValue("@pds", NpgsqlDbType.Bigint, (long)coordinates.Item5); + command.Parameters.AddWithValue("@vu", NpgsqlDbType.Timestamp, localUpdate); + command.Parameters.AddWithValue("@s", NpgsqlDbType.Json, JsonConvert.SerializeObject(privateDataSessions)); + int executeNonQuery = command.ExecuteNonQuery(); + if (executeNonQuery != 1) + { + throw new DataException(String.Format("Expected to insert {0} rows, but it were {1}", 1, executeNonQuery)); + } + } + + private void UpdateDvbNipPrivateDataSpecifier(NpgsqlConnection connection, Tuple coordinates, DateTime versionUpdate, List privateDataSessions) { throw new NotImplementedException(); } diff --git a/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs b/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs index ad28f42..0f56926 100644 --- a/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs +++ b/DataTableStorages/skyscraper5.Data.PostgreSql/Dvbi.cs @@ -231,9 +231,10 @@ namespace skyscraper5.Data.PostgreSql private void UpdateDvbiServiceListEntryPointUpdateDateEx(NpgsqlConnection x, long hash, DateTime currentTime) { + DateTime currentTimeLocal = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, currentTime.Minute, currentTime.Second, DateTimeKind.Local); NpgsqlCommand command = x.CreateCommand(); command.CommandText = "UPDATE dvbi_service_list_entry_points SET dateupdated = @dupdated WHERE sourcehash = @shash"; - command.Parameters.AddWithValue("@dupdated", NpgsqlDbType.Timestamp, currentTime); + command.Parameters.AddWithValue("@dupdated", NpgsqlDbType.Timestamp, currentTimeLocal); command.Parameters.AddWithValue("@shash",NpgsqlDbType.Bigint, hash); command.ExecuteNonQuery(); }