Compare commits

...
Sign in to create a new pull request.

4 commits

Author SHA1 Message Date
Martin Gansser
2fe9da95bc Rebuilt 2023-01-24 13:40:27 +01:00
Martin Gansser
83c82f1247 Update to 3.1.11 2023-01-18 09:33:19 +01:00
Martin Gansser
d37848509b Update to 3.1.10 2022-12-26 11:19:26 +01:00
Martin Gansser
7421fb5e04 Updatae to 3.1.9 2022-11-27 18:48:58 +01:00
3 changed files with 32 additions and 390 deletions

View file

@ -1 +1 @@
SHA512 (vdr-live-3.1.8.tar.gz) = 1f89e1b782ea258726e3cf6cf236a029937ba5df10ce04b6142084afd0912d5513efe601e9a82bd69a5fd5355d23036b90d0399bac616aed666ac00c062d5c9d
SHA512 (vdr-live-3.1.11.tar.gz) = f9b0bf16708fb21959bbefcd3d8d28f765670b1a10540cf3187a8a3506b5ad259830f1841c7cfd5fa050ae927c24003b70ac8aee98cdd2fa83fd22b390227489

View file

@ -3,18 +3,15 @@
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%global gitdate 20211228
# version we want build against
%global vdr_version 2.4.0
%if 0%{?fedora} >= 36
%global vdr_version 2.6.1
%endif
%if 0%{?fedora} == 35
%global vdr_version 2.4.7
%if 0%{?fedora} >= 38
%global vdr_version 2.6.3
%endif
Name: vdr-live
Version: 3.1.8
Version: 3.1.11
#Release: 0.4.%%{gitdate}git%%{shortcommit0}%%{?dist}
Release: 1%{?dist}
Release: 3%{?dist}
Summary: An interactive web interface with HTML5 live stream support for VDR
# The entire source code is GPLv2+ except live/js/mootools/ which is MIT
@ -64,11 +61,7 @@ rm -rf httpd
iconv -f iso-8859-1 -t utf-8 README > README.utf8 ; mv README.utf8 README
%build
%if 0%{?fedora} > 35
%make_build CFLAGS="%{optflags} -fPIC" CXXFLAGS="%{optflags} -fPIC"
%else
%make_build CFLAGS="%{optflags} -fPIC" CXXFLAGS="%{optflags} -std=gnu++11 -fPIC"
%endif
%install
%make_install
@ -89,6 +82,33 @@ install -Dpm 644 %{SOURCE1} \
%{vdr_resdir}/plugins/live/
%changelog
* Tue Jan 24 2023 Martin Gansser <martinkg@fedoraproject.org> - 3.1.11-3
- Rebuilt
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.1.11-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Jan 18 2023 Martin Gansser <martinkg@fedoraproject.org> - 3.1.11-1
- Update to 3.1.11
* Fri Jan 06 2023 Martin Gansser <martinkg@fedoraproject.org> - 3.1.10-2
- Rebuilt
* Mon Dec 26 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.10-1
- Update to 3.1.10
* Wed Dec 14 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.9-3
- Rebuilt for new VDR API version
* Thu Dec 01 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.9-2
- Rebuilt for new VDR API version
* Sun Nov 27 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.9-1
- Updatae to 3.1.9
* Thu Nov 17 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.8-2
- Rebuilt due undefined symbol: _ZN7vdrlive6cUsers14logged_in_userB5cxx11E
* Mon Oct 10 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.8-1
- Updatae to 3.1.8

View file

