From 1cce4758fec49370ad2da1099eca4710a44c9bd4 Mon Sep 17 00:00:00 2001 From: Christian Wieninger Date: Fri, 3 Aug 2007 15:24:40 +0000 Subject: - support for new features in epgsearch-0.9.23 --- epgsearch.cpp | 142 +++++++++++++++++++++++++++++++++----------- epgsearch.h | 23 +++++-- pages/edit_searchtimer.ecpp | 97 ++++++++++++++++++++++++++---- 3 files changed, 211 insertions(+), 51 deletions(-) diff --git a/epgsearch.cpp b/epgsearch.cpp index 9a4314c..94d1722 100644 --- a/epgsearch.cpp +++ b/epgsearch.cpp @@ -43,36 +43,50 @@ SearchTimer::SearchTimer() void SearchTimer::Init() { - m_id = -1; - m_useTime = false; - m_startTime = 0; - m_stopTime = 0; - m_useChannel = NoChannel; - m_useCase = false; - m_mode = 0; - m_useTitle = true; - m_useSubtitle = true; - m_useDescription = true; - m_useDuration = false; - m_minDuration = 0; - m_maxDuration = 0; - m_useDayOfWeek = false; - m_dayOfWeek = 0; - m_useEpisode = false; - m_priority = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefPriority")); - m_lifetime = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefLifetime")); - m_fuzzytolerance = 1; - m_useInFavorites = false; - m_useAsSearchtimer = false; - m_action = 0; - m_delAfterDays = 0; - m_recordingsKeep = 0; - m_pauseOnNrRecordings = 0; - m_switchMinBefore = 1; - m_useExtEPGInfo = false; - m_useVPS = false; - m_marginstart = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefMarginStart")); - m_marginstop = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefMarginStop")); + m_id = -1; + m_useTime = false; + m_startTime = 0; + m_stopTime = 0; + m_useChannel = NoChannel; + m_useCase = false; + m_mode = 0; + m_useTitle = true; + m_useSubtitle = true; + m_useDescription = true; + m_useDuration = false; + m_minDuration = 0; + m_maxDuration = 0; + m_useDayOfWeek = false; + m_dayOfWeek = 0; + m_useEpisode = false; + m_priority = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefPriority")); + m_lifetime = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefLifetime")); + m_fuzzytolerance = 1; + m_useInFavorites = false; + m_useAsSearchtimer = 0; + m_action = 0; + m_delAfterDays = 0; + m_recordingsKeep = 0; + m_pauseOnNrRecordings = 0; + m_switchMinBefore = 1; + m_useExtEPGInfo = false; + m_useVPS = false; + m_marginstart = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefMarginStart")); + m_marginstop = lexical_cast< int >(EPGSearchSetupValues::ReadValue("DefMarginStop")); + m_avoidrepeats = false; + m_allowedrepeats = 0; + m_compareTitle = false; + m_compareSubtitle = false; + m_compareSummary = false; + m_repeatsWithinDays = 0; + m_blacklistmode = 0; + m_menuTemplate = 0; + m_delMode = 0; + m_delAfterCountRecs = 0; + m_delAfterDaysOfFirstRec = 0; + m_useAsSearchTimerFrom = 0; + m_useAsSearchTimerTil = 0; + m_catvaluesAvoidRepeat = 0; } SearchTimer::SearchTimer( string const& data ) @@ -98,7 +112,7 @@ SearchTimer::SearchTimer( string const& data ) case 12: m_useDuration = lexical_cast< bool >( *part ); break; case 13: if ( m_useDuration ) m_minDuration = lexical_cast< int >( *part ); break; case 14: if ( m_useDuration ) m_maxDuration = lexical_cast< int >( *part ); break; - case 15: m_useAsSearchtimer = lexical_cast< bool >( *part ); break; + case 15: m_useAsSearchtimer = lexical_cast< int >( *part ); break; case 16: m_useDayOfWeek = lexical_cast< bool >( *part ); break; case 17: m_dayOfWeek = lexical_cast< int >( *part ); break; case 18: m_useEpisode = lexical_cast< bool >( *part ); break; @@ -116,7 +130,7 @@ SearchTimer::SearchTimer( string const& data ) case 30: m_compareTitle = lexical_cast< bool >( *part ); break; case 31: m_compareSubtitle = lexical_cast< bool >( *part ); break; case 32: m_compareSummary = lexical_cast< bool >( *part ); break; - case 33: m_catvaluesAvoidRepeat = lexical_cast< unsigned long >( *part ); break; + case 33: m_catvaluesAvoidRepeat = lexical_cast< long >( *part ); break; case 34: m_repeatsWithinDays = lexical_cast< int >( *part ); break; case 35: m_delAfterDays = lexical_cast< int >( *part ); break; case 36: m_recordingsKeep = lexical_cast< int >( *part ); break; @@ -127,6 +141,11 @@ SearchTimer::SearchTimer( string const& data ) case 41: m_fuzzytolerance = lexical_cast< int >( *part ); break; case 42: m_useInFavorites = lexical_cast< bool >( *part ); break; case 43: m_menuTemplate = lexical_cast< int >( *part ); break; + case 44: m_delMode = lexical_cast< int >( *part ); break; + case 45: m_delAfterCountRecs = lexical_cast< int >( *part ); break; + case 46: m_delAfterDaysOfFirstRec = lexical_cast< int >( *part ); break; + case 47: m_useAsSearchTimerFrom = lexical_cast< time_t >( *part ); break; + case 48: m_useAsSearchTimerTil = lexical_cast< time_t >( *part ); break; } } } catch ( bad_lexical_cast const& ex ) { @@ -209,7 +228,7 @@ std::string SearchTimer::ToText() << (m_useDuration?1:0) << ":" << tmp_minDuration << ":" << tmp_maxDuration << ":" - << (m_useAsSearchtimer?1:0) << ":" + << m_useAsSearchtimer << ":" << (m_useDayOfWeek?1:0) << ":" << m_dayOfWeek << ":" << (m_useEpisode?1:0) << ":" @@ -237,7 +256,12 @@ std::string SearchTimer::ToText() << tmp_blacklists << ":" << m_fuzzytolerance << ":" << (m_useInFavorites?1:0) << ":" - << m_menuTemplate << ":"; + << m_menuTemplate << ":" + << m_delMode << ":" + << m_delAfterCountRecs << ":" + << m_delAfterDaysOfFirstRec << ":" + << (long) m_useAsSearchTimerFrom << ":" + << (long) m_useAsSearchTimerTil; return os.str(); } @@ -293,6 +317,54 @@ string SearchTimer::StopTimeFormatted() return FormatDateTime(tr("%I:%M %p"), stop); } +// format is in datepicker format ('mm' for month, 'dd' for day, 'yyyy' for year) +string DatePickerToC(time_t date, string const& format) +{ + if (date == 0) return ""; + string cformat = format; + cformat = StringReplace(cformat, "mm", "%m"); + cformat = StringReplace(cformat, "dd", "%d"); + cformat = StringReplace(cformat, "yyyy", "%Y"); + return FormatDateTime(cformat.c_str(), date); +} + +string SearchTimer::UseAsSearchTimerFrom(string const& format) +{ + return DatePickerToC(m_useAsSearchTimerFrom, format); +} + +string SearchTimer::UseAsSearchTimerTil(string const& format) +{ + return DatePickerToC(m_useAsSearchTimerTil, format); +} + +time_t GetDateFromDatePicker(std::string const& datestring, std::string const& format) +{ + if (datestring.empty()) + return 0; + int year = lexical_cast< int >(datestring.substr(format.find("yyyy"), 4)); + int month = lexical_cast< int >(datestring.substr(format.find("mm"), 2)); + int day = lexical_cast< int >(datestring.substr(format.find("dd"), 2)); + struct tm tm_r; + tm_r.tm_year = year - 1900; + tm_r.tm_mon = month -1; + tm_r.tm_mday = day; + tm_r.tm_hour = tm_r.tm_min = tm_r.tm_sec = 0; + tm_r.tm_isdst = -1; // makes sure mktime() will determine the correct DST setting + return mktime(&tm_r); +} + +void SearchTimer::SetUseAsSearchTimerFrom(std::string const& datestring, std::string const& format) +{ + m_useAsSearchTimerFrom = GetDateFromDatePicker(datestring, format); +} + +void SearchTimer::SetUseAsSearchTimerTil(std::string const& datestring, std::string const& format) +{ + m_useAsSearchTimerTil = GetDateFromDatePicker(datestring, format); +} + + SearchTimers::SearchTimers() { Reload(); @@ -344,7 +416,7 @@ bool SearchTimers::ToggleActive(std::string const& id) { SearchTimer* search = GetByTimerId( id ); if (!search) return false; - search->SetUseAsSearchTimer(!search->UseAsSearchTimer()); + search->SetUseAsSearchTimer(search->UseAsSearchTimer()==1?0:1); return Save(search); } diff --git a/epgsearch.h b/epgsearch.h index c882eed..fd47496 100644 --- a/epgsearch.h +++ b/epgsearch.h @@ -63,8 +63,8 @@ public: void SetChannelMax(tChannelID channelMax) { m_channelMax = channelMax; } std::string ChannelText() const { return m_channels; } void SetChannelText(std::string channels) { m_channels = channels; } - bool UseAsSearchTimer() const { return m_useAsSearchtimer; } - void SetUseAsSearchTimer(bool useAsSearchtimer) { m_useAsSearchtimer = useAsSearchtimer; } + int UseAsSearchTimer() const { return m_useAsSearchtimer; } + void SetUseAsSearchTimer(int useAsSearchtimer) { m_useAsSearchtimer = useAsSearchtimer; } bool UseDuration() const { return m_useDuration; } void SetUseDuration(bool useDuration) { m_useDuration = useDuration; } int MinDuration() const { return m_minDuration; } @@ -123,7 +123,17 @@ public: void SetMarginStop(int marginstop) { m_marginstop = marginstop; } bool UseVPS() const { return m_useVPS; } void SetUseVPS(bool useVPS) { m_useVPS = useVPS; } - + int DelMode() const { return m_delMode; } + void SetDelMode(int delMode) { m_delMode = delMode; } + int DelAfterCountRecs() const { return m_delAfterCountRecs; } + void SetDelAfterCountRecs(int delAfterCountRecs) { m_delAfterCountRecs = delAfterCountRecs; } + int DelAfterDaysOfFirstRec() const { return m_delAfterDaysOfFirstRec; } + void SetDelAfterDaysOfFirstRec(int delAfterDaysOfFirstRec) { m_delAfterDaysOfFirstRec = delAfterDaysOfFirstRec; } + std::string UseAsSearchTimerFrom(std::string const& format); + void SetUseAsSearchTimerFrom(std::string const& datestring, std::string const& format); + std::string UseAsSearchTimerTil(std::string const& format); + void SetUseAsSearchTimerTil(std::string const& datestring, std::string const& format); + private: int m_id; std::string m_search; @@ -149,7 +159,7 @@ private: int m_lifetime; int m_fuzzytolerance; bool m_useInFavorites; - bool m_useAsSearchtimer; + int m_useAsSearchtimer; int m_action; std::string m_directory; int m_delAfterDays; @@ -171,6 +181,11 @@ private: std::vector< std::string > m_blacklistIDs; int m_menuTemplate; unsigned long m_catvaluesAvoidRepeat; + int m_delMode; + int m_delAfterCountRecs; + int m_delAfterDaysOfFirstRec; + time_t m_useAsSearchTimerFrom; + time_t m_useAsSearchTimerTil; void ParseChannel( std::string const& data ); void ParseChannelIDs( std::string const& data ); diff --git a/pages/edit_searchtimer.ecpp b/pages/edit_searchtimer.ecpp index 9fd1c02..5f1ab1c 100644 --- a/pages/edit_searchtimer.ecpp +++ b/pages/edit_searchtimer.ecpp @@ -50,7 +50,7 @@ using namespace vdrlive; bool wday_sat = false; bool wday_sun = false; bool useinfavorites = false; - bool useassearchtimer = false; + int useassearchtimer = 0; int searchtimeraction = 0; bool seriesrecording = false; string directory = ""; @@ -74,7 +74,12 @@ using namespace vdrlive; int marginstart = 0; int marginstop = 0; bool usevps = false; + bool delmode = false; + int delaftercountrecs = 0; + int delafterdaysoffirstrec = 0; string blacklistids_internal; + string useassearchtimerfrom; + string useassearchtimerto; <%session scope="global"> bool logged_in(false); @@ -164,6 +169,11 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); } searchtimer.SetUseInFavorites(useinfavorites); searchtimer.SetUseAsSearchTimer(useassearchtimer); + if (useassearchtimer == 2) + { + searchtimer.SetUseAsSearchTimerFrom(useassearchtimerfrom, tr("mm/dd/yyyy")); + searchtimer.SetUseAsSearchTimerTil(useassearchtimerto, tr("mm/dd/yyyy")); + } searchtimer.SetSearchTimerAction(searchtimeraction); searchtimer.SetUseSeriesRecording(seriesrecording); searchtimer.SetDirectory(directory); @@ -193,7 +203,12 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); searchtimer.SetMarginStart(marginstart); searchtimer.SetMarginStop(marginstop); searchtimer.SetUseVPS(usevps); - + searchtimer.SetDelMode(delmode); + if (delmode) + { + searchtimer.SetDelAfterCountRecs(delaftercountrecs); + searchtimer.SetDelAfterDaysOfFirstRec(delafterdaysoffirstrec); + } if (!testmode) { searchtimers.Save(&searchtimer); @@ -273,6 +288,11 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); } useinfavorites = searchtimer->UseInFavorites(); useassearchtimer = searchtimer->UseAsSearchTimer(); + if (useassearchtimer == 2) + { + useassearchtimerfrom = searchtimer->UseAsSearchTimerFrom(tr("mm/dd/yyyy")); + useassearchtimerto = searchtimer->UseAsSearchTimerTil(tr("mm/dd/yyyy")); + } searchtimeraction = searchtimer->SearchTimerAction(); seriesrecording = searchtimer->UseSeriesRecording(); directory = searchtimer->Directory(); @@ -309,6 +329,10 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); marginstart = searchtimer->MarginStart(); marginstop = searchtimer->MarginStop(); usevps = searchtimer->UseVPS(); + delmode = searchtimer->DelMode(); + delaftercountrecs = searchtimer->DelAfterCountRecs(); + delafterdaysoffirstrec = searchtimer->DelAfterDaysOfFirstRec(); + editsearchtimer = searchtimer; } else @@ -330,10 +354,11 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); VDR Live - <$ editsearchtimer ? tr("Edit search timer") : tr("New search timer") $> + <& pageelems.stylesheets &> <& pageelems.ajax_js &> - + <& pageelems.logo &> @@ -642,7 +678,7 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html");
/> <$ tr("Friday") $>
/> <$ tr("Saturday") $>
/> <$ tr("Sunday") $>
-
+
@@ -679,7 +715,23 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html");
<$ tr("Use as search timer" ) $>:
- onclick="changeduseassearchtimer(this)" id="useassearchtimer"/> + +
+ -- cgit v1.2.3