mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Speeded up deleting duplicate channels
This commit is contained in:
parent
bce13e7148
commit
3b69903d23
3
HISTORY
3
HISTORY
@ -3513,7 +3513,7 @@ Video Disk Recorder Revision History
|
|||||||
- Fixed a wrong inheritance in libsi's SubtitlingDescriptor::Subtitling (thanks to
|
- Fixed a wrong inheritance in libsi's SubtitlingDescriptor::Subtitling (thanks to
|
||||||
Marco Schlüßler).
|
Marco Schlüßler).
|
||||||
|
|
||||||
2005-05-28: Version 1.3.25
|
2005-05-29: Version 1.3.25
|
||||||
|
|
||||||
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
|
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
|
||||||
- Some cable providers don't mark short channel names according to the standard,
|
- Some cable providers don't mark short channel names according to the standard,
|
||||||
@ -3572,3 +3572,4 @@ Video Disk Recorder Revision History
|
|||||||
a patch from Georg Acher).
|
a patch from Georg Acher).
|
||||||
- Avoiding unnecessary calls to getLength() in libsi/si.c, and avoiding the
|
- Avoiding unnecessary calls to getLength() in libsi/si.c, and avoiding the
|
||||||
'& 0xff' in CRC32::crc32() of libsi/util.c (thanks to Georg Acher).
|
'& 0xff' in CRC32::crc32() of libsi/util.c (thanks to Georg Acher).
|
||||||
|
- Speeded up deleting duplicate channels.
|
||||||
|
45
channels.c
45
channels.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: channels.c 1.41 2005/05/28 13:55:57 kls Exp $
|
* $Id: channels.c 1.42 2005/05/29 10:32:38 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "channels.h"
|
#include "channels.h"
|
||||||
@ -804,6 +804,22 @@ bool cChannel::Save(FILE *f)
|
|||||||
return fprintf(f, "%s", *ToText()) > 0;
|
return fprintf(f, "%s", *ToText()) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- cChannelSorter ---------------------------------------------------------
|
||||||
|
|
||||||
|
class cChannelSorter : public cListObject {
|
||||||
|
public:
|
||||||
|
cChannel *channel;
|
||||||
|
tChannelID channelID;
|
||||||
|
cChannelSorter(cChannel *Channel) {
|
||||||
|
channel = Channel;
|
||||||
|
channelID = channel->GetChannelID();
|
||||||
|
}
|
||||||
|
virtual int Compare(const cListObject &ListObject) const {
|
||||||
|
cChannelSorter *cs = (cChannelSorter *)&ListObject;
|
||||||
|
return memcmp(&channelID, &cs->channelID, sizeof(channelID));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// -- cChannels --------------------------------------------------------------
|
// -- cChannels --------------------------------------------------------------
|
||||||
|
|
||||||
cChannels Channels;
|
cChannels Channels;
|
||||||
@ -816,22 +832,21 @@ cChannels::cChannels(void)
|
|||||||
|
|
||||||
void cChannels::DeleteDuplicateChannels(void)
|
void cChannels::DeleteDuplicateChannels(void)
|
||||||
{
|
{
|
||||||
|
cList<cChannelSorter> ChannelSorter;
|
||||||
for (cChannel *channel = First(); channel; channel = Next(channel)) {
|
for (cChannel *channel = First(); channel; channel = Next(channel)) {
|
||||||
if (!channel->GroupSep()) {
|
if (!channel->GroupSep())
|
||||||
tChannelID ChannelID = channel->GetChannelID();
|
ChannelSorter.Add(new cChannelSorter(channel));
|
||||||
cChannel *other = Next(channel);
|
|
||||||
while (other) {
|
|
||||||
cChannel *d = NULL;
|
|
||||||
if (!other->GroupSep() && other->GetChannelID() == ChannelID)
|
|
||||||
d = other;
|
|
||||||
other = Next(other);
|
|
||||||
if (d) {
|
|
||||||
dsyslog("deleting duplicate channel %s", *d->ToText());
|
|
||||||
Del(d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
ChannelSorter.Sort();
|
||||||
|
cChannelSorter *cs = ChannelSorter.First();
|
||||||
|
while (cs) {
|
||||||
|
cChannelSorter *next = ChannelSorter.Next(cs);
|
||||||
|
if (next && cs->channelID == next->channelID) {
|
||||||
|
dsyslog("deleting duplicate channel %s", *next->channel->ToText());
|
||||||
|
Del(next->channel);
|
||||||
|
}
|
||||||
|
cs = next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cChannels::Load(const char *FileName, bool AllowComments, bool MustExist)
|
bool cChannels::Load(const char *FileName, bool AllowComments, bool MustExist)
|
||||||
|
Loading…
Reference in New Issue
Block a user