<%pre>

#include <timerconflict.h>
#include <tools.h>
#include <setup.h>
#include <epg_events.h>
#include <timers.h>

using namespace vdrlive;

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 onload="adjustHeader()" onresize="adjustHeader()">
		<& 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="11">
								 <div class="boxheader"><div><div><$ FormatDateTime(tr("%A, %x"), conflict->ConflictTime()) + " " + FormatDateTime(tr("%I:%M %p"), conflict->ConflictTime()) + " - " + lexical_cast<std::string, int>(confltimer->percentage) + "%" $><span style="float:right;"><diff><$ tr("Server")$>: <$ (confltimer->remote == "" ) ? tr("local") : confltimer->remote $> </diff></span></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><div class="withmargin"><$ tr("Searchtimer") $></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) {
#if VDRVERSNUM >= 20301
							LOCK_TIMERS_READ;
							cTimer* timer = (cTimer *)Timers->GetById(*timerIndex, (confltimer->remote == "") ? NULL : confltimer->remote.c_str());
#else
							cTimer* timer = Timers.Get(*timerIndex-1);
#endif
							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->Id() == confltimer->timerIndex) {
								timerStateImg = "timerconflict.gif";
								timerStateHint = tr("Timer has a conflict.");
							}
							else if (timer->Flags() & tfActive) {
								timerStateImg = "arrow.png";
								timerStateHint = tr("Timer is active.");
							}

							EpgInfoPtr epgEvent;
							std::string longDescription;
							std::string searchTimName;
							std::string title;
#if VDRVERSNUM >= 20301
							if (!timer->Event()) {
								LOCK_SCHEDULES_READ;
								timer->SetEventFromSchedule(Schedules);
							}
#else
							if (!timer->Event()) timer->SetEventFromSchedule();
#endif
							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.");
								searchTimName = SortedTimers::SearchTimerInfo(*timer, "searchtimer");
								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="<? bottom ? "bottomrow" ?>"><div class="withmargin nowrap"><$ searchTimName $></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>


