Skip to content

Commit

Permalink
performance recordings
Browse files Browse the repository at this point in the history
  • Loading branch information
Markus Ehrnsperger committed Sep 27, 2022
1 parent e3b0d97 commit 01b6504
Show file tree
Hide file tree
Showing 4 changed files with 297 additions and 1 deletion.
161 changes: 160 additions & 1 deletion pages/recordings.ecpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,161 @@ int Minutes = int(double(FreeMB) / MB_PER_MINUTE);
int Hours = Minutes / 60;
Minutes %= 60;
diskinfo = cString::sprintf("%s %d%% - %2d:%02d %s", trVDR("Disk"), Percent, Hours, Minutes, trVDR("free"));
#if TNTVERSION >= 30000
std::string TNT_ARRAY = "[]";
#else
std::string TNT_ARRAY = "";
#endif

</%cpp>
<& pageelems.doc_type &>
<html>
<head>
<title>VDR-Live - <$ pageTitle $></title>
<& pageelems.stylesheets &>
<& pageelems.ajax_js &>
<script>
function RecordingAction(id, A, Img, Title, argList) {
document.write('<a href=\"')
document.write(A)
document.write('recording_')
document.write(id)
document.write(argList)
document.write('\" title=\"')
document.write(Title)
document.write('\"><img src=\"<$LiveSetup().GetThemedLinkPrefixImg()$>')
document.write(Img)
document.write('\" /></a>')
}
function IMDB(im_db, name) {
if (<$LiveSetup().GetShowIMDb()$> != 0) {
if (im_db == "") {
document.write('<a href=\"http://www.imdb.com/find?s=all&q=')
document.write(name)
} else {
document.write('<a href=\"https://www.imdb.com/title/')
document.write(im_db)
}
document.write(
'\" target=\"_blank\"><img src=\"<$LiveSetup().GetThemedLinkPrefixImg()$>imdb.png\" title=\"<$tr("Find more at the Internet Movie Database.")$>\"/></a>')
}
}
// [0] : Level
// [1] : ID (prefix "recording_" removed !!!)
// [2] : Archived
// [3] : image.path (nach "/tvscraper/")
// [4] : "pt" if m_s_image.width <= m_s_image.height, otherwise= ""
// [5] : title (scraper)
// [6] : season / episode (scraper, for tv shows, if available. Otherwise: Empty)
// [7] : runtime (scraper)
// [8] : relase date (scraper)
// [9] : recording_spec: Day, time & duration
// [10] : Number of recording errors