@ -1,378 +0,0 @@
diff -Naur vdr-plugin-live-3.0.10/pages/searchresults.ecpp vdr-plugin-live-master/pages/searchresults.ecpp
--- vdr-plugin-live-3.0.10/pages/searchresults.ecpp 2021-07-18 14:51:47.000000000 +0200
+++ vdr-plugin-live-master/pages/searchresults.ecpp 2021-09-10 14:11:46.000000000 +0200
@@ -62,53 +62,60 @@
<%cpp>
std::string current_day = "";
-#if VDRVERSNUM >= 20301
- LOCK_CHANNELS_READ;
-#endif
for (SearchResults::iterator result = results.begin(); result != results.end(); ++result) {
#if VDRVERSNUM >= 20301
- cChannel* channel = (cChannel *)Channels->GetByChannelID(result->Channel());
+ cStateKey StateKey;
+ if (const cChannels *Channels = cChannels::GetChannelsRead(StateKey)) {
+ #ifdef DEBUG_LOCK
+ dsyslog("live: pages/searchresults.ecpp LOCK_CHANNELS_READ");
+ #endif
+ cChannel* channel = (cChannel *)Channels->GetByChannelID(result->Channel());
#else
cChannel* channel = Channels.GetByChannelID(result->Channel());
#endif
- if (!channel) continue;
- std::string channelname = channel->Name();
- int channelnr = channel->Number();
- std::string start(result->StartTime() ? FormatDateTime(tr("%I:%M %p"), result->StartTime()) : "");
- std::string end(result->StopTime() ? FormatDateTime(tr("%I:%M %p"), result->StopTime()) : "");
- std::string day(result->StartTime() ? FormatDateTime(tr("%A, %b %d %Y"), result->StartTime()) : "");
- std::string description = result->Description();
- std::string epgid = EpgEvents::EncodeDomId(result->Channel(), result->EventId());
+ if (!channel) {
+ StateKey.Remove();
+ continue;
+ }
+ std::string channelname = channel->Name();
+ int channelnr = channel->Number();
+ std::string start(result->StartTime() ? FormatDateTime(tr("%I:%M %p"), result->StartTime()) : "");
+ std::string end(result->StopTime() ? FormatDateTime(tr("%I:%M %p"), result->StopTime()) : "");
+ std::string day(result->StartTime() ? FormatDateTime(tr("%A, %b %d %Y"), result->StartTime()) : "");
+ std::string description = result->Description();
+ std::string epgid = EpgEvents::EncodeDomId(result->Channel(), result->EventId());
- bool truncated = false;
+ bool truncated = false;
- bool bottom = false;
- SearchResults::iterator nextResult = result; ++nextResult;
- if (nextResult == results.end())
- bottom = true;
- else {
- std::string nextDay(nextResult->StartTime() ? FormatDateTime(tr("%A, %b %d %Y"), nextResult->StartTime()) : "");
- bottom = (day != nextDay);
- }
+ bool bottom = false;
+ SearchResults::iterator nextResult = result; ++nextResult;
+ if (nextResult == results.end())
+ bottom = true;
+ else {
+ std::string nextDay(nextResult->StartTime() ? FormatDateTime(tr("%A, %b %d %Y"), nextResult->StartTime()) : "");
+ bottom = (day != nextDay);
+ }
- if (current_day != day) {
- if (current_day != "") {
+ if (current_day != day) {
+ if (current_day != "") {
</%cpp>
- <tr class="spacer">
- <td colspan="4"/>
- </tr>
+ <tr class="spacer">
+ <td colspan="4"/>
+ </tr>
+% }
+ <tr class="head">
+ <td colspan="4"><div class="boxheader"><div><div><$ day $></div></div></div></td>
+ </tr>
+% current_day = day;
% }
- <tr class="head">
- <td colspan="4"><div class="boxheader"><div><div><$ day $></div></div></div></td>
- </tr>
-% current_day = day;
+% StateKey.Remove(); // release channels read lock before calling event_timer which make a timers read lock
+ <tr>
+ <td class="action leftcol <? bottom ? "bottomrow"?>"><& pageelems.event_timer epgid=(epgid) &></td>
+ <td class="topaligned <? bottom ? "bottomrow"?>"><div class="withmargin"><a href="schedule.html?channel=<$ channelnr $>"><$ channelname $></a></div></td>
+ <td class="topaligned <? bottom ? "bottomrow"?>"><div class="withmargin nowrap"><$ start $> - <$ end $></div></td>
+ <td class="topaligned rightcol <? bottom ? "bottomrow"?>"><div class="more withmargin"><a <& tooltip.hint text=(StringEscapeAndBreak(StringWordTruncate(description, 300, truncated)) + "<br />" + tr("Click to view details.")) &><& tooltip.display domId=(epgid) &>><span class="title"><$ result->Title() $></span><br /><span class="short"><%cpp>if (result->ShortText().empty()) { </%cpp>&nbsp;<%cpp> } </%cpp><$ result->ShortText() $></span></a></div></td>
+ </tr>
% }
- <tr>
- <td class="action leftcol <? bottom ? "bottomrow"?>"><& pageelems.event_timer epgid=(epgid) &></td>
- <td class="topaligned <? bottom ? "bottomrow"?>"><div class="withmargin"><a href="schedule.html?channel=<$ channelnr $>"><$ channelname $></a></div></td>
- <td class="topaligned <? bottom ? "bottomrow"?>"><div class="withmargin nowrap"><$ start $> - <$ end $></div></td>
- <td class="topaligned rightcol <? bottom ? "bottomrow"?>"><div class="more withmargin"><a <& tooltip.hint text=(StringEscapeAndBreak(StringWordTruncate(description, 300, truncated)) + "<br />" + tr("Click to view details.")) &><& tooltip.display domId=(epgid) &>><span class="title"><$ result->Title() $></span><br /><span class="short"><%cpp>if (result->ShortText().empty()) { </%cpp>&nbsp;<%cpp> } </%cpp><$ result->ShortText() $></span></a></div></td>
- </tr>
% }
</table>
</div>
diff -Naur vdr-plugin-live-3.0.10/pages/timers.ecpp vdr-plugin-live-master/pages/timers.ecpp
--- vdr-plugin-live-3.0.10/pages/timers.ecpp 2021-07-18 14:51:47.000000000 +0200
+++ vdr-plugin-live-master/pages/timers.ecpp 2021-09-10 14:11:46.000000000 +0200
@@ -37,7 +37,7 @@
timer = 0;
if ( !timerid.empty() ) {
std::string tId = SortedTimers::DecodeDomId(timerid);
- // dsyslog("live: DEBUG: TIMER: tId = %s", tId.c_str());
+// dsyslog("live: DEBUG: TIMER: tId = %s", tId.c_str());
timer = timers.GetByTimerId(tId);
if ( timer == 0 )
throw HtmlError( tr("Couldn't find timer. Maybe you mistyped your request?") );
@@ -70,25 +70,26 @@
<& pageelems.logo &>
<& menu active=("timers") component=("timers.timer_actions")>
<div class="inhalt">
-% if (timers.size() == 0) {
+<%cpp>
+ #ifdef DEBUG_LOCK
+ dsyslog("live: pages/timers.ecpp LOCK_TIMERS_READ");
+ #endif
+ LOCK_TIMERS_READ;
+ cSortedTimers sortedTimers(Timers);
+ if (sortedTimers.Size() == 0) {
+</%cpp>
<$ tr("No timer defined") $>
% } else {
<table class="listing" cellspacing="0" cellpadding="0">
<%cpp>
// output of the timer list:
- for (SortedTimers::iterator timer = timers.begin(); timer != timers.end(); ++timer) {
- EpgInfoPtr epgEvent;
+ for (int i = 0; i < sortedTimers.Size(); i++) {
+ const cTimer *timer = sortedTimers[i];
+ EpgInfoPtr epgEvent;
std::string longDescription;
std::string searchTimName;
std::string searchTimId;
-#if VDRVERSNUM >= 20301
- if (!timer->Event()) {
- LOCK_SCHEDULES_READ;
- timer->SetEventFromSchedule(Schedules);
- }
-#else
- if (!timer->Event()) timer->SetEventFromSchedule();
-#endif
+
if (timer->Event())
{
epgEvent = EpgEvents::CreateEpgInfo(timer->Channel(), timer->Event());
@@ -98,13 +99,13 @@
searchTimName = SortedTimers::SearchTimerInfo(*timer, "searchtimer");
searchTimId = SortedTimers::SearchTimerInfo(*timer, "s-id");
}
- std::string currentDay = SortedTimers::GetTimerDays(*timer);
- SortedTimers::iterator nextTimer = timer; ++nextTimer;
+ std::string currentDay = SortedTimers::GetTimerDays(timer);
+ const cTimer *nextTimer = NULL;
+ if (i < (sortedTimers.Size() - 1)) nextTimer = sortedTimers[i + 1];
bool bottom = false;
- if (nextTimer == timers.end())
- bottom = true;
+ if (i == sortedTimers.Size() - 1) bottom = true;
else {
- std::string nextDay = SortedTimers::GetTimerDays(*nextTimer);
+ std::string nextDay = SortedTimers::GetTimerDays(nextTimer);
bottom = (currentDay != nextDay);
}
if (previousDay != currentDay) {
diff -Naur vdr-plugin-live-3.0.10/timers.cpp vdr-plugin-live-master/timers.cpp
--- vdr-plugin-live-3.0.10/timers.cpp 2021-07-18 14:51:47.000000000 +0200
+++ vdr-plugin-live-master/timers.cpp 2021-09-10 14:11:46.000000000 +0200
@@ -11,11 +11,6 @@
#include <vdr/menu.h>
#include <vdr/svdrp.h>
-static bool operator<( cTimer const& left, cTimer const& right )
-{
- return left.Compare( right ) < 0;
-}
-
namespace vdrlive {
static char const* const TIMER_DELETE = "DELETE";
@@ -26,7 +21,6 @@
: m_state( 0 )
#endif
{
- ReloadTimers();
}
std::string SortedTimers::GetTimerId( cTimer const& timer )
@@ -46,6 +40,11 @@
}
#if VDRVERSNUM >= 20301
+ #ifdef DEBUG_LOCK
+ dsyslog("live: timers.cpp SortedTimers::GetByTimerId() LOCK_TIMERS_READ");
+ dsyslog("live: timers.cpp SortedTimers::GetByTimerId() LOCK_CHANNELS_READ");
+ #endif
+ LOCK_TIMERS_READ
LOCK_CHANNELS_READ;
cChannel* channel = (cChannel *)Channels->GetByChannelID( tChannelID::FromString( parts[0].c_str() ) );
#else
@@ -64,7 +63,7 @@
cMutexLock MutexLock(&m_mutex);
- for ( SortedTimers::iterator timer = begin(); timer != end(); ++timer ) {
+ for (cTimer* timer = (cTimer *)Timers->First(); timer; timer = (cTimer *)Timers->Next(timer)) {
if ( timer->Channel() == channel &&
( ( weekdays != 0 && timer->WeekDays() == weekdays ) || ( weekdays == 0 && timer->Day() == day ) ) &&
timer->Start() == start && timer->Stop() == stop )
@@ -94,33 +93,12 @@
}
- void SortedTimers::ReloadTimers()
- {
-// dsyslog("live: SortedTimers::ReloadTimers() reloading timers");
-
- cMutexLock MutexLock(&m_mutex);
-
- clear();
-#if VDRVERSNUM >= 20301
- {
- LOCK_TIMERS_READ;
- for ( cTimer* timer = (cTimer *)Timers->First(); timer; timer = (cTimer *)Timers->Next( timer ) ) {
- push_back( *timer );
- }
- }
-#else
- for ( cTimer* timer = Timers.First(); timer; timer = Timers.Next( timer ) ) {
- push_back( *timer );
- }
-#endif
- sort();
- }
-
- std::string SortedTimers::GetTimerDays(cTimer const& timer)
+ std::string SortedTimers::GetTimerDays(cTimer const *timer)
{
- std::string currentDay = timer.WeekDays() > 0 ?
- *cTimer::PrintDay(0, timer.WeekDays(), true) :
- FormatDateTime(tr("%A, %x"), timer.Day());
+ if (!timer) return "";
+ std::string currentDay = timer->WeekDays() > 0 ?
+ *cTimer::PrintDay(0, timer->WeekDays(), true) :
+ FormatDateTime(tr("%A, %x"), timer->Day());
return currentDay;
}
@@ -269,7 +247,6 @@
if ( m_updateTimers.size() > 0 ) {
DoUpdateTimers();
}
- DoReloadTimers();
// dsyslog("live: SV: signalling waiters");
m_updateWait.Broadcast();
}
@@ -332,6 +309,9 @@
}
#if VDRVERSNUM >= 20301
dsyslog("live: DoInsertTimer() add local timer");
+ #ifdef DEBUG_LOCK
+ dsyslog("live: timers.cpp TimerManager::DoInsertTimer() LOCK_TIMERS_WRITE");
+ #endif
LOCK_TIMERS_WRITE;
Timers->SetExplicitModify();
const cTimer *checkTimer = Timers->GetTimer( newTimer.get() );
@@ -418,6 +398,9 @@
else { // old and new are local
dsyslog("live: DoUpdateTimer() old and new timer are local");
#if VDRVERSNUM >= 20301
+ #ifdef DEBUG_LOCK
+ dsyslog("live: timers.cpp TimerManager::DoUpdateTimer() LOCK_TIMERS_WRITE");
+ #endif
LOCK_TIMERS_WRITE;
Timers->SetExplicitModify();
cTimer* oldTimer = Timers->GetById( timerData.id, timerData.oldRemote );
@@ -494,6 +477,9 @@
#endif
#if VDRVERSNUM >= 20301
+ #ifdef DEBUG_LOCK
+ dsyslog("live: timers.cpp TimerManager::DoDeleteTimer() LOCK_TIMERS_WRITE");
+ #endif
LOCK_TIMERS_WRITE;
Timers->SetExplicitModify();
cTimer* oldTimer = Timers->GetById( timerData.id, timerData.remote );
@@ -527,6 +513,9 @@
void TimerManager::DoToggleTimer( timerStruct& timerData )
{
if ( timerData.remote ) { // toggle remote timer via svdrpsend
+ #ifdef DEBUG_LOCK
+ dsyslog("live: timers.cpp TimerManager::DoToggleTimer() LOCK_TIMERS_READ");
+ #endif
LOCK_TIMERS_READ;
const cTimer* toggleTimer = Timers->GetById( timerData.id, timerData.remote );
std::string command = "MODT ";
@@ -571,6 +560,9 @@
#endif
#if VDRVERSNUM >= 20301
+ #ifdef DEBUG_LOCK
+ dsyslog("live: timers.cpp TimerManager::DoToggleTimer() LOCK_TIMERS_WRITE");
+ #endif
LOCK_TIMERS_WRITE;
Timers->SetExplicitModify();
cTimer* toggleTimer = Timers->GetById( timerData.id, timerData.remote );
@@ -616,20 +608,18 @@
const cTimer* TimerManager::GetTimer(tEventID eventid, tChannelID channelid)
{
cMutexLock timersLock( &LiveTimerManager() );
- SortedTimers& timers = LiveTimerManager().GetTimers();
- for ( SortedTimers::iterator timer = timers.begin(); timer != timers.end(); ++timer )
+ #ifdef DEBUG_LOCK
+ dsyslog("live: timers.cpp TimerManager::GetTimer() LOCK_TIMERS_READ");
+ #endif
+ LOCK_TIMERS_READ;
+ for (cTimer* timer = (cTimer *)Timers->First(); timer; timer = (cTimer *)Timers->Next(timer)) {
if (timer->Channel() && timer->Channel()->GetChannelID() == channelid)
{
-#if VDRVERSNUM >= 20301
- LOCK_SCHEDULES_READ;
- if (!timer->Event()) timer->SetEventFromSchedule(Schedules);
-#else
- if (!timer->Event()) timer->SetEventFromSchedule();
-#endif
if (timer->Event() && timer->Event()->EventID() == eventid)
return &*timer;
}
+ }
return NULL;
}
diff -Naur vdr-plugin-live-3.0.10/timers.h vdr-plugin-live-master/timers.h
--- vdr-plugin-live-3.0.10/timers.h 2021-07-18 14:51:47.000000000 +0200
+++ vdr-plugin-live-master/timers.h 2021-09-10 14:11:46.000000000 +0200
@@ -31,7 +31,7 @@
bool Modified() { return Timers.Modified(m_state); }
#endif
- static std::string GetTimerDays(cTimer const& timer);
+ static std::string GetTimerDays(cTimer const *timer);
static std::string GetTimerInfo(cTimer const& timer);
static std::string SearchTimerInfo(cTimer const& timer, std::string const& value);
@@ -47,7 +47,6 @@
int m_state;
#endif
- void ReloadTimers();
};
class TimerManager: public cMutex
@@ -64,7 +63,6 @@
void ToggleTimerActive( int timerId, const char* remote);
// may only be called from Plugin::MainThreadHook
void DoPendingWork();
- void DoReloadTimers() { m_timers.ReloadTimers(); m_reloadTimers = false; }
const cTimer* GetTimer(tEventID eventid, tChannelID channelid);
void SetReloadTimers() { m_reloadTimers = true; }
diff -Naur vdr-plugin-live-3.0.10/tools.h vdr-plugin-live-master/tools.h
--- vdr-plugin-live-3.0.10/tools.h 2021-07-18 14:51:47.000000000 +0200
+++ vdr-plugin-live-master/tools.h 2021-09-10 14:11:46.000000000 +0200
@@ -1,6 +1,9 @@
#ifndef VDR_LIVE_TOOLS_H
#define VDR_LIVE_TOOLS_H
+// uncomment to debug lock sequence
+// #define DEBUG_LOCK
+
// STL headers need to be before VDR tools.h (included by <vdr/channels.h>)
#include <istream>
#include <sstream>