aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-09-02 22:49:34 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-09-02 22:49:34 +0000
commit2d40d85af18c3033e0248e67c8b997590dd07c4f (patch)
tree9a1b197b182e43f5f09d31f50ad59a9c846ae7b2
parent11b18fabe50ba2cea39503eccaf0c4fdbc741f4d (diff)
downloadenigma2-2d40d85af18c3033e0248e67c8b997590dd07c4f.tar.gz
enigma2-2d40d85af18c3033e0248e67c8b997590dd07c4f.zip
add methods for save and load lamedb
-rw-r--r--lib/dvb/db.cpp55
1 files changed, 36 insertions, 19 deletions
diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp
index 6e3207e0..a380ad0c 100644
--- a/lib/dvb/db.cpp
+++ b/lib/dvb/db.cpp
@@ -95,7 +95,7 @@ void eDVBService::setCachePID(cacheID id, int pid)
DEFINE_REF(eDVBDB);
-eDVBDB::eDVBDB()
+void eDVBDB::load()
{
eDebug("---- opening lame channel db");
FILE *f=fopen("lamedb", "rt");
@@ -115,7 +115,7 @@ eDVBDB::eDVBDB()
fclose(f);
return;
}
-
+
// clear all transponders
while (!feof(f))
@@ -129,10 +129,10 @@ eDVBDB::eDVBDB()
if (original_network_id == -1)
continue;
eDVBChannelID channelid = eDVBChannelID(
- eDVBNamespace(dvb_namespace),
- eTransportStreamID(transport_stream_id),
+ eDVBNamespace(dvb_namespace),
+ eTransportStreamID(transport_stream_id),
eOriginalNetworkID(original_network_id));
-
+
ePtr<eDVBFrontendParameters> feparm = new eDVBFrontendParameters;
while (!feof(f))
{
@@ -169,9 +169,9 @@ eDVBDB::eDVBDB()
eDebug("services invalid, no services");
return;
}
-
+
// clear all services
-
+
int count=0;
while (!feof(f))
@@ -186,7 +186,7 @@ eDVBDB::eDVBDB()
if (service_number == -1)
continue;
ePtr<eDVBService> s = new eDVBService;
- eServiceReferenceDVB ref =
+ eServiceReferenceDVB ref =
eServiceReferenceDVB(
eDVBNamespace(dvb_namespace),
eTransportStreamID(transport_stream_id),
@@ -244,18 +244,17 @@ eDVBDB::eDVBDB()
}
eDebug("loaded %d services", count);
-
+
fclose(f);
-
}
-eDVBDB::~eDVBDB()
+void eDVBDB::save()
{
eDebug("---- saving lame channel db");
FILE *f=fopen("lamedb", "wt");
int channels=0, services=0;
if (!f)
- eFatal("couldn't save lame channel db!");
+ eFatal("couldn't save lame channel db!");
fprintf(f, "eDVB services /3/\n");
fprintf(f, "transponders\n");
for (std::map<eDVBChannelID, channel>::const_iterator i(m_channels.begin());
@@ -263,13 +262,13 @@ eDVBDB::~eDVBDB()
{
const eDVBChannelID &chid = i->first;
const channel &ch = i->second;
-
+
fprintf(f, "%08x:%04x:%04x\n", chid.dvbnamespace.get(),
chid.transport_stream_id.get(), chid.original_network_id.get());
eDVBFrontendParametersSatellite sat;
if (!ch.m_frontendParameters->getDVBS(sat))
{
- fprintf(f, "\ts %d:%d:%d:%d:%d:%d\n",
+ fprintf(f, "\ts %d:%d:%d:%d:%d:%d\n",
sat.frequency, sat.symbol_rate,
sat.polarisation, sat.fec, sat.inversion,
sat.orbital_position);
@@ -278,22 +277,30 @@ eDVBDB::~eDVBDB()
channels++;
}
fprintf(f, "end\nservices\n");
-
+
for (std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator i(m_services.begin());
i != m_services.end(); ++i)
{
const eServiceReferenceDVB &s = i->first;
- fprintf(f, "%04x:%08x:%04x:%04x:%d:%d\n",
- s.getServiceID().get(), s.getDVBNamespace().get(),
- s.getTransportStreamID().get(),s.getOriginalNetworkID().get(),
+ fprintf(f, "%04x:%08x:%04x:%04x:%d:%d\n",
+ s.getServiceID().get(), s.getDVBNamespace().get(),
+ s.getTransportStreamID().get(),s.getOriginalNetworkID().get(),
s.getServiceType(),
0);
-
+
fprintf(f, "%s\n", i->second->m_service_name.c_str());
fprintf(f, "p:%s", i->second->m_provider_name.c_str());
+
+ // write cached pids
+ for (std::map<int,int>::const_iterator ca(i->second->m_cache.begin());
+ ca != i->second->m_cache.end(); ++ca)
+ fprintf(f, ",c:%02d%04x", ca->first, ca->second);
+
+ // write cached ca pids
for (std::set<int>::const_iterator ca(i->second->m_ca.begin());
ca != i->second->m_ca.end(); ++ca)
fprintf(f, ",C:%04x", *ca);
+
fprintf(f, "\n");
services++;
}
@@ -302,6 +309,16 @@ eDVBDB::~eDVBDB()
fclose(f);
}
+eDVBDB::eDVBDB()
+{
+ load();
+}
+
+eDVBDB::~eDVBDB()
+{
+// save();
+}
+
RESULT eDVBDB::addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm)
{
channel ch;