<%pre> #include <vdr/channels.h> #include <vdr/i18n.h> #include "timerconflict.h" #include "tools.h" #include "setup.h" #include "epg_events.h" #include "timers.h" #include "i18n.h" using namespace vdrlive; using namespace std; static const size_t maximumDescriptionLength = 300; </%pre> <%args> // input parameters </%args> <%session scope="global"> bool logged_in(false); </%session> <%include>page_init.eh</%include> <%cpp> if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); </%cpp> <%cpp> pageTitle = tr("Timer conflicts"); TimerConflicts timerConflicts; cMutexLock timersLock( &LiveTimerManager() ); SortedTimers& timers = LiveTimerManager().GetTimers(); </%cpp> <& pageelems.doc_type &> <html> <head> <title>VDR-Live - <$ pageTitle $></title> <& pageelems.stylesheets &> <& pageelems.ajax_js &> </head> <body> <& pageelems.logo &> <& menu active=("timersconflicts")> <div class="inhalt"> % if (timerConflicts.size() == 0) { <$ tr("No timer conflicts") $> % } else { <table class="listing" cellspacing="0" cellpadding="0"> <%cpp> for (TimerConflicts::iterator conflict = timerConflicts.begin(); conflict != timerConflicts.end(); ++conflict) { const std::list< TimerInConflict >& conflTimers = conflict->ConflictingTimers(); for (std::list< TimerInConflict >::const_iterator confltimer = conflTimers.begin(); confltimer != conflTimers.end(); ++confltimer) { </%cpp> <tr class="head"> <td colspan="10"> <div class="boxheader"><div><div><$ FormatDateTime(tr("%A, %x"), conflict->ConflictTime()) + " " + FormatDateTime(tr("%I:%M %p"), conflict->ConflictTime()) + " - " + lexical_cast<string, int>(confltimer->percentage) + "%" $></div></div></div> </td> </tr> <tr class="description"> <td class="leftcol"><img src="img/transparent.png" alt="" width="16px" height="16px" /></td> <td><div class="withmargin"><$ trVDR("Channel") $></div></td> <td><div class="withmargin"><$ trVDR("Start") $></div></td> <td><div class="withmargin"><$ trVDR("Stop") $></div></td> <td><div class="withmargin"><$ trVDR("Priority") $></div></td> <td><div class="withmargin"><$ trVDR("File") $></div></td> <td class="action"><img src="img/transparent.png" alt="" width="16px" height="16px" /></td> <td class="action"><img src="img/transparent.png" alt="" width="16px" height="16px" /></td> <td class="action"><img src="img/transparent.png" alt="" width="16px" height="16px" /></td> <td class="action rightcol"><img src="img/transparent.png" alt="" width="16px" height="16px" /></td> </tr> <%cpp> for (std::list<int>::const_iterator timerIndex = confltimer->concurrentTimerIndices.begin(); timerIndex != confltimer->concurrentTimerIndices.end(); ++timerIndex) { cTimer* timer = Timers.Get(*timerIndex-1); if (!timer) continue; std::list< int >::const_iterator nexttimerIndex = timerIndex; ++nexttimerIndex; bool bottom = (nexttimerIndex == confltimer->concurrentTimerIndices.end()); std::string timerStateImg = "transparent.png"; std::string timerStateHint; if (timer->Index() == confltimer->timerIndex-1) { timerStateImg = "timerconflict.gif"; timerStateHint = tr("Timer has a conflict."); } else if (timer->Flags() & tfActive) { timerStateImg = "arrow.png"; timerStateHint = tr("Timer is active."); } EpgInfoPtr epgEvent; string longDescription; string title; if (!timer->Event()) timer->SetEventFromSchedule(); if (timer->Event()) { epgEvent = EpgEvents::CreateEpgInfo(timer->Channel(), timer->Event()); longDescription = StringEscapeAndBreak(SortedTimers::GetTimerInfo(*timer)) + "<hr>" + StringEscapeAndBreak(StringWordTruncate(epgEvent->LongDescr(), maximumDescriptionLength)) + "<br/><br/>" + tr("Click to view details."); title = epgEvent->Title(); } </%cpp> <tr> <td class="leftcol <? bottom ? "bottomrow" ?>"><img src="<$ LiveSetup().GetThemedLink("img", timerStateImg) $>" alt="" <%cpp> if (!timerStateHint.empty()) { </%cpp><& tooltip.hint text=(timerStateHint) &><%cpp> } </%cpp>></img></td> <td class="<? bottom ? "bottomrow" ?>"><div class="withmargin"><a href="schedule.html?channel=<$ timer->Channel()->Number()$>"><$ timer->Channel()->Name() $></a></div></td> <td class="<? bottom ? "bottomrow" ?>"><div class="withmargin nowrap"><$ FormatDateTime(tr("%I:%M %p"), timer->StartTime()) $></div></td> <td class="<? bottom ? "bottomrow" ?>"><div class="withmargin nowrap"><$ FormatDateTime(tr("%I:%M %p"), timer->StopTime()) $></div></td> <td class="<? bottom ? "bottomrow" ?>"><div class="withmargin"><$ timer->Priority() $></div></td> <td class="<? bottom ? "bottomrow" ?>"><div class="withmargin"><a % if (!longDescription.empty()) { <& tooltip.hint text=(longDescription) &><& tooltip.display domId=(epgEvent->Id()) &> % } ><$ timer->File() $></a></div></td> <td class="action <? bottom ? "bottomrow" ?>"><a href="searchresults.html?searchplain=<$ StringEscapeAndBreak(title) $>"><img src="<$ LiveSetup().GetThemedLink("img", "search.png") $>" alt="" <& tooltip.hint text=(tr("Search for repeats.")) &>></img></a></td> <td class="action <? bottom ? "bottomrow" ?>"><a href="timers.html?timerid=<$ SortedTimers::EncodeDomId(timers.GetTimerId(*timer)) $>&action=toggle"><img src="<$ LiveSetup().GetThemedLink("img", (timer->Flags() & tfActive) ? "active.png" : "inactive.png") $>" alt="" <& tooltip.hint text=(tr("Toggle timer active/inactive")) &>></img></a></td> <td class="action <? bottom ? "bottomrow" ?>"><& pageelems.edit_timer timerId=(timers.GetTimerId(*timer)) &></td> <td class="action rightcol <? bottom ? "bottomrow" ?>"><a href="timers.html?timerid=<$ SortedTimers::EncodeDomId(timers.GetTimerId(*timer)) $>&action=delete"><img src="<$ LiveSetup().GetThemedLink("img", "del.png") $>" alt="" <& tooltip.hint text=(tr("Delete timer")) &>></img></a></td> </tr> % } </%cpp> <tr class="spacer"> <td colspan="10"/> </tr> <%cpp> } } </%cpp> </table> % } </div> </body> </html> <%include>page_exit.eh</%include>