patch by Dr.Best - allow using filesize of movie in converter
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 11 Jun 2009 22:21:01 +0000 (00:21 +0200)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 11 Jun 2009 22:21:01 +0000 (00:21 +0200)
lib/dvb/metaparser.cpp
lib/dvb/metaparser.h
lib/python/Components/Converter/MovieInfo.py
lib/service/iservice.h
lib/service/servicedvb.cpp

index 24a5ab67b1439e57298460a4c618d6c3c1ff1395..5eff4d9dbf277febc6523cacdb5a88e7a5c1800c 100644 (file)
@@ -17,7 +17,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)
@@ -124,7 +148,7 @@ 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;
                        fclose(f);
index 38534d8f17f1862e425bfe07d2c3c9072bad8845..3368294e0e5f061fa5dab26e44f71e58da6b23ab 100644 (file)
@@ -12,6 +12,7 @@ public:
        int parseMeta(const std::string &filename);
        int parseRecordings(const std::string &filename);
        int updateMeta(const std::string &basename);
+       long long fileSize(const std::string &basename);
 
        eServiceReferenceDVB m_ref;
        int m_data_ok, m_time_create, m_length;
index be28dcce04e8ce098f33df25133ec4fdd7abd730..635cedc4795a98dae3ee8cfc0eed2f7eb886c42f 100644 (file)
@@ -7,6 +7,7 @@ class MovieInfo(Converter, object):
        MOVIE_SHORT_DESCRIPTION = 0 # meta description when available.. when not .eit short description
        MOVIE_META_DESCRIPTION = 1 # just meta description when available
        MOVIE_REC_SERVICE_NAME = 2 # name of recording service
+       MOVIE_REC_FILESIZE = 3 # filesize of recording
 
        def __init__(self, type):
                if type == "ShortDescription":
@@ -15,8 +16,10 @@ class MovieInfo(Converter, object):
                        self.type = self.MOVIE_META_DESCRIPTION
                elif type == "RecordServiceName":
                        self.type = self.MOVIE_REC_SERVICE_NAME
+               elif type == "FileSize":
+                       self.type = self.MOVIE_REC_FILESIZE
                else:
-                       raise ElementError("'%s' is not <ShortDescription|MetaDescription|RecordServiceName> for MovieInfo converter" % type)
+                       raise ElementError("'%s' is not <ShortDescription|MetaDescription|RecordServiceName|FileSize> for MovieInfo converter" % type)
                Converter.__init__(self, type)
 
        @cached
@@ -37,6 +40,8 @@ class MovieInfo(Converter, object):
                        elif self.type == self.MOVIE_REC_SERVICE_NAME:
                                rec_ref_str = info.getInfoString(service, iServiceInformation.sServiceref)
                                return ServiceReference(rec_ref_str).getServiceName()
+                       elif self.type == self.MOVIE_REC_FILESIZE:
+                               return "%d MB" % (info.getInfo(service, iServiceInformation.sFileSize) / (1024*1024))
                return ""
 
        text = property(getText)
index 373f24ca88ad794d44c06aff4d63a98f10ae1a78..24c2e341c04e13f078176b834db463364d9bed65 100644 (file)
@@ -286,6 +286,7 @@ public:
                sDescription,
                sServiceref,
                sTimeCreate,            /* unix time or string */
+               sFileSize,
 
                sCAIDs,
                sVideoType,             /* MPEG2 MPEG4 */
index 52978dc3625e94094b10a67251daa88d498b00e9..bd15bcdc0be164e8579333c86c16b0302672a4d6 100644 (file)
@@ -400,6 +400,8 @@ int eStaticServiceDVBPVRInformation::getInfo(const eServiceReference &ref, int w
                return iServiceInformation::resIsString;
        case iServiceInformation::sServiceref:
                return iServiceInformation::resIsString;
+       case iServiceInformation::sFileSize:
+               return m_parser.m_filesize;
        case iServiceInformation::sTimeCreate:
                if (m_parser.m_time_create)
                        return m_parser.m_time_create;