summaryrefslogtreecommitdiff
path: root/equivhandler.c
diff options
context:
space:
mode:
Diffstat (limited to 'equivhandler.c')
-rw-r--r--equivhandler.c127
1 files changed, 70 insertions, 57 deletions
diff --git a/equivhandler.c b/equivhandler.c
index 281d2f3..75007ec 100644
--- a/equivhandler.c
+++ b/equivhandler.c
@@ -24,7 +24,6 @@ cEquivHandler::cEquivHandler()
cEquivHandler::~cEquivHandler()
{
- // TODO Auto-generated destructor stub
}
void cEquivHandler::loadEquivalentChannelMap (void)
@@ -55,62 +54,72 @@ void cEquivHandler::loadEquivalentChannelMap (void)
char origChanID[256];
char equiChanID[256];
char source[256];
- int nid = 0;
- int tid = 0;
- int sid = 0;
- int rid = 0;
+ int nid, tid, sid, rid;
while ((Line = fgets (Buffer, sizeof (Buffer), File)) != NULL) {
Line = compactspace (skipspace (stripspace (Line)));
- if (!isempty (Line)) {
- if (sscanf (Line, "%[^ ] %[^ ] %[^\n]\n", origChanID, equiChanID, source) == 3) {
- if (origChanID[0] != '#' && origChanID[0] != ';') {
- nid = 0;
- tid = 0;
- sid = 0;
- rid = 0;
- if (sscanf (origChanID, "%[^-]-%i -%i -%i ", source, &nid, &tid, &sid) == 4)
- if (sscanf (equiChanID, "%[^-]-%i -%i -%i ", source, &nid, &tid, &sid) == 4) {
- if (sscanf (origChanID, "%[^-]-%i -%i -%i -%i ", source, &nid, &tid, &sid, &rid) != 5) {
- rid = 0;
- }
- tChannelID OriginalChID = tChannelID (cSource::FromString (source), nid, tid, sid, rid);
- bool found = false;
- //int i = 0;
- cChannel *OriginalChannel = Channels.GetByChannelID (OriginalChID, false);
- if (!OriginalChannel) {
- LogI(2, prep("Warning, not found epg channel \'%s\' in channels.conf. Equivalency is assumed to be valid, but perhaps you should check the entry in the equivalents file"), origChanID); //TODO: skip this ing?
- continue;
- }
- if (sscanf (equiChanID, "%[^-]-%i -%i -%i ", source, &nid, &tid, &sid) == 4) {
- if (sscanf (equiChanID, "%[^-]-%i -%i -%i -%i ", source, &nid, &tid, &sid, &rid)
- != 5) {
- rid = 0;
- }
- tChannelID EquivChID = tChannelID (cSource::FromString (source), nid, tid, sid, rid);
- cChannel *EquivChannel = Channels.GetByChannelID (EquivChID, false); //TODO use valid function?
- if (EquivChannel) {
- ret = equiChanMap.equal_range(*OriginalChID.ToString());
- for (it=ret.first; it!=ret.second; ++it)
- if ((*it).second == *OriginalChID.ToString()) {
- found = true;
- break;
- }
-
- if (!found) {
- string origCh(*OriginalChID.ToString());
- string equiCh(*EquivChID.ToString());
- equiChanMap.insert(pair<string,string>(origCh.c_str(),equiCh.c_str()));
- LogD(4, prep("Found %s equivalent to %s. origCh %s"), *EquivChID.ToString(), *OriginalChID.ToString(), origCh.c_str());
- for ( it2=equiChanMap.begin() ; it2 != equiChanMap.end(); it2++ )
- LogD(3, prep("Original ID %s <-> Equivalent ID %s"), (*it2).first.c_str(), it2->second.c_str());
- }
- } else
- LogI(0, prep("Warning, not found equivalent channel \'%s\' in channels.conf"), equiChanID);
- }
- } //if scanf string1
- } //if string1
- } //if scanf
- } //if isempty
+ //skip empty and commented lines
+ if (isempty (Line) || Line[0] == '#' || Line[0] == ';') continue;
+ //skip invalid line
+ if (sscanf (Line, "%[^ ] %[^ ] %[^\n]\n", origChanID, equiChanID, source) != 3) continue;
+
+ nid = 0;
+ tid = 0;
+ sid = 0;
+ rid = 0;
+ //skip invalid id formats
+ if ((sscanf (origChanID, "%[^-]-%i -%i -%i ", source, &nid, &tid, &sid) != 4)
+ && (sscanf (equiChanID, "%[^-]-%i -%i -%i ", source, &nid, &tid, &sid) != 4))
+ continue;
+
+ if (sscanf (origChanID, "%[^-]-%i -%i -%i -%i ", source, &nid, &tid, &sid, &rid) != 5) {
+ rid = 0;
+ }
+ tChannelID OriginalChID = tChannelID (cSource::FromString (source), nid, tid, sid, rid);
+ bool found = false;
+ //int i = 0;
+#if APIVERSNUM >= 20300
+ LOCK_CHANNELS_READ;
+ const cChannel *OriginalChannel = Channels->GetByChannelID(OriginalChID, false);
+#else
+ cChannel *OriginalChannel = Channels.GetByChannelID (OriginalChID, false);
+#endif
+ if (!OriginalChannel) {
+ LogI(2, prep("Warning, not found EPG channel \'%s\' in channels.conf. Equivalence is assumed to be valid, but perhaps you should check the entry in the equivalents file"), origChanID);
+ continue;
+ }
+ if (sscanf (equiChanID, "%[^-]-%i -%i -%i ", source, &nid, &tid, &sid) == 4) {
+
+ if (sscanf (equiChanID, "%[^-]-%i -%i -%i -%i ", source, &nid, &tid, &sid, &rid)
+ != 5) {
+ rid = 0;
+ }
+ tChannelID EquivChID = tChannelID (cSource::FromString (source), nid, tid, sid, rid);
+#if APIVERSNUM >= 20300
+ const cChannel *EquivChannel = Channels->GetByChannelID(EquivChID, false);
+#else
+ cChannel *EquivChannel = Channels.GetByChannelID (EquivChID, false);
+#endif
+ if (!EquivChannel) {
+ LogI(0, prep("Warning, not found equivalent channel \'%s\' in channels.conf"), equiChanID);
+ continue;
+ }
+
+ //check if channel is already added
+ ret = equiChanMap.equal_range(*OriginalChID.ToString());
+ for (it=ret.first; it!=ret.second; ++it)
+ if ((*it).second == *OriginalChID.ToString()) {
+ found = true;
+ break;
+ }
+ if (found) continue;
+
+ string origCh(*OriginalChID.ToString());
+ string equiCh(*EquivChID.ToString());
+ equiChanMap.insert(pair<string,string>(origCh.c_str(),equiCh.c_str()));
+ LogD(4, prep("Found %s equivalent to %s. origCh %s"), *EquivChID.ToString(), *OriginalChID.ToString(), origCh.c_str());
+ for ( it2=equiChanMap.begin() ; it2 != equiChanMap.end(); it2++ )
+ LogD(3, prep("Original ID %s <-> Equivalent ID %s"), (*it2).first.c_str(), it2->second.c_str());
+ }
} //while
fclose (File);
equiChanFileTime = st.st_mtim.tv_nsec;
@@ -130,7 +139,7 @@ void cEquivHandler::updateEquivalent(cSchedules * Schedules, tChannelID channelI
for (it=ret.first; it!=ret.second; ++it) {
LogD(2, prep("equivalent channel exists"));
tChannelID equChannelID (tChannelID::FromString((*it).second.c_str()));
- cChannel *equChannel = GetChannelByID (equChannelID, false);
+ const cChannel *equChannel = GetChannelByID (equChannelID, false);
if (equChannel) {
LogD(2, prep("found Equivalent channel %s"), *equChannelID.ToString());
cSchedule *pSchedule = (cSchedule *) Schedules->GetSchedule (equChannel, true);
@@ -192,14 +201,18 @@ void cEquivHandler::sortEquivalents(tChannelID channelID, cSchedules* Schedules)
{
LogD(3, prep("equivalent channel exists"));
tChannelID equChannelID(tChannelID::FromString((*it).second.c_str()));
- cChannel* pChannel = GetChannelByID(equChannelID, false);
+ const cChannel* pChannel = GetChannelByID(equChannelID, false);
if (pChannel)
{
LogD(2, prep("found Equivalent channel %s"), *equChannelID.ToString());
cSchedule* pSchedule = (cSchedule *) Schedules->GetSchedule(pChannel, true);
pSchedule->Sort();
+#if APIVERSNUM >= 20300
+ pSchedule->SetModified();
+#else
Schedules->SetModified(pSchedule);
+#endif
}
}
}