DEFINE_REF(eDVBScan);
-eDVBScan::eDVBScan(iDVBChannel *channel): m_channel(channel)
+eDVBScan::eDVBScan(iDVBChannel *channel)
+ :m_channel(channel), m_ready(0), m_flags(0), m_ready_all(readySDT)
+ ,m_channel_state(iDVBChannel::state_idle)
{
if (m_channel->getDemux(m_demux))
SCAN_eDebug("scan: failed to allocate demux!");
if (m_ch_toScan.empty())
{
- eDebug("no channels left to scan.");
- eDebug("%d channels scanned, %d were unavailable.",
- m_ch_scanned.size(), m_ch_unavailable.size());
- eDebug("%d channels in database.", m_new_channels.size());
+// SCAN_eDebug("no channels left to scan.");
+// SCAN_eDebug("%d channels scanned, %d were unavailable.",
+// m_ch_scanned.size(), m_ch_unavailable.size());
+// SCAN_eDebug("%d channels in database.", m_new_channels.size());
m_event(evtFinish);
return -ENOENT;
}
if (m_ready & validSDT)
{
unsigned long hash = 0;
+
+ // m_ch_current is not set, when eDVBScan is just used for a SDT update
+ if (!m_ch_current)
+ m_channel->getCurrentFrontendParameters(m_ch_current);
+
m_ch_current->getHash(hash);
eDVBNamespace dvbnamespace = buildNamespace(
if ( m_chid_current.dvbnamespace.get() != -1 &&
((ns.get() ^ m_chid_current.dvbnamespace.get()) & 0xFFFF0000))
- eDebug("dropping this transponder, it's on another satellite.");
+ SCAN_eDebug("dropping this transponder, it's on another satellite.");
else
{
addChannelToScan(
These are the reasons for adding the transponder
here, and not before.
*/
-
+
if (!m_chid_current)
eWarning("SCAN: the current channel's ID was not corrected - not adding channel.");
else
nextChannel();
}
-void eDVBScan::insertInto(iDVBChannelList *db)
+void eDVBScan::insertInto(iDVBChannelList *db, bool dontRemoveOldFlags)
{
if (m_flags & scanRemoveServices)
{
{
eDVBChannelID chid;
if (m_flags & scanDontRemoveFeeds)
- chid.dvbnamespace = eDVBNamespace((*it)<<16);
- db->removeServices(chid, *it);
+ chid.dvbnamespace = eDVBNamespace((*x)<<16);
+// eDebug("remove %d %08x", *x, chid.dvbnamespace.get());
+ db->removeServices(chid, *x);
}
}
{
ePtr<eDVBService> dvb_service;
if (!db->getService(service->first, dvb_service))
- *dvb_service = *service->second;
+ {
+ if (dvb_service->m_flags & eDVBService::dxNoSDT)
+ continue;
+ if (!(dvb_service->m_flags & eDVBService::dxHoldName))
+ {
+ dvb_service->m_service_name = service->second->m_service_name;
+ dvb_service->m_service_name_sort = service->second->m_service_name_sort;
+ }
+ dvb_service->m_provider_name = service->second->m_provider_name;
+
+ if (!dontRemoveOldFlags) // do not remove new found flags when not wished
+ dvb_service->m_flags &= ~eDVBService::dxNewFound;
+ }
else
+ {
db->addService(service->first, service->second);
+ service->second->m_flags |= eDVBService::dxNewFound;
+ }
}
}
SCAN_eDebug("name '%s', provider_name '%s'", service->m_service_name.c_str(), service->m_provider_name.c_str());
break;
}
+/*
case CA_IDENTIFIER_DESCRIPTOR:
{
CaIdentifierDescriptor &d = (CaIdentifierDescriptor&)**desc;
SCAN_eDebug("");
break;
}
+*/
default:
SCAN_eDebug("descr<%x>", (*desc)->getTag());
break;