aboutsummaryrefslogtreecommitdiff
path: root/lib/service/servicedvb.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-11-29 21:31:27 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-11-29 21:31:27 +0000
commit2d0d9ad2cf4891c5386a3d8ca040c2738b5c2532 (patch)
treee98e536590b73ce83687964a22d1cceaf3fd5cc1 /lib/service/servicedvb.cpp
parented0a34a4cbc6a3e001fd57d9f363052bb04c6624 (diff)
downloadenigma2-2d0d9ad2cf4891c5386a3d8ca040c2738b5c2532.tar.gz
enigma2-2d0d9ad2cf4891c5386a3d8ca040c2738b5c2532.zip
code cleanup in ChannelSelection,
prepare for new service groups
Diffstat (limited to 'lib/service/servicedvb.cpp')
-rw-r--r--lib/service/servicedvb.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 871a0b26..4b7d63a0 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -39,6 +39,7 @@ class eStaticServiceDVBInformation: public iStaticServiceInformation
public:
RESULT getName(const eServiceReference &ref, std::string &name);
int getLength(const eServiceReference &ref);
+ int isPlayable(const eServiceReference &ref, const eServiceReference &ignore);
};
DEFINE_REF(eStaticServiceDVBInformation);
@@ -90,12 +91,30 @@ int eStaticServiceDVBInformation::getLength(const eServiceReference &ref)
return -1;
}
+int eStaticServiceDVBInformation::isPlayable(const eServiceReference &ref, const eServiceReference &ignore)
+{
+ ePtr<eDVBResourceManager> res_mgr;
+ if ( eDVBResourceManager::getInstance( res_mgr ) )
+ eDebug("isPlayble... no res manager!!");
+ else
+ {
+ eDVBChannelID chid, chid_ignore;
+ ((const eServiceReferenceDVB&)ref).getChannelID(chid);
+ ((const eServiceReferenceDVB&)ignore).getChannelID(chid_ignore);
+ return res_mgr->canAllocateChannel(chid, chid_ignore);
+ }
+ return false;
+}
+
+
class eStaticServiceDVBBouquetInformation: public iStaticServiceInformation
{
DECLARE_REF(eStaticServiceDVBBouquetInformation);
public:
+ eServiceReference m_playable_service;
RESULT getName(const eServiceReference &ref, std::string &name);
int getLength(const eServiceReference &ref);
+ int isPlayable(const eServiceReference &ref, const eServiceReference &ignore);
};
DEFINE_REF(eStaticServiceDVBBouquetInformation);
@@ -133,6 +152,46 @@ RESULT eStaticServiceDVBBouquetInformation::getName(const eServiceReference &ref
return -1;
}
+int eStaticServiceDVBBouquetInformation::isPlayable(const eServiceReference &ref, const eServiceReference &ignore)
+{
+ if (ref.flags & eServiceReference::isGroup)
+ {
+ ePtr<iDVBChannelList> db;
+ ePtr<eDVBResourceManager> res;
+
+ if (eDVBResourceManager::getInstance(res))
+ {
+ eDebug("eStaticServiceDVBBouquetInformation::isPlayable failed.. no resource manager!");
+ return false;
+ }
+
+ if (res->getChannelList(db))
+ {
+ eDebug("eStaticServiceDVBBouquetInformation::isPlayable failed.. no channel list!");
+ return false;
+ }
+
+ eBouquet *bouquet=0;
+ if (db->getBouquet(ref, bouquet))
+ {
+ eDebug("eStaticServiceDVBBouquetInformation::isPlayable failed.. getBouquet failed!");
+ return false;
+ }
+
+ eDVBChannelID chid, chid_ignore;
+ ((const eServiceReferenceDVB&)ignore).getChannelID(chid_ignore);
+ for (std::list<eServiceReference>::iterator it(bouquet->m_services.begin()); it != bouquet->m_services.end(); ++it)
+ {
+ m_playable_service = *it;
+ ((const eServiceReferenceDVB&)*it).getChannelID(chid);
+ if (res->canAllocateChannel(chid, chid_ignore))
+ return true;
+ }
+ }
+ m_playable_service = eServiceReference();
+ return false;
+}
+
int eStaticServiceDVBBouquetInformation::getLength(const eServiceReference &ref)
{
return -1;
@@ -1211,6 +1270,7 @@ int eDVBServicePlay::getInfo(int w)
case sTSID: return ((const eServiceReferenceDVB&)m_reference).getTransportStreamID().get();
case sNamespace: return ((const eServiceReferenceDVB&)m_reference).getDVBNamespace().get();
case sProvider: if (!m_dvb_service) return -1; return -2;
+ case sServiceref: return resIsString;
default:
return -1;
}
@@ -1223,6 +1283,8 @@ std::string eDVBServicePlay::getInfoString(int w)
case sProvider:
if (!m_dvb_service) return "";
return m_dvb_service->m_provider_name;
+ case sServiceref:
+ return m_reference.toString();
default:
break;
}