tsmpegdecoder: set audio type
[enigma2.git] / lib / dvb / db.cpp
index c6871c1ae1b48550f14252347f1061cda2508ac0..1bfc06ee8c7356789dbf824d01b98255433584fb 100644 (file)
@@ -34,20 +34,31 @@ RESULT eBouquet::moveService(const eServiceReference &ref, unsigned int pos)
 {
        if ( pos < 0 || pos >= m_services.size() )
                return -1;
+       ++pos;
        list::iterator source=m_services.end();
        list::iterator dest=m_services.end();
+       bool forward = false;
        for (list::iterator it(m_services.begin()); it != m_services.end(); ++it)
        {
-               if (dest == m_services.end() && !pos--)
+               if (dest == m_services.end() && !--pos)
                        dest = it;
                if (*it == ref)
+               {
                        source = it;
+                       forward = pos>0;
+               }
                if (dest != m_services.end() && source != m_services.end())
                        break;
        }
        if (dest == m_services.end() || source == m_services.end() || source == dest)
                return -1;
-       std::iter_swap(source,dest);
+       while (source != dest)
+       {
+               if (forward)
+                       std::iter_swap(source++, source);
+               else
+                       std::iter_swap(source--, source);
+       }
        return 0;
 }
 
@@ -113,6 +124,18 @@ eDVBService &eDVBService::operator=(const eDVBService &s)
        return *this;
 }
 
+void eDVBService::genSortName()
+{
+       m_service_name_sort = removeDVBChars(m_service_name);
+       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";
+}
+
 RESULT eDVBService::getName(const eServiceReference &ref, std::string &name)
 {
        if (!ref.name.empty())
@@ -303,15 +326,8 @@ void eDVBDB::load()
                        line[strlen(line)-1]=0;
 
                s->m_service_name = line;
-               s->m_service_name_sort = removeDVBChars(line);
-               makeUpper(s->m_service_name_sort);
-               while ((!s->m_service_name_sort.empty()) && s->m_service_name_sort[0] == ' ')
-                       s->m_service_name_sort.erase(0, 1);
-               
-                       /* put unnamed services at the end, not at the beginning. */
-               if (s->m_service_name_sort.empty())
-                       s->m_service_name_sort = "\xFF";
-               
+               s->genSortName();
+                
                fgets(line, 256, f);
                if (strlen(line))
                        line[strlen(line)-1]=0;
@@ -530,11 +546,6 @@ void eDVBDB::loadBouquet(const char *path)
        eDebug("%d entries in Bouquet %s", entries, bouquet_name.c_str());
 }
 
-void eDVBDB::saveBouquet(const char *path)
-{
-
-}
-
 void eDVBDB::loadBouquets()
 {
        loadBouquet("bouquets.tv");
@@ -556,7 +567,7 @@ void eDVBDB::loadBouquets()
                parent.m_services.push_back(ref);
                parent.flushChanges();
        }
-       if ( m_bouquets.find("userbouquets.favourites.radio") == m_bouquets.end() )
+       if ( m_bouquets.find("userbouquet.favourites.radio") == m_bouquets.end() )
        {
                eBouquet &b = m_bouquets["userbouquet.favourites.radio"];
                b.m_path = "userbouquet.favourites.radio";
@@ -574,11 +585,6 @@ void eDVBDB::loadBouquets()
        }
 }
 
-void eDVBDB::saveBouquets()
-{
-
-}
-
 eDVBDB::eDVBDB()
 {
        load();
@@ -636,6 +642,12 @@ RESULT eDVBDB::getService(const eServiceReferenceDVB &reference, ePtr<eDVBServic
        return 0;
 }
 
+RESULT eDVBDB::flush()
+{
+       save();
+       return 0;
+}
+
 RESULT eDVBDB::getBouquet(const eServiceReference &ref, eBouquet* &bouquet)
 {
        std::string str = ref.path;