diff options
author | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2019-07-11 14:40:41 +0200 |
---|---|---|
committer | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2019-07-11 14:40:41 +0200 |
commit | 5ff172c987fc2c6c516c38a2d5018ac1726c54b7 (patch) | |
tree | fa7c6db3f7acae6c0c485f35037d57257561dc42 /timemanager.c | |
parent | 6b3eda282f90ec1bf1dcb556ed0074ea34efcfaf (diff) | |
download | vdr-plugin-tvguide-5ff172c987fc2c6c516c38a2d5018ac1726c54b7.tar.gz vdr-plugin-tvguide-5ff172c987fc2c6c516c38a2d5018ac1726c54b7.tar.bz2 |
Rename timer.* to timemanager.*
Diffstat (limited to 'timemanager.c')
-rw-r--r-- | timemanager.c | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/timemanager.c b/timemanager.c new file mode 100644 index 0000000..a38e57a --- /dev/null +++ b/timemanager.c @@ -0,0 +1,178 @@ +#include <time.h> +#include <vdr/tools.h> +#include "config.h" +#include "timemanager.h" + +cTimeManager::~cTimeManager(void) { +} + +cString cTimeManager::printTime(time_t displayTime) { + struct tm *ts; + ts = localtime(&displayTime); + cString strTime = cString::sprintf("%d.%d-%d:%d.%d", ts->tm_mday, ts->tm_mon+1, ts->tm_hour, ts->tm_min, ts->tm_sec); + return strTime; +} + + +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; + } +} + +void cTimeManager::AddStep(int step) { + tStart += step*60; + tEnd += step*60; +} + +bool cTimeManager::DelStep(int step) { + if ((tStart - step*60)+30*60 < t) { + return true; + } + 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; + } +} + +time_t cTimeManager::getPrevPrimetime(time_t current) { + tm *st = localtime(¤t); + if (st->tm_hour < 21) { + current -= 24 * 60* 60; + st = localtime(¤t); + } + st->tm_hour = 20; + st->tm_min = 0; + time_t primeTime = mktime(st); + return primeTime; +} + +time_t cTimeManager::getNextPrimetime(time_t current){ + tm *st = localtime(¤t); + if (st->tm_hour > 19) { + current += 24 * 60* 60; + st = localtime(¤t); + } + st->tm_hour = 20; + st->tm_min = 0; + time_t primeTime = mktime(st); + return primeTime; +} + +bool cTimeManager::tooFarInPast(time_t current) { + if (current < t) { + return true; + } + return false; +} + +cString cTimeManager::GetCurrentTime() { + char buf[25]; + t = time(0); + tm *st = localtime(&t); + //snprintf(text, sizeof(text), "%d:%02d", st->tm_hour, st->tm_min); + if (config.timeFormat == e12Hours) { + strftime(buf, sizeof(buf), "%I:%M %p", st); + } else if (config.timeFormat == e24Hours) + strftime(buf, sizeof(buf), "%H:%M", st); + return buf; + +} + +cString cTimeManager::GetDate() { + char text[6]; + tm *st = localtime(&tStart); + snprintf(text, sizeof(text), "%d.%d", st->tm_mday, st->tm_mon+1); + return text; +} + +cString cTimeManager::GetWeekday() { + return WeekDayName(tStart); +} + +int cTimeManager::GetTimelineOffset() { + tm *st = localtime(&tStart); + int offset = st->tm_hour*60; + offset += st->tm_min; + return offset; +} + +time_t cTimeManager::GetRounded() { + tm *rounded = localtime ( &tStart ); + rounded->tm_sec = 0; + if (rounded->tm_min > 29) + rounded->tm_min = 30; + else + rounded->tm_min = 0; + return mktime(rounded); +} + +bool cTimeManager::NowVisible(void) { + if (t > tStart) + return true; + return false; +} + + +void cTimeManager::debug() { + esyslog("t: %s, tStart: %s, tEnd: %s", *TimeString(t), *TimeString(tStart), *TimeString(tEnd)); +} + +// --- cTimeInterval ------------------------------------------------------------- + +cTimeInterval::cTimeInterval(time_t start, time_t stop) { + this->start = start; + this->stop = stop; +} + +cTimeInterval::~cTimeInterval(void) { +} + +cTimeInterval *cTimeInterval::Intersect(cTimeInterval *interval) { + time_t startIntersect, stopIntersect; + + if ((stop <= interval->Start()) || (interval->Stop() <= start)) { + return NULL; + } + + if (start <= interval->Start()) { + startIntersect = interval->Start(); + } else { + startIntersect = start; + } + if (stop <= interval->Stop()) { + stopIntersect = stop; + } else { + stopIntersect = interval->Stop(); + } + return new cTimeInterval(startIntersect, stopIntersect); +} + +cTimeInterval *cTimeInterval::Union(cTimeInterval *interval) { + time_t startUnion, stopUnion; + + if (start <= interval->Start()) { + startUnion = start; + } else { + startUnion = interval->Start(); + } + if (stop <= interval->Stop()) { + stopUnion = interval->Stop(); + } else { + stopUnion = stop; + } + return new cTimeInterval(startUnion, stopUnion); +} |