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
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;
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++);
}
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)
return 0;
}
-
RESULT eDVBDB::addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)
{
channel ch;
friend class eDVBDBSatellitesQuery;
friend class eDVBDBProvidersQuery;
-
struct channel
{
ePtr<iDVBFrontendParameters> m_frontendParameters;
~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);
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;
{
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);
}
}
from re import *
from os import remove
+FLAG_SERVICE_NEW_FOUND = 64 #define in lib/dvb/idvb.h as dxNewFound = 64
+
import xml.dom.minidom
class BouquetSelector(Screen):
menu = [ ]
current_root = csel.getRoot()
+ current_sel_path = csel.getCurrentSelection().getPath()
+ current_sel_flags = csel.getCurrentSelection().flags
inBouquetRootList = current_root and current_root.getPath().find('FROM BOUQUET "bouquets.') != -1 #FIXME HACK
inBouquet = csel.getMutableList() is not None
haveBouquets = csel.bouquet_root.getPath().find('FROM BOUQUET "bouquets.') != -1
menu.append((_("add service to bouquet"), self.addServiceToBouquetSelected))
else:
menu.append((_("add service to favourites"), self.addServiceToBouquetSelected))
- elif haveBouquets:
- if not inBouquet and csel.getCurrentSelection().getPath().find("PROVIDERS") == -1:
- menu.append((_("copy to favourites"), self.copyCurrentToBouquetList))
+ else:
+ if haveBouquets:
+ if not inBouquet and current_sel_path.find("PROVIDERS") == -1:
+ menu.append((_("copy to favourites"), self.copyCurrentToBouquetList))
+ if current_sel_path.find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
+ menu.append((_("remove all new found flags"), self.removeAllNewFoundFlags))
if inBouquet:
menu.append((_("remove service"), self.removeCurrentService))
+ if current_root.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
+ menu.append((_("remove new found flag"), self.removeNewFoundFlag))
elif haveBouquets:
menu.append((_("remove bouquet"), self.removeBouquet))
self.csel.endMarkedEdit(abort=True)
self.close()
+ def removeNewFoundFlag(self):
+ eDVBDB.getInstance().removeFlag(self.csel.getCurrentSelection(), FLAG_SERVICE_NEW_FOUND)
+ self.close()
+
+ def removeAllNewFoundFlags(self):
+ curpath = self.csel.getCurrentSelection().getPath()
+ idx = curpath.find("satellitePosition == ")
+ if idx != -1:
+ tmp = curpath[idx+21:]
+ idx = tmp.find(')')
+ if idx != -1:
+ satpos = int(tmp[:idx])
+ eDVBDB.getInstance().removeFlags(FLAG_SERVICE_NEW_FOUND, -1, -1, -1, satpos)
+ self.close()
+
class ChannelSelectionEPG:
def __init__(self):
self["ChannelSelectEPGActions"] = ActionMap(["ChannelSelectEPGActions"],
orbpos = service.getUnsignedData(4) >> 16
if service.getPath().find("FROM PROVIDER") != -1:
service_name = _("Providers")
- elif service.getPath().find("flags ==") != -1:
+ elif service.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
service_name = _("New")
else:
service_name = _("Services")