summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2014-03-04 23:16:09 +0000
committerrandomdan <randomdan@localhost>2014-03-04 23:16:09 +0000
commitdc226d8dec948a104f9c6ecb9f08f1efacc4b214 (patch)
tree17d84c075a7bfdf03aa485dbb26504b76ff56e69
parentAdd an SI function to get a transport suitable for getting SI based on the de... (diff)
downloadp2pvr-dc226d8dec948a104f9c6ecb9f08f1efacc4b214.tar.bz2
p2pvr-dc226d8dec948a104f9c6ecb9f08f1efacc4b214.tar.xz
p2pvr-dc226d8dec948a104f9c6ecb9f08f1efacc4b214.zip
Incorperate proper datetimes and durations now the core does
-rw-r--r--p2pvr/ice/common.ice2
-rw-r--r--p2pvr/ice/commonHelpers.cpp55
-rw-r--r--p2pvr/ice/commonHelpers.h12
-rw-r--r--p2pvr/ice/p2pvr.ice6
-rw-r--r--p2pvr/lib/recorder.cpp6
-rw-r--r--p2pvr/lib/sql/Schedules_selectAll.sql2
-rw-r--r--p2pvr/lib/sql/Schedules_selectById.sql2
-rw-r--r--p2pvr/util/p2Helpers.cpp25
-rw-r--r--p2pvr/util/p2Helpers.h8
9 files changed, 67 insertions, 51 deletions
diff --git a/p2pvr/ice/common.ice b/p2pvr/ice/common.ice
index 8296f93..14ca155 100644
--- a/p2pvr/ice/common.ice
+++ b/p2pvr/ice/common.ice
@@ -10,7 +10,7 @@ module Common {
short Minute;
};
- struct TimeOfDay {
+ struct Duration {
short Hour;
short Minute;
};
diff --git a/p2pvr/ice/commonHelpers.cpp b/p2pvr/ice/commonHelpers.cpp
index 64a1c61..46c7fad 100644
--- a/p2pvr/ice/commonHelpers.cpp
+++ b/p2pvr/ice/commonHelpers.cpp
@@ -1,46 +1,37 @@
#include "commonHelpers.h"
#include <misc.h>
-#include <boost/format.hpp>
+#include <boost/numeric/conversion/cast.hpp>
namespace Common {
- std::string operator-(const Common::DateTime & a, const Common::DateTime & b)
+ boost::posix_time::ptime operator*(const Common::DateTime & dt)
{
- struct tm tma {
- 0, a.Minute, a.Hour,
- a.Day, a.Month - 1, a.Year - 1900,
- 0, 0, 0, 0, 0};
- struct tm tmb {
- 0, b.Minute, b.Hour,
- b.Day, b.Month - 1, b.Year - 1900,
- 0, 0, 0, 0, 0};
- auto secs = mktime(&tma) - mktime(&tmb);
- return stringbf("%02d:%02d:%02d", secs / 3600, (secs / 60) % 60, secs % 60);
+ return boost::posix_time::ptime(
+ boost::gregorian::date(dt.Year, dt.Month, dt.Day),
+ boost::posix_time::time_duration(dt.Hour, dt.Minute, 0));
}
- time_t operator-(const Common::DateTime & cdt, const std::string & interval)
+ boost::posix_time::time_duration operator*(const Common::Duration & d)
{
- struct tm dt {
- 0, cdt.Minute, cdt.Hour,
- cdt.Day, cdt.Month - 1, cdt.Year - 1900,
- 0, 0, 0, 0, 0};
- unsigned short hours, minutes, seconds;
- if (sscanf(interval.c_str(), "%hu:%hu:%hu", &hours, &minutes, &seconds) < 3) {
- throw std::runtime_error("Couldn't parse interval");
- }
- return mktime(&dt) - (seconds + (60 * (minutes + (60 * hours))));
+ return boost::posix_time::time_duration(d.Hour, d.Minute, 0);
}
+}
- time_t operator+(const Common::DateTime & cdt, const std::string & interval)
- {
- struct tm dt {
- 0, cdt.Minute, cdt.Hour,
- cdt.Day, cdt.Month - 1, cdt.Year - 1900,
- 0, 0, 0, 0, 0};
- unsigned short hours, minutes, seconds;
- if (sscanf(interval.c_str(), "%hu:%hu:%hu", &hours, &minutes, &seconds) < 3) {
- throw std::runtime_error("Couldn't parse interval");
+namespace boost {
+ namespace posix_time {
+ Common::DateTime operator*(const boost::posix_time::ptime & dt)
+ {
+ return {
+ dt.date().year(), dt.date().month(), dt.date().day(),
+ boost::numeric_cast<short>(dt.time_of_day().hours()),
+ boost::numeric_cast<short>(dt.time_of_day().minutes()) };
+ }
+
+ Common::Duration operator*(const boost::posix_time::time_duration & d)
+ {
+ return {
+ boost::numeric_cast<short>(d.hours()),
+ boost::numeric_cast<short>(d.minutes()) };
}
- return mktime(&dt) + (seconds + (60 * (minutes + (60 * hours))));
}
}
diff --git a/p2pvr/ice/commonHelpers.h b/p2pvr/ice/commonHelpers.h
index 645ad1c..cc3cac1 100644
--- a/p2pvr/ice/commonHelpers.h
+++ b/p2pvr/ice/commonHelpers.h
@@ -4,6 +4,7 @@
#include <common.h>
#include <ostream>
#include <iomanip>
+#include <boost/date_time/posix_time/posix_time_types.hpp>
namespace Common {
template<typename C, typename T>
@@ -17,9 +18,14 @@ namespace Common {
<< ":" << std::setw(2) << std::setfill('0') << dt.Minute;
return o;
}
- time_t operator-(const Common::DateTime & cdt, const std::string & interval);
- time_t operator+(const Common::DateTime & cdt, const std::string & interval);
- std::string operator-(const Common::DateTime & a, const Common::DateTime & b);
+ boost::posix_time::ptime operator*(const Common::DateTime &);
+ boost::posix_time::time_duration operator*(const Common::Duration &);
+}
+namespace boost {
+ namespace posix_time {
+ Common::DateTime operator*(const boost::posix_time::ptime &);
+ Common::Duration operator*(const boost::posix_time::time_duration &);
+ }
}
#endif
diff --git a/p2pvr/ice/p2pvr.ice b/p2pvr/ice/p2pvr.ice
index 984f18a..75bfbf8 100644
--- a/p2pvr/ice/p2pvr.ice
+++ b/p2pvr/ice/p2pvr.ice
@@ -16,7 +16,7 @@ module P2PVR {
optional(2) string Subtitle;
optional(3) string Description;
Common::DateTime StartTime;
- string Duration;
+ Common::Duration Duration;
};
sequence<Recording> RecordingList;
@@ -28,8 +28,8 @@ module P2PVR {
optional(3) string Title;
optional(4) string Search;
int Priority;
- string Early;
- string Late;
+ Common::Duration Early;
+ Common::Duration Late;
bool Repeats;
};
sequence<Schedule> ScheduleList;
diff --git a/p2pvr/lib/recorder.cpp b/p2pvr/lib/recorder.cpp
index 98c7c4e..bdd18c6 100644
--- a/p2pvr/lib/recorder.cpp
+++ b/p2pvr/lib/recorder.cpp
@@ -47,7 +47,7 @@ Recorder::RefreshSchedules(const Ice::Current &)
auto service = si->GetService(s->ServiceId);
auto event = si->GetEvent(s->ServiceId, s->EventId);
- auto startIn = std::max<time_t>(event->StartTime - schedule->Early - time(NULL), 0);
+ auto startIn = std::max<time_t>((*event->StartTime - *schedule->Early - boost::posix_time::second_clock::universal_time()).total_seconds(), 0);
IceUtil::TimerTaskPtr startTimer = new BindTimerTask(boost::bind(&Recorder::StartRecording, this, schedule, service, event));
timer->schedule(startTimer, IceUtil::Time::seconds(startIn));
pendingRecordings.push_back(startTimer);
@@ -75,11 +75,11 @@ Recorder::StartRecording(P2PVR::SchedulePtr schedule, DVBSI::ServicePtr service,
service->Name ? *service->Name : "<no name>", service->ServiceId);
recordings->NewRecording(new P2PVR::Recording(0, storage->ice_toString(), id, schedule->ScheduleId, event->Title, event->Subtitle,
- event->Description, event->StartTime, event->StopTime - event->StartTime));
+ event->Description, event->StartTime, *(*event->StopTime - *event->StartTime)));
auto newCurrent = CurrentPtr(new Current({muxer, store, ss, schedule, service, event, IceUtil::TimerTaskPtr()}));
currentRecordings.insert(newCurrent);
- auto stopIn = event->StopTime + schedule->Late - time(NULL);
+ auto stopIn = (*event->StopTime + *schedule->Late - boost::posix_time::second_clock::universal_time()).total_seconds();
newCurrent->stopTimer = new BindTimerTask(boost::bind(&Recorder::StopRecording, this, newCurrent));
timer->schedule(newCurrent->stopTimer, IceUtil::Time::seconds(stopIn));
Logger()->messagebf(LOG_DEBUG, "Recording %s scheduled stop in %s seconds", event->Title, stopIn);
diff --git a/p2pvr/lib/sql/Schedules_selectAll.sql b/p2pvr/lib/sql/Schedules_selectAll.sql
index 5970dc1..e9e500e 100644
--- a/p2pvr/lib/sql/Schedules_selectAll.sql
+++ b/p2pvr/lib/sql/Schedules_selectAll.sql
@@ -1,3 +1,3 @@
-SELECT scheduleid, serviceid, eventid, title, search, priority, early::text early, late::text late, repeats
+SELECT scheduleid, serviceid, eventid, title, search, priority, early, late, repeats
FROM schedules
ORDER BY scheduleId
diff --git a/p2pvr/lib/sql/Schedules_selectById.sql b/p2pvr/lib/sql/Schedules_selectById.sql
index 2eb7b0b..4990418 100644
--- a/p2pvr/lib/sql/Schedules_selectById.sql
+++ b/p2pvr/lib/sql/Schedules_selectById.sql
@@ -1,4 +1,4 @@
-SELECT scheduleid, serviceid, eventid, title, search, priority, early::text early, late::text late, repeats
+SELECT scheduleid, serviceid, eventid, title, search, priority, early, late, repeats
FROM schedules
WHERE scheduleid = ?
ORDER BY scheduleId
diff --git a/p2pvr/util/p2Helpers.cpp b/p2pvr/util/p2Helpers.cpp
index 081905d..c58ff1a 100644
--- a/p2pvr/util/p2Helpers.cpp
+++ b/p2pvr/util/p2Helpers.cpp
@@ -1,12 +1,27 @@
#include <pch.hpp>
#include "p2Helpers.h"
+#include <commonHelpers.h>
+
+template <>
+VariableType &
+operator<<<Common::Duration>(VariableType & vt, const Common::Duration & d)
+{
+ return (vt = *d);
+}
template <>
VariableType &
operator<<<Common::DateTime>(VariableType & vt, const Common::DateTime & dt)
{
- vt = boost::posix_time::ptime(boost::gregorian::date(dt.Year, dt.Month, dt.Day),
- boost::posix_time::time_duration(dt.Hour, dt.Minute, 0));
+ return (vt = *dt);
+}
+
+template <>
+const VariableType &
+operator>><Common::Duration>(const VariableType & vt, Common::Duration & d)
+{
+ const boost::posix_time::time_duration & dur = vt;
+ d = *dur;
return vt;
}
@@ -15,11 +30,7 @@ const VariableType &
operator>><Common::DateTime>(const VariableType & vt, Common::DateTime & dt)
{
const boost::posix_time::ptime & date = vt;
- dt.Year = date.date().year();
- dt.Month = date.date().month();
- dt.Day = date.date().day();
- dt.Hour = date.time_of_day().hours();
- dt.Minute = date.time_of_day().minutes();
+ dt = *date;
return vt;
}
diff --git a/p2pvr/util/p2Helpers.h b/p2pvr/util/p2Helpers.h
index f01be78..3b73f1b 100644
--- a/p2pvr/util/p2Helpers.h
+++ b/p2pvr/util/p2Helpers.h
@@ -14,6 +14,10 @@ operator>>(const VariableType & vt, T & v)
template <>
const VariableType &
+operator>><Common::Duration>(const VariableType & vt, Common::Duration & d);
+
+template <>
+const VariableType &
operator>><Common::DateTime>(const VariableType & vt, Common::DateTime & dt);
template <typename T>
@@ -44,6 +48,10 @@ operator<<(VariableType & vt, const T & v)
template <>
VariableType &
+operator<<<Common::Duration>(VariableType & vt, const Common::Duration & d);
+
+template <>
+VariableType &
operator<<<Common::DateTime>(VariableType & vt, const Common::DateTime & dt);
template <typename T>