Support scrambled playback.
[vuplus_dvbapp] / lib / dvb / metaparser.cpp
index 24a5ab6..19007fc 100644 (file)
@@ -8,6 +8,7 @@ eDVBMetaParser::eDVBMetaParser()
        m_data_ok = 0;
        m_length = 0;
        m_filesize = 0;
+       m_scrambled = 0;
 }
 
 int eDVBMetaParser::parseFile(const std::string &basename)
@@ -17,7 +18,31 @@ int eDVBMetaParser::parseFile(const std::string &basename)
                return 0;
        
                /* otherwise, use recordings.epl */
-       return parseRecordings(basename);
+       if (!parseRecordings(basename))
+               return 0;
+       m_filesize = fileSize(basename);
+       return -1;
+
+}
+
+long long eDVBMetaParser::fileSize(const std::string &basename)
+{
+       long long filesize = 0;
+       char buf[255];
+       struct stat64 s;
+               /* get filesize */
+       if (!stat64(basename.c_str(), &s))
+               filesize = (long long) s.st_size;
+               /* handling for old splitted recordings (enigma 1) */
+       int slice=1;
+       while(true)
+       {
+               snprintf(buf, 255, "%s.%03d", basename.c_str(), slice++);
+               if (stat64(buf, &s) < 0)
+                       break;
+               filesize += (long long) s.st_size;
+       }
+       return filesize;
 }
 
 int eDVBMetaParser::parseMeta(const std::string &tsname)
@@ -70,6 +95,9 @@ int eDVBMetaParser::parseMeta(const std::string &tsname)
                case 7:
                        m_service_data = line;
                        break;
+               case 8:
+                       m_scrambled = atoi(line);
+                       break;
                default:
                        break;
                }
@@ -124,9 +152,9 @@ int eDVBMetaParser::parseRecordings(const std::string &filename)
                        m_description = "";
                        m_time_create = 0;
                        m_length = 0;
-                       m_filesize = 0;
-                                               
+                       m_filesize = fileSize(filename);
                        m_data_ok = 1;
+                       m_scrambled = 0;
                        fclose(f);
                        updateMeta(filename.c_str());
                        return 0;
@@ -148,7 +176,7 @@ int eDVBMetaParser::updateMeta(const std::string &tsname)
        FILE *f = fopen(filename.c_str(), "w");
        if (!f)
                return -ENOENT;
-       fprintf(f, "%s\n%s\n%s\n%d\n%s\n%d\n%lld\n%s\n", ref.toString().c_str(), m_name.c_str(), m_description.c_str(), m_time_create, m_tags.c_str(), m_length, m_filesize, m_service_data.c_str() );
+       fprintf(f, "%s\n%s\n%s\n%d\n%s\n%d\n%lld\n%s\n%d\n", ref.toString().c_str(), m_name.c_str(), m_description.c_str(), m_time_create, m_tags.c_str(), m_length, m_filesize, m_service_data.c_str(), m_scrambled);
        fclose(f);
        return 0;
 }