<%pre> #include <vdr/plugin.h> #include <vdr/config.h> #include "exception.h" #include "tools.h" #include "recordings.h" using namespace vdrlive; </%pre> <%args> </%args> <%request scope="page"> RecordingsTree recordingsTree(LiveRecordingsManager()); RecordingsTree::RecordingsItemPtr currRecItem; </%request> <%include>page_init.eh</%include> <%cpp> pageTitle = tr("Recordings"); </%cpp> <& pageelems.doc_type &> <html> <head> <title>VDR-Live - <$ pageTitle $></title> <link rel="stylesheet" type="text/css" href="styles.css" /> <script type="text/javascript" language="javascript" src="treeview.js"></script> <& tooltip.javascript var=("domTT_oneOnly") value=("true") var=("domTT_styleClass") value=("domTTepg") &> <& pageelems.ajax_js &> </head> <body> <& pageelems.logo &> <& menu active=("recordings") &> <div class="inhalt"> % if (Recordings.Count() == 0) { Keine Aufnahmen vorhanden % } else { <div class="recordings"> <& recordings.recordings_item &> </div> <div class="recordings_data" style="display: none;"> <& recordings.recordings_data &> </div> % } </div> </body> </html> <%include>page_exit.eh</%include> <%def recordings_item> <%args> path[]; int level = 0; </%args> <{ if (level > 0) { }> <ul class="recordingslist" style="display: none;"> <{ } else { }> <ul class="recordingslist" style="display: block;"> <{ } // if (level > 0) RecordingsTree::Map::iterator iter; RecordingsTree::Map::iterator end = recordingsTree.end(path); }> <li class="recording"> <{ for (iter = recordingsTree.begin(path); iter != end; ++iter) { RecordingsTree::RecordingsItemPtr recItem = iter->second; std::string folderimg("folder_closed.png"); std::string collapseimg("plus.png"); if (recItem->IsDir()) { reply.out() << std::string("\t\t\t") + std::string("<div class=\"recording_item\" onclick=\"Toggle(this)\">\n") + std::string("\t\t\t<div class=\"recording_imgs\">") + StringRepeat(level, "<img src=\"transparent.png\" alt=\"\" width=\"16px\" height=\"16px\" />") + std::string("<img class=\"recording_expander\" src=\"") + collapseimg + std::string("\" alt=\"\" />") + std::string("<img class=\"recording_folder\" src=\"") + folderimg + std::string("\" alt=\"\" />") + std::string("</div>"); }> <div class="recording_name"><$ recItem->Name() $></div> <div class="recording_actions"> </div> </div> <{ cxxtools::QueryParams recItemParams(qparam, false); for (path_type::const_iterator i = path.begin(); i != path.end(); ++i) { recItemParams.add("path", *i); } recItemParams.add("path", recItem->Name()); recItemParams.add("level", lexical_cast<std::string, int>(level + 1)); callComp("recordings.recordings_item", request, reply, recItemParams); } } for (iter = recordingsTree.begin(path); iter != end; ++iter) { RecordingsTree::RecordingsItemPtr recItem = iter->second; std::string folderimg("folder_closed.png"); std::string collapseimg("plus.png"); if (!recItem->IsDir()) { currRecItem = recItem; std::string day(FormatDateTime("%a,", recItem->StartTime())); std::string dayLen(lexical_cast<std::string, int>(day.length() - 1) + ".25em;"); reply.out() << std::string("\t\t\t") + std::string("<div class=\"recording_item\">\n") + std::string("\t\t\t<div class=\"recording_imgs\">") + StringRepeat(level, "<img src=\"transparent.png\" alt=\"\" width=\"16px\" height=\"16px\" />") + std::string("<img src=\"transparent.png\" alt=\"\" width=\"16px\" height=\"16px\" />") + std::string("<img src=\"movie.png\" alt=\"movie\" />") + std::string("</div>"); const cRecordingInfo* info = recItem->RecInfo(); std::string shortDescr(tr("Click to view details.")); if (info && info->ShortText()) shortDescr = (std::string("") + info->ShortText() + std::string("<br />") + shortDescr); }> <div class="recording_day" style="width: <$ dayLen $>"><$ day $></div> <div class="recording_date"><$ FormatDateTime(tr("%b %d %y"), recItem->StartTime()) $></div> <div class="recording_time"><$ FormatDateTime(tr("%I:%M %p"), recItem->StartTime()) $></div> <div class="recording_name" <& tooltip.hint text=(shortDescr) &><& tooltip.display domId=(recItem->Id()) &>><$ recItem->Name() $></div> <div class="recording_actions"> <& pageelems.play_recording recordingid=(recItem->Id()) image="play.png" alt="" &> <img src="edit.png" alt="" /> <img src="del.png" alt="" /> </div> </div> % } </li> <{ } }> </ul> </%def> <%def recordings_data> <%args> path[]; int level = 0; </%args> <{ RecordingsTree::Map::iterator iter; RecordingsTree::Map::iterator end = recordingsTree.end(path); for (iter = recordingsTree.begin(path); iter != end; ++iter) { RecordingsTree::RecordingsItemPtr recItem = iter->second; if (recItem->IsDir()) { cxxtools::QueryParams recItemParams(qparam, false); for (path_type::const_iterator i = path.begin(); i != path.end(); ++i) { recItemParams.add("path", *i); } recItemParams.add("path", recItem->Name()); recItemParams.add("level", lexical_cast<std::string, int>(level + 1)); callComp("recordings.recordings_data", request, reply, recItemParams); } else { currRecItem = recItem; const cRecordingInfo* info = recItem->RecInfo(); if (info) { std::string start(FormatDateTime("%a,", recItem->StartTime()) + std::string(" ") + FormatDateTime(tr("%b %d %y"), recItem->StartTime()) + std::string(" ") + FormatDateTime(tr("%I:%M %p"), recItem->StartTime())); std::string title(recItem->Name()); if (info->Title()) title = info->Title(); std::string shortDescr; if (info->ShortText()) shortDescr = info->ShortText(); std::string longDescr; if (info->Description()) longDescr = info->Description(); }> <& pageelems.epg_tt_box boxId=(recItem->Id()) caption=(recItem->Name()) tools_comp=("recordings.rec_tools") time=(start) title=(title) short_descr=(shortDescr) long_descr=(longDescr) &> <{ } } } }> </%def> <%def rec_tools> <& pageelems.play_recording recordingid=(currRecItem->Id()) image="play.png" alt="" &> </%def>