sectionsd: improve deletion of surplus events in addEvent()

If the number of events is bigger than the configured maximum, first
remove old events and only if there are none left start removing the
most future events.

git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@1543 e54a6e83-5905-42d5-8d5c-058d10e6a962


Origin commit data
------------------
Branch: ni/coolstream
Commit: 418be814a8
Author: Stefan Seyfried <seife@tuxbox-git.slipkontur.de>
Date: 2011-06-13 (Mon, 13 Jun 2011)



------------------
This commit was generated by Migit
This commit is contained in:
Stefan Seyfried
2011-06-13 15:53:34 +00:00
parent 5d01078de5
commit b491774013

View File

@@ -966,18 +966,38 @@ static void addEvent(const SIevent &evt, const time_t zeit, bool cn = false)
deleteEvent(e->uniqueKey());
readLockEvents();
if (mySIeventsOrderUniqueKey.size() >= max_events) {
//FIXME: Set Old Events to 0 if limit is reached...
MySIeventsOrderFirstEndTimeServiceIDEventUniqueKey::iterator lastEvent =
mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.end();
lastEvent--;
mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin();
//preserve events of current channel
readLockMessaging();
while ((lastEvent != mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin()) &&
((*lastEvent)->get_channel_id() == messaging_current_servicekey)) {
/* if you don't want the new "delete old events first" method but
* the old-fashioned "delete future events always", invert this */
#if 0
bool back = true;
#else
time_t now = time(NULL);
bool back = false;
if ((*lastEvent)->times.size() == 1)
{
if ((*lastEvent)->times.begin()->startzeit + (long)(*lastEvent)->times.begin()->dauer >= now - oldEventsAre)
back = true;
} else
printf("[sectionsd] addevent: times.size != 1, please report\n");
#endif
if (back)
{
// fprintf(stderr, "<");
lastEvent = mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.end();
lastEvent--;
//preserve events of current channel
readLockMessaging();
while ((lastEvent != mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin()) &&
((*lastEvent)->get_channel_id() == messaging_current_servicekey)) {
lastEvent--;
}
unlockMessaging();
}
unlockMessaging();
// else fprintf(stderr, ">");
unlockEvents();
deleteEvent((*lastEvent)->uniqueKey());
}
@@ -1011,7 +1031,6 @@ static void addEvent(const SIevent &evt, const time_t zeit, bool cn = false)
// nicht vorhanden -> einfuegen
mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.insert(ie->second);
mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.insert(ie->second);
}
// Und die Zeiten im Event updaten