function Recordings(data) {
for (obj of data) {
document.write(
'<li class="recording"><div class="recording_item"><div class="recording_imgs">')
if (obj[0] > 0) document.write(
'<img src="img/transparent.png" width="' + String(16 * obj[0]) + 'px" height="16px" />')
if (obj[2] != "") document.write(obj[2])
else {
document.write('<input type="checkbox" name="deletions<$TNT_ARRAY$>" value="recording_');
document.write(obj[1])
document.write('" />')
}
if ("<$LiveSetup().GetTvscraperImageDir()$>" != "") {
document.write('</div><div class=\"thumb\"><a class=\"thumb\" href=\"epginfo.html?epgid=recording_')
document.write(obj[1])
document.write('\"><img src=\"')
if (obj[3] != "") {
document.write('/tvscraper/')
document.write(obj[3])
document.write('\" class=\"thumb')
document.write(obj[4])
} else document.write('img/transparent.png\" height=\"16px')
if (obj[5] != "" || obj[8] != "") {
// scraper data available
document.write('\" title=\"')
document.write(obj[5])
if (obj[6] != "") {
document.write('<br/>S')
document.write(obj[6])
}
if (obj[7] != "") {
document.write('<br/>')
document.write(obj[7])
}
if (obj[8] != "") {
document.write('<br/>')
document.write(obj[8])
}
document.write('\"')
}
document.write('/> </a>')
}
// end if (!LiveSetup().GetTvscraperImageDir().empty() )
document.write('</div><div class=\"recording_spec\"><div class=\"recording_day\">')
document.write(obj[9])
document.write('</div>')
if (obj[10] > -100) {
document.write('<div class=\"recording_errors\"><img src=\"<$LiveSetup().GetThemedLinkPrefixImg()$>')
if (obj[10] == 0) document.write('NoRecordingErrors.png')
if (obj[10] > 0) document.write('RecordingErrors.png')
if (obj[10] < 0) document.write('NotCheckedForRecordingErrors.png')
document.write('\" width = \"16px\" title=\"')
if (obj[10] == 0) document.write('<$tr("No recording errors")$>')
if (obj[10] > 0) document.write('<$tr("Number of recording errors:")$> ' + String(obj[10]))
if (obj[10] < 0) document.write('<$tr("Recording errors unknown")$>')
document.write('\" /> </div>')
}
document.write('<div class=\"recording_sd_hd\"><img src=\"<$LiveSetup().GetThemedLinkPrefixImg()$>')
document.write(obj[11])
document.write('d.png\" width = \"25px\" title=\"')
document.write(obj[12])
document.write('\" /> </div><div class=\"recording_name')
document.write(obj[13])
document.write('\"><a title=\"')
if (obj[14] != "") {
document.write(obj[14])
document.write('&lt;br /&gt;')
}
document.write('<$tr("Click to view details.")$>')
document.write('\" href=\"epginfo.html?epgid=recording_')
document.write(obj[1])
document.write('\">')
document.write(obj[15])
document.write(obj[16])
document.write('<br /><span>')
document.write(obj[14])
if (obj[14] == "") document.write('&nbsp;')
document.write('</span></a></div></div><div class=\"recording_actions\">')
//function RecordingAction(id, A, Img, Title, argList)
if (obj[17] != "") {
RecordingAction(obj[1], "vdr_request/play_recording?param=", "play.png", "<$tr("play this recording")$>", obj[17])
RecordingAction(obj[1], "playlist.m3u?recid=", "playlist.png", "<$tr("Stream this recording into media player.")$>", obj[17])
IMDB(obj[18], obj[15])
RecordingAction(obj[1], "edit_recording.html?recid=", "edit.png", "<$tr("Edit recording")$>", obj[17])
RecordingAction(obj[1], "recordings.html?todel=", "del.png", "<$tr("Delete this recording from hard disc!")$>", obj[17])
} else {
document.write('<img src=\"img/transparent.png\" width=\"16px\" height=\"16px\" />')
IMDB(obj[18], obj[15])
}
document.write('</div>')
if (obj[19] != "") {
document.write('<div class=\"recording_arch\">')
document.write(obj[19])
document.write('</div>')
}
document.write('</div></li>')
}
}
</script>




<script type="text/javascript" src="treeview.js"></script>
<script type="text/javascript"><!--
function filterRecordings(filter)
Expand Down Expand Up @@ -302,10 +450,15 @@ argList.append("&sort=");
argList.append(currentSort);
argList.append("&filter=");
argList.append(currentFilter);
bool first = true;
</%cpp>
<script>Recordings([
<%cpp>
for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) {
RecordingsItemPtr recItem = *recIter;
recoring_item.clear();
recItem->AppendasHtml(recoring_item, currentFlat == "true", argList, level);
// recItem->AppendasHtml(recoring_item, currentFlat == "true", argList, level);
recItem->AppendasJSArray(recoring_item, currentFlat == "true", argList, level);
max_length_recoring_item = std::max(max_length_recoring_item, recoring_item.length() );
#ifdef HAVE_PCRE2
StringMatch sm(filter);
Expand All @@ -315,6 +468,11 @@ for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) {
sm.Matches(recItem->Description()?recItem->Description() : ""))
#endif
{
if (!first) {
</%cpp>
,
<%cpp>
} else first = false;
</%cpp>
<$$ recoring_item $>
<# Buffer used: <$ recoring_item.length() $> bytes
Expand All @@ -323,6 +481,7 @@ for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) {
}
}
</%cpp>
])</script>
</%def>

