From 6540e214440faef1c72057e1727991d88ae2c9e2 Mon Sep 17 00:00:00 2001 From: kamel5 Date: Mon, 6 Jan 2020 12:51:49 +0100 Subject: [PATCH] Optimize TimeJump --- config.h | 2 +- timemanager.c | 40 ++++++++++++++++++++-------------------- timemanager.h | 8 ++++++-- tvguideosd.c | 34 ++++++++++++++++------------------ 4 files changed, 43 insertions(+), 41 deletions(-) diff --git a/config.h b/config.h index 2f723e2..045bd37 100644 --- a/config.h +++ b/config.h @@ -8,7 +8,7 @@ #include "fontmanager.h" #include "imagecache.h" -enum { +enum eTimeFormat { e12Hours, e24Hours }; diff --git a/timemanager.c b/timemanager.c index a38e57a..47a2677 100644 --- a/timemanager.c +++ b/timemanager.c @@ -3,6 +3,14 @@ #include "config.h" #include "timemanager.h" +cTimeManager::cTimeManager(void) { + if (config.displayMode == eVertical) { + displaySeconds = (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight) / geoManager.minutePixel * 60; + } else if (config.displayMode == eHorizontal) { + displaySeconds = (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth) / geoManager.minutePixel * 60; + } +} + cTimeManager::~cTimeManager(void) { } @@ -18,40 +26,32 @@ void cTimeManager::Now() { t = time(0); tStart = t; tStart = GetRounded(); - if (config.displayMode == eVertical) { - tEnd = tStart + (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight)/geoManager.minutePixel*60; - } else if (config.displayMode == eHorizontal) { - tEnd = tStart + (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth)/geoManager.minutePixel*60; - } + tEnd = tStart + displaySeconds; } void cTimeManager::AddStep(int step) { - tStart += step*60; - tEnd += step*60; + tStart += step * 60; + tEnd = tStart + displaySeconds; } -bool cTimeManager::DelStep(int step) { - if ((tStart - step*60)+30*60 < t) { - return true; +void cTimeManager::DelStep(int step) { + if ((tStart - step * 60) + 30 * 60 < t) { + Now(); + } else { + tStart -= step * 60; + tEnd = tStart + displaySeconds; } - tStart -= step*60; - tEnd -= step*60; - return false; } void cTimeManager::SetTime(time_t newTime) { tStart = newTime; - if (config.displayMode == eVertical) { - tEnd = tStart + (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight)/geoManager.minutePixel*60; - } else if (config.displayMode == eHorizontal) { - tEnd = tStart + (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth)/geoManager.minutePixel*60; - } + tEnd = tStart + displaySeconds; } time_t cTimeManager::getPrevPrimetime(time_t current) { tm *st = localtime(¤t); if (st->tm_hour < 21) { - current -= 24 * 60* 60; + current -= 24 * 60 * 60; st = localtime(¤t); } st->tm_hour = 20; @@ -63,7 +63,7 @@ time_t cTimeManager::getPrevPrimetime(time_t current) { time_t cTimeManager::getNextPrimetime(time_t current){ tm *st = localtime(¤t); if (st->tm_hour > 19) { - current += 24 * 60* 60; + current += 24 * 60 * 60; st = localtime(¤t); } st->tm_hour = 20; diff --git a/timemanager.h b/timemanager.h index 35f28c7..2d91dff 100644 --- a/timemanager.h +++ b/timemanager.h @@ -2,6 +2,7 @@ #define __TVGUIDE_TIMEMANAGER_H #include +#include "config.h" // --- cTimeManager ------------------------------------------------------------- @@ -10,14 +11,16 @@ class cTimeManager { time_t t; time_t tStart; time_t tEnd; + int displaySeconds; + eTimeFormat timeFormat; public: - cTimeManager(){}; + cTimeManager(); virtual ~cTimeManager(void); static cString printTime(time_t displayTime); void Now(); time_t GetNow() { return t; }; void AddStep(int step); - bool DelStep(int step); + void DelStep(int step); void SetTime(time_t newTime); time_t Get() {return t;}; time_t GetStart() {return tStart;}; @@ -31,6 +34,7 @@ class cTimeManager { int GetTimelineOffset(); time_t GetRounded(); bool NowVisible(void); + int GetDisplaySeconds(void) { return displaySeconds; }; void debug(); }; diff --git a/tvguideosd.c b/tvguideosd.c index fc64eae..041e831 100644 --- a/tvguideosd.c +++ b/tvguideosd.c @@ -410,9 +410,7 @@ void cTvGuideOsd::timeBack() { } void cTvGuideOsd::ScrollBack() { - bool tooFarInPast = timeManager->DelStep(config.stepMinutes); - if (tooFarInPast) - return; + timeManager->DelStep(config.stepMinutes); if (config.useHWAccel) { drawGridsTimeJump(); timeLine->drawDateViewer(); @@ -640,24 +638,20 @@ void cTvGuideOsd::processNumKey(int numKey) { void cTvGuideOsd::TimeJump(int mode) { switch (mode) { case 1: { - bool tooFarInPast = timeManager->DelStep(config.bigStepHours*60); - if (tooFarInPast) - return; - } + timeManager->DelStep(config.bigStepHours * 60); + } break; case 3: { - timeManager->AddStep(config.bigStepHours*60); - } + timeManager->AddStep(config.bigStepHours * 60); + } break; case 4: { - bool tooFarInPast = timeManager->DelStep(config.hugeStepHours*60); - if (tooFarInPast) - return; - } + timeManager->DelStep(config.hugeStepHours * 60); + } break; case 6: { - timeManager->AddStep(config.hugeStepHours*60); - } + timeManager->AddStep(config.hugeStepHours * 60); + } break; case 7: { cTimeManager primeChecker; @@ -666,13 +660,13 @@ void cTvGuideOsd::TimeJump(int mode) { if (primeChecker.tooFarInPast(prevPrime)) return; timeManager->SetTime(prevPrime); - } + } break; case 9: { cTimeManager primeChecker; time_t nextPrime = primeChecker.getNextPrimetime(timeManager->GetStart()); timeManager->SetTime(nextPrime); - } + } break; default: return; @@ -783,8 +777,12 @@ eOSState cTvGuideOsd::ProcessKey(eKeys Key) { case kYellow: processKeyYellow(); break; case kBlue: state = processKeyBlue(&alreadyUnlocked); break; case kOk: state = processKeyOk(&alreadyUnlocked); break; - case kBack: state=osEnd; break; + case kBack: state = osEnd; break; case k0 ... k9: processNumKey(Key - k0); break; + case kFastRew: TimeJump(1); break; // Doesnt work, if used from timeshiftmode + case kFastFwd: TimeJump(3); break; + case kPrev: TimeJump(4); break; + case kNext: TimeJump(6); break; case kNone: if (channelJumper) CheckTimeout(); break; default: break; }