diff options
| author | Peter Bieringer <pb@bieringer.de> | 2021-03-01 07:25:50 +0100 |
|---|---|---|
| committer | Peter Bieringer <pb@bieringer.de> | 2021-03-01 07:25:50 +0100 |
| commit | 105fe893a205e15e6bb167bb225bb2aef6f7028a (patch) | |
| tree | 2b060d0c6b75b585055676413a8aff621b9fb3d0 | |
| parent | 764f6576206b0a1cca25a774553d1412b0906a0f (diff) | |
| parent | 402044d4c4cbf626ddc57cef48bf0d0ddc88790a (diff) | |
| download | vdr-plugin-skindesigner-105fe893a205e15e6bb167bb225bb2aef6f7028a.tar.gz vdr-plugin-skindesigner-105fe893a205e15e6bb167bb225bb2aef6f7028a.tar.bz2 | |
Merge remote-tracking branch 'upstream/master'
28 files changed, 654 insertions, 122 deletions
@@ -478,3 +478,17 @@ Version 1.2.11 (buggy) Version 1.2.12 - [pbiering] added token for recordings: isRecording - [pbiering] fix crash caused by cVeDmDetailheaderRec::Parse introduced in 1.2.10 + +Version 1.2.13 +- [kamel5] A bug with timeshift in connection with global timers has been fixed +- [kamel5] Fixed a bug in timeshift mode that prevented the progress bar from updating in pause mode +- [kamel5] Update Skin estuary4vdr +- Token eCeMenuSchedulesIT::durationminutes added +- Token eLeMenuDefaultIT::devstatus added +- [kamel5] An error with the remaining time in the channel display has been fixed +- [kamel5] Revision cViewReplay::SetTimeShiftValues +- [kamel5] In timeshift mode, the title of the actual playback position is displayed +- [kamel5] Add token recstart to displayreplay +- [kamel5] Add tokens eventstart and eventstop to eDRRecTitleST +- [kamel5] Disabled timeshift display for non timeshift recordings +- [kamel5] Add element timeShiftTimes with tokens recstart, playbacktime and timeshiftrest to displayreplay diff --git a/coreengine/definitions.h b/coreengine/definitions.h index 6206843..678c54f 100644 --- a/coreengine/definitions.h +++ b/coreengine/definitions.h @@ -129,6 +129,7 @@ enum class eVeDisplayReplay { recinfo, currenttime, totaltime, + timeshifttimes, endtime, progressbar, cutmarks, @@ -433,6 +434,7 @@ enum class eDCProgressBarIT { remaining, permashift, livebuffer, + currentremaining, count }; @@ -813,6 +815,7 @@ enum class eLeMenuDefaultIT { remoteosd, filebrowser, epgsearch, + devstatus, count }; @@ -1489,6 +1492,13 @@ enum class eDRRecTitleST { recsubtitle, recdate, rectime, + eventstart, + eventstop, + count +}; + +enum class eDRRecTitleIT { + timeshift = 0, count }; @@ -1513,6 +1523,11 @@ enum class eDRCurrentTimeST { count }; +enum class eDRCurrentTimeIT { + timeshift = 0, + count +}; + enum class eDRTotalTimeST { rectotal = 0, timeshifttotal, @@ -1524,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/listelements.c b/coreengine/listelements.c index 96daba3..02b32d5 100644 --- a/coreengine/listelements.c +++ b/coreengine/listelements.c @@ -304,6 +304,7 @@ void cLeMenuDefault::SetTokenContainer(void) { tokenContainer->DefineIntToken("{remoteosd}", (int)eLeMenuDefaultIT::remoteosd); tokenContainer->DefineIntToken("{filebrowser}", (int)eLeMenuDefaultIT::filebrowser); tokenContainer->DefineIntToken("{epgsearch}", (int)eLeMenuDefaultIT::epgsearch); + tokenContainer->DefineIntToken("{devstatus}", (int)eLeMenuDefaultIT::devstatus); InheritTokenContainer(); } @@ -430,6 +431,8 @@ void cLeMenuDefault::SetMenuCategory(void) { tokenContainer->AddIntToken((int)eLeMenuDefaultIT::filebrowser, 1); } else if (!strcmp(plugName, "epgsearch")) { tokenContainer->AddIntToken((int)eLeMenuDefaultIT::epgsearch, 1); + } else if (!strcmp(plugName, "devstatus")) { + tokenContainer->AddIntToken((int)eLeMenuDefaultIT::devstatus, 1); } } @@ -968,6 +971,7 @@ bool cCeMenuSchedules::Parse(bool forced) { } tokenContainer->AddIntToken((int)eCeMenuSchedulesIT::duration, event->Duration() / 60); tokenContainer->AddIntToken((int)eCeMenuSchedulesIT::durationhours, event->Duration() / 3600); + tokenContainer->AddIntToken((int)eCeMenuSchedulesIT::durationminutes, (event->Duration() / 60) % 60); if (timerMatch == tmFull || timerMatch == tmPartial) { cTimer_Detail_V1 data; diff --git a/coreengine/viewdisplayreplay.c b/coreengine/viewdisplayreplay.c index 9a65db2..30986bb 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]); @@ -142,17 +148,21 @@ void cViewReplay::PreCache(void) { void cViewReplay::ClearVariables(void) { cView::ClearVariables(); + recording = NULL; + lastEvent = NULL; modeOnly = false; lastFlush = 0; lastFlushModeOnly = 0; message = false; - reclength = -1; timeShiftActive = false; timeShiftFramesTotal = -1; timeShiftLength = -1; timeShiftDuration = ""; + timeshiftrest = ""; if (veCustomTokens) veCustomTokens->Reset(); + if (veTimeshiftTimes) + veTimeshiftTimes->Set(cString(""), cString(""), cString("")); if (veEndTime) veEndTime->Set(cString("")); if (veCutMarks) @@ -161,65 +171,82 @@ void cViewReplay::ClearVariables(void) { globalTimers.ClearTimers(); } -void cViewReplay::SetTimeShift(int framesTotal, int timeShiftLength) { - timeShiftActive = true; - timeShiftFramesTotal = framesTotal; - this->timeShiftLength = timeShiftLength; - int mins = (timeShiftLength / 60) % 60; - int hours = (timeShiftLength / 3600) % 24; - timeShiftDuration = cString::sprintf("%d:%02d", hours, mins); -} - -void cViewReplay::SetRecording(const cRecording *recording) { - if (veRecTitle) { - veRecTitle->Set(recording); - } - if (veRecInfo) { - veRecInfo->Set(recording); - } - if (veScraperContent) { - veScraperContent->Set(recording); - } -} - -void cViewReplay::GetTimers(void) { +void cViewReplay::GetGlobalTimers(void) { if (!timersLoaded) { timersLoaded = true; globalTimers.LoadTimers(); } } -void cViewReplay::SetTimeShiftValues(const cRecording *recording) { - //check for instant recording +void cViewReplay::SetTimeShiftValues(int current, int total) { if (!recording) return; const char *recName = recording->Name(); - if (recName && *recName == '@') + if (recName && *recName != '@') return; - bool isTimeShift = false; + timeShiftActive = false; #if APIVERSNUM >= 20101 int usage = recording->IsInUse(); if (usage & ruTimer) - isTimeShift = true; + timeShiftActive = true; else { + GetGlobalTimers(); if (globalTimers.IsRecording(recording)) - isTimeShift = true; + timeShiftActive = true; } #endif - if (!isTimeShift) + if (!timeShiftActive) return; const cRecordingInfo *recInfo = recording->Info(); if (!recInfo) return; - const cEvent *event = recInfo->GetEvent(); - if (!event) + const cSchedule *Schedule = NULL; + { + LOCK_SCHEDULES_READ; + Schedule = Schedules->GetSchedule(recInfo->ChannelID()); + } + if (!Schedule) return; - double fps = recording->FramesPerSecond(); - time_t liveEventStop = event->EndTime(); + // Get event at actual recording position + const cEvent *eventEnde = Schedule->GetEventAround(time(0)); + if (!eventEnde) + return; + // End of live program + time_t liveEventStop = eventEnde->EndTime(); + // Begin of timeshift recording time_t recordingStart = time(0) - recording->LengthInSeconds(); - int framesTotal = (liveEventStop - recordingStart)*fps; - int recLength = liveEventStop - recordingStart; - SetTimeShift(framesTotal, recLength); + // actual timeshiftlength in sec + timeShiftLength = liveEventStop - recordingStart; + // 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); + veRecTitle->Parse(); + lastEvent = eventReplay; + } + 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) { + this->recording = recording; + if (veRecTitle) { + veRecTitle->Set(recording); + } + if (veRecInfo) { + veRecInfo->Set(recording); + } + if (veScraperContent) { + veScraperContent->Set(recording); + } } void cViewReplay::SetTitle(const char *title) { @@ -236,32 +263,47 @@ 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 || !recording) + 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) + if (!veEndTime || !recording) return; int totalLength = total; - int recordingLength = reclength; + int recordingLength = recording->LengthInSeconds(); if (timeShiftActive && timeShiftFramesTotal > 0) { totalLength = timeShiftFramesTotal; recordingLength = timeShiftLength; } 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); if (veProgressbar) veProgressbar->Set(current, total, timeShiftActive, timeShiftFramesTotal); Render((int)eVeDisplayReplay::progressbar); diff --git a/coreengine/viewdisplayreplay.h b/coreengine/viewdisplayreplay.h index 9098275..8e61f3b 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; @@ -21,6 +22,8 @@ private: cVeDrJump *veJump; cVeDrOnPause *veOnPause; cVeDrOnPause *veOnPauseModeOnly; + const cRecording *recording; + const cEvent *lastEvent; bool modeOnly; time_t lastFlush; time_t lastFlushModeOnly; @@ -29,9 +32,11 @@ private: bool timeShiftActive; int timeShiftFramesTotal; int timeShiftLength; + cString timeshiftrest; cString timeShiftDuration; bool timersLoaded; cGlobalTimers globalTimers; + void GetGlobalTimers(void); void SetViewElements(void); void ClearVariables(void); void SetViewElementObjects(void); @@ -41,14 +46,12 @@ public: virtual ~cViewReplay(void); void PreCache(void); void SetModeOnly(bool modeOnly) { this->modeOnly = modeOnly; }; - void SetRecordingLength(int length) { reclength = length; }; - void SetTimeShift(int framesTotal, int timeShiftLength); void SetRecording(const cRecording *recording); + void SetTimeShiftValues(int current, int total); void SetTitle(const char *title); - void GetTimers(void); - void SetTimeShiftValues(const cRecording *recording); 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/viewelementsdisplaychannel.c b/coreengine/viewelementsdisplaychannel.c index 4b71970..9a307a7 100644 --- a/coreengine/viewelementsdisplaychannel.c +++ b/coreengine/viewelementsdisplaychannel.c @@ -216,16 +216,19 @@ void cVeDcProgressBar::SetTokenContainer(void) { tokenContainer->DefineIntToken("{remaining}", (int)eDCProgressBarIT::remaining); tokenContainer->DefineIntToken("{permashift}", (int)eDCProgressBarIT::permashift); tokenContainer->DefineIntToken("{livebuffer}", (int)eDCProgressBarIT::livebuffer); + tokenContainer->DefineIntToken("{currentremaining}", (int)eDCProgressBarIT::currentremaining); InheritTokenContainer(); } void cVeDcProgressBar::Set(const cEvent *p) { if (!p) { startTime = -1; + endTime = -1; duration = -1; return; } startTime = p->StartTime(); + endTime = p-> EndTime(); duration = p->Duration(); int current = 0; @@ -249,18 +252,24 @@ void cVeDcProgressBar::Set(const cEvent *p) { } else { tokenContainer->AddIntToken((int)eDCProgressBarIT::permashift, 0); } + tokenContainer->AddIntToken((int)eDCProgressBarIT::currentremaining, (int)round((endTime - t) / 60)); } bool cVeDcProgressBar::Parse(bool force) { if (!cViewElement::Parse(force)) return false; + int current = 0; time_t t = time(NULL); if (t > startTime) current = t - startTime; + if (!(current > currentLast + 3) && !force && !Dirty()) return false; + + currentLast = current; SetDirty(); + if (duration <= 0) { tokenContainer->AddIntToken((int)eDCProgressBarIT::duration, 0); tokenContainer->AddIntToken((int)eDCProgressBarIT::elapsed, 0); @@ -276,6 +285,7 @@ bool cVeDcProgressBar::Parse(bool force) { } else { tokenContainer->AddIntToken((int)eDCProgressBarIT::permashift, 0); } + tokenContainer->AddIntToken((int)eDCProgressBarIT::currentremaining, (int)round((endTime - t) / 60)); } return true; } diff --git a/coreengine/viewelementsdisplaychannel.h b/coreengine/viewelementsdisplaychannel.h index b1a7691..fbae6d2 100644 --- a/coreengine/viewelementsdisplaychannel.h +++ b/coreengine/viewelementsdisplaychannel.h @@ -51,6 +51,7 @@ class cVeDcProgressBar : public cViewElement { private: int currentLast; int startTime; + int endTime; int duration; int GetLiveBuffer(void); public: @@ -199,4 +200,4 @@ public: cVeDcGroupChannelListDetail(void) {}; virtual ~cVeDcGroupChannelListDetail(void) {}; }; -#endif //__VIEWELEMENTSDC_H
\ No newline at end of file +#endif //__VIEWELEMENTSDC_H diff --git a/coreengine/viewelementsdisplayreplay.c b/coreengine/viewelementsdisplayreplay.c index 6cd4b25..4116153 100644 --- a/coreengine/viewelementsdisplayreplay.c +++ b/coreengine/viewelementsdisplayreplay.c @@ -8,7 +8,9 @@ ******************************************************************/ cVeDrRecTitle::cVeDrRecTitle(void) { recording = NULL; + event = NULL; title = NULL; + timeshiftActive = false; } cVeDrRecTitle::~cVeDrRecTitle(void) { @@ -21,19 +23,27 @@ void cVeDrRecTitle::SetTokenContainer(void) { tokenContainer->DefineStringToken("{recsubtitle}", (int)eDRRecTitleST::recsubtitle); tokenContainer->DefineStringToken("{recdate}", (int)eDRRecTitleST::recdate); tokenContainer->DefineStringToken("{rectime}", (int)eDRRecTitleST::rectime); + tokenContainer->DefineStringToken("{eventstart}", (int)eDRRecTitleST::eventstart); + tokenContainer->DefineStringToken("{eventstop}", (int)eDRRecTitleST::eventstop); + tokenContainer->DefineIntToken("{timeshift}", (int)eDRRecTitleIT::timeshift); InheritTokenContainer(); } -void cVeDrRecTitle::Set(const cRecording *recording) { +void cVeDrRecTitle::Set(const cRecording *recording, const cEvent *event, bool timeshiftActive) { + this->timeshiftActive = timeshiftActive; if (this->title) { free(this->title); this->title = NULL; } if (this->recording) this->recording = NULL; + if (this->event) + this->event = NULL; if (!recording) return; this->recording = recording; + if (event) + this->event = event; } void cVeDrRecTitle::Set(const char *title) { @@ -43,6 +53,8 @@ void cVeDrRecTitle::Set(const char *title) { } if (this->recording) this->recording = NULL; + if (this->event) + this->event = NULL; if (!title) return; free(this->title); @@ -58,15 +70,29 @@ bool cVeDrRecTitle::Parse(bool force) { tokenContainer->Clear(); if (recording) { const char *recName = NULL; + const char *recShortText = NULL; const cRecordingInfo *recInfo = recording->Info(); - if (recInfo) + if (event) { + recName = event->Title(); + recShortText = event->ShortText(); + } else if (recInfo) { recName = recInfo->Title(); - if (!recName) + recShortText = recInfo->ShortText(); + } + if (!recName) { recName = recording->Name(); + recShortText = ""; + } + tokenContainer->AddStringToken((int)eDRRecTitleST::rectitle, recName); - tokenContainer->AddStringToken((int)eDRRecTitleST::recsubtitle, recInfo ? recInfo->ShortText() : ""); + tokenContainer->AddStringToken((int)eDRRecTitleST::recsubtitle, recShortText); tokenContainer->AddStringToken((int)eDRRecTitleST::recdate, *ShortDateString(recording->Start())); tokenContainer->AddStringToken((int)eDRRecTitleST::rectime, *TimeString(recording->Start())); + tokenContainer->AddIntToken((int)eDRRecTitleIT::timeshift, timeshiftActive); + if (event) { + tokenContainer->AddStringToken((int)eDRRecTitleST::eventstart, *TimeString(event->StartTime())); + tokenContainer->AddStringToken((int)eDRRecTitleST::eventstop, *TimeString(event->EndTime())); + } } else if (title) { tokenContainer->AddStringToken((int)eDRRecTitleST::rectitle, title); } @@ -138,6 +164,7 @@ bool cVeDrRecInfo::Parse(bool force) { cVeDrCurrentTime::cVeDrCurrentTime(void) { changed = true; current = NULL; + timeshiftActive = false; } cVeDrCurrentTime::~cVeDrCurrentTime(void) { @@ -147,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; } @@ -163,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; @@ -174,8 +204,8 @@ bool cVeDrCurrentTime::Parse(bool force) { cVeDrTotalTime::cVeDrTotalTime(void) { changed = true; total = NULL; - timeshiftActive = false; timeshiftDuration = NULL; + timeshiftActive = false; } cVeDrTotalTime::~cVeDrTotalTime(void) { @@ -191,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); @@ -217,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) { @@ -229,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; @@ -244,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; @@ -255,8 +336,8 @@ bool cVeDrEndTime::Parse(bool force) { cVeDrProgressBar::cVeDrProgressBar(void) { current = -1; total = -1; - timeshiftActive = false; timeshiftTotal = -1; + timeshiftActive = false; changed = true; } @@ -273,12 +354,13 @@ void cVeDrProgressBar::SetTokenContainer(void) { } void cVeDrProgressBar::Set(int current, int total, bool timeshiftActive, int timeshiftTotal) { - if (this->current == current) + if (!(this->current != current || this->total != total)) return; this->current = current; this->total = total; this->timeshiftActive = timeshiftActive; this->timeshiftTotal = timeshiftTotal; + changed = true; } @@ -302,6 +384,7 @@ bool cVeDrProgressBar::Parse(bool force) { cVeDrCutMarks::cVeDrCutMarks(void) { cutmarksIndex = -1; lastMarks = NULL; + timeshiftActive = false; Reset(); } @@ -595,7 +678,7 @@ void cVeDrProgressModeonly::SetTokenContainer(void) { } void cVeDrProgressModeonly::Set(double fps, int current, int total) { - if (this->current == current) + if (!(this->current != current || this->total != total)) return; this->fps = fps; this->current = current; diff --git a/coreengine/viewelementsdisplayreplay.h b/coreengine/viewelementsdisplayreplay.h index 7e5d156..0cc4be6 100644 --- a/coreengine/viewelementsdisplayreplay.h +++ b/coreengine/viewelementsdisplayreplay.h @@ -10,13 +10,15 @@ class cVeDrRecTitle : public cViewElement { private: const cRecording *recording; + const cEvent *event; char *title; + bool timeshiftActive; public: cVeDrRecTitle(void); virtual ~cVeDrRecTitle(void); void SetTokenContainer(void); - void Set(const cRecording *recording); - void Set(const char *title); + void Set(const cRecording *recording = NULL, const cEvent *event = NULL, bool timeshiftActive = false); + void Set(const char *title = NULL); bool Parse(bool forced = false); }; @@ -41,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); }; @@ -62,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); }; @@ -72,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); }; @@ -95,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); }; @@ -119,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); }; @@ -207,4 +229,4 @@ public: bool Parse(bool forced = false); }; -#endif //__VIEWELEMENTSDR_H
\ No newline at end of file +#endif //__VIEWELEMENTSDR_H diff --git a/displayreplay.c b/displayreplay.c index a3a1c8b..60079ff 100644 --- a/displayreplay.c +++ b/displayreplay.c @@ -1,7 +1,6 @@ #include "displayreplay.h" cSDDisplayReplay::cSDDisplayReplay(cViewReplay *replayView, bool ModeOnly) { - init = true; view = replayView; ok = view->Init(); if (!ok) @@ -16,11 +15,6 @@ cSDDisplayReplay::~cSDDisplayReplay() { void cSDDisplayReplay::SetRecording(const cRecording *Recording) { if (ok) { view->SetRecording(Recording); - if (init) { - view->SetRecordingLength(Recording->LengthInSeconds()); - view->SetTimeShiftValues(Recording); - init = false; - } } } @@ -28,11 +22,6 @@ void cSDDisplayReplay::SetTitle(const char *Title) { if (!ok) return; view->SetTitle(Title); - if (init) { - view->SetRecordingLength(0); - view->SetTimeShiftValues(NULL); - init = false; - } } void cSDDisplayReplay::SetMode(bool Play, bool Forward, int Speed) { @@ -57,6 +46,7 @@ void cSDDisplayReplay::SetProgress(int Current, int Total) { if (ok) { view->SetProgressbar(Current, Total); view->SetMarks(marks, Current, Total); + view->SetTimeshiftTimes(Current, Total); view->SetEndTime(Current, Total); view->DelayOnPause(); } @@ -85,6 +75,5 @@ void cSDDisplayReplay::SetMessage(eMessageType Type, const char *Text) { void cSDDisplayReplay::Flush(void) { if (!ok) return; - view->GetTimers(); view->Flush(); } diff --git a/displayreplay.h b/displayreplay.h index 1ee635d..10f086d 100644 --- a/displayreplay.h +++ b/displayreplay.h @@ -8,7 +8,6 @@ class cSDDisplayReplay : public cSkinDisplayReplay { private: bool ok; - bool init; cViewReplay *view; public: cSDDisplayReplay(cViewReplay *replayView, bool ModeOnly); 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/skindesigner.c b/skindesigner.c index 05faa70..25290d5 100644 --- a/skindesigner.c +++ b/skindesigner.c @@ -21,7 +21,7 @@ #endif -static const char *VERSION = "1.2.11"; +static const char *VERSION = "1.2.13"; static const char *DESCRIPTION = trNOOP("Skin Designer"); class cPluginSkinDesigner : public cPlugin, public skindesignerapi::SkindesignerAPI { 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/icons/ico_timer_is_active.svg b/skins/estuary4vdr/icons/ico_timer_is_active.svg new file mode 100644 index 0000000..7328fd1 --- /dev/null +++ b/skins/estuary4vdr/icons/ico_timer_is_active.svg @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="512px" + height="512px" + viewBox="0 0 512 512" + style="enable-background:new 0 0 512 512;" + xml:space="preserve" + inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" + sodipodi:docname="ico_timer_isactive.svg"><metadata + id="metadata43"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs + id="defs41" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1304" + inkscape:window-height="848" + id="namedview39" + showgrid="false" + inkscape:zoom="0.4609375" + inkscape:cx="-394.84746" + inkscape:cy="256" + inkscape:window-x="302" + inkscape:window-y="113" + inkscape:window-maximized="0" + inkscape:current-layer="Capa_1" + inkscape:document-rotation="0" /><g + id="g3" + style="fill:#{sdcol(iconactive)};fill-opacity:1"><path + d="M256,0C114.609,0,0,114.609,0,256c0,141.391,114.609,256,256,256c141.391,0,256-114.609,256-256 C512,114.609,397.391,0,256,0z M256,472c-119.297,0-216-96.703-216-216S136.703,40,256,40s216,96.703,216,216S375.297,472,256,472z " + id="path5" + style="fill:#{sdcol(iconactive)};fill-opacity:1" /><path + d="M336,256c0,44.188-35.812,80-80,80c-44.188,0-80-35.812-80-80c0-44.188,35.812-80,80-80C300.188,176,336,211.812,336,256z" + id="path7" + style="fill:#{sdcol(iconactive)};fill-opacity:1" /></g><g + id="g9" /><g + id="g11" /><g + id="g13" /><g + id="g15" /><g + id="g17" /><g + id="g19" /><g + id="g21" /><g + id="g23" /><g + id="g25" /><g + id="g27" /><g + id="g29" /><g + id="g31" /><g + id="g33" /><g + id="g35" /><g + id="g37" /><path + style="fill:#00ff00;stroke-width:2.16949" + d="M 215.72807,507.53308 C 162.71961,498.62211 115.11053,474.12463 76.893336,436.09498 39.36807,398.75387 14.112943,351.03911 5.386094,300.99567 c -4.1222903,-23.63898 -4.1222903,-66.35236 0,-89.99133 C 14.008253,161.56122 39.263887,113.48953 75.833077,76.915237 113.15643,39.586666 154.06344,17.595366 209.35593,5.1343523 217.69335,3.2553845 235.24157,2.2725166 258.16949,2.4003239 289.26436,2.5736565 296.6974,3.3268912 314.76087,8.1350626 390.2236,28.221883 445.8588,71.540834 481.2437,137.76271 500.63865,174.05982 509.83051,212.07808 509.83051,256 c 0,53.98027 -12.71674,96.03922 -42.96516,142.10169 -14.45842,22.01739 -45.63955,53.62066 -66.63035,67.53244 -56.44714,37.41066 -122.27803,52.35994 -184.50693,41.89895 z m 79.32278,-38.26109 c 66.69474,-11.18388 124.35288,-54.9441 155.23134,-117.81436 16.81999,-34.24642 21.42302,-54.7568 21.42302,-95.45763 0,-40.70084 -4.60303,-61.2112 -21.42302,-95.45763 C 416.54007,91.841508 351.24449,46.646652 276.63579,40.351623 183.74995,32.514478 102.19857,78.121277 61.717797,160.54237 44.897813,194.7888 40.29479,215.29916 40.29479,256 c 0,40.70083 4.603023,61.21121 21.423007,95.45763 43.386713,88.33777 134.566653,134.37628 233.333053,117.81436 z" + id="path96" /><path + style="fill:#008000;stroke-width:2.16949" + d="m 236.3213,332.35775 c -21.769,-6.17206 -40.50373,-21.79987 -51.22581,-42.73063 -5.50062,-10.73785 -6.11244,-14.10376 -6.11244,-33.62712 0,-19.6807 0.58931,-22.85864 6.3474,-34.22928 7.84645,-15.49455 23.47217,-30.4091 39.82358,-38.01108 10.36368,-4.81822 15.44018,-5.76739 30.84597,-5.76739 15.40578,0 20.48229,0.94917 30.84597,5.76739 16.35141,7.60198 31.97713,22.51653 39.82357,38.01108 5.7581,11.37064 6.34741,14.54858 6.34741,34.22928 0,19.6807 -0.58931,22.85864 -6.34741,34.22928 -7.77464,15.35277 -23.49443,30.4473 -39.19346,37.63455 -14.31303,6.55273 -36.89604,8.53663 -51.15478,4.49392 z" + id="path98" /><path + style="fill:#ffff00;stroke-width:2.16949" + d="M 206.10169,504.49124 C 127.20566,487.59493 62.205776,436.20317 27.173029,363.02238 21.843258,351.88888 14.804192,333.99322 11.530661,323.25424 5.8131936,304.49781 5.578785,301.84906 5.578785,256 c 0,-45.84906 0.2344086,-48.4978 5.951876,-67.25424 C 32.549044,119.79392 80.874604,60.902059 141.75428,30.048987 162.90057,19.332308 198.31759,7.9640136 219.39566,5.1273468 248.93064,1.1525593 296.54254,3.8115829 320,10.745884 c 72.79019,21.517644 127.55914,65.552215 160.24491,128.837896 20.42019,39.53725 27.5415,69.6386 27.5415,116.41622 0,45.37717 -6.91577,75.78975 -25.65361,112.81356 -44.0919,87.12047 -131.07015,140.2941 -228.64308,139.77956 -19.26328,-0.10158 -35.11652,-1.47383 -47.38803,-4.10188 z M 310.59295,466.68002 C 373.25941,450.78337 423.80264,408.85996 452.57467,348.9124 468.66334,315.39107 471.4995,301.46686 471.4995,256 c 0,-45.46685 -2.83616,-59.39108 -18.92483,-92.91239 C 405.84324,65.720986 300.90058,18.252796 195.48196,46.798152 137.02428,62.627376 88.47007,103.99464 59.922035,162.29263 43.457751,195.91436 40.500501,210.18286 40.500501,256 c 0,43.90222 2.572306,57.57609 16.612895,88.31095 32.071417,70.20436 94.044494,116.96666 169.055394,127.56216 22.18618,3.13387 61.01346,0.74552 84.42416,-5.19309 z" + id="path100" /><path + style="fill:#800000;stroke-width:2.16949" + d="m 231.62056,329.87503 c -19.432,-7.47847 -37.58534,-24.44505 -46.3932,-43.36027 -4.18771,-8.99327 -5.12103,-14.57144 -5.13837,-30.71062 -0.019,-17.67761 0.66622,-21.09692 6.61232,-32.99612 7.49464,-14.9981 22.76182,-29.97136 38.42543,-37.68566 8.56481,-4.21817 13.67353,-5.05456 30.87326,-5.05456 17.19972,0 22.30844,0.83639 30.87326,5.05456 15.66361,7.7143 30.93078,22.68756 38.42542,37.68566 5.95268,11.91235 6.63352,15.31908 6.63352,33.19198 0,17.8729 -0.68084,21.27963 -6.63352,33.19198 -7.46529,14.93937 -22.8392,30.05422 -38.06767,37.42619 -12.70572,6.15074 -43.41742,7.94939 -55.61045,3.25686 z" + id="path120" /><path + style="fill:#800000;stroke-width:2.16949" + d="M 206.32865,503.22148 C 158.10069,492.75939 111.99781,467.4798 78.101693,432.91084 50.677575,404.94234 30.547679,372.08509 14.90829,329.76271 L 7.6930601,310.23729 7.6431391,257.08475 C 7.5934779,204.20898 7.6256812,203.83618 13.827422,185.49153 44.840309,93.7559 112.14814,31.18172 203.02701,9.5980336 c 21.63974,-5.1394252 69.64126,-6.079541 96.35674,-1.8871583 33.36001,5.2350907 78.134,25.1103657 109.1443,48.4493957 41.18678,30.998062 74.69251,79.915619 89.32754,130.415999 11.175,38.56104 11.13977,100.34395 -0.0794,139.05859 -26.26219,90.62535 -105.25138,161.57427 -197.86537,177.72481 -23.1306,4.03363 -74.7021,3.95748 -93.58227,-0.13819 z M 309.79013,467.66631 C 375.70909,451.32822 430.02995,404.43826 457.83235,339.87573 469.90119,311.84957 471.81579,300.36534 471.81579,256 c 0,-44.36534 -1.9146,-55.84957 -13.98344,-83.87572 C 430.3918,108.40199 377.49031,62.322634 311.27148,44.463759 286.98023,37.912535 244.2084,36.308376 217.61088,40.951016 143.11647,53.954133 84.368657,101.71226 53.152017,174.64529 41.988799,200.72649 40.1504,212.39437 40.162805,257.08475 c 0.01237,44.84798 1.467919,53.42624 14.047115,82.79098 28.54943,66.64548 86.63006,114.9025 157.3155,130.70755 21.33213,4.7698 73.49908,3.22124 98.26471,-2.91697 z" + id="path878" /></svg> diff --git a/skins/estuary4vdr/icons/ico_timer_is_inactive.svg b/skins/estuary4vdr/icons/ico_timer_is_inactive.svg new file mode 100644 index 0000000..393bee8 --- /dev/null +++ b/skins/estuary4vdr/icons/ico_timer_is_inactive.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="512px" + height="512px" + viewBox="0 0 512 512" + style="enable-background:new 0 0 512 512;" + xml:space="preserve" + inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" + sodipodi:docname="ico_rec_inactive.svg"><metadata + id="metadata43"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs + id="defs41" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1304" + inkscape:window-height="848" + id="namedview39" + showgrid="false" + inkscape:zoom="0.4609375" + inkscape:cx="-394.84746" + inkscape:cy="256" + inkscape:window-x="233" + inkscape:window-y="123" + inkscape:window-maximized="0" + inkscape:current-layer="Capa_1" + inkscape:document-rotation="0" /><g + id="g3" + style="fill:#{sdcol(iconactive)};fill-opacity:1"><path + d="M256,0C114.609,0,0,114.609,0,256c0,141.391,114.609,256,256,256c141.391,0,256-114.609,256-256 C512,114.609,397.391,0,256,0z M256,472c-119.297,0-216-96.703-216-216S136.703,40,256,40s216,96.703,216,216S375.297,472,256,472z " + id="path5" + style="fill:#{sdcol(iconactive)};fill-opacity:1" /><path + d="M336,256c0,44.188-35.812,80-80,80c-44.188,0-80-35.812-80-80c0-44.188,35.812-80,80-80C300.188,176,336,211.812,336,256z" + id="path7" + style="fill:#{sdcol(iconactive)};fill-opacity:1" /></g><g + id="g9" /><g + id="g11" /><g + id="g13" /><g + id="g15" /><g + id="g17" /><g + id="g19" /><g + id="g21" /><g + id="g23" /><g + id="g25" /><g + id="g27" /><g + id="g29" /><g + id="g31" /><g + id="g33" /><g + id="g35" /><g + id="g37" /><path + style="fill:#00ff00;stroke-width:2.16949" + d="M 215.72807,507.53308 C 162.71961,498.62211 115.11053,474.12463 76.893336,436.09498 39.36807,398.75387 14.112943,351.03911 5.386094,300.99567 c -4.1222903,-23.63898 -4.1222903,-66.35236 0,-89.99133 C 14.008253,161.56122 39.263887,113.48953 75.833077,76.915237 113.15643,39.586666 154.06344,17.595366 209.35593,5.1343523 217.69335,3.2553845 235.24157,2.2725166 258.16949,2.4003239 289.26436,2.5736565 296.6974,3.3268912 314.76087,8.1350626 390.2236,28.221883 445.8588,71.540834 481.2437,137.76271 500.63865,174.05982 509.83051,212.07808 509.83051,256 c 0,53.98027 -12.71674,96.03922 -42.96516,142.10169 -14.45842,22.01739 -45.63955,53.62066 -66.63035,67.53244 -56.44714,37.41066 -122.27803,52.35994 -184.50693,41.89895 z m 79.32278,-38.26109 c 66.69474,-11.18388 124.35288,-54.9441 155.23134,-117.81436 16.81999,-34.24642 21.42302,-54.7568 21.42302,-95.45763 0,-40.70084 -4.60303,-61.2112 -21.42302,-95.45763 C 416.54007,91.841508 351.24449,46.646652 276.63579,40.351623 183.74995,32.514478 102.19857,78.121277 61.717797,160.54237 44.897813,194.7888 40.29479,215.29916 40.29479,256 c 0,40.70083 4.603023,61.21121 21.423007,95.45763 43.386713,88.33777 134.566653,134.37628 233.333053,117.81436 z" + id="path96" /><path + style="fill:#008000;stroke-width:2.16949" + d="m 236.3213,332.35775 c -21.769,-6.17206 -40.50373,-21.79987 -51.22581,-42.73063 -5.50062,-10.73785 -6.11244,-14.10376 -6.11244,-33.62712 0,-19.6807 0.58931,-22.85864 6.3474,-34.22928 7.84645,-15.49455 23.47217,-30.4091 39.82358,-38.01108 10.36368,-4.81822 15.44018,-5.76739 30.84597,-5.76739 15.40578,0 20.48229,0.94917 30.84597,5.76739 16.35141,7.60198 31.97713,22.51653 39.82357,38.01108 5.7581,11.37064 6.34741,14.54858 6.34741,34.22928 0,19.6807 -0.58931,22.85864 -6.34741,34.22928 -7.77464,15.35277 -23.49443,30.4473 -39.19346,37.63455 -14.31303,6.55273 -36.89604,8.53663 -51.15478,4.49392 z" + id="path98" /><path + style="fill:#008000;stroke-width:2.16949" + d="M 206.10169,504.49124 C 127.20566,487.59493 62.205776,436.20317 27.173029,363.02238 21.843258,351.88888 14.804192,333.99322 11.530661,323.25424 5.8131936,304.49781 5.578785,301.84906 5.578785,256 c 0,-45.84906 0.2344086,-48.4978 5.951876,-67.25424 C 32.549044,119.79392 80.874604,60.902059 141.75428,30.048987 162.90057,19.332308 198.31759,7.9640136 219.39566,5.1273468 248.93064,1.1525593 296.54254,3.8115829 320,10.745884 c 72.79019,21.517644 127.55914,65.552215 160.24491,128.837896 20.42019,39.53725 27.5415,69.6386 27.5415,116.41622 0,45.37717 -6.91577,75.78975 -25.65361,112.81356 -44.0919,87.12047 -131.07015,140.2941 -228.64308,139.77956 -19.26328,-0.10158 -35.11652,-1.47383 -47.38803,-4.10188 z M 310.59295,466.68002 C 373.25941,450.78337 423.80264,408.85996 452.57467,348.9124 468.66334,315.39107 471.4995,301.46686 471.4995,256 c 0,-45.46685 -2.83616,-59.39108 -18.92483,-92.91239 C 405.84324,65.720986 300.90058,18.252796 195.48196,46.798152 137.02428,62.627376 88.47007,103.99464 59.922035,162.29263 43.457751,195.91436 40.500501,210.18286 40.500501,256 c 0,43.90222 2.572306,57.57609 16.612895,88.31095 32.071417,70.20436 94.044494,116.96666 169.055394,127.56216 22.18618,3.13387 61.01346,0.74552 84.42416,-5.19309 z" + id="path100" /></svg> diff --git a/skins/estuary4vdr/icons/ico_timer_is_switchtimer.svg b/skins/estuary4vdr/icons/ico_timer_is_switchtimer.svg new file mode 100644 index 0000000..722830f --- /dev/null +++ b/skins/estuary4vdr/icons/ico_timer_is_switchtimer.svg @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Capa_1" + x="0px" + y="0px" + width="512px" + height="512px" + viewBox="0 0 512 512" + style="enable-background:new 0 0 512 512;" + xml:space="preserve" + inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)" + sodipodi:docname="ico_rec_switch.svg"><metadata + id="metadata43"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs + id="defs41" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1304" + inkscape:window-height="848" + id="namedview39" + showgrid="false" + inkscape:zoom="0.4609375" + inkscape:cx="-394.84746" + inkscape:cy="256" + inkscape:window-x="233" + inkscape:window-y="123" + inkscape:window-maximized="0" + inkscape:current-layer="Capa_1" + inkscape:document-rotation="0" /><g + id="g3" + style="fill:#{sdcol(iconactive)};fill-opacity:1"><path + d="M256,0C114.609,0,0,114.609,0,256c0,141.391,114.609,256,256,256c141.391,0,256-114.609,256-256 C512,114.609,397.391,0,256,0z M256,472c-119.297,0-216-96.703-216-216S136.703,40,256,40s216,96.703,216,216S375.297,472,256,472z " + id="path5" + style="fill:#{sdcol(iconactive)};fill-opacity:1" /><path + d="M336,256c0,44.188-35.812,80-80,80c-44.188,0-80-35.812-80-80c0-44.188,35.812-80,80-80C300.188,176,336,211.812,336,256z" + id="path7" + style="fill:#{sdcol(iconactive)};fill-opacity:1" /></g><g + id="g9" /><g + id="g11" /><g + id="g13" /><g + id="g15" /><g + id="g17" /><g + id="g19" /><g + id="g21" /><g + id="g23" /><g + id="g25" /><g + id="g27" /><g + id="g29" /><g + id="g31" /><g + id="g33" /><g + id="g35" /><g + id="g37" /><path + style="fill:#00ff00;stroke-width:2.16949" + d="M 215.72807,507.53308 C 162.71961,498.62211 115.11053,474.12463 76.893336,436.09498 39.36807,398.75387 14.112943,351.03911 5.386094,300.99567 c -4.1222903,-23.63898 -4.1222903,-66.35236 0,-89.99133 C 14.008253,161.56122 39.263887,113.48953 75.833077,76.915237 113.15643,39.586666 154.06344,17.595366 209.35593,5.1343523 217.69335,3.2553845 235.24157,2.2725166 258.16949,2.4003239 289.26436,2.5736565 296.6974,3.3268912 314.76087,8.1350626 390.2236,28.221883 445.8588,71.540834 481.2437,137.76271 500.63865,174.05982 509.83051,212.07808 509.83051,256 c 0,53.98027 -12.71674,96.03922 -42.96516,142.10169 -14.45842,22.01739 -45.63955,53.62066 -66.63035,67.53244 -56.44714,37.41066 -122.27803,52.35994 -184.50693,41.89895 z m 79.32278,-38.26109 c 66.69474,-11.18388 124.35288,-54.9441 155.23134,-117.81436 16.81999,-34.24642 21.42302,-54.7568 21.42302,-95.45763 0,-40.70084 -4.60303,-61.2112 -21.42302,-95.45763 C 416.54007,91.841508 351.24449,46.646652 276.63579,40.351623 183.74995,32.514478 102.19857,78.121277 61.717797,160.54237 44.897813,194.7888 40.29479,215.29916 40.29479,256 c 0,40.70083 4.603023,61.21121 21.423007,95.45763 43.386713,88.33777 134.566653,134.37628 233.333053,117.81436 z" + id="path96" /><path + style="fill:#008000;stroke-width:2.16949" + d="m 236.3213,332.35775 c -21.769,-6.17206 -40.50373,-21.79987 -51.22581,-42.73063 -5.50062,-10.73785 -6.11244,-14.10376 -6.11244,-33.62712 0,-19.6807 0.58931,-22.85864 6.3474,-34.22928 7.84645,-15.49455 23.47217,-30.4091 39.82358,-38.01108 10.36368,-4.81822 15.44018,-5.76739 30.84597,-5.76739 15.40578,0 20.48229,0.94917 30.84597,5.76739 16.35141,7.60198 31.97713,22.51653 39.82357,38.01108 5.7581,11.37064 6.34741,14.54858 6.34741,34.22928 0,19.6807 -0.58931,22.85864 -6.34741,34.22928 -7.77464,15.35277 -23.49443,30.4473 -39.19346,37.63455 -14.31303,6.55273 -36.89604,8.53663 -51.15478,4.49392 z" + id="path98" /><path + style="fill:#ffff00;stroke-width:2.16949" + d="M 206.10169,504.49124 C 127.20566,487.59493 62.205776,436.20317 27.173029,363.02238 21.843258,351.88888 14.804192,333.99322 11.530661,323.25424 5.8131936,304.49781 5.578785,301.84906 5.578785,256 c 0,-45.84906 0.2344086,-48.4978 5.951876,-67.25424 C 32.549044,119.79392 80.874604,60.902059 141.75428,30.048987 162.90057,19.332308 198.31759,7.9640136 219.39566,5.1273468 248.93064,1.1525593 296.54254,3.8115829 320,10.745884 c 72.79019,21.517644 127.55914,65.552215 160.24491,128.837896 20.42019,39.53725 27.5415,69.6386 27.5415,116.41622 0,45.37717 -6.91577,75.78975 -25.65361,112.81356 -44.0919,87.12047 -131.07015,140.2941 -228.64308,139.77956 -19.26328,-0.10158 -35.11652,-1.47383 -47.38803,-4.10188 z M 310.59295,466.68002 C 373.25941,450.78337 423.80264,408.85996 452.57467,348.9124 468.66334,315.39107 471.4995,301.46686 471.4995,256 c 0,-45.46685 -2.83616,-59.39108 -18.92483,-92.91239 C 405.84324,65.720986 300.90058,18.252796 195.48196,46.798152 137.02428,62.627376 88.47007,103.99464 59.922035,162.29263 43.457751,195.91436 40.500501,210.18286 40.500501,256 c 0,43.90222 2.572306,57.57609 16.612895,88.31095 32.071417,70.20436 94.044494,116.96666 169.055394,127.56216 22.18618,3.13387 61.01346,0.74552 84.42416,-5.19309 z" + id="path100" /><path + style="fill:#ffff00;stroke-width:2.16949" + d="m 231.62056,329.87503 c -19.432,-7.47847 -37.58534,-24.44505 -46.3932,-43.36027 -4.18771,-8.99327 -5.12103,-14.57144 -5.13837,-30.71062 -0.019,-17.67761 0.66622,-21.09692 6.61232,-32.99612 7.49464,-14.9981 22.76182,-29.97136 38.42543,-37.68566 8.56481,-4.21817 13.67353,-5.05456 30.87326,-5.05456 17.19972,0 22.30844,0.83639 30.87326,5.05456 15.66361,7.7143 30.93078,22.68756 38.42542,37.68566 5.95268,11.91235 6.63352,15.31908 6.63352,33.19198 0,17.8729 -0.68084,21.27963 -6.63352,33.19198 -7.46529,14.93937 -22.8392,30.05422 -38.06767,37.42619 -12.70572,6.15074 -43.41742,7.94939 -55.61045,3.25686 z" + id="path120" /></svg> diff --git a/skins/estuary4vdr/themes/applegreen/theme.xml b/skins/estuary4vdr/themes/applegreen/theme.xml index 0ec19ad..66b1d34 100644 --- a/skins/estuary4vdr/themes/applegreen/theme.xml +++ b/skins/estuary4vdr/themes/applegreen/theme.xml @@ -19,7 +19,7 @@ <color name="fontmenuactive">FF111111</color> <color name="progressbarback">FF222222</color> <color name="progressbar">FF99D235</color> - <color name="progressbartimeshift">FF666666</color> + <color name="progressbartimeshift">FF99EE33</color> <color name="cutmark">FF666666</color> <color name="icontextactive">FFFFFFFF</color> <color name="icontextinactive">FF333333</color> diff --git a/skins/estuary4vdr/themes/darkred/theme.xml b/skins/estuary4vdr/themes/darkred/theme.xml index 286f105..f5849ee 100644 --- a/skins/estuary4vdr/themes/darkred/theme.xml +++ b/skins/estuary4vdr/themes/darkred/theme.xml @@ -19,7 +19,7 @@ <color name="fontmenuactive">FFFFFFFF</color> <color name="progressbarback">FF222222</color> <color name="progressbar">FF550000</color> - <color name="progressbartimeshift">FF666666</color> + <color name="progressbartimeshift">FF992222</color> <color name="cutmark">FF666666</color> <color name="icontextactive">FFFFFFFF</color> <color name="icontextinactive">FFCCCCCC</color> diff --git a/skins/estuary4vdr/themes/default/theme.xml b/skins/estuary4vdr/themes/default/theme.xml index 0119815..f5a06a6 100644 --- a/skins/estuary4vdr/themes/default/theme.xml +++ b/skins/estuary4vdr/themes/default/theme.xml @@ -19,7 +19,7 @@ <color name="fontmenuactive">FF333333</color> <color name="progressbarback">FF222222</color> <color name="progressbar">FF12B2E7</color> - <color name="progressbartimeshift">FF666666</color> + <color name="progressbartimeshift">FF126696</color> <color name="cutmark">FF666666</color> <color name="icontextactive">FFFFFFFF</color> <color name="icontextinactive">FF333333</color> diff --git a/skins/estuary4vdr/themes/orange/theme.xml b/skins/estuary4vdr/themes/orange/theme.xml index 6342099..14634ab 100644 --- a/skins/estuary4vdr/themes/orange/theme.xml +++ b/skins/estuary4vdr/themes/orange/theme.xml @@ -19,7 +19,7 @@ <color name="fontmenuactive">FF333333</color> <color name="progressbarback">FF222222</color> <color name="progressbar">FFAF3B00</color> - <color name="progressbartimeshift">FF666666</color> + <color name="progressbartimeshift">FFEE6633</color> <color name="cutmark">FF666666</color> <color name="icontextactive">FFFFFFFF</color> <color name="icontextinactive">FF333333</color> diff --git a/skins/estuary4vdr/xmlfiles/displaychannel.xml b/skins/estuary4vdr/xmlfiles/displaychannel.xml index 4edb29a..3d07379 100644 --- a/skins/estuary4vdr/xmlfiles/displaychannel.xml +++ b/skins/estuary4vdr/xmlfiles/displaychannel.xml @@ -9,6 +9,19 @@ </area> </background> + <datetime> + <area x="80%" y="76%" width="17%" height="6%" layer="2"> + <drawtext align="right" valign="center" fontsize="{areaheight}*{replaydatetimesize}/100" font="{regular}" color="{fontdefault}" text="{daynameshort} {day}.{monthnameshort}" /> + </area> + </datetime> + + <time> + <area x="80%" y="80%" width="19%" height="15%" layer="2"> + <drawtext name="clock" x="20%" valign="center" fontsize="60%" font="{digital}" color="{fontdefault}" text="{hour}:{printf('%02d', min)}" /> + <drawtext name="clocksec" x="{posx(clock)} + {width(clock)}" y="{areaheight}/2 - {height(clocksec)}/2 + {height(clock)}/2 - {height(clocksec)}/2 - 5" fontsize="45%" font="{digital}" color="{fontdefault}" text=":{printf('%02d', sec)}" /> + </area> + </time> + <channelinfo> <area x="0" y="80%" width="20%" height="20%" layer="2"> <drawimage cache="true" condition="{channellogoexists}" imagetype="channellogo" path="{channelid}" width="80%" height="80%" align="center" valign="center" /> @@ -37,9 +50,6 @@ <drawtext condition="isset{currentsubtitle}" x="0" y="{areaheight}*{epgsubtextposy}/100" fontsize="{areaheight}*{epgsubtextfontsize}/100" width="{areawidth} - {width(startstop)} - 10" font="{regular}" color="{fontdefault}" text="{currentsubtitle}" /> <drawtext condition="empty{currentsubtitle}" x="0" valign="center" fontsize="{areaheight}*{epgtextfontsizelarge}/100" width="{areawidth} - {width(startstop)} - 10" font="{regular}" color="{fontdefault}" text="{currenttitle}" /> </area> - <area x="70%" y="83%" width="10%" height="3%" layer="2"> - <drawtext align="right" y="0" fontsize="100%" font="{regular}" color="{fontactive}" text="+{currentremaining} min" /> - </area> <!-- next schedule --> <area x="20%" y="88%" width="60%" height="10%" layer="2"> <drawtext name="startstop" align="right" valign="center" fontsize="{areaheight}*{startstopfontsize}/100" font="{bold}" color="{fontdefault}" text="{nextstart} - {nextstop}" /> @@ -54,8 +64,14 @@ <fill color="{progressbarback}" /> </area> <area x="20%" y="86%" width="60%" height="2%" layer="3"> - <drawrectangle x="0" y="0" width="{areawidth}*{elapsed}/{duration}" height="100%" color="{progressbar}" /> + <drawrectangle condition="not{permashift}" x="0" y="0" width="{areawidth}*{elapsed}/{duration}" height="100%" color="{progressbar}" /> + <drawrectangle condition="{permashift}" x="{elapsed}/{duration}*{areawidth} - {livebuffer}/{duration}*{areawidth}" y="0" width="{livebuffer}/{duration}*{areawidth}" height="100%" color="{progressbartimeshift}" /> + <drawrectangle condition="{permashift}" x="0" y="{areaheight}*0.2" width="{areawidth}*{elapsed}/{duration} - 1" height="{areaheight}*0.6" color="{progressbar}" /> </area> + <!-- time remaining --> + <area x="70%" y="83%" width="10%" height="3%" layer="2"> + <drawtext align="right" y="0" fontsize="100%" font="{regular}" color="{fontactive}" text="+{currentremaining} min" /> + </area> </progressbar> <statusinfo> @@ -310,13 +326,6 @@ </areascroll> </groupchannellistdetail> - <time> - <area x="80%" y="80%" width="20%" height="15%" layer="2"> - <drawtext name="clock" x="11%" valign="center" fontsize="60%" font="{digital}" color="{fontdefault}" text="{hour}:{printf('%02d', min)}" /> - <drawtext name="clocksec" x="{posx(clock)} + {width(clock)}" y="{areaheight}/2 - {height(clocksec)}/2 + {height(clock)}/2 - {height(clocksec)}/2 - 5" fontsize="45%" font="{digital}" color="{fontdefault}" text=":{printf('%02d', sec)}" /> - </area> - </time> - <message> <area x="10%" y="80%" width="80%" height="15%" layer="6"> <fill color="{messageback}" /> diff --git a/skins/estuary4vdr/xmlfiles/displayreplay.xml b/skins/estuary4vdr/xmlfiles/displayreplay.xml index b4c7473..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,12 @@ </scrapercontent> <rectitle> - <area 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}" /> + </area> + <area condition="not{timeshift}" x="12%" y="75%" width="63%" height="6%" layer="2"> <drawtext name="title" x="0" y="0" fontsize="{areaheight}*{replaytitlesize}/100" font="{regular}" color="{fontdefault}" text="{rectitle}" /> <drawtext condition="isset{title} ++ isset{recsubtitle}" x="{width(title)}" y="0" fontsize="{areaheight}*{replaytitlesize}/100" font="{regular}" color="{fontdefault}" text=" - {recsubtitle}" /> </area> @@ -68,39 +73,54 @@ </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 condition="not{timeshift}" x="12%" y="83%" width="87%" height="3%" layer="3"> - <drawrectangle x="0" y="0" width="{areawidth}*{current}/{total}" height="100%" color="{progressbar}" /> - </area> - <area condition="{timeshift}" x="12%" y="83%" width="87%" height="3%" layer="3"> - <drawrectangle x="0" y="0" width="{total}/{timeshifttotal}*{areawidth}" height="{areaheight}" color="{progressbartimeshift}" /> - <drawrectangle x="0" y="0" width="{current}/{timeshifttotal}*{areawidth}" height="{areaheight}" color="{progressbar}" /> + <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}" /> </area> </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}" /> @@ -112,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/skins/estuary4vdr/xmlfiles/plug-tvguideng-root.xml b/skins/estuary4vdr/xmlfiles/plug-tvguideng-root.xml index e2b74a4..df70190 100644 --- a/skins/estuary4vdr/xmlfiles/plug-tvguideng-root.xml +++ b/skins/estuary4vdr/xmlfiles/plug-tvguideng-root.xml @@ -314,8 +314,9 @@ <drawrectangle x="0" y="0" width="2" height="100%" color="{menubackline}" /> <drawrectangle x="0" y="{areaheight}-2" width="100%" height="2" color="{menubackline}" /> <!--<drawrectangle x="{areawidth}-2" y="0" width="2" height="100%" color="{menubackline}" />--> - <drawimage condition="{timer}++{timerisactive}" imagetype="icon" path="ico_timer_is_active" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> - <drawimage condition="{timer}++not{timerisactive}" imagetype="icon" path="ico_timer_is_inactive" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> + <drawimage condition="{timer}" imagetype="icon" path="ico_timer_is_active" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> + <!--<drawimage condition="{timer}++{timerisactive}" imagetype="icon" path="ico_timer_is_active" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> + <drawimage condition="{timer}++not{timerisactive}" imagetype="icon" path="ico_timer_is_inactive" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" />--> </area> <!--EPG without time--> <area condition="not{tvgshowtime}" layer="4"> @@ -324,8 +325,9 @@ <drawrectangle x="0" y="0" width="2" height="100%" color="{menubackline}" /> <drawrectangle x="0" y="{areaheight}-2" width="100%" height="2" color="{menubackline}" /> <!--<drawrectangle x="{areawidth}-2" y="0" width="2" height="100%" color="{menubackline}" />--> - <drawimage condition="{timer}++{timerisactive}" imagetype="icon" path="ico_timer_is_active" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> - <drawimage condition="{timer}++not{timerisactive}" imagetype="icon" path="ico_timer_is_inactive" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> + <drawimage condition="{timer}" imagetype="icon" path="ico_timer_is_active" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> + <!--<drawimage condition="{timer}++{timerisactive}" imagetype="icon" path="ico_timer_is_active" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" /> + <drawimage condition="{timer}++not{timerisactive}" imagetype="icon" path="ico_timer_is_inactive" x="{areawidth} - {areaheight}*0.4 - 5" y="5" width="0.4*{areaheight}" height="0.4*{areaheight}" />--> </area> </grid> diff --git a/skins/metrixhd/xmlfiles/displaychannel.xml b/skins/metrixhd/xmlfiles/displaychannel.xml index a057b88..b2466c4 100644 --- a/skins/metrixhd/xmlfiles/displaychannel.xml +++ b/skins/metrixhd/xmlfiles/displaychannel.xml @@ -28,7 +28,6 @@ <area x="22%" y="80%" width="76%" height="7%" layer="2"> <drawtext name="title" x="0" valign="center" font="{light}" fontsize="99%" color="{fontdefault}" text="{currenttitle}" width="{areawidth} - {width(startstop)}"/> <drawtext name="startstop" align="right" y="0" font="{light}" fontsize="60%" color="{fontdefault}" text="{currentstart} - {currentstop}" /> - <drawtext align="right" y="45%" font="{light}" fontsize="60%" color="{fontdefault}" text="+ {currentremaining} min" /> </area> <area x="22%" y="87%" width="76%" height="7%" layer="2"> <drawtext x="0" valign="center" font="{light}" fontsize="80%" color="{fontdefault}" text="{nexttitle}" width="{areawidth} - {width(startstop)}"/> @@ -47,6 +46,9 @@ <drawrectangle x="{elapsed}/{duration}*{areawidth} - {livebuffer}/{duration}*{areawidth}" y="0" width="{livebuffer}/{duration}*{areawidth}" height="5" color="{clrRed}" /> <drawrectangle x="0" y="1" width="{elapsed}/{duration}*{areawidth}" height="3" color="{menuheader}" /> </area> + <area x="22%" y="80%" width="76%" height="7%" layer="2"> + <drawtext align="right" y="45%" font="{light}" fontsize="60%" color="{fontdefault}" text="+ {currentremaining} min" /> + </area> </progressbar> <statusinfo> diff --git a/skinskeleton/xmlfiles/displaychannel.xml b/skinskeleton/xmlfiles/displaychannel.xml index 393a30e..ab2872f 100644 --- a/skinskeleton/xmlfiles/displaychannel.xml +++ b/skinskeleton/xmlfiles/displaychannel.xml @@ -25,7 +25,7 @@ {currentdurationhours} Duration, full hours {currentdurationminutes} Duration, rest of minutes {currentelapsed} Elapsed time of current Schedule in min - {currentremaining} Remaining time of current Schedule in min + {currentremaining} Remaining time of current Schedule in min -> DEPRECATED, it doesn't work as expected {currentrecording} true if current Schedule is recorded {hasVPS} true if current Schedule has VPS {nexttitle} Title of next Schedule @@ -48,6 +48,7 @@ {remaining} Remaining time of current Schedule in seconds {permashift} true if permashift plugin is in use {livebuffer} current buffered data in seconds + {currentremaining} Remaining time of current Schedule in min --> <progressbar> </progressbar> diff --git a/skinskeleton/xmlfiles/displayreplay.xml b/skinskeleton/xmlfiles/displayreplay.xml index 083cdf6..7e2a1aa 100644 --- a/skinskeleton/xmlfiles/displayreplay.xml +++ b/skinskeleton/xmlfiles/displayreplay.xml @@ -56,6 +56,9 @@ {recsubtitle} Subtitle of the Recording {recdate} Date Recording in dd.mm.yy {rectime} Time of Recording in hh:mm + {eventstart} Starttime of coresponding event in timeshiftmode in hh:mm + {eventstop} Endtime of coresponding event in timeshiftmode in hh:mm + {timeshift} true if a timeshifted recording is displayed --> <rectitle> </rectitle> @@ -73,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> @@ -86,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> |
