aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-05-08 20:08:22 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-05-08 20:08:22 +0000
commitca7d92c97764d916bb8dd6731efa1ccff693b944 (patch)
treed5883fbc6b73cd2ce8bf4e85f64e26d26a605ac7 /lib/dvb
parent4bbe1d7e132ead361bf179b8ee618bdaba2335dc (diff)
downloadenigma2-ca7d92c97764d916bb8dd6731efa1ccff693b944.tar.gz
enigma2-ca7d92c97764d916bb8dd6731efa1ccff693b944.zip
fix "Clearall before scan" handling
add ability to reset the newfound flag from single service via channellist context menu add ability to the newfound flags for all services from a "orbital position" via channellist context menu
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/db.cpp57
-rw-r--r--lib/dvb/db.h16
-rw-r--r--lib/dvb/idvb.h8
-rw-r--r--lib/dvb/scan.cpp5
4 files changed, 58 insertions, 28 deletions
diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp
index e8500b23..c0064071 100644
--- a/lib/dvb/db.cpp
+++ b/lib/dvb/db.cpp
@@ -670,17 +670,26 @@ eDVBDB::~eDVBDB()
instance=NULL;
}
-RESULT eDVBDB::removeService(eServiceReferenceDVB service)
+RESULT eDVBDB::removeService(const eServiceReference &ref)
{
- std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator it(m_services.find(service));
- if (it != m_services.end())
+ if (ref.type == eServiceReference::idDVB)
{
- m_services.erase(it);
- return 0;
+ eServiceReferenceDVB &service = (eServiceReferenceDVB&)ref;
+ std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator it(m_services.find(service));
+ if (it != m_services.end())
+ {
+ m_services.erase(it);
+ return 0;
+ }
}
return -1;
}
+RESULT eDVBDB::removeServices(int dvb_namespace, int tsid, int onid, unsigned int orb_pos)
+{
+ return removeServices(eDVBChannelID(eDVBNamespace(dvb_namespace), eTransportStreamID(tsid), eOriginalNetworkID(onid)), orb_pos);
+}
+
RESULT eDVBDB::removeServices(eDVBChannelID chid, unsigned int orbpos)
{
RESULT ret=-1;
@@ -710,6 +719,10 @@ RESULT eDVBDB::removeServices(eDVBChannelID chid, unsigned int orbpos)
remove=false;
if ( remove )
{
+ eDebug("remove %08x %04x %04x",
+ ch.dvbnamespace.get(),
+ ch.original_network_id.get(),
+ ch.transport_stream_id.get());
removed_chids.insert(it->first);
m_channels.erase(it++);
}
@@ -734,22 +747,35 @@ RESULT eDVBDB::removeServices(eDVBChannelID chid, unsigned int orbpos)
return ret;
}
-RESULT eDVBDB::addFlag(eServiceReferenceDVB service, unsigned int flagmask)
+RESULT eDVBDB::addFlag(const eServiceReference &ref, unsigned int flagmask)
{
- std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator it(m_services.find(service));
- if (it != m_services.end())
+ if (ref.type == eServiceReference::idDVB)
{
- it->second->m_flags |= ~flagmask;
+ eServiceReferenceDVB &service = (eServiceReferenceDVB&)ref;
+ std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator it(m_services.find(service));
+ if (it != m_services.end())
+ it->second->m_flags |= ~flagmask;
+ return 0;
}
- return 0;
+ return -1;
}
-RESULT eDVBDB::removeFlag(eServiceReferenceDVB service, unsigned int flagmask)
+RESULT eDVBDB::removeFlag(const eServiceReference &ref, unsigned int flagmask)
{
- std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator it(m_services.find(service));
- if (it != m_services.end())
- it->second->m_flags &= ~flagmask;
- return 0;
+ if (ref.type == eServiceReference::idDVB)
+ {
+ eServiceReferenceDVB &service = (eServiceReferenceDVB&)ref;
+ std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator it(m_services.find(service));
+ if (it != m_services.end())
+ it->second->m_flags &= ~flagmask;
+ return 0;
+ }
+ return -1;
+}
+
+RESULT eDVBDB::removeFlags(unsigned int flagmask, int dvb_namespace, int tsid, int onid, unsigned int orb_pos)
+{
+ return removeFlags(flagmask, eDVBChannelID(eDVBNamespace(dvb_namespace), eTransportStreamID(tsid), eOriginalNetworkID(onid)), orb_pos);
}
RESULT eDVBDB::removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orbpos)
@@ -798,7 +824,6 @@ RESULT eDVBDB::removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned i
return 0;
}
-
RESULT eDVBDB::addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)
{
channel ch;
diff --git a/lib/dvb/db.h b/lib/dvb/db.h
index 49624f35..430a5af0 100644
--- a/lib/dvb/db.h
+++ b/lib/dvb/db.h
@@ -17,7 +17,6 @@ DECLARE_REF(eDVBDB);
friend class eDVBDBSatellitesQuery;
friend class eDVBDBProvidersQuery;
-
struct channel
{
ePtr<iDVBFrontendParameters> m_frontendParameters;
@@ -33,13 +32,16 @@ DECLARE_REF(eDVBDB);
~eDVBDB();
#endif
public:
- RESULT removeService(eServiceReferenceDVB service);
- RESULT removeServices(eDVBChannelID chid, unsigned int orb_pos);
- RESULT addFlag(eServiceReferenceDVB service, unsigned int flagmask);
- RESULT removeFlag(eServiceReferenceDVB service, unsigned int flagmask);
- RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orb_pos);
-#ifndef SWIG
// iDVBChannelList
+ RESULT removeFlags(unsigned int flagmask, int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF);
+ RESULT removeServices(int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF);
+ RESULT removeService(const eServiceReference &service);
+ RESULT addFlag(const eServiceReference &service, unsigned int flagmask);
+ RESULT removeFlag(const eServiceReference &service, unsigned int flagmask);
+#ifndef SWIG
+ RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orb_pos);
+ RESULT removeServices(eDVBChannelID chid, unsigned int orb_pos);
+
RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm);
RESULT removeChannel(const eDVBChannelID &id);
diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h
index aa4d4bb2..e9fb3cf0 100644
--- a/lib/dvb/idvb.h
+++ b/lib/dvb/idvb.h
@@ -316,11 +316,13 @@ public:
class iDVBChannelList: public iObject
{
public:
- virtual RESULT removeService(eServiceReferenceDVB service)=0;
+ virtual RESULT removeService(const eServiceReference &service)=0;
virtual RESULT removeServices(eDVBChannelID chid=eDVBChannelID(), unsigned int orb_pos=0xFFFFFFFF)=0;
- virtual RESULT addFlag(eServiceReferenceDVB service, unsigned int flagmask=0xFFFFFFFF)=0;
- virtual RESULT removeFlag(eServiceReferenceDVB service, unsigned int flagmask=0xFFFFFFFF)=0;
+ virtual RESULT removeServices(int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF)=0;
+ virtual RESULT addFlag(const eServiceReference &service, unsigned int flagmask=0xFFFFFFFF)=0;
+ virtual RESULT removeFlag(const eServiceReference &service, unsigned int flagmask=0xFFFFFFFF)=0;
virtual RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid=eDVBChannelID(), unsigned int orb_pos=0xFFFFFFFF)=0;
+ virtual RESULT removeFlags(unsigned int flagmask, int dvb_namespace=-1, int tsid=-1, int onid=-1, unsigned int orb_pos=0xFFFFFFFF)=0;
virtual RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)=0;
virtual RESULT removeChannel(const eDVBChannelID &id)=0;
diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp
index c44471d9..605128e7 100644
--- a/lib/dvb/scan.cpp
+++ b/lib/dvb/scan.cpp
@@ -498,8 +498,9 @@ void eDVBScan::insertInto(iDVBChannelList *db)
{
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);
}
}