From 1a2b0a4379ee3e9d16108c52abdadc9bb85675c1 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 12 Jun 2009 00:21:01 +0200 Subject: [PATCH] patch by Dr.Best - allow using filesize of movie in converter --- lib/dvb/metaparser.cpp | 28 ++++++++++++++++++-- lib/dvb/metaparser.h | 1 + lib/python/Components/Converter/MovieInfo.py | 7 ++++- lib/service/iservice.h | 1 + lib/service/servicedvb.cpp | 2 ++ 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/lib/dvb/metaparser.cpp b/lib/dvb/metaparser.cpp index 24a5ab67..5eff4d9d 100644 --- a/lib/dvb/metaparser.cpp +++ b/lib/dvb/metaparser.cpp @@ -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); diff --git a/lib/dvb/metaparser.h b/lib/dvb/metaparser.h index 38534d8f..3368294e 100644 --- a/lib/dvb/metaparser.h +++ b/lib/dvb/metaparser.h @@ -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; diff --git a/lib/python/Components/Converter/MovieInfo.py b/lib/python/Components/Converter/MovieInfo.py index be28dcce..635cedc4 100644 --- a/lib/python/Components/Converter/MovieInfo.py +++ b/lib/python/Components/Converter/MovieInfo.py @@ -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 for MovieInfo converter" % type) + raise ElementError("'%s' is not 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) diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 373f24ca..24c2e341 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -286,6 +286,7 @@ public: sDescription, sServiceref, sTimeCreate, /* unix time or string */ + sFileSize, sCAIDs, sVideoType, /* MPEG2 MPEG4 */ diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 52978dc3..bd15bcdc 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -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; -- 2.30.2