git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update ok and cancel in the timer editor
[enigma2.git]
/
lib
/
dvb
/
db.cpp
diff --git
a/lib/dvb/db.cpp
b/lib/dvb/db.cpp
index 17196f050ca840ec84869907528e735d0d3716c7..65b42def034e07c8575ac41556249b3d8916c595 100644
(file)
--- a/
lib/dvb/db.cpp
+++ b/
lib/dvb/db.cpp
@@
-66,7
+66,7
@@
RESULT eBouquet::moveService(const eServiceReference &ref, unsigned int pos)
RESULT eBouquet::flushChanges()
{
RESULT eBouquet::flushChanges()
{
- FILE *f=fopen(
m_path.c_str(), "wt
");
+ FILE *f=fopen(
(CONFIGDIR"/enigma2/"+m_filename).c_str(), "w
");
if (!f)
return -1;
if ( fprintf(f, "#NAME %s\r\n", m_bouquet_name.c_str()) < 0 )
if (!f)
return -1;
if ( fprintf(f, "#NAME %s\r\n", m_bouquet_name.c_str()) < 0 )
@@
-103,7
+103,7
@@
RESULT eBouquet::flushChanges()
return 0;
err:
fclose(f);
return 0;
err:
fclose(f);
- eDebug("couldn't write file %s", m_
path
.c_str());
+ eDebug("couldn't write file %s", m_
filename
.c_str());
return -1;
}
return -1;
}
@@
-132,7
+132,7
@@
void eDVBService::genSortName()
makeUpper(m_service_name_sort);
while ((!m_service_name_sort.empty()) && m_service_name_sort[0] == ' ')
m_service_name_sort.erase(0, 1);
makeUpper(m_service_name_sort);
while ((!m_service_name_sort.empty()) && m_service_name_sort[0] == ' ')
m_service_name_sort.erase(0, 1);
-
+
/* put unnamed services at the end, not at the beginning. */
if (m_service_name_sort.empty())
m_service_name_sort = "\xFF";
/* put unnamed services at the end, not at the beginning. */
if (m_service_name_sort.empty())
m_service_name_sort = "\xFF";
@@
-140,7
+140,7
@@
void eDVBService::genSortName()
RESULT eDVBService::getName(const eServiceReference &ref, std::string &name)
{
RESULT eDVBService::getName(const eServiceReference &ref, std::string &name)
{
- if (!ref.name.empty())
+ if (!ref.name.empty())
name = ref.name; // use renamed service name..
else if (!m_service_name.empty())
name = m_service_name;
name = ref.name; // use renamed service name..
else if (!m_service_name.empty())
name = m_service_name;
@@
-229,9
+229,17
@@
DEFINE_REF(eDVBDB);
void eDVBDB::load()
{
eDebug("---- opening lame channel db");
void eDVBDB::load()
{
eDebug("---- opening lame channel db");
- FILE *f=fopen(
"
lamedb", "rt");
+ FILE *f=fopen(
CONFIGDIR"/enigma2/
lamedb", "rt");
if (!f)
if (!f)
+ {
+ struct stat s;
+ if ( !stat("lamedb", &s) )
+ {
+ rename("lamedb", CONFIGDIR"/enigma2/lamedb" );
+ load();
+ }
return;
return;
+ }
char line[256];
if ((!fgets(line, 256, f)) || strncmp(line, "eDVB services", 13))
{
char line[256];
if ((!fgets(line, 256, f)) || strncmp(line, "eDVB services", 13))
{
@@
-279,7
+287,8
@@
void eDVBDB::load()
sat.symbol_rate = symbol_rate;
sat.polarisation = polarisation;
sat.fec = fec;
sat.symbol_rate = symbol_rate;
sat.polarisation = polarisation;
sat.fec = fec;
- sat.orbital_position = orbital_position;
+ sat.orbital_position =
+ orbital_position < 0 ? orbital_position + 3600 : orbital_position;
sat.inversion = inversion;
feparm->setDVBS(sat);
} else if (line[1]=='t')
sat.inversion = inversion;
feparm->setDVBS(sat);
} else if (line[1]=='t')
@@
-296,7
+305,7
@@
void eDVBDB::load()
ter.guard_interval = guard_interval;
ter.hierarchy = hierarchy;
ter.inversion = inversion;
ter.guard_interval = guard_interval;
ter.hierarchy = hierarchy;
ter.inversion = inversion;
-
+
feparm->setDVBT(ter);
} else if (line[1]=='c')
{
feparm->setDVBT(ter);
} else if (line[1]=='c')
{
@@
-344,7
+353,7
@@
void eDVBDB::load()
s->m_service_name = line;
s->genSortName();
s->m_service_name = line;
s->genSortName();
-
+
fgets(line, 256, f);
if (strlen(line))
line[strlen(line)-1]=0;
fgets(line, 256, f);
if (strlen(line))
line[strlen(line)-1]=0;
@@
-398,7
+407,7
@@
void eDVBDB::load()
void eDVBDB::save()
{
eDebug("---- saving lame channel db");
void eDVBDB::save()
{
eDebug("---- saving lame channel db");
- FILE *f=fopen(
"lamedb", "wt
");
+ FILE *f=fopen(
CONFIGDIR"/enigma2/lamedb", "w
");
int channels=0, services=0;
if (!f)
eFatal("couldn't save lame channel db!");
int channels=0, services=0;
if (!f)
eFatal("couldn't save lame channel db!");
@@
-418,7
+427,8
@@
void eDVBDB::save()
{
fprintf(f, "\ts %d:%d:%d:%d:%d:%d\n",
sat.frequency, sat.symbol_rate,
{
fprintf(f, "\ts %d:%d:%d:%d:%d:%d\n",
sat.frequency, sat.symbol_rate,
- sat.polarisation, sat.fec, sat.orbital_position,
+ sat.polarisation, sat.fec,
+ sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position,
sat.inversion);
}
if (!ch.m_frontendParameters->getDVBT(ter))
sat.inversion);
}
if (!ch.m_frontendParameters->getDVBT(ter))
@@
-481,15
+491,24
@@
void eDVBDB::loadBouquet(const char *path)
return;
}
eBouquet &bouquet = m_bouquets[bouquet_name];
return;
}
eBouquet &bouquet = m_bouquets[bouquet_name];
- bouquet.m_
path = path
;
+ bouquet.m_
filename = bouquet_name
;
std::list<eServiceReference> &list = bouquet.m_services;
list.clear();
std::list<eServiceReference> &list = bouquet.m_services;
list.clear();
- eDebug("loading bouquet... %s", path);
- FILE *fp=fopen(path, "rt");
+ std::string p = CONFIGDIR"/enigma2/";
+ p+=path;
+ eDebug("loading bouquet... %s", p.c_str());
+ FILE *fp=fopen(p.c_str(), "rt");
int entries=0;
if (!fp)
{
int entries=0;
if (!fp)
{
+ struct stat s;
+ if ( !stat(path, &s) )
+ {
+ rename(path, p.c_str() );
+ loadBouquet(path);
+ return;
+ }
eDebug("failed to open.");
if ( strstr(path, "bouquets.tv") )
{
eDebug("failed to open.");
if ( strstr(path, "bouquets.tv") )
{
@@
-530,18
+549,17
@@
void eDVBDB::loadBouquet(const char *path)
}
if ( (tmp.flags&eServiceReference::flagDirectory) == eServiceReference::flagDirectory )
{
}
if ( (tmp.flags&eServiceReference::flagDirectory) == eServiceReference::flagDirectory )
{
- std::string str = tmp.path;
- unsigned int pos = str.rfind('/');
+ unsigned int pos = tmp.path.rfind('/');
if ( pos != std::string::npos )
if ( pos != std::string::npos )
-
str
.erase(0, pos+1);
- if (
str
.empty())
+
tmp.path
.erase(0, pos+1);
+ if (
tmp.path
.empty())
{
eDebug("Bouquet load failed.. no filename given..");
continue;
}
loadBouquet(tmp.path.c_str());
char buf[256];
{
eDebug("Bouquet load failed.. no filename given..");
continue;
}
loadBouquet(tmp.path.c_str());
char buf[256];
- snprintf(buf, 256, "(type == %d) FROM BOUQUET \"%s\" ORDER BY bouquet", tmp.data[0],
str
.c_str());
+ snprintf(buf, 256, "(type == %d) FROM BOUQUET \"%s\" ORDER BY bouquet", tmp.data[0],
tmp.path
.c_str());
tmp.path = buf;
}
list.push_back(tmp);
tmp.path = buf;
}
list.push_back(tmp);
@@
-571,7
+589,7
@@
void eDVBDB::loadBouquets()
if ( m_bouquets.find("userbouquet.favourites.tv") == m_bouquets.end() )
{
eBouquet &b = m_bouquets["userbouquet.favourites.tv"];
if ( m_bouquets.find("userbouquet.favourites.tv") == m_bouquets.end() )
{
eBouquet &b = m_bouquets["userbouquet.favourites.tv"];
- b.m_
path
= "userbouquet.favourites.tv";
+ b.m_
filename
= "userbouquet.favourites.tv";
b.m_bouquet_name = "Favourites (TV)";
b.flushChanges();
eServiceReference ref;
b.m_bouquet_name = "Favourites (TV)";
b.flushChanges();
eServiceReference ref;
@@
-587,7
+605,7
@@
void eDVBDB::loadBouquets()
if ( m_bouquets.find("userbouquet.favourites.radio") == m_bouquets.end() )
{
eBouquet &b = m_bouquets["userbouquet.favourites.radio"];
if ( m_bouquets.find("userbouquet.favourites.radio") == m_bouquets.end() )
{
eBouquet &b = m_bouquets["userbouquet.favourites.radio"];
- b.m_
path
= "userbouquet.favourites.radio";
+ b.m_
filename
= "userbouquet.favourites.radio";
b.m_bouquet_name = "Favourites (Radio)";
b.flushChanges();
eServiceReference ref;
b.m_bouquet_name = "Favourites (Radio)";
b.flushChanges();
eServiceReference ref;
@@
-829,7
+847,15
@@
RESULT eDVBDBListQuery::getNextResult(eServiceReferenceDVB &ref)
int eDVBDBListQuery::compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b)
{
if ( m_query->m_sort == eDVBChannelQuery::tSatellitePosition )
int eDVBDBListQuery::compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b)
{
if ( m_query->m_sort == eDVBChannelQuery::tSatellitePosition )
- return (a.getDVBNamespace().get() >> 16) < (b.getDVBNamespace().get() >> 16);
+ {
+ int x = (a.getDVBNamespace().get() >> 16);
+ int y = (b.getDVBNamespace().get() >> 16);
+ if ( x > 1800 )
+ x -= 3600;
+ if ( y > 1800 )
+ y -= 3600;
+ return x < y;
+ }
return a.name < b.name;
}
return a.name < b.name;
}
@@
-854,15
+880,12
@@
eDVBDBSatellitesQuery::eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference
{
eServiceReferenceDVB ref;
ref.setDVBNamespace(dvbnamespace);
{
eServiceReferenceDVB ref;
ref.setDVBNamespace(dvbnamespace);
+ ref.flags=eServiceReference::flagDirectory;
char buf[64];
char buf[64];
-// TODO get real satellite name..
-// but i dont like to parse the satellites.xml here.. and in the python part
- snprintf(buf, 64, "Services - %d", dvbnamespace>>16);
- ref.name=buf;
snprintf(buf, 64, "(satellitePosition == %d) && ", dvbnamespace>>16);
snprintf(buf, 64, "(satellitePosition == %d) && ", dvbnamespace>>16);
+
ref.path=buf+source.path;
unsigned int pos=ref.path.find("FROM");
ref.path=buf+source.path;
unsigned int pos=ref.path.find("FROM");
- ref.flags=eServiceReference::flagDirectory;
ref.path.erase(pos);
ref.path+="ORDER BY name";
// eDebug("ref.path now %s", ref.path.c_str());
ref.path.erase(pos);
ref.path+="ORDER BY name";
// eDebug("ref.path now %s", ref.path.c_str());
@@
-873,8
+896,6
@@
eDVBDBSatellitesQuery::eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference
ref.path.erase(pos+5);
ref.path+="PROVIDERS ORDER BY name";
// eDebug("ref.path now %s", ref.path.c_str());
ref.path.erase(pos+5);
ref.path+="PROVIDERS ORDER BY name";
// eDebug("ref.path now %s", ref.path.c_str());
- snprintf(buf, 64, "Providers - %d", dvbnamespace>>16);
- ref.name=buf;
m_list.push_back(ref);
}
}
m_list.push_back(ref);
}
}