Compare commits
18 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d3aa60da1 | ||
|
|
62aeaf1678 | ||
|
|
ff7b8cde58 | ||
|
|
298f551a87 | ||
|
|
c0ae7e662e | ||
|
|
4a01d026d0 | ||
|
|
a30bfa71db | ||
|
|
7e377b4f4f | ||
|
|
4872a05ed0 | ||
|
|
0f729baf4e | ||
|
|
d61bc70371 | ||
|
|
0f041d2cfe | ||
|
|
fdac5071de | ||
|
|
07cc04c4bb | ||
|
|
4548c38d50 | ||
|
|
92f225ddd4 | ||
|
|
fb3e161ce2 | ||
|
|
c6c655bf69 |
3 changed files with 453 additions and 14 deletions
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (vdr-live-3.0.4.tar.gz) = 5fcf6cb756c1fde7e1cd7c0a3233bceab687ef7629b8867db0d990af7bf5676151158b77822cf7389a64134f8038da4b3577f014ff675668eb4de7d27380f684
|
||||
SHA512 (vdr-live-3.1.5.tar.gz) = 9a55505a1bcb5b4c5876d6bdf4694435bd35809d38b75da2c3e5d17a09569b5f5b095dc5a8785faac256dfdd1c43bc3435f7f6ea3d8bec04208bcf9ef3b17112
|
||||
|
|
|
|||
|
|
@ -1,24 +1,25 @@
|
|||
# https://github.com/MarkusEh/vdr-plugin-live/commit/c360c989a9d4b794836164ec40d2fb185ceddc0f
|
||||
%global commit0 f6cfefad67e68bf9753303c31a507886d8231083
|
||||
# https://github.com/MarkusEh/vdr-plugin-live/commit/0fbd9b32fc6afcdbe8722daa0e772260cd058f41
|
||||
%global commit0 0fbd9b32fc6afcdbe8722daa0e772260cd058f41
|
||||
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
|
||||
%global gitdate 20210111
|
||||
%global gitdate 20211228
|
||||
|
||||
Name: vdr-live
|
||||
Version: 3.0.4
|
||||
#Release: 1.%%{gitdate}git%%{shortcommit0}%%{?dist}
|
||||
Version: 3.1.5
|
||||
#Release: 0.4.%%{gitdate}git%%{shortcommit0}%%{?dist}
|
||||
Release: 1%{?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
|
||||
License: GPLv2+ and MIT
|
||||
URL: https://github.com/MarkusEh/vdr-plugin-live
|
||||
#Source0: https://github.com/MarkusEh/vdr-plugin-live/archive/%%{commit0}/%%{name}-%%{version}-%%{shortcommit0}.tar.gz
|
||||
Source0: https://github.com/MarkusEh/vdr-plugin-live/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
|
||||
Source1: %{name}.conf
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: vdr-devel >= 2.2.0
|
||||
BuildRequires: pcre-devel
|
||||
BuildRequires: pcre2-devel
|
||||
BuildRequires: tntnet-devel
|
||||
BuildRequires: cxxtools-devel
|
||||
Requires: vdr(abi)%{?_isa} = %{vdr_apiversion}
|
||||
|
|
@ -43,6 +44,7 @@ Requires: %{name} = %{version}-%{release}
|
|||
This package contains images, themes and JavaScript.
|
||||
|
||||
%prep
|
||||
#%%autosetup -p1 -n vdr-plugin-live-%%{commit0}
|
||||
%autosetup -p1 -n vdr-plugin-live-%{version}
|
||||
|
||||
# delete unused directories and files
|
||||
|
|
@ -54,10 +56,14 @@ rm -rf httpd
|
|||
iconv -f iso-8859-1 -t utf-8 README > README.utf8 ; mv README.utf8 README
|
||||
|
||||
%build
|
||||
make CFLAGS="%{optflags} -fPIC" CXXFLAGS="%{optflags} -fPIC" all
|
||||
%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 DESTDIR=%{buildroot}
|
||||
%make_install
|
||||
|
||||
# live.conf
|
||||
install -Dpm 644 %{SOURCE1} \
|
||||
|
|
@ -65,10 +71,6 @@ install -Dpm 644 %{SOURCE1} \
|
|||
|
||||
%find_lang %{name}
|
||||
|
||||
install -dm 755 %{buildroot}%{vdr_resdir}/plugins/live
|
||||
cp -pR live/* %{buildroot}%{vdr_resdir}/plugins/live
|
||||
|
||||
|
||||
%files -f %{name}.lang
|
||||
%doc CONTRIBUTORS README
|
||||
%license COPYING
|
||||
|
|
@ -78,8 +80,67 @@ cp -pR live/* %{buildroot}%{vdr_resdir}/plugins/live
|
|||
%files data
|
||||
%{vdr_resdir}/plugins/live/
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Feb 03 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.5-1
|
||||
- Update to 3.1.5
|
||||
|
||||
* Sat Jan 29 2022 Martin Gansser <martinkg@fedoraproject.org> - 3.1.4-0.4.20211228git0fbd9b3
|
||||
- Add %%undefine _package_note_flags to vdr main package
|
||||
- rebuild for rawhide
|
||||
|
||||
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.1.4-0.3.20211228git0fbd9b3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Thu Dec 30 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.1.4-0.2.20211228git0fbd9b3
|
||||
- Build compatibility to g++11
|
||||
|
||||
* Tue Dec 28 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.1.4-0.1.20211228git0fbd9b3
|
||||
- Replace obsolete pcre by pcre2
|
||||
- Update to 3.1.4-0.1.20211228git0fbd9b3
|
||||
|
||||
* Mon Nov 15 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.1.3-1
|
||||
- Update to 3.1.3
|
||||
|
||||
* Fri Nov 5 2021 Dirk Nehring <dnehring@gmx.net> - 3.1.1-2
|
||||
- Build compatibility to g++11
|
||||
|
||||
* Mon Nov 01 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.1.1-1
|
||||
- Update to 3.1.1
|
||||
|
||||
* Thu Oct 28 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.1.0-1
|
||||
- Update to 3.1.0
|
||||
|
||||
* Fri Oct 15 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.12-1
|
||||
- Update to 3.0.12
|
||||
|
||||
* Sat Sep 11 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.10-3
|
||||
- Add vdr-plugin-live-noCopyTimer.patch to avoid copying vdr timer objects
|
||||
|
||||
* Fri Aug 06 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.10-2
|
||||
- Rebuilt fixes unresolved symbol
|
||||
|
||||
* Sun Jul 18 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.10-1
|
||||
- Update to 3.0.10
|
||||
|
||||
* Mon Jun 07 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.9-1
|
||||
- Update to 3.0.9
|
||||
|
||||
* Mon May 24 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.8-1
|
||||
- Update to 3.0.8
|
||||
|
||||
* Wed Apr 28 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.7-0.2.20210307git075080a
|
||||
- Rebuilt for new VDR API version
|
||||
|
||||
* Sun Mar 07 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.7-0.1.20210307git075080a
|
||||
- Update to 3.0.7-0.1.20210307git075080a
|
||||
|
||||
* Wed Mar 03 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.6-1
|
||||
- Update to 3.0.6
|
||||
|
||||
* Mon Mar 01 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.5-1
|
||||
- Rebuilt for cxxtools/tntnet-3.0 support
|
||||
- Update to 3.0.5
|
||||
|
||||
* Sun Jan 31 2021 Martin Gansser <martinkg@fedoraproject.org> - 3.0.4-1
|
||||
- Update to 3.0.4
|
||||
|
||||
|
|
|
|||
378
vdr-plugin-live-noCopyTimer.patch
Normal file
378
vdr-plugin-live-noCopyTimer.patch
Normal file
|
|
@ -0,0 +1,378 @@
|
|||
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> <%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> <%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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue