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 | |
parent | 78c2040f1265845f1e0919c4107426b7cc1cf684 (diff) | |
download | vdr-plugin-live-54df4f849216084b7056e59f793c592e81c97e68.tar.gz vdr-plugin-live-54df4f849216084b7056e59f793c592e81c97e68.tar.bz2 |
display length of recordings (#451)
-rw-r--r-- | css/styles.css | 4 | ||||
-rw-r--r-- | pages/recordings.ecpp | 5 | ||||
-rw-r--r-- | recman.cpp | 22 | ||||
-rw-r--r-- | recman.h | 3 |
4 files changed, 33 insertions, 1 deletions
diff --git a/css/styles.css b/css/styles.css index ae09f78..25b82ca 100644 --- a/css/styles.css +++ b/css/styles.css @@ -921,6 +921,10 @@ div.recording_item { width: 5.75em; } +.recording_item div.recording_duration { + width: 2.5em; +} + .recording_item div.recording_name { font-weight: bold; cursor: pointer; diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp index 11b20a6..daa4427 100644 --- a/pages/recordings.ecpp +++ b/pages/recordings.ecpp @@ -131,11 +131,12 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { if (!recItem->IsDir()) { string day(FormatDateTime("%a,", recItem->StartTime())); string dayLen(lexical_cast<string, int>(day.length() - 1) + ".25em;"); + string duration(lexical_cast<string, int>(recItem->Duration()) + "'"); string shortDescr(recItem->RecInfo()->ShortText() ? recItem->RecInfo()->ShortText() : ""); string hint(tr("Click to view details.")); if (!shortDescr.empty()) hint = shortDescr + "<br />" + hint; </%cpp> <li class="recording"> - <& rec_item_file name=(recItem->Name()) level=(level) id=(recItem->Id()) day=(day) dayLen=(dayLen) startTime=(recItem->StartTime()) hint=(hint) shortDescr=(shortDescr) archived=(RecordingsManager::GetArchiveDescr(recItem->Recording())) &> + <& rec_item_file name=(recItem->Name()) level=(level) id=(recItem->Id()) day=(day) dayLen=(dayLen) startTime=(recItem->StartTime()) duration=(duration) hint=(hint) shortDescr=(shortDescr) archived=(RecordingsManager::GetArchiveDescr(recItem->Recording())) &> </li> <%cpp> } @@ -203,6 +204,7 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { string day; string dayLen; time_t startTime; + string duration; string hint; string shortDescr; string archived; @@ -213,6 +215,7 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { <div class="recording_day" style="width: <$ dayLen $>"><$ day $></div> <div class="recording_date"><$ FormatDateTime(tr("%b %d %y"), startTime) $></div> <div class="recording_time"><$ FormatDateTime(tr("%I:%M %p"), startTime) $></div> + <div class="recording_duration"><$ duration $></div> <div class="recording_name"><a <& tooltip.hint text=(hint) &><& tooltip.display domId=(id) &>><$ name $><br /><%cpp>if ((name != shortDescr) && (!shortDescr.empty())) {</%cpp><span><$ shortDescr $></span><%cpp> } else { </%cpp><span> </span><%cpp> } </%cpp></a></div> </div> <div class="recording_actions"> @@ -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: @@ -121,6 +121,7 @@ namespace vdrlive { virtual time_t StartTime() const = 0; virtual bool IsDir() const = 0; + virtual long Duration() const = 0; virtual const std::string& Name() const { return m_name; } virtual const std::string Id() const = 0; @@ -149,6 +150,7 @@ namespace vdrlive { virtual ~RecordingsItemDir(); virtual time_t StartTime() const { return 0; } + virtual long Duration() const { return 0; } virtual bool IsDir() const { return true; } virtual std::string const Id() const { return ""; } @@ -170,6 +172,7 @@ namespace vdrlive { virtual ~RecordingsItemRec(); virtual time_t StartTime() const; + virtual long Duration() const; virtual bool IsDir() const { return false; } virtual const std::string Id() const { return m_id; } |