diff options
author | Christian Wieninger <cwieninger (at) gmx (dot) de> | 2008-04-08 19:38:41 +0200 |
---|---|---|
committer | Christian Wieninger <cwieninger (at) gmx (dot) de> | 2008-04-08 19:38:41 +0200 |
commit | 54df4f849216084b7056e59f793c592e81c97e68 (patch) | |
tree | 09036d2320e026d9fa5ea442d137d7a0b8642c47 /recman.cpp | |
parent | 78c2040f1265845f1e0919c4107426b7cc1cf684 (diff) | |
download | vdr-plugin-live-54df4f849216084b7056e59f793c592e81c97e68.tar.gz vdr-plugin-live-54df4f849216084b7056e59f793c592e81c97e68.tar.bz2 |
display length of recordings (#451)
Diffstat (limited to 'recman.cpp')
-rw-r--r-- | recman.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -12,6 +12,7 @@ #include "epg_events.h" #include "recman.h" +#define INDEXFILESUFFIX "/index.vdr" using namespace std::tr1; using namespace std; @@ -237,6 +238,27 @@ namespace vdrlive { return m_recording->start; } + long RecordingsItemRec::Duration() const + { + long RecLength = 0; + if (!m_recording->FileName()) return 0; + cString filename = cString::sprintf("%s%s", m_recording->FileName(), INDEXFILESUFFIX); + if (*filename) { + if (access(filename, R_OK) == 0) { + struct stat buf; + if (stat(filename, &buf) == 0) { + struct tIndex { int offset; uchar type; uchar number; short reserved; }; + int delta = buf.st_size % sizeof(tIndex); + if (delta) { + delta = sizeof(tIndex) - delta; + esyslog("ERROR: invalid file size (%ld) in '%s'", buf.st_size, *filename); + } + RecLength = (buf.st_size + delta) / sizeof(tIndex) / SecondsToFrames(60); + } + } + } + return RecLength; + } /** * Implementation of class RecordingsTree: |