diff --git a/src/sectionsd/SIevents.cpp b/src/sectionsd/SIevents.cpp index 3287e41da..05153219f 100644 --- a/src/sectionsd/SIevents.cpp +++ b/src/sectionsd/SIevents.cpp @@ -66,6 +66,7 @@ SIevent::SIevent(const struct eit_event *e) running = (int)e->running_status; table_id = 0xFF; /* not set */ + version = 0xFF; service_id = 0; original_network_id = 0; transport_stream_id = 0; @@ -79,6 +80,7 @@ SIevent::SIevent(const t_original_network_id _original_network_id, const t_trans service_id = _service_id; eventID = _event_id; table_id = 0xFF; /* not set */ + version = 0xFF; /* contentClassification = ""; userClassification = ""; itemDescription = ""; @@ -109,6 +111,7 @@ SIevent::SIevent(const SIevent &e) running=e.running; vps = e.vps; table_id = e.table_id; + version = e.version; } int SIevent::saveXML(FILE *file, const char *serviceName) const diff --git a/src/sectionsd/SIevents.hpp b/src/sectionsd/SIevents.hpp index 7b35408bb..679fe881f 100644 --- a/src/sectionsd/SIevents.hpp +++ b/src/sectionsd/SIevents.hpp @@ -354,6 +354,7 @@ public: eventID = 0; vps = 0; table_id = 0xFF; /* 0xFF means "not set" */ + version = 0xFF; // dauer=0; // startzeit=0; } @@ -395,6 +396,7 @@ public: SItimes times; time_t vps; unsigned char table_id; + unsigned char version; // Der Operator zum sortieren bool operator < (const SIevent& e) const { return uniqueKey()table_id; - + unsigned char version_number = header()->version_number; actPos = buffer + sizeof(SI_section_EIT_header); bufEnd = buffer + bufferLength; @@ -515,6 +515,7 @@ void SIsectionEIT::parse(void) e.original_network_id = original_network_id(); e.transport_stream_id = transport_stream_id(); e.table_id = table_id; + e.version = version_number; descriptors_loop_length = sizeof(struct eit_event) + ((evt->descriptors_loop_length_hi << 8) | evt->descriptors_loop_length_lo); parseDescriptors(actPos, min((unsigned)(bufEnd - actPos), descriptors_loop_length), e); evts.insert(e); diff --git a/src/sectionsd/sectionsd.cpp b/src/sectionsd/sectionsd.cpp index 14d910f93..514670686 100644 --- a/src/sectionsd/sectionsd.cpp +++ b/src/sectionsd/sectionsd.cpp @@ -777,8 +777,12 @@ static void addEvent(const SIevent &evt, const unsigned table_id, const time_t z readLockEvents(); MySIeventsOrderUniqueKey::iterator si = mySIeventsOrderUniqueKey.find(evt.uniqueKey()); bool already_exists = (si != mySIeventsOrderUniqueKey.end()); - - if (already_exists && (evt.table_id < si->second->table_id)) + if (already_exists && ( (evt.table_id == si->second->table_id && evt.version != si->second->version) || evt.version == 0xFF || si->second->version == 0xFF ) ) + { + //replae event if new version + already_exists = false; + } + else if (already_exists && (evt.table_id < si->second->table_id)) { /* if the new event has a lower (== more recent) table ID, replace the old one */ already_exists = false;