<%pre> #include #include #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; <%args> // input parameters <%session scope="global"> bool logged_in(false); <%include>page_init.eh <%cpp> if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); <%cpp> pageTitle = tr("Timer conflicts"); TimerConflicts timerConflicts; cMutexLock timersLock( &LiveTimerManager() ); SortedTimers& timers = LiveTimerManager().GetTimers(); <& pageelems.doc_type &> VDR-Live - <$ pageTitle $> <& pageelems.stylesheets &> <& pageelems.ajax_js &> <& pageelems.logo &> <& menu active=("timersconflicts")>
% if (timerConflicts.size() == 0) { <$ tr("No timer conflicts") $> % } else { <%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> for (std::list::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)) + "
" + StringEscapeAndBreak(StringWordTruncate(epgEvent->LongDescr(), maximumDescriptionLength)) + "

" + tr("Click to view details."); title = epgEvent->Title(); }
% } <%cpp> } }
<$ FormatDateTime(tr("%A, %x"), conflict->ConflictTime()) + " " + FormatDateTime(tr("%I:%M %p"), conflict->ConflictTime()) + " - " + lexical_cast(confltimer->percentage) + "%" $>
<$ trVDR("Channel") $>
<$ trVDR("Start") $>
<$ trVDR("Stop") $>
<$ trVDR("Priority") $>
<$ trVDR("File") $>
">" alt="" <%cpp> if (!timerStateHint.empty()) { <& tooltip.hint text=(timerStateHint) &><%cpp> } > "> ">
<$ FormatDateTime(tr("%I:%M %p"), timer->StartTime()) $>
">
<$ FormatDateTime(tr("%I:%M %p"), timer->StopTime()) $>
">
<$ timer->Priority() $>
"> ">" alt="" <& tooltip.hint text=(tr("Search for repeats.")) &>> ">Flags() & tfActive) ? "active.png" : "inactive.png") $>" alt="" <& tooltip.hint text=(tr("Toggle timer active/inactive")) &>> "><& pageelems.edit_timer timerId=(timers.GetTimerId(*timer)) &> ">" alt="" <& tooltip.hint text=(tr("Delete timer")) &>>
% }
<%include>page_exit.eh