diff options
author | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2021-02-12 15:20:34 +0100 |
---|---|---|
committer | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2021-02-15 14:00:35 +0100 |
commit | afa9cb77a3534dd253ec7e6b4ea63305e410097d (patch) | |
tree | 5d3e2cb556a88eb55e24ebe0982ee401bb2d424c | |
parent | 1fc5379e2eed0ecd7eb2227564077a62bc0b1e12 (diff) | |
download | vdr-plugin-skindesigner-afa9cb77a3534dd253ec7e6b4ea63305e410097d.tar.gz vdr-plugin-skindesigner-afa9cb77a3534dd253ec7e6b4ea63305e410097d.tar.bz2 |
Add element timeShiftTimes to displayreplay
In displayreplay the tokens recstart, playbacktime and timeshiftrest
added to display start time, actual playback time and the rest of
the actual recording in timeshiftmode.
-rw-r--r-- | coreengine/definitions.h | 23 | ||||
-rw-r--r-- | coreengine/viewdisplayreplay.c | 49 | ||||
-rw-r--r-- | coreengine/viewdisplayreplay.h | 5 | ||||
-rw-r--r-- | coreengine/viewelement.c | 2 | ||||
-rw-r--r-- | coreengine/viewelementsdisplayreplay.c | 68 | ||||
-rw-r--r-- | coreengine/viewelementsdisplayreplay.h | 30 | ||||
-rw-r--r-- | displayreplay.c | 2 | ||||
-rw-r--r-- | dtd/displayreplay.dtd | 17 | ||||
-rw-r--r-- | skins/estuary4vdr/globals.xml | 21 | ||||
-rw-r--r-- | skins/estuary4vdr/xmlfiles/displayreplay.xml | 55 | ||||
-rw-r--r-- | skinskeleton/xmlfiles/displayreplay.xml | 13 |
11 files changed, 248 insertions, 37 deletions
diff --git a/coreengine/definitions.h b/coreengine/definitions.h index 943bea8..678c54f 100644 --- a/coreengine/definitions.h +++ b/coreengine/definitions.h @@ -129,6 +129,7 @@ enum class eVeDisplayReplay { recinfo, currenttime, totaltime, + timeshifttimes, endtime, progressbar, cutmarks, @@ -1522,6 +1523,11 @@ enum class eDRCurrentTimeST { count }; +enum class eDRCurrentTimeIT { + timeshift = 0, + count +}; + enum class eDRTotalTimeST { rectotal = 0, timeshifttotal, @@ -1533,11 +1539,28 @@ enum class eDRTotalTimeIT { count }; +enum class eDRTimeshiftTimesST { + recstart = 0, + playbacktime, + timeshiftrest, + count +}; + +enum class eDRTimeshiftTimesIT { + timeshift = 0, + count +}; + enum class eDREndTimeST { recend = 0, count }; +enum class eDREndTimeIT { + timeshift = 0, + count +}; + enum class eDRProgressbarIT { current = 0, total, diff --git a/coreengine/viewdisplayreplay.c b/coreengine/viewdisplayreplay.c index 30b7c36..c3aeb00 100644 --- a/coreengine/viewdisplayreplay.c +++ b/coreengine/viewdisplayreplay.c @@ -6,6 +6,7 @@ cViewReplay::cViewReplay(void) { veCustomTokens = NULL; + veTimeshiftTimes = NULL; veEndTime = NULL; veMessage = NULL; veScraperContent = NULL; @@ -45,6 +46,7 @@ void cViewReplay::SetViewElements(void) { viewElementNames.insert(pair<string, int>("rectitle", (int)eVeDisplayReplay::rectitle)); viewElementNames.insert(pair<string, int>("recinfo", (int)eVeDisplayReplay::recinfo)); viewElementNames.insert(pair<string, int>("currenttime", (int)eVeDisplayReplay::currenttime)); + viewElementNames.insert(pair<string, int>("timeshifttimes", (int)eVeDisplayReplay::timeshifttimes)); viewElementNames.insert(pair<string, int>("endtime", (int)eVeDisplayReplay::endtime)); viewElementNames.insert(pair<string, int>("totaltime", (int)eVeDisplayReplay::totaltime)); viewElementNames.insert(pair<string, int>("progressbar", (int)eVeDisplayReplay::progressbar)); @@ -92,6 +94,10 @@ void cViewReplay::SetViewElementObjects(void) { { veTotalTime = dynamic_cast<cVeDrTotalTime*>(viewElements[i]); } + else if (dynamic_cast<cVeDrTimeshiftTimes*>(viewElements[i])) + { + veTimeshiftTimes = dynamic_cast<cVeDrTimeshiftTimes*>(viewElements[i]); + } else if (dynamic_cast<cVeDrEndTime*>(viewElements[i])) { veEndTime = dynamic_cast<cVeDrEndTime*>(viewElements[i]); @@ -153,8 +159,11 @@ void cViewReplay::ClearVariables(void) { timeShiftFramesTotal = -1; timeShiftLength = -1; timeShiftDuration = ""; + timeshiftrest = ""; if (veCustomTokens) veCustomTokens->Reset(); + if (veTimeshiftTimes) + veTimeshiftTimes->Set(cString(""), cString(""), cString("")); if (veEndTime) veEndTime->Set(cString("")); if (veCutMarks) @@ -200,17 +209,20 @@ void cViewReplay::SetTimeShiftValues(int current, int total) { if (!Schedule) return; // Get event at actual recording position - const cEvent *eventEnde = Schedule->GetEventAround(time(NULL)); + const cEvent *eventEnde = Schedule->GetEventAround(time(0)); if (!eventEnde) return; - double fps = recording->FramesPerSecond(); + // End of live program time_t liveEventStop = eventEnde->EndTime(); + // Begin of timeshift recording time_t recordingStart = time(0) - recording->LengthInSeconds(); - timeShiftFramesTotal = (liveEventStop - recordingStart) * fps; + // actual timeshiftlength timeShiftLength = liveEventStop - recordingStart; - // Get event at actual replay position - int secondsafter = (int)(recording->LengthInSeconds() * (1.0 - (double)current / (double)total)); - const cEvent *eventReplay = Schedule->GetEventAround(time(NULL) - secondsafter); + // timeshiftlength until end of live program + timeShiftFramesTotal = total * ((double)timeShiftLength / (double)recording->LengthInSeconds()); + // Get event at actual replay position (add 30sec for a better match) + int timeShiftSecondsAfter = (int)(recording->LengthInSeconds() * (1.0 - (double)current / (double)total)) + 30; + const cEvent *eventReplay = Schedule->GetEventAround(time(0) - timeShiftSecondsAfter); // Display title at replay position if (eventReplay && eventReplay != lastEvent && veRecTitle) { veRecTitle->Set(recording, eventReplay, true); @@ -220,6 +232,9 @@ void cViewReplay::SetTimeShiftValues(int current, int total) { int mins = (timeShiftLength / 60) % 60; int hours = (timeShiftLength / 3600) % 24; timeShiftDuration = cString::sprintf("%d:%02d", hours, mins); + mins = (timeShiftSecondsAfter / 60) % 60; + hours = (timeShiftSecondsAfter / 3600) % 24; + timeshiftrest = cString::sprintf("%d:%02d", hours, mins); } void cViewReplay::SetRecording(const cRecording *recording) { @@ -249,16 +264,30 @@ void cViewReplay::SetTitle(const char *title) { void cViewReplay::SetCurrent(const char *current) { if (veCurrentTime) - veCurrentTime->Set(current); + veCurrentTime->Set(current, timeShiftActive); Render((int)eVeDisplayReplay::currenttime); } void cViewReplay::SetTotal(const char *total) { if (veTotalTime) - veTotalTime->Set(total, timeShiftActive, *timeShiftDuration); + veTotalTime->Set(total, *timeShiftDuration, timeShiftActive); Render((int)eVeDisplayReplay::totaltime); } +void cViewReplay::SetTimeshiftTimes(int current, int total) { + if (!veTimeshiftTimes || reclength == 0) + return; + time_t recordingStart = 0; + time_t playbackTime = 0; + if (timeShiftActive) { + recordingStart = time(0) - recording->LengthInSeconds(); + playbackTime = time(0) - (int)(recording->LengthInSeconds() * (1.0 - (double)current / (double)total)); + } else + recordingStart = recording->Start(); + veTimeshiftTimes->Set(TimeString(recordingStart), TimeString(playbackTime), timeshiftrest, timeShiftActive); + Render((int)eVeDisplayReplay::timeshifttimes); +} + void cViewReplay::SetEndTime(int current, int total) { if (!veEndTime || reclength == 0) return; @@ -270,12 +299,12 @@ void cViewReplay::SetEndTime(int current, int total) { } double rest = (double)(totalLength - current) / (double)totalLength; time_t end = time(0) + rest * recordingLength; - veEndTime->Set(TimeString(end)); + veEndTime->Set(TimeString(end), timeShiftActive); Render((int)eVeDisplayReplay::endtime); } void cViewReplay::SetProgressbar(int current, int total) { - SetTimeShiftValues(current, total); +// SetTimeShiftValues(current, total); if (veProgressbar) veProgressbar->Set(current, total, timeShiftActive, timeShiftFramesTotal); Render((int)eVeDisplayReplay::progressbar); diff --git a/coreengine/viewdisplayreplay.h b/coreengine/viewdisplayreplay.h index 310c6e9..5746ac2 100644 --- a/coreengine/viewdisplayreplay.h +++ b/coreengine/viewdisplayreplay.h @@ -12,6 +12,7 @@ private: cVeDrScraperContent *veScraperContent; cVeDrCurrentTime *veCurrentTime; cVeDrTotalTime *veTotalTime; + cVeDrTimeshiftTimes *veTimeshiftTimes; cVeDrEndTime *veEndTime; cVeDrProgressBar *veProgressbar; cVeDrCutMarks *veCutMarks; @@ -31,11 +32,11 @@ private: bool timeShiftActive; int timeShiftFramesTotal; int timeShiftLength; + cString timeshiftrest; cString timeShiftDuration; bool timersLoaded; cGlobalTimers globalTimers; void GetGlobalTimers(void); - void SetTimeShiftValues(int current, int total); void SetViewElements(void); void ClearVariables(void); void SetViewElementObjects(void); @@ -47,9 +48,11 @@ public: void SetModeOnly(bool modeOnly) { this->modeOnly = modeOnly; }; void SetRecordingLength(int length) { reclength = length; }; void SetRecording(const cRecording *recording); + void SetTimeShiftValues(int current, int total); void SetTitle(const char *title); void SetCurrent(const char *current); void SetTotal(const char *total); + void SetTimeshiftTimes(int current, int total); void SetEndTime(int current, int total); void SetProgressbar(int current, int total); void SetMarks(const cMarks *marks, int current, int total); diff --git a/coreengine/viewelement.c b/coreengine/viewelement.c index a30608f..abd5562 100644 --- a/coreengine/viewelement.c +++ b/coreengine/viewelement.c @@ -169,6 +169,8 @@ cViewElement *cViewElement::CreateViewElement(const char *name, const char *view e = new cVeDrCurrentTime(); else if (!strcmp(name, "totaltime")) e = new cVeDrTotalTime(); + else if (!strcmp(name, "timeshifttimes")) + e = new cVeDrTimeshiftTimes(); else if (!strcmp(name, "endtime")) e = new cVeDrEndTime(); else if (!strcmp(name, "progressbar") && !strcmp(viewname, "displayreplay")) diff --git a/coreengine/viewelementsdisplayreplay.c b/coreengine/viewelementsdisplayreplay.c index 64df8a8..4116153 100644 --- a/coreengine/viewelementsdisplayreplay.c +++ b/coreengine/viewelementsdisplayreplay.c @@ -10,6 +10,7 @@ cVeDrRecTitle::cVeDrRecTitle(void) { recording = NULL; event = NULL; title = NULL; + timeshiftActive = false; } cVeDrRecTitle::~cVeDrRecTitle(void) { @@ -163,6 +164,7 @@ bool cVeDrRecInfo::Parse(bool force) { cVeDrCurrentTime::cVeDrCurrentTime(void) { changed = true; current = NULL; + timeshiftActive = false; } cVeDrCurrentTime::~cVeDrCurrentTime(void) { @@ -172,14 +174,16 @@ cVeDrCurrentTime::~cVeDrCurrentTime(void) { void cVeDrCurrentTime::SetTokenContainer(void) { tokenContainer = new skindesignerapi::cTokenContainer(); tokenContainer->DefineStringToken("{reccurrent}", (int)eDRCurrentTimeST::reccurrent); + tokenContainer->DefineIntToken("{timeshift}", (int)eDRCurrentTimeIT::timeshift); InheritTokenContainer(); } -void cVeDrCurrentTime::Set(const char *current) { +void cVeDrCurrentTime::Set(const char *current, bool timeshiftActive) { if (!current) return; free(this->current); this->current = strdup(current); + this->timeshiftActive = timeshiftActive; changed = true; } @@ -188,6 +192,7 @@ bool cVeDrCurrentTime::Parse(bool force) { return false; tokenContainer->Clear(); tokenContainer->AddStringToken((int)eDRCurrentTimeST::reccurrent, current); + tokenContainer->AddIntToken((int)eDRCurrentTimeIT::timeshift, timeshiftActive); SetDirty(); changed = false; return true; @@ -199,8 +204,8 @@ bool cVeDrCurrentTime::Parse(bool force) { cVeDrTotalTime::cVeDrTotalTime(void) { changed = true; total = NULL; - timeshiftActive = false; timeshiftDuration = NULL; + timeshiftActive = false; } cVeDrTotalTime::~cVeDrTotalTime(void) { @@ -216,7 +221,7 @@ void cVeDrTotalTime::SetTokenContainer(void) { InheritTokenContainer(); } -void cVeDrTotalTime::Set(const char *total, bool timeshiftActive, const char *timeshiftDuration) { +void cVeDrTotalTime::Set(const char *total, const char *timeshiftDuration, bool timeshiftActive) { if (!total) return; free(this->total); @@ -242,10 +247,58 @@ bool cVeDrTotalTime::Parse(bool force) { } /****************************************************************** +* cVeDrTimeshiftTimes +******************************************************************/ +cVeDrTimeshiftTimes::cVeDrTimeshiftTimes(void) { + changed = true; + start = ""; + playbacktime = ""; + timeshiftrest = ""; + timeshiftActive = false; +} + +cVeDrTimeshiftTimes::~cVeDrTimeshiftTimes(void) { +} + +void cVeDrTimeshiftTimes::SetTokenContainer(void) { + tokenContainer = new skindesignerapi::cTokenContainer(); + tokenContainer->DefineStringToken("{recstart}", (int)eDRTimeshiftTimesST::recstart); + tokenContainer->DefineStringToken("{playbacktime}", (int)eDRTimeshiftTimesST::playbacktime); + tokenContainer->DefineStringToken("{timeshiftrest}", (int)eDRTimeshiftTimesST::timeshiftrest); + tokenContainer->DefineIntToken("{timeshift}", (int)eDRTimeshiftTimesIT::timeshift); + InheritTokenContainer(); +} + +void cVeDrTimeshiftTimes::Set(cString start, cString playbacktime, cString timeshiftrest, bool timeshiftActive) { + this->timeshiftActive = timeshiftActive; + if (strcmp(*this->start, *start) || strcmp(*this->playbacktime, *playbacktime) || strcmp(*this->timeshiftrest, *timeshiftrest)) { + this->start = start; + this->playbacktime = playbacktime; + this->timeshiftrest = timeshiftrest; + changed = true; + } +} + +bool cVeDrTimeshiftTimes::Parse(bool force) { + if (!cViewElement::Parse(force) || !changed) + return false; + tokenContainer->Clear(); + tokenContainer->AddStringToken((int)eDRTimeshiftTimesST::recstart, *start); + tokenContainer->AddStringToken((int)eDRTimeshiftTimesST::playbacktime, *playbacktime); + tokenContainer->AddStringToken((int)eDRTimeshiftTimesST::timeshiftrest, *timeshiftrest); + tokenContainer->AddIntToken((int)eDRTimeshiftTimesIT::timeshift, timeshiftActive); + SetDirty(); + changed = false; + return true; +} + +/****************************************************************** * cVeDrEndTime ******************************************************************/ cVeDrEndTime::cVeDrEndTime(void) { + changed = true; end = ""; + timeshiftActive = false; } cVeDrEndTime::~cVeDrEndTime(void) { @@ -254,10 +307,12 @@ cVeDrEndTime::~cVeDrEndTime(void) { void cVeDrEndTime::SetTokenContainer(void) { tokenContainer = new skindesignerapi::cTokenContainer(); tokenContainer->DefineStringToken("{recend}", (int)eDREndTimeST::recend); + tokenContainer->DefineIntToken("{timeshift}", (int)eDREndTimeIT::timeshift); InheritTokenContainer(); } -void cVeDrEndTime::Set(cString end) { +void cVeDrEndTime::Set(cString end, bool timeshiftActive) { + this->timeshiftActive = timeshiftActive; if (strcmp(*this->end, *end)) { this->end = end; changed = true; @@ -269,6 +324,7 @@ bool cVeDrEndTime::Parse(bool force) { return false; tokenContainer->Clear(); tokenContainer->AddStringToken((int)eDREndTimeST::recend, *end); + tokenContainer->AddIntToken((int)eDREndTimeIT::timeshift, timeshiftActive); SetDirty(); changed = false; return true; @@ -280,8 +336,8 @@ bool cVeDrEndTime::Parse(bool force) { cVeDrProgressBar::cVeDrProgressBar(void) { current = -1; total = -1; - timeshiftActive = false; timeshiftTotal = -1; + timeshiftActive = false; changed = true; } @@ -304,6 +360,7 @@ void cVeDrProgressBar::Set(int current, int total, bool timeshiftActive, int tim this->total = total; this->timeshiftActive = timeshiftActive; this->timeshiftTotal = timeshiftTotal; + changed = true; } @@ -327,6 +384,7 @@ bool cVeDrProgressBar::Parse(bool force) { cVeDrCutMarks::cVeDrCutMarks(void) { cutmarksIndex = -1; lastMarks = NULL; + timeshiftActive = false; Reset(); } diff --git a/coreengine/viewelementsdisplayreplay.h b/coreengine/viewelementsdisplayreplay.h index f6d28e5..0cc4be6 100644 --- a/coreengine/viewelementsdisplayreplay.h +++ b/coreengine/viewelementsdisplayreplay.h @@ -43,11 +43,12 @@ class cVeDrCurrentTime : public cViewElement { private: bool changed; char *current; + bool timeshiftActive; public: cVeDrCurrentTime(void); virtual ~cVeDrCurrentTime(void); void SetTokenContainer(void); - void Set(const char *current); + void Set(const char *current, bool timeshiftActive = false); bool Parse(bool forced = false); }; @@ -64,7 +65,25 @@ public: cVeDrTotalTime(void); virtual ~cVeDrTotalTime(void); void SetTokenContainer(void); - void Set(const char *total, bool timeshiftActive, const char *timeshiftDuration); + void Set(const char *total, const char *timeshiftDuration = NULL, bool timeshiftActive = false); + bool Parse(bool forced = false); +}; + +/****************************************************************** +* cVeDrTimeshiftTimes +******************************************************************/ +class cVeDrTimeshiftTimes : public cViewElement { +private: + cString start; + cString playbacktime; + cString timeshiftrest; + bool changed; + bool timeshiftActive; +public: + cVeDrTimeshiftTimes(void); + virtual ~cVeDrTimeshiftTimes(void); + void SetTokenContainer(void); + void Set(cString start, cString playbacktime, cString timeshiftrest, bool timeshiftActive = false); bool Parse(bool forced = false); }; @@ -74,12 +93,13 @@ public: class cVeDrEndTime : public cViewElement { private: cString end; + bool timeshiftActive; bool changed; public: cVeDrEndTime(void); virtual ~cVeDrEndTime(void); void SetTokenContainer(void); - void Set(cString end); + void Set(cString end, bool timeshiftActive = false); bool Parse(bool forced = false); }; @@ -97,7 +117,7 @@ public: cVeDrProgressBar(void); virtual ~cVeDrProgressBar(void); void SetTokenContainer(void); - void Set(int current, int total, bool timeshiftActive, int timeshiftTotal); + void Set(int current, int total, bool timeshiftActive = false, int timeshiftTotal = 0); bool Parse(bool forced = false); }; @@ -121,7 +141,7 @@ public: cVeDrCutMarks(void); virtual ~cVeDrCutMarks(void); void SetTokenContainer(void); - void Set(const cMarks *marks, int current, int total, bool timeshiftActive, int timeshiftTotal); + void Set(const cMarks *marks, int current, int total, bool timeshiftActive = false, int timeshiftTotal = 0); void Reset(void); bool Parse(bool forced = false); }; diff --git a/displayreplay.c b/displayreplay.c index 2a8b646..1cec745 100644 --- a/displayreplay.c +++ b/displayreplay.c @@ -53,8 +53,10 @@ void cSDDisplayReplay::SetMode(bool Play, bool Forward, int Speed) { void cSDDisplayReplay::SetProgress(int Current, int Total) { if (ok) { + view->SetTimeShiftValues(Current, Total); view->SetProgressbar(Current, Total); view->SetMarks(marks, Current, Total); + view->SetTimeshiftTimes(Current, Total); view->SetEndTime(Current, Total); view->DelayOnPause(); } diff --git a/dtd/displayreplay.dtd b/dtd/displayreplay.dtd index d3e2859..c226c12 100644 --- a/dtd/displayreplay.dtd +++ b/dtd/displayreplay.dtd @@ -4,7 +4,7 @@ <!ELEMENT displayreplay (background | backgroundmodeonly |datetime | time |
scrapercontent | currentweather | rectitle | recinfo | currenttime |
- totaltime | endtime | progressbar | cutmarks | controlicons |
+ totaltime | timeshifttimes | endtime | progressbar | cutmarks | controlicons |
controliconsmodeonly | progressmodeonly | jump | message | onpause |
onpausemodeonly | customtokens)*>
<!ATTLIST displayreplay
@@ -153,6 +153,19 @@ condition CDATA #IMPLIED
>
+<!ELEMENT timeshifttimes (areacontainer|area|areascroll)*>
+<!ATTLIST timeshifttimes
+ delay CDATA #IMPLIED
+ fadetime CDATA #IMPLIED
+ shifttime CDATA #IMPLIED
+ shifttype CDATA #IMPLIED
+ shiftmode CDATA #IMPLIED
+ startx CDATA #IMPLIED
+ starty CDATA #IMPLIED
+ debug CDATA #IMPLIED
+ condition CDATA #IMPLIED
+>
+
<!ELEMENT endtime (areacontainer|area|areascroll)*>
<!ATTLIST endtime
delay CDATA #IMPLIED
@@ -289,4 +302,4 @@ condition CDATA #IMPLIED
>
-%functions;
\ No newline at end of file +%functions;
diff --git a/skins/estuary4vdr/globals.xml b/skins/estuary4vdr/globals.xml index eb5fa60..6a77984 100644 --- a/skins/estuary4vdr/globals.xml +++ b/skins/estuary4vdr/globals.xml @@ -242,6 +242,27 @@ <trans lang="hu_HU">Időzítő kereső</trans> <trans lang="it_IT">Cerca timer</trans> </token> + <token name="tr(start)"> + <trans lang="en_EN">start</trans> + <trans lang="de_DE">Beginn</trans> + <trans lang="fi_FI">Alkaa</trans> + <trans lang="hu_HU">Rajt</trans> + <trans lang="it_IT">Inizio</trans> + </token> + <token name="tr(rest)"> + <trans lang="en_EN">rest</trans> + <trans lang="de_DE">Rest</trans> + <trans lang="fi_FI">Loput</trans> + <trans lang="hu_HU">Maradék</trans> + <trans lang="it_IT">Riposo</trans> + </token> + <token name="tr(playback)"> + <trans lang="en_EN">playback</trans> + <trans lang="de_DE">Wiedergabe</trans> + <trans lang="fi_FI">Toisto</trans> + <trans lang="hu_HU">Lejátszás</trans> + <trans lang="it_IT">Riproduzione</trans> + </token> <token name="tr(end)"> <trans lang="en_EN">end</trans> <trans lang="de_DE">Ende</trans> diff --git a/skins/estuary4vdr/xmlfiles/displayreplay.xml b/skins/estuary4vdr/xmlfiles/displayreplay.xml index 0e8b33a..3295d0d 100644 --- a/skins/estuary4vdr/xmlfiles/displayreplay.xml +++ b/skins/estuary4vdr/xmlfiles/displayreplay.xml @@ -16,15 +16,15 @@ </backgroundmodeonly> <datetime> - <area x="75%" y="75%" width="13%" height="6%" layer="2"> + <area x="85%" y="75%" width="14%" height="6%" layer="2"> <drawtext align="right" y="0" fontsize="{areaheight}*{replaydatetimesize}/100" font="{regular}" color="{fontdefault}" text="{daynameshort} {day}.{monthnameshort}" /> </area> </datetime> <time> - <area x="89%" y="75%" width="11%" height="6%" layer="2"> - <drawtext name="clock" x="0" y="0" fontsize="{areaheight}*{replaydatetimesize}/100" font="{regular}" color="{fontdefault}" text="{hour}:{printf('%02d', min)}" /> - <drawtext name="clocksec" x="{posx(clock)} + {width(clock)}" y="{height(clock)} - {height(clocksec)} - 1" fontsize="{areaheight}*{replaydatetimesize}*0.8/100" font="{regular}" color="{fontdefault}" text=":{printf('%02d', sec)}" /> + <area x="80%" y="80%" width="19%" height="5%" layer="2"> + <drawtext name="clocksec" align="right" y="{height(clock)} - {height(clocksec)} - 1" fontsize="{areaheight}*{replaydatetimesize}*0.8/100" font="{regular}" color="{fontdefault}" text=":{printf('%02d', sec)}" /> + <drawtext name="clock" x="{posx(clocksec)} - {width(clock)}" y="0" fontsize="{areaheight}*{replaydatetimesize}/100" font="{regular}" color="{fontdefault}" text="{hour}:{printf('%02d', min)}" /> </area> </time> @@ -38,7 +38,7 @@ </scrapercontent> <rectitle> - <area condition="{timeshift}" x="12%" y="75%" width="63%" height="6%" layer="2"> + <area condition="{timeshift}" x="12%" y="75%" width="73%" height="6%" layer="2"> <drawtext name="eventtime" align="right" y="0" fontsize="{areaheight}*{replaytitlesize}/100" font="{bold}" color="{fontactive}" text= "{eventstart} - {eventstop}" /> <drawtext name="title" x="0" y="0" width="{areawidth} - {width(eventtime)} - 2" fontsize="{areaheight}*{replaytitlesize}/100" font="{regular}" color="{fontdefault}" text="{rectitle}" /> <drawtext condition="isset{title} ++ isset{recsubtitle}" x="{width(title)}" y="0" width="{areawidth} - {width(title)} - {width(eventtime)} - 2" fontsize="{areaheight}*{replaytitlesize}/100" font="{regular}" color="{fontdefault}" text=" - {recsubtitle}" /> @@ -73,29 +73,46 @@ </recinfo> <currenttime> - <area x="12%" y="86%" width="15%" height="5%" layer="2"> + <area condition="not{timeshift}" x="12%" y="87%" width="15%" height="5%" layer="2"> <drawtext x="0" y="0" fontsize="{areaheight}*{replaycurrenttotaltimesize}/100" font="{regular}" color="{fontdefault}" text="{reccurrent}" /> </area> + <area condition="{timeshift}" x="12%" y="90%" width="15%" height="5%" layer="2"> + <drawtext x="0" y="0" fontsize="{areaheight}*{replaycurrenttotaltimesize}/100" font="{regular}" color="{fontdefault}" text="({reccurrent})" /> + </area> </currenttime> <totaltime> - <area x="80%" y="86%" width="19%" height="5%" layer="2"> - <drawtext condition="not{timeshift}" align="right" y="0" fontsize="{areaheight}*{replaycurrenttotaltimesize}/100" font="{regular}" color="{fontdefault}" text="{rectotal}" /> - <drawtext condition="{timeshift}" align="right" y="0" font="{regular}" fontsize="{areaheight}*{replaycurrenttotaltimesize}/100" color="{fontdefault}" text="{timeshifttotal} ({rectotal})" /> + <area condition="not{timeshift}" x="80%" y="87%" width="19%" height="5%" layer="2"> + <drawtext align="right" y="0" fontsize="{areaheight}*{replaycurrenttotaltimesize}/100" font="{regular}" color="{fontdefault}" text="{rectotal}" /> + </area> + <area condition="{timeshift}" x="80%" y="90%" width="19%" height="5%" layer="2"> + <drawtext align="right" y="0" font="{regular}" fontsize="{areaheight}*{replaycurrenttotaltimesize}/100" color="{fontdefault}" text="{timeshifttotal} ({rectotal})" /> </area> </totaltime> + <timeshifttimes> + <area condition="{timeshift}" x="12%" y="81%" width="19%" height="5%" layer="2"> + <drawtext align="left" y="0" fontsize="{areaheight}*{replayendtimesize}/100" font="{regular}" color="{fontdefault}" text="{tr(start)}: {recstart}" /> + </area> + <area condition="{timeshift}" x="40%" y="81%" width="20%" height="5%" layer="2"> + <drawtext name="rest" align="center" y="0" fontsize="{areaheight}*{replayendtimesize}/100" font="{regular}" color="{fontdefault}" text="TS {tr(rest)}: -{timeshiftrest}" /> + </area> + <area condition="{timeshift}" x="12%" y="87%" width="19%" height="5%" layer="2"> + <drawtext align="left" y="0" fontsize="{areaheight}*{replayendtimesize}/100" font="{regular}" color="{fontdefault}" text="{tr(playback)}: {playbacktime}" /> + </area> + </timeshifttimes> + <endtime> - <area x="80%" y="90%" width="19%" height="5%" layer="2"> + <area condition="{timeshift}" x="80%" y="87%" width="19%" height="5%" layer="2"> <drawtext align="right" y="0" fontsize="{areaheight}*{replayendtimesize}/100" font="{regular}" color="{fontdefault}" text="{tr(end)}: {recend}" /> </area> </endtime> <progressbar> - <area background="true" x="12%" y="83%" width="87%" height="3%" layer="2"> + <area background="true" x="12%" y="84%" width="87%" height="3%" layer="2"> <fill color="{progressbarback}" /> </area> - <area x="12%" y="83%" width="87%" height="3%" layer="3"> + <area x="12%" y="84%" width="87%" height="3%" layer="3"> <drawrectangle condition="not{timeshift}" x="0" y="0" width="{areawidth}*{current}/{total}" height="100%" color="{progressbar}" /> <drawrectangle condition="{timeshift}" x="0" y="{areaheight}*0.2" width="{total}/{timeshifttotal}*{areawidth}" height="{areaheight}*0.6" color="{progressbartimeshift}" /> <drawrectangle condition="{timeshift}" x="0" y="0" width="{current}/{timeshifttotal}*{areawidth}" height="{areaheight}" color="{progressbar}" /> @@ -103,7 +120,7 @@ </progressbar> <cutmarks> - <area condition="not{timeshift}" x="12%" y="83%" width="87%" height="3%" layer="4"> + <area condition="not{timeshift}" x="12%" y="84%" width="87%" height="3%" layer="4"> <loop name="marks" x="0" y="0" orientation="absolute"> <!-- draw mark --> <drawrectangle x="{marks[position]}/{marks[total]}*{areawidth}-2" y="0" width="4" height="100%" color="{cutmark}" /> @@ -115,6 +132,18 @@ <drawrectangle condition="{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="30%" width="{marks[endposition]}/{marks[total]}*{areawidth} - {marks[position]}/{marks[total]}*{areawidth}" height="40%" color="{cutmark}" /> </loop> </area> + <area condition="{timeshift}" x="12%" y="84%" width="87%" height="3%" layer="4"> + <loop name="marks" x="0" y="0" orientation="absolute"> + <!-- draw mark --> + <drawrectangle x="{marks[position]}/{marks[timeshifttotal]}*{areawidth}-2" y="0" width="4" height="100%" color="{cutmark}" /> + <drawrectangle condition="{marks[startmark]}" x="{marks[position]}/{marks[timeshifttotal]}*{areawidth}" y="0" width="5" height="2" color="{cutmark}" /> + <drawrectangle condition="{marks[startmark]}" x="{marks[position]}/{marks[timeshifttotal]}*{areawidth}" y="{areaheight}-2" width="5" height="2" color="{cutmark}" /> + <drawrectangle condition="not{marks[startmark]}" x="{marks[position]}/{marks[timeshifttotal]}*{areawidth}-5" y="0" width="5" height="2" color="{cutmark}" /> + <drawrectangle condition="not{marks[startmark]}" x="{marks[position]}/{marks[timeshifttotal]}*{areawidth}-5" y="{areaheight}-2" width="5" height="2" color="{cutmark}" /> + <!-- draw bar to next mark if mark is startmark--> + <drawrectangle condition="{marks[startmark]}" x="{marks[position]}/{marks[timeshifttotal]}*{areawidth}" y="30%" width="{marks[endposition]}/{marks[timeshifttotal]}*{areawidth} - {marks[position]}/{marks[timeshifttotal]}*{areawidth}" height="40%" color="{cutmark}" /> + </loop> + </area> </cutmarks> <controlicons> diff --git a/skinskeleton/xmlfiles/displayreplay.xml b/skinskeleton/xmlfiles/displayreplay.xml index ed548ba..7e2a1aa 100644 --- a/skinskeleton/xmlfiles/displayreplay.xml +++ b/skinskeleton/xmlfiles/displayreplay.xml @@ -76,7 +76,8 @@ </recinfo> <!-- Available Variables currenttime: - {reccurrent} Current Time in hh:mm:ss + {reccurrent} Current Time in hh:mm:ss + {timeshift} true if a timeshifted recording is displayed --> <currenttime> </currenttime> @@ -89,8 +90,18 @@ <totaltime> </totaltime> + <!-- Available Variables timeshifttimes: + {recstart} Start Time in hh:mm + {playbacktime} actual replaying time in timeshift mode in hh:mm + {timeshiftrest} Rest of unseen timeshift buffer in hh:mm + {timeshift} true if a timeshifted recording is displayed + --> + <timeshifttimes> + </timeshifttimes> + <!-- Available Variables endtime: {recend} End Time in hh:mm + {timeshift} true if a timeshifted recording is displayed --> <endtime> </endtime> |