<# ---------------------------------------------------------------------- #>
Expand Down
130 changes: 130 additions & 0 deletions recman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -671,6 +671,22 @@ namespace vdrlive {
}
AppendHtmlEscaped(target, tr("Click to view details.") );
}

void RecordingsItemRec::AppendShortTextOrDesc(std::string &target) const
{
const char *text = ShortText();
if (!text || Name() == text ) text = RecInfo()->Description();
// Spielfilm Italien / Großbritannien / USA 1965 (Doctor Zhivago)
if (!text) return;
if ((int)strlen(text) < 70)
AppendHtmlEscapedAndCorrectNonUTF8(target, text);
else {
const char *end = text + 69;
for (; *end && *end != ' '; end++);
AppendHtmlEscapedAndCorrectNonUTF8(target, std::string(text, end-text).c_str() );
target.append("...");
}
}
const char *RecordingsItemRec::RecordingErrorsIcon() const
{
if (RecordingErrors() == 0) return "NoRecordingErrors.png";
Expand Down Expand Up @@ -757,6 +773,120 @@ namespace vdrlive {
target.append("\" /></a>\n");
}

void RecordingsItemRec::AppendasJSArray(std::string &target, bool displayFolder, const std::string argList, int level){
// list item, classes, space depending on level
// target.append("<script>Recordings([");
target.append("[");
// [0] : Level
if(displayFolder) {
target.append("0,\"");
} else {
// add some space
target.append( std::to_string(level) );
target.append(",\"");
}
// [1] : ID
target.append(Id().c_str() + 10);
target.append("\",\"");
// [2] : Archived
if (IsArchived() ) {
target.append("<img src=\"");
target.append(LiveSetup().GetThemedLinkPrefixImg() );
target.append("on_dvd.png\" alt=\"on_dvd\" title=\"");
AppendHtmlEscaped(target, ArchiveDescr().c_str() );
target.append("/>");
}
target.append("\", \"");
// scraper data
// [3] : image.path (nach "/tvscraper/")
target.append(m_s_image.path);
target.append("\", \"");
// [4] : "pt" if m_s_image.width <= m_s_image.height, otherwise= ""
if (m_s_image.width <= m_s_image.height) target.append("pt");
target.append("\", \"");
if (!scraperDataAvailable() ) {
m_s_title = "";
m_s_videoType = eVideoType::none;
m_s_runtime = 0;
m_s_release_date = "";
}
// [5] : title (scraper)
AppendHtmlEscapedAndCorrectNonUTF8(target, m_s_title.c_str() );
target.append("\", \"");
if (m_s_videoType == eVideoType::tvShow && (m_s_episode_number != 0 || m_s_season_number != 0)) {
// [6] : season/episode/episode name (scraper)
target.append(std::to_string(m_s_season_number));
target.append("E");
target.append(std::to_string(m_s_episode_number));
target.append(" ");
AppendHtmlEscapedAndCorrectNonUTF8(target, m_s_episode_name.c_str() );
}
target.append("\", \"");
if (m_s_runtime) {
// [7] : runtime (scraper)
AppendDuration(target, tr("(%d:%02d)"), m_s_runtime / 60, m_s_runtime % 60);
}
target.append("\", \"");
if (!m_s_release_date.empty() ) {
// [8] : relase date (scraper)
target.append(m_s_release_date);
}
target.append("\", \"");
// recording_spec: Day, time & duration
// [9] : recording_spec: Day, time & duration
AppendDateTime(target, tr("%a,"), StartTime()); // day of week
target.append(" ");
AppendDateTime(target, tr("%b %d %y"), StartTime()); // date
target.append(" ");
AppendDateTime(target, tr("%I:%M %p"), StartTime() ); // time
if(Duration() >= 0) {
target.append(" ");
AppendDuration(target, tr("(%d:%02d)"), Duration() / 60, Duration() % 60);
}
target.append("\", ");
// RecordingErrors, Icon
#if VDRVERSNUM >= 20505
// [10] : Number of recording errors
target.append(std::to_string(RecordingErrors() ));
#else
target.append("-100");
#endif
target.append(", \"");
// [11] HD_SD
target.append(SD_HD() == 0 ? "s": "h");
target.append("\", \"");
// [12] channel name
AppendHtmlEscapedAndCorrectNonUTF8(target, RecInfo()->ChannelName() );
target.append("\", \"");
// [13] NewR()
target.append(NewR() );
target.append("\", \"");
// [14] Short text / descr
AppendShortTextOrDesc(target);
target.append("\", \"");
// [15] Name
AppendHtmlEscaped(target, Name().c_str() );
target.append("\", \"");
// [16] Path / folder
if( *(const char *)Recording()->Folder() && displayFolder) {
target.append(" (");
AppendHtmlEscaped(target, (const char *)Recording()->Folder() );
target.append(")");
}
target.append("\", \"");
// recording_actions
// [17] Arglist
if (!IsArchived()) target.append(argList);
target.append("\", \"");
// [18] IMDB ID
target.append(m_s_IMDB_ID);
target.append("\", \"");
// [19] ArchiveDescr()
if (IsArchived()) AppendHtmlEscapedAndCorrectNonUTF8(target, ArchiveDescr().c_str() );
target.append("\"]");
// target.append("])</script>");
}

void RecordingsItemRec::AppendasHtml(std::string &target, bool displayFolder, const std::string argList, int level){
// list item, classes, space depending on level
target.append("<li class=\"recording\"><div class=\"recording_item\"><div class=\"recording_imgs\">");
Expand Down
3 changes: 3 additions & 0 deletions recman.h
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ namespace vdrlive {
virtual const int SD_HD() { return 0; }
virtual const char *SD_HD_icon() { return ""; }
virtual void AppendasHtml(std::string &target, bool displayFolder, const std::string argList, int level) { }
virtual void AppendasJSArray(std::string &target, bool displayFolder, const std::string argList, int level) { }

private:
std::string GetNameForSearch(std::string const & name);
Expand Down Expand Up @@ -334,6 +335,8 @@ namespace vdrlive {
virtual const int SD_HD();
virtual const char *SD_HD_icon() { return SD_HD() == 0 ? "sd.png": "hd.png"; }
virtual void AppendasHtml(std::string &target, bool displayFolder, const std::string argList, int level);
virtual void AppendasJSArray(std::string &target, bool displayFolder, const std::string argList, int level);
void AppendShortTextOrDesc(std::string &target) const;
void AppendHint(std::string &target) const;
void AppendIMDb(std::string &target) const;
void AppendRecordingAction(std::string &target, const char *A, const char *Img, const char *Title, const std::string argList);
Expand Down
4 changes: 4 additions & 0 deletions tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ namespace vdrlive {
case '\'': target.append(notAppended, i); target.append("&apos;"); notAppended = notAppended + i + 1; i = 0; break;
case '<': target.append(notAppended, i); target.append("&lt;"); notAppended = notAppended + i + 1; i = 0; break;
case '>': target.append(notAppended, i); target.append("&gt;"); notAppended = notAppended + i + 1; i = 0; break;
case 10:
case 13: target.append(notAppended, i); target.append("&lt;br /&gt;"); notAppended = notAppended + i + 1; i = 0; break;
default: i++; break;
}
}
Expand All @@ -74,6 +76,8 @@ namespace vdrlive {
case '\'': target.append(notAppended, i); target.append("&apos;"); notAppended = notAppended + i + 1; i = 0; break;
case '<': target.append(notAppended, i); target.append("&lt;"); notAppended = notAppended + i + 1; i = 0; break;
case '>': target.append(notAppended, i); target.append("&gt;"); notAppended = notAppended + i + 1; i = 0; break;
case 10:
case 13: target.append(notAppended, i); target.append("&lt;br /&gt;"); notAppended = notAppended + i + 1; i = 0; break;
default: i++; break;
}
break;
Expand Down

0 comments on commit 01b6504

Please sign in to comment.