vdr-plugin-skindesigner/displayreplay.c
2016-06-12 11:02:28 +02:00

116 lines
3.0 KiB
C

#include "displayreplay.h"
cSDDisplayReplay::cSDDisplayReplay(cViewReplay *replayView, bool ModeOnly) {
init = true;
view = replayView;
ok = view->Init();
if (!ok)
esyslog("skindesigner: Error initiating displayreplay view - aborting");
view->SetModeOnly(ModeOnly);
}
cSDDisplayReplay::~cSDDisplayReplay() {
view->Close();
}
void cSDDisplayReplay::SetRecording(const cRecording *Recording) {
if (ok) {
view->SetRecording(Recording);
if (init) {
view->SetRecordingLength(Recording->LengthInSeconds());
SetTimeShiftValues(Recording);
init = false;
}
}
}
void cSDDisplayReplay::SetTitle(const char *Title) {
view->SetTitle(Title);
}
void cSDDisplayReplay::SetMode(bool Play, bool Forward, int Speed) {
if (!ok)
return;
if (!Play && Speed < 0) {
cControl *control = cControl::Control();
if (control) {
const cRecording *recording = control->GetRecording();
if (recording && recording->FileName()) {
view->StartOnPause(recording->FileName());
}
}
} else {
view->ClearOnPause();
}
view->SetControlIcons(Play, Forward, Speed);
}
void cSDDisplayReplay::SetProgress(int Current, int Total) {
if (ok) {
view->SetProgressbar(Current, Total);
view->SetMarks(marks, Current, Total);
view->SetEndTime(Current, Total);
view->DelayOnPause();
}
}
void cSDDisplayReplay::SetCurrent(const char *Current) {
if (ok)
view->SetCurrent(Current);
}
void cSDDisplayReplay::SetTotal(const char *Total) {
if (ok)
view->SetTotal(Total);
}
void cSDDisplayReplay::SetJump(const char *Jump) {
if (ok)
view->SetJump(Jump);
}
void cSDDisplayReplay::SetMessage(eMessageType Type, const char *Text) {
if (ok)
view->SetMessage(Type, Text);
}
void cSDDisplayReplay::Flush(void) {
if (!ok)
return;
view->Flush(false);
}
void cSDDisplayReplay::SetTimeShiftValues(const cRecording *recording) {
//check for instant recording
const char *recName = recording->Name();
if (recName && *recName == '@')
return;
bool isTimeShift = false;
#if APIVERSNUM >= 20101
int usage = recording->IsInUse();
if (usage & ruTimer)
isTimeShift = true;
else {
cGlobalTimers globalTimers;
globalTimers.LoadTimers();
if (globalTimers.IsRecording(recording))
isTimeShift = true;
}
#endif
if (!isTimeShift)
return;
const cRecordingInfo *recInfo = recording->Info();
if (!recInfo)
return;
const cEvent *event = recInfo->GetEvent();
if (!event)
return;
double fps = recording->FramesPerSecond();
time_t liveEventStop = event->EndTime();
time_t recordingStart = time(0) - recording->LengthInSeconds();
int framesTotal = (liveEventStop - recordingStart)*fps;
int recLength = liveEventStop - recordingStart;
view->SetTimeShift(framesTotal, recLength);
}