diff --git a/epg_events.cpp b/epg_events.cpp index e9931f7f..59fdd1b2 100644 --- a/epg_events.cpp +++ b/epg_events.cpp @@ -287,7 +287,7 @@ namespace vdrlive eventId += channelId; eventId += '_'; - eventId += lexical_cast(eId); + eventId += cSv(cToSvInt(eId)); return eventId; } @@ -303,7 +303,7 @@ namespace vdrlive std::string const eIdStr = epgid.substr(delimPos+1); channelId = tChannelID::FromString(cIdStr.c_str()); - eventId = lexical_cast(eIdStr); + eventId = parse_int(eIdStr); } EpgInfoPtr CreateEpgInfo(std::string const &epgid, cSchedules const *schedules) diff --git a/epgsearch.cpp b/epgsearch.cpp index bde6f6f2..13fa57d1 100644 --- a/epgsearch.cpp +++ b/epgsearch.cpp @@ -56,8 +56,8 @@ void SearchTimer::Init() m_useDayOfWeek = false; m_dayOfWeek = 0; m_useEpisode = false; - m_priority = lexical_cast(EPGSearchSetupValues::ReadValue("DefPriority")); - m_lifetime = lexical_cast(EPGSearchSetupValues::ReadValue("DefLifetime")); + m_priority = parse_int(EPGSearchSetupValues::ReadValue("DefPriority")); + m_lifetime = parse_int(EPGSearchSetupValues::ReadValue("DefLifetime")); m_fuzzytolerance = 1; m_useInFavorites = false; m_useAsSearchtimer = 0; @@ -68,8 +68,8 @@ void SearchTimer::Init() m_switchMinBefore = 1; m_useExtEPGInfo = false; m_useVPS = false; - m_marginstart = lexical_cast(EPGSearchSetupValues::ReadValue("DefMarginStart")); - m_marginstop = lexical_cast(EPGSearchSetupValues::ReadValue("DefMarginStop")); + m_marginstart = parse_int(EPGSearchSetupValues::ReadValue("DefMarginStart")); + m_marginstop = parse_int(EPGSearchSetupValues::ReadValue("DefMarginStop")); m_avoidrepeats = false; m_allowedrepeats = 0; m_compareTitle = false; @@ -95,55 +95,55 @@ SearchTimer::SearchTimer( std::string const& data ) std::vector::const_iterator part = parts.begin(); for ( int i = 0; part != parts.end(); ++i, ++part ) { switch ( i ) { - case 0: m_id = lexical_cast( *part ); break; + case 0: m_id = parse_int( *part ); break; case 1: m_search = StringReplace( StringReplace( *part, "|", ":" ), "!^pipe^!", "|" ); break; case 2: m_useTime = lexical_cast( *part ); break; - case 3: if ( m_useTime ) m_startTime = lexical_cast( *part ); break; - case 4: if ( m_useTime ) m_stopTime = lexical_cast( *part ); break; - case 5: m_useChannel = lexical_cast( *part ); break; + case 3: if ( m_useTime ) m_startTime = parse_int( *part ); break; + case 4: if ( m_useTime ) m_stopTime = parse_int( *part ); break; + case 5: m_useChannel = parse_int( *part ); break; case 6: ParseChannel( *part ); break; - case 7: m_useCase = lexical_cast( *part ); break; - case 8: m_mode = lexical_cast( *part ); break; + case 7: m_useCase = parse_int( *part ); break; + case 8: m_mode = parse_int( *part ); break; case 9: m_useTitle = lexical_cast( *part ); break; case 10: m_useSubtitle = lexical_cast( *part ); break; case 11: m_useDescription = lexical_cast( *part ); break; case 12: m_useDuration = lexical_cast( *part ); break; - case 13: if ( m_useDuration ) m_minDuration = lexical_cast( *part ); break; - case 14: if ( m_useDuration ) m_maxDuration = lexical_cast( *part ); break; - case 15: m_useAsSearchtimer = lexical_cast( *part ); break; + case 13: if ( m_useDuration ) m_minDuration = parse_int( *part ); break; + case 14: if ( m_useDuration ) m_maxDuration = parse_int( *part ); break; + case 15: m_useAsSearchtimer = parse_int( *part ); break; case 16: m_useDayOfWeek = lexical_cast( *part ); break; - case 17: m_dayOfWeek = lexical_cast( *part ); break; + case 17: m_dayOfWeek = parse_int( *part ); break; case 18: m_useEpisode = lexical_cast( *part ); break; case 19: m_directory = StringReplace( StringReplace( *part, "|", ":" ), "!^pipe^!", "|" ); break; - case 20: m_priority = lexical_cast( *part ); break; - case 21: m_lifetime = lexical_cast( *part ); break; - case 22: m_marginstart = lexical_cast( *part ); break; - case 23: m_marginstop = lexical_cast( *part ); break; + case 20: m_priority = parse_int( *part ); break; + case 21: m_lifetime = parse_int( *part ); break; + case 22: m_marginstart = parse_int( *part ); break; + case 23: m_marginstop = parse_int( *part ); break; case 24: m_useVPS = lexical_cast( *part ); break; - case 25: m_action = lexical_cast( *part ); break; + case 25: m_action = parse_int( *part ); break; case 26: m_useExtEPGInfo = lexical_cast( *part ); break; case 27: ParseExtEPGInfo( *part ); break; case 28: m_avoidrepeats = lexical_cast( *part ); break; - case 29: m_allowedrepeats = lexical_cast( *part ); break; + case 29: m_allowedrepeats = parse_int( *part ); break; case 30: m_compareTitle = lexical_cast( *part ); break; - case 31: m_compareSubtitle = lexical_cast( *part ); break; + case 31: m_compareSubtitle = parse_int( *part ); break; case 32: m_compareSummary = lexical_cast( *part ); break; - case 33: m_catvaluesAvoidRepeat = lexical_cast< long >( *part ); break; - case 34: m_repeatsWithinDays = lexical_cast( *part ); break; - case 35: m_delAfterDays = lexical_cast( *part ); break; - case 36: m_recordingsKeep = lexical_cast( *part ); break; - case 37: m_switchMinBefore = lexical_cast( *part ); break; - case 38: m_pauseOnNrRecordings = lexical_cast( *part ); break; - case 39: m_blacklistmode = lexical_cast( *part ); break; + case 33: m_catvaluesAvoidRepeat = parse_int< unsigned long >( *part ); break; + case 34: m_repeatsWithinDays = parse_int( *part ); break; + case 35: m_delAfterDays = parse_int( *part ); break; + case 36: m_recordingsKeep = parse_int( *part ); break; + case 37: m_switchMinBefore = parse_int( *part ); break; + case 38: m_pauseOnNrRecordings = parse_int( *part ); break; + case 39: m_blacklistmode = parse_int( *part ); break; case 40: ParseBlacklist( *part ); break; - case 41: m_fuzzytolerance = lexical_cast( *part ); break; + case 41: m_fuzzytolerance = parse_int( *part ); break; case 42: m_useInFavorites = lexical_cast( *part ); break; - case 43: m_menuTemplate = lexical_cast( *part ); break; - case 44: m_delMode = lexical_cast( *part ); break; - case 45: m_delAfterCountRecs = lexical_cast( *part ); break; - case 46: m_delAfterDaysOfFirstRec = lexical_cast( *part ); break; - case 47: m_useAsSearchTimerFrom = lexical_cast( *part ); break; - case 48: m_useAsSearchTimerTil = lexical_cast( *part ); break; + case 43: m_menuTemplate = parse_int( *part ); break; + case 44: m_delMode = parse_int( *part ); break; + case 45: m_delAfterCountRecs = parse_int( *part ); break; + case 46: m_delAfterDaysOfFirstRec = parse_int( *part ); break; + case 47: m_useAsSearchTimerFrom = parse_int( *part ); break; + case 48: m_useAsSearchTimerTil = parse_int( *part ); break; case 49: m_ignoreMissingEPGCats = lexical_cast( *part ); break; } } @@ -275,10 +275,10 @@ std::string SearchTimer::ToText() void SearchTimer::ParseChannel( std::string const& data ) { switch ( m_useChannel ) { - case NoChannel: m_channels = tr("All"); break; - case Interval: ParseChannelIDs( data ); break; - case Group: m_channels = data; break; - case FTAOnly: m_channels = tr("FTA"); break; + case NoChannel: m_channels = tr("All"); break; + case Interval: ParseChannelIDs( data ); break; + case Group: m_channels = data; break; + case FTAOnly: m_channels = tr("FTA"); break; } } @@ -287,12 +287,8 @@ void SearchTimer::ParseChannelIDs( std::string const& data ) std::vector parts = StringSplit( data, '|' ); m_channelMin = lexical_cast( parts[ 0 ] ); -#if VDRVERSNUM >= 20301 LOCK_CHANNELS_READ; cChannel const* channel = Channels->GetByChannelID( m_channelMin ); -#else - cChannel const* channel = Channels.GetByChannelID( m_channelMin ); -#endif if ( channel != 0 ) m_channels = channel->Name(); @@ -401,11 +397,9 @@ bool SearchTimers::Save(SearchTimer* searchtimer) SearchTimer* SearchTimers::GetByTimerId( std::string const& id ) { - for (SearchTimers::iterator timer = m_timers.begin(); timer != m_timers.end(); ++timer) - if (timer->Id() == lexical_cast(id)) - return &*timer; - return NULL; - + for (SearchTimers::iterator timer = m_timers.begin(); timer != m_timers.end(); ++timer) + if (timer->Id() == parse_int(id)) return &*timer; + return NULL; } bool SearchTimers::ToggleActive(std::string const& id) @@ -425,7 +419,7 @@ bool SearchTimers::Delete(std::string const& id) if ( !CheckEpgsearchVersion() || cPluginManager::CallFirstService(ServiceInterface, &service) == 0 ) throw HtmlError( tr("EPGSearch version outdated! Please update.") ); - if (service.handler->DelSearchTimer(lexical_cast( id ))) + if (service.handler->DelSearchTimer(parse_int( id ))) return Reload(); return false; } @@ -447,23 +441,20 @@ bool SearchTimer::BlacklistSelected(int id) const ExtEPGInfo::ExtEPGInfo( std::string const& data ) { - m_id = -1; - m_searchmode = 0; - - std::vector parts = StringSplit( data, '|' ); - try { - std::vector::const_iterator part = parts.begin(); - for ( int i = 0; part != parts.end(); ++i, ++part ) { - switch ( i ) { - case 0: m_id = lexical_cast( *part ); break; - case 1: m_name = *part; break; - case 2: m_menuname = *part; break; - case 3: ParseValues( *part ); break; - case 4: m_searchmode = lexical_cast( *part ); break; - } - } - } catch ( bad_lexical_cast const& ex ) { - } + m_id = -1; + m_searchmode = 0; + + std::vector parts = StringSplit( data, '|' ); + std::vector::const_iterator part = parts.begin(); + for ( int i = 0; part != parts.end(); ++i, ++part ) { + switch ( i ) { + case 0: m_id = parse_int( *part ); break; + case 1: m_name = *part; break; + case 2: m_menuname = *part; break; + case 3: ParseValues( *part ); break; + case 4: m_searchmode = parse_int( *part ); break; + } + } } void ExtEPGInfo::ParseValues( std::string const& data ) @@ -529,7 +520,7 @@ Blacklist::Blacklist( std::string const& data ) std::vector::const_iterator part = parts.begin(); for ( int i = 0; part != parts.end(); ++i, ++part ) { switch ( i ) { - case 0: m_id = lexical_cast( *part ); break; + case 0: m_id = parse_int( *part ); break; case 1: m_search = StringReplace( StringReplace( *part, "|", ":" ), "!^pipe^!", "|" ); break; } } @@ -555,18 +546,18 @@ SearchResult::SearchResult( std::string const& data ) std::vector::const_iterator part = parts.begin(); for ( int i = 0; part != parts.end(); ++i, ++part ) { switch ( i ) { - case 0: m_searchId = lexical_cast( *part ); break; - case 1: m_eventId = lexical_cast( *part ); break; + case 0: m_searchId = parse_int( *part ); break; + case 1: m_eventId = parse_int( *part ); break; case 2: m_title = StringReplace( *part, "|", ":" ); break; case 3: m_shorttext = StringReplace( *part, "|", ":" ); break; case 4: m_description = StringReplace( *part, "|", ":" ); break; - case 5: m_starttime = lexical_cast( *part ); break; - case 6: m_stoptime = lexical_cast( *part ); break; + case 5: m_starttime = parse_int( *part ); break; + case 6: m_stoptime = parse_int( *part ); break; case 7: m_channel = lexical_cast( *part ); break; - case 8: m_timerstart = lexical_cast( *part ); break; - case 9: m_timerstop = lexical_cast( *part ); break; + case 8: m_timerstart = parse_int( *part ); break; + case 9: m_timerstop = parse_int( *part ); break; case 10: m_file = *part; break; - case 11: m_timerMode = lexical_cast( *part ); break; + case 11: m_timerMode = parse_int( *part ); break; } } } catch ( bad_lexical_cast const& ex ) { diff --git a/live/css/styles.css b/live/css/styles.css index 5173a511..ce6d7912 100644 --- a/live/css/styles.css +++ b/live/css/styles.css @@ -316,7 +316,8 @@ img.artwork { width: 480px } img.channel_logo { - max-height:32px; max-width:150px; vertical-align:middle; + max-height:32px; max-width:140px; vertical-align:middle; + background-color: #E9EFFF; } /* ############################## # Infowin styles for epg infos @@ -1475,6 +1476,9 @@ img.actor { .hint-tip { max-width: 200px; /* depends on the tip backround image width */ } +img.channel_logo { + max-height:32px; max-width:90px; +} } @media (hover: none) { diff --git a/live/themes/orange-blue/css/theme.css b/live/themes/orange-blue/css/theme.css index eced3b4a..41558eb1 100644 --- a/live/themes/orange-blue/css/theme.css +++ b/live/themes/orange-blue/css/theme.css @@ -246,6 +246,9 @@ div.__progress { div.__progress div.__elapsed { background-color: #FCB840; } +img.channel_logo { + background-color: #FCB840; +} /* ############# diff --git a/live/themes/redwine/css/theme.css b/live/themes/redwine/css/theme.css index 4a3f0332..0512b597 100644 --- a/live/themes/redwine/css/theme.css +++ b/live/themes/redwine/css/theme.css @@ -173,6 +173,9 @@ div.__progress { div.__progress div.__elapsed { background-color: #FFE9FA; } +img.channel_logo { + background-color: #FFE9FA; +} /* diff --git a/live/themes/veltliner/css/theme.css b/live/themes/veltliner/css/theme.css index 01213011..775e7f11 100644 --- a/live/themes/veltliner/css/theme.css +++ b/live/themes/veltliner/css/theme.css @@ -184,6 +184,10 @@ div.__progress { div.__progress div.__elapsed { background-color: #FFCC00; } +img.channel_logo { + background-color: #FFCC00; +} + /* ############# diff --git a/pages/channels_widget.ecpp b/pages/channels_widget.ecpp index da147f4d..6161fc59 100644 --- a/pages/channels_widget.ecpp +++ b/pages/channels_widget.ecpp @@ -2,6 +2,7 @@ #include #include +#include #if VDRVERSNUM < 20300 #include // ReadLock @@ -41,6 +42,6 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); % continue; % % std::string listChannelId = *listChannel->GetChannelID().ToString(); - + % } diff --git a/pages/delete_recording.ecpp b/pages/delete_recording.ecpp index 90a6a50b..5455ed66 100644 --- a/pages/delete_recording.ecpp +++ b/pages/delete_recording.ecpp @@ -26,7 +26,7 @@ using namespace vdrlive; throw HtmlError( tr("Sorry, no permission. Please contact your administrator!") ); } - bool ajaxReq = !async.empty() && (lexical_cast(async) != 0); + bool ajaxReq = !async.empty() && (parse_int(async) != 0); std::string referrer; if (ajaxReq) { diff --git a/pages/edit_recording.ecpp b/pages/edit_recording.ecpp index 5b99ca84..a5e5f870 100644 --- a/pages/edit_recording.ecpp +++ b/pages/edit_recording.ecpp @@ -41,7 +41,7 @@ const cRecording* recording; if (!cUser::CurrentUserHasRightTo(UR_EDITRECS)) throw HtmlError( tr("Sorry, no permission. Please contact your administrator!") ); - bool ajaxReq = !async.empty() && (lexical_cast(async) != 0); + bool ajaxReq = !async.empty() && (parse_int(async) != 0); std::string message; diff --git a/pages/edit_searchtimer.ecpp b/pages/edit_searchtimer.ecpp index fbae1294..6a662964 100644 --- a/pages/edit_searchtimer.ecpp +++ b/pages/edit_searchtimer.ecpp @@ -344,10 +344,10 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); usetitle = true; usesubtitle = true; usedescr = true; - priority = lexical_cast(EPGSearchSetupValues::ReadValue("DefPriority")); - lifetime = lexical_cast(EPGSearchSetupValues::ReadValue("DefLifetime")); - marginstart = lexical_cast(EPGSearchSetupValues::ReadValue("DefMarginStart")); - marginstop = lexical_cast(EPGSearchSetupValues::ReadValue("DefMarginStop")); + priority = parse_int(EPGSearchSetupValues::ReadValue("DefPriority")); + lifetime = parse_int(EPGSearchSetupValues::ReadValue("DefLifetime")); + marginstart = parse_int(EPGSearchSetupValues::ReadValue("DefMarginStart")); + marginstop = parse_int(EPGSearchSetupValues::ReadValue("DefMarginStop")); } <& pageelems.doc_type &> diff --git a/pages/edit_timer.ecpp b/pages/edit_timer.ecpp index b18210ab..21e622bb 100644 --- a/pages/edit_timer.ecpp +++ b/pages/edit_timer.ecpp @@ -60,7 +60,7 @@ const cTimer* timer; if (!cUser::CurrentUserHasRightTo(UR_EDITTIMERS)) throw HtmlError( tr("Sorry, no permission. Please contact your administrator!") ); - bool ajaxReq = !async.empty() && (lexical_cast(async) != 0); + bool ajaxReq = !async.empty() && (parse_int(async) != 0); tChannelID channelid = tChannelID(); tEventID eventid = tEventID(); diff --git a/pages/epginfo.ecpp b/pages/epginfo.ecpp index 62d2580b..8e1a119e 100644 --- a/pages/epginfo.ecpp +++ b/pages/epginfo.ecpp @@ -55,7 +55,7 @@ using namespace vdrlive; pageTitle = tr("Electronic program guide information"); - bool ajaxReq = !async.empty() && (lexical_cast(async) != 0); + bool ajaxReq = !async.empty() && (parse_int(async) != 0); bool aboutBox = false; if (epgid.compare(0, 4, "del_") == 0) { diff --git a/pages/multischedule.ecpp b/pages/multischedule.ecpp index 5e6ce571..6a97f23b 100644 --- a/pages/multischedule.ecpp +++ b/pages/multischedule.ecpp @@ -137,7 +137,7 @@ std::vector times_start; thisGroup.erase( 0, channelSep+1 ); else thisGroup = ""; - int channel_no = lexical_cast< int > (thisChannel); + int channel_no = parse_int< int > (thisChannel); #if VDRVERSNUM >= 20301 cChannel* Channel = (cChannel *)Channels->GetByNumber( channel_no ); #else @@ -236,7 +236,7 @@ std::vector times_start; continue; } std::string min = (*part).substr(sep+1, (*part).npos ); - offsets.push_back( lexical_cast( hour )*60*60 + lexical_cast( min ) *60 ); + offsets.push_back( parse_int( hour )*60*60 + parse_int( min ) *60 ); } catch ( const bad_lexical_cast & ) { esyslog("live: Error parsing time '%s'", part->c_str() ); @@ -326,7 +326,7 @@ std::vector times_start; time_t sched_start = (times_start[ time_para ]/300)*300; time_t max_hours; try { - max_hours = lexical_cast( LiveSetup().GetScheduleDuration() ); + max_hours = parse_int( LiveSetup().GetScheduleDuration() ); } catch ( const bad_lexical_cast & ) { diff --git a/pages/pageelems.ecpp b/pages/pageelems.ecpp index 5b64c91f..d675be66 100644 --- a/pages/pageelems.ecpp +++ b/pages/pageelems.ecpp @@ -21,15 +21,17 @@ std::string toString(const std::vector &vec) { return result; } +/* std::string toString(const std::vector &vec) { if (vec.size() == 0) return ""; std::string result; for (const int &i:vec) { if (!result.empty() ) result.append(", "); - result.append(std::to_string(i) ); + result.append(cToSvInt(i) ); } return result; } +*/ std::string toString(const std::vector &vec) { if (vec.size() == 0) return ""; @@ -843,22 +845,19 @@ if (scraperMovieOrTv.found) { } if (episodeFound) { -
<$ tr("Episode:") $> S<$ std::to_string(scraperMovieOrTv.episode.season ) $>E<$ (scraperMovieOrTv.episode.number ) $><$scraperMovieOrTv.episode.absoluteNumber?"A" + std::to_string(scraperMovieOrTv.episode.absoluteNumber):""$> <$ (scraperMovieOrTv.episode.name ) $>
+
<$ tr("Episode:") $> S<$ cSv(cToSvInt(scraperMovieOrTv.episode.season )) $>E<$ cSv(cToSvInt(scraperMovieOrTv.episode.number)) $><$scraperMovieOrTv.episode.absoluteNumber?concat("A", cToSvInt(scraperMovieOrTv.episode.absoluteNumber)):""$> <$ scraperMovieOrTv.episode.name $>
<$ tr("Episode overview:") $> <$ (scraperMovieOrTv.episode.overview ) $>
<%cpp> if (scraperMovieOrTv.episode.vote_average != 0 ) { -
<$ tr("Episode vote average/count:") $> <$ (scraperMovieOrTv.episode.vote_average ) $> / <$ (scraperMovieOrTv.episode.vote_count ) $>
+
<$ tr("Episode vote average/count:") $> <$ (scraperMovieOrTv.episode.vote_average) $> / <$ (scraperMovieOrTv.episode.vote_count ) $>
<%cpp> }
<$ tr("Episode first aired:") $> <$ (scraperMovieOrTv.episode.firstAired ) $>
% if (scraperMovieOrTv.episode.runtime > 0) { -
<$ tr("Episode runtime:") $> <$ (scraperMovieOrTv.episode.runtime ) $>
+
<$ tr("Episode runtime:") $> <$ FormatDuration(tr("%d:%02d"), scraperMovieOrTv.episode.runtime*60) $>
% } -<# -
episode Image Url: <$ (scraperMovieOrTv.episode.episodeImageUrl ) $>
-#> % if (!scraperMovieOrTv.episode.IMDB_ID.empty() ) { <$ tr("IMDB episode") $> <%cpp> @@ -900,21 +899,15 @@ if (scraperMovieOrTv.found) { if (!scraperMovieOrTv.tagline.empty() ) {
<$ tr("Tagline:") $> <$ (scraperMovieOrTv.tagline ) $>
-<%cpp> - } - +% }
<$ tr("Overview:") $> <$ (scraperMovieOrTv.overview ) $>
<$ tr("Genres:") $> <$ toString(scraperMovieOrTv.genres ) $>
-<%cpp> - if (!scraperMovieOrTv.homepage.empty() ) { - +% if (!scraperMovieOrTv.homepage.empty() ) { -<%cpp> - } - +% }
<$ tr("Release date:") $> <$ (scraperMovieOrTv.releaseDate ) $>
% if (scraperMovieOrTv.runtime > 0) { -
<$ tr("Runtime:") $> <$ std::to_string(scraperMovieOrTv.runtime) $>
+
<$ tr("Runtime:") $> <$ FormatDuration(tr("%d:%02d"), scraperMovieOrTv.runtime*60) $>
% } <%cpp> if (scraperMovieOrTv.popularity != 0) { @@ -924,7 +917,7 @@ if (scraperMovieOrTv.found) { } if (scraperMovieOrTv.voteAverage != 0) { -
<$ tr("Vote average/count:") $> <$ (scraperMovieOrTv.voteAverage ) $> / <$ (scraperMovieOrTv.voteCount ) $>
+
<$ tr("Vote average/count:") $> <$ (scraperMovieOrTv.voteAverage ) $> / <$ (scraperMovieOrTv.voteCount) $>
<%cpp> } diff --git a/pages/playlist.ecpp b/pages/playlist.ecpp index 1f68a722..d617bb37 100644 --- a/pages/playlist.ecpp +++ b/pages/playlist.ecpp @@ -53,10 +53,10 @@ using namespace vdrlive; if (Channel != 0) { std::string channelname = Channel->Name(); int streamdevPort = LiveSetup().GetStreamdevPort(); - videourl = std::string("#EXTM3U\n#EXTINF:-1,") + channelname + "\nhttp://" + server + ":" + lexical_cast(streamdevPort) + "/" + LiveSetup().GetStreamdevType() + "/" + *Channel->GetChannelID().ToString(); + videourl = concat("#EXTM3U\n#EXTINF:-1,", channelname, "\nhttp://", server, ":", cToSvInt(streamdevPort), "/", LiveSetup().GetStreamdevType(), "/", *Channel->GetChannelID().ToString()); } else { - videourl = std::string("#EXTM3U\n#EXTINF:-1\nhttp://") + server + ":" + lexical_cast(LiveSetup().GetServerPort()) + "/recstream.html?recid=" + recid; + videourl = concat("#EXTM3U\n#EXTINF:-1\nhttp://", server, ":", cToSvInt(LiveSetup().GetServerPort()), "/recstream.html?recid=", recid); } <& playlist.m3u videourl=(videourl) &> diff --git a/pages/schedule.ecpp b/pages/schedule.ecpp index ff2ad2ff..81301303 100644 --- a/pages/schedule.ecpp +++ b/pages/schedule.ecpp @@ -215,7 +215,7 @@ if(recItemFound) { <%def channel_selection>
- + <& channels_widget name=("channel") selected=(Channel ? *Channel->GetChannelID().ToString() : "") onchange=("document.forms.channels.submit()") &> % if (cDevice::PrimaryDevice() && cDevice::PrimaryDevice()->HasDecoder() ) { <& pageelems.ajax_action_href action="switch_channel" tip=(tr("Switch to this channel.")) param=(Channel->GetChannelID()) image="zap.png" alt="" &> diff --git a/pages/searchresults.ecpp b/pages/searchresults.ecpp index 807c3c73..9243dc7b 100644 --- a/pages/searchresults.ecpp +++ b/pages/searchresults.ecpp @@ -32,7 +32,7 @@ bool logged_in(false); pageTitle = tr("Search results"); SearchResults results; if (!searchtimerid.empty()) - results.GetByID(lexical_cast< int >(searchtimerid)); + results.GetByID(parse_int< int >(searchtimerid)); if (!searchtimerquery.empty()) results.GetByQuery(SearchResults::PopQuery(searchtimerquery)); if (!searchplain.empty()) diff --git a/pages/setup.ecpp b/pages/setup.ecpp index 3b10f600..238b58ae 100644 --- a/pages/setup.ecpp +++ b/pages/setup.ecpp @@ -1,6 +1,7 @@ <%pre> #include +#include #include #include #include @@ -53,7 +54,7 @@ if (!cUser::CurrentUserHasRightTo(UR_EDITSETUP)) message = tr("Please set login and password!"); else { - LiveSetup().SetLastChannel(lastchannel != "" ? lexical_cast< int >(lastchannel):0); + LiveSetup().SetLastChannel(lastchannel != "" ? parse_int(lastchannel):0); LiveSetup().SetUseAuth(useauth); if (useauth) { LiveSetup().SetAdminLogin(login); @@ -70,7 +71,7 @@ if (!cUser::CurrentUserHasRightTo(UR_EDITSETUP)) LiveSetup().SetShowLogo(!showLogo.empty()); LiveSetup().SetShowInfoBox(!showInfoBox.empty()); LiveSetup().SetUseStreamdev(!useStreamdev.empty()); - LiveSetup().SetStreamdevPort(streamdevport.empty() ? 3000 : lexical_cast(streamdevport)); + LiveSetup().SetStreamdevPort(streamdevport.empty() ? 3000 : parse_int(streamdevport)); LiveSetup().SetStreamdevType(streamdevtype.empty() ? "PES" : streamdevtype); LiveSetup().SetMarkNewRec(!markNewRec.empty()); @@ -94,7 +95,7 @@ if (!cUser::CurrentUserHasRightTo(UR_EDITSETUP)) if (ilastchannel == std::numeric_limits< int >::max()) lastchannel = ""; else - lastchannel = lexical_cast(ilastchannel); + lastchannel = std::string(cToSvInt(ilastchannel)); login = LiveSetup().GetAdminLogin(); useauth = LiveSetup().GetUseAuth(); @@ -107,7 +108,7 @@ if (!cUser::CurrentUserHasRightTo(UR_EDITSETUP)) showLogo = LiveSetup().GetShowLogo() ? "1" : ""; showInfoBox = LiveSetup().GetShowInfoBox() ? "1" : ""; useStreamdev = LiveSetup().GetUseStreamdev() ? "1" : ""; - streamdevport = lexical_cast(LiveSetup().GetStreamdevPort()); + streamdevport = std::string(cToSvInt(LiveSetup().GetStreamdevPort())); streamdevtype = LiveSetup().GetStreamdevType(); markNewRec = LiveSetup().GetMarkNewRec() ? "1" : ""; streamVideoOpt0 = LiveSetup().GetStreamVideoOpt0(); diff --git a/pages/stream.ecpp b/pages/stream.ecpp index 19aacfc2..4d48d77f 100644 --- a/pages/stream.ecpp +++ b/pages/stream.ecpp @@ -39,28 +39,14 @@ using namespace vdrlive; return reply.redirect(""); } -#if VDRVERSNUM < 20301 - ReadLock channelsLock( Channels ); - if ( !channelsLock ) - throw HtmlError( tr("Couldn't aquire access to channels, please try again later.") ); -#endif - if ( qparam.has("channelid_str") ) { -#if VDRVERSNUM >= 20301 LOCK_CHANNELS_READ; cChannel *c = (cChannel *)Channels->GetByChannelID( channelid ); -#else - cChannel *c = Channels.GetByChannelID( channelid ); -#endif if ( c ) channel = c->Number(); } if ( channel > 0 ) { -#if VDRVERSNUM >= 20301 LOCK_CHANNELS_READ; Channel = (cChannel *)Channels->GetByNumber( channel ); -#else - Channel = Channels.GetByNumber( channel ); -#endif } if ( Channel == 0 ) throw HtmlError( tr("Couldn't find channel or no channels available. Maybe you mistyped your request?") ); @@ -109,7 +95,7 @@ using namespace vdrlive;