diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-05-08 20:08:22 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-05-08 20:08:22 +0000 |
| commit | ca7d92c97764d916bb8dd6731efa1ccff693b944 (patch) | |
| tree | d5883fbc6b73cd2ce8bf4e85f64e26d26a605ac7 /lib/dvb | |
| parent | 4bbe1d7e132ead361bf179b8ee618bdaba2335dc (diff) | |
| download | enigma2-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.cpp | 57 | ||||
| -rw-r--r-- | lib/dvb/db.h | 16 | ||||
| -rw-r--r-- | lib/dvb/idvb.h | 8 | ||||
| -rw-r--r-- | lib/dvb/scan.cpp | 5 |
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); } } |
