summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS23
-rw-r--r--HISTORY33
-rw-r--r--PLUGINS/src/servicedemo/Makefile3
-rw-r--r--ci.c7
-rw-r--r--config.c8
-rw-r--r--config.h4
-rw-r--r--device.c7
-rw-r--r--eit.c6
-rw-r--r--epg.c42
-rw-r--r--menu.c5
-rw-r--r--menuitems.c7
-rwxr-xr-xnewplugin4
-rw-r--r--svdrp.c10
-rw-r--r--thread.c3
-rw-r--r--vdr.16
15 files changed, 127 insertions, 41 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 5e522b9..4609300 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -219,6 +219,7 @@ Stefan Huelswitt <huels@iname.com>
again
for reporting a problem with channel up/down switching on single card systems
for fixing the PremiereContentTransmissionDescriptor in 'libsi'
+ for reporting a double fdopen() in cPipe::Open()
Ulrich Röder <roeder@efr-net.de>
for pointing out that there are channels that have a symbol rate higher than 27500
@@ -340,6 +341,8 @@ Andy Grobb <Charly98@01019freenet.de>
for reporting a bug in handling min/max borders when entering integer values
for reporting a problem with replaying in fast forward mode if the video directory
is mounted via a Samba share
+ for suggesting to make menu items that are derived from cMenuEditIntItem loop
+ though their values if they have a dedicated minimum or maximum limit
Thomas Heiligenmann <thomas@heiligenmann.de>
for implementing the SVDRP commands LSTR and DELR
@@ -1221,6 +1224,8 @@ Andreas Regel <andreas.regel@gmx.de>
for reporting a problem in handling Transfer Mode for radio channels
for reporting a problem with messages when a cOsdObject uses the raw OSD
for implementing palette replace mode in the OSD bitmaps
+ for fixing handling numeric keys in the channel display after switching channel
+ groups
Thomas Bergwinkl <Thomas.Bergwinkl@vr-web.de>
for fixing the validity check for channel IDs, because some providers use TIDs
@@ -1364,6 +1369,8 @@ Marco Schlüßler <marco@lordzodiac.de>
and PremiereContentTransmissionDescriptor to 'libsi'
for pointing out that plugins might be compiled with different DVB driver header
files than VDR itself
+ for adding a missing initialization of 'mutex' in cCiMenu::cCiMenu() and removing
+ some superfluous semicolons in ci.c
Jürgen Schmitz <j.schmitz@web.de>
for reporting a bug in displaying the current channel when switching via the SVDRP
@@ -1442,6 +1449,7 @@ Udo Richter <udo_richter@gmx.de>
for setting a timer's cached start time to 0 after a call to Skip()
for adding "-fPIC" to the compiler options in Make.config.template when compiling
plugins
+ for reporting a missing '--vfat' in the vdr.1 man page
Sven Kreiensen <svenk@kammer.uni-hannover.de>
for his help in keeping 'channels.conf.terr' up to date
@@ -1932,6 +1940,21 @@ Prakash Punnoor <prakash@punnoor.de>
Anssi Hannula <anssi.hannula@gmail.com>
for a patch that was used to implement processing the "frequency list descriptor"
+ for suggesting that cDevice::GetDevice() should prefer any device that's already
+ receiving and doesn't require detatching receivers
Antti Hartikainen <ami+vdr@ah.fi>
for updating 'S13E' in 'sources.conf'
+
+Bernd Melcher <bernd@bernd-melcher.de>
+ for reporting a problem with the 'servicedemo' plugin having no PLUGIN macro
+
+Patrick Maier <maierp@informatik.tu-muenchen.de>
+ for fixing handling network masks in the svdrphosts.conf file
+
+Norbert Wentz <norbert.wentz@online.de>
+ for reporting a bug in handling relative volume settings in the call to
+ cStatus::MsgSetVolume()
+
+Frank Schmirler <vdr@schmirler.de>
+ for fixing handling client side termination of SVDRP connections
diff --git a/HISTORY b/HISTORY
index 796f443..d3a2490 100644
--- a/HISTORY
+++ b/HISTORY
@@ -4801,3 +4801,36 @@ Video Disk Recorder Revision History
Patrick Cernko).
- Now making sure a VPS timer has a schedule in case the epg.data file didn't
contain one when VDR was started.
+
+2006-07-23: Version 1.4.1-2
+
+- Fixed the Makefile of the 'servicedemo' plugin, so that it defines the
+ PLUGIN macro, which allows the Make.config file to react properly when
+ compiling the plugin (reported by Bernd Melcher).
+ Note to all plugin developers: a plugin's Makefile *must* define the PLUGIN
+ macro, even if it doesn't use it itself!
+- Added a comment regarding the PLUGIN macro to the 'newplugin' script.
+- Added '--vfat' to the vdr.1 man page (reported by Udo Richter).
+- Removed a double fdopen() in cPipe::Open() (reported by Stefan Huelswitt).
+- Fixed handling the running status of EPG events before the currently running one,
+ in case they are added after the current event.
+- cEIT::cEIT() now calls pSchedule->SetPresentSeen() even if OnlyRunningStatus is
+ true.
+- Newlines in title and short text of an EPG event are now changed into blanks only
+ after all other fixes, because a short text might become a description.
+- Fixed handling network masks in the svdrphosts.conf file (thanks to Patrick
+ Maier).
+- Fixed handling relative volume settings in the call to cStatus::MsgSetVolume()
+ (reported by Norbert Wentz).
+- Added a missing initialization of 'mutex' in cCiMenu::cCiMenu() and removed
+ some superfluous semicolons in ci.c (thanks to Marco Schlüßler).
+- Fixed handling client side termination of SVDRP connections (thanks to Frank
+ Schmirler).
+- cDevice::GetDevice() now prefers any device that's already receiving and doesn't
+ require detatching receivers (suggested by Anssi Hannula).
+- Fixed handling numeric keys in the channel display after switching channel groups
+ (thanks to Andreas Regel).
+- Menu items derived from cMenuEditIntItem now loop though their values if they
+ have a dedicated minimum or maximum limit (suggested by Andy Grobb). Looping is
+ only done for normal keypresses, not for repeated ones. This allows the user to
+ scroll the value all the way to the limit by keeping the key pressed.
diff --git a/PLUGINS/src/servicedemo/Makefile b/PLUGINS/src/servicedemo/Makefile
index 08e83c3..e44af0b 100644
--- a/PLUGINS/src/servicedemo/Makefile
+++ b/PLUGINS/src/servicedemo/Makefile
@@ -1,12 +1,13 @@
#
# Makefile for a Video Disk Recorder plugin
#
-# $Id: Makefile 1.6 2006/04/24 17:21:01 kls Exp $
+# $Id: Makefile 1.7 2006/06/24 09:09:54 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
#
+PLUGIN = servicedemo # dummy name for Make.config
PLUGIN1 = svccli
PLUGIN2 = svcsvr
diff --git a/ci.c b/ci.c
index 863be53..e6bfa72 100644
--- a/ci.c
+++ b/ci.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ci.c 1.42 2006/01/07 15:07:16 kls Exp $
+ * $Id: ci.c 1.43 2006/07/22 13:40:30 kls Exp $
*/
#include "ci.h"
@@ -1387,6 +1387,7 @@ bool cCiMMI::SendCloseMMI(void)
cCiMenu::cCiMenu(cCiMMI *MMI, bool Selectable)
{
mmi = MMI;
+ mutex = NULL;
selectable = Selectable;
titleText = subTitleText = bottomText = NULL;
numEntries = 0;
@@ -1445,8 +1446,8 @@ cCiEnquiry::cCiEnquiry(cCiMMI *MMI)
{
mmi = MMI;
text = NULL;
- blind = false;;
- expectedLength = 0;;
+ blind = false;
+ expectedLength = 0;
}
cCiEnquiry::~cCiEnquiry()
diff --git a/config.c b/config.c
index 8d49fc6..f394266 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 1.145 2006/04/17 12:43:57 kls Exp $
+ * $Id: config.c 1.146 2006/07/22 11:57:51 kls Exp $
*/
#include "config.h"
@@ -106,8 +106,10 @@ bool cSVDRPhost::Parse(const char *s)
*(char *)p = 0; // yes, we know it's 'const' - will be restored!
if (m == 0)
mask = 0;
- else
- mask >>= (32 - m);
+ else {
+ mask <<= (32 - m);
+ mask = htonl(mask);
+ }
}
int result = inet_aton(s, &addr);
if (p)
diff --git a/config.h b/config.h
index 212c88d..92a1433 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 1.261 2006/06/15 09:23:21 kls Exp $
+ * $Id: config.h 1.262 2006/06/24 09:08:46 kls Exp $
*/
#ifndef __CONFIG_H
@@ -21,7 +21,7 @@
// VDR's own version number:
-#define VDRVERSION "1.4.1-1"
+#define VDRVERSION "1.4.1-2"
#define VDRVERSNUM 10401 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
diff --git a/device.c b/device.c
index 25c09f6..8f451d7 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 1.131 2006/06/15 09:59:40 kls Exp $
+ * $Id: device.c 1.133 2006/07/22 14:06:11 kls Exp $
*/
#include "device.h"
@@ -292,7 +292,7 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool *NeedsDe
// to their individual severity, where the one listed first will make the most
// difference, because it results in the most significant bit of the result.
uint imp = 0;
- imp <<= 1; imp |= !device[i]->Receiving() || ndr; // use receiving devices if we don't need to detach existing receivers
+ imp <<= 1; imp |= !device[i]->Receiving(true) || ndr; // use receiving devices if we don't need to detach existing receivers
imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving
imp <<= 1; imp |= device[i] == ActualDevice(); // avoid the actual device (in case of Transfer Mode)
imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device
@@ -776,9 +776,10 @@ void cDevice::SetAudioChannel(int AudioChannel)
void cDevice::SetVolume(int Volume, bool Absolute)
{
+ int OldVolume = volume;
volume = min(max(Absolute ? Volume : volume + Volume, 0), MAXVOLUME);
SetVolumeDevice(volume);
- cStatus::MsgSetVolume(volume, Absolute);
+ cStatus::MsgSetVolume(Absolute ? volume : volume - OldVolume, Absolute);
if (volume > 0) {
mute = false;
Audios.MuteAudio(mute);
diff --git a/eit.c b/eit.c
index d27849c..d9714ef 100644
--- a/eit.c
+++ b/eit.c
@@ -8,7 +8,7 @@
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
*
- * $Id: eit.c 1.118 2006/05/25 14:35:19 kls Exp $
+ * $Id: eit.c 1.119 2006/07/22 09:21:59 kls Exp $
*/
#include "eit.h"
@@ -253,10 +253,10 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
if (Empty && Tid == 0x4E && getSectionNumber() == 0)
// ETR 211: an empty entry in section 0 of table 0x4E means there is currently no event running
pSchedule->ClrRunningStatus(channel);
- if (OnlyRunningStatus)
- return;
if (Tid == 0x4E)
pSchedule->SetPresentSeen();
+ if (OnlyRunningStatus)
+ return;
if (Modified) {
pSchedule->Sort();
if (!HasExternalData)
diff --git a/epg.c b/epg.c
index 566f20e..dbd5350 100644
--- a/epg.c
+++ b/epg.c
@@ -7,7 +7,7 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
- * $Id: epg.c 1.75 2006/05/25 14:55:36 kls Exp $
+ * $Id: epg.c 1.77 2006/07/22 10:13:34 kls Exp $
*/
#include "epg.h"
@@ -435,18 +435,6 @@ void ReportEpgBugFixStats(bool Reset)
void cEvent::FixEpgBugs(void)
{
- // VDR can't usefully handle newline characters in the title and shortText of EPG
- // data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel):
- strreplace(title, '\n', ' ');
- strreplace(shortText, '\n', ' ');
- // Same for control characters:
- strreplace(title, '\x86', ' ');
- strreplace(title, '\x87', ' ');
- strreplace(shortText, '\x86', ' ');
- strreplace(shortText, '\x87', ' ');
- strreplace(description, '\x86', ' ');
- strreplace(description, '\x87', ' ');
-
if (isempty(title)) {
// we don't want any "(null)" titles
title = strcpyrealloc(title, tr("No title"));
@@ -454,7 +442,7 @@ void cEvent::FixEpgBugs(void)
}
if (Setup.EPGBugfixLevel == 0)
- return;
+ goto Final;
// Some TV stations apparently have their own idea about how to fill in the
// EPG data. Let's fix their bugs as good as we can:
@@ -528,7 +516,7 @@ void cEvent::FixEpgBugs(void)
}
if (Setup.EPGBugfixLevel <= 1)
- return;
+ goto Final;
// Some channels apparently try to do some formatting in the texts,
// which is a bad idea because they have no way of knowing the width
@@ -574,7 +562,7 @@ void cEvent::FixEpgBugs(void)
strreplace(description, '`', '\'');
if (Setup.EPGBugfixLevel <= 2)
- return;
+ goto Final;
// The stream components have a "description" field which some channels
// apparently have no idea of how to set correctly:
@@ -638,6 +626,20 @@ void cEvent::FixEpgBugs(void)
}
}
}
+
+Final:
+
+ // VDR can't usefully handle newline characters in the title and shortText of EPG
+ // data, so let's always convert them to blanks (independent of the setting of EPGBugfixLevel):
+ strreplace(title, '\n', ' ');
+ strreplace(shortText, '\n', ' ');
+ // Same for control characters:
+ strreplace(title, '\x86', ' ');
+ strreplace(title, '\x87', ' ');
+ strreplace(shortText, '\x86', ' ');
+ strreplace(shortText, '\x87', ' ');
+ strreplace(description, '\x86', ' ');
+ strreplace(description, '\x87', ' ');
}
// --- cSchedule -------------------------------------------------------------
@@ -770,6 +772,14 @@ void cSchedule::ResetVersions(void)
void cSchedule::Sort(void)
{
events.Sort();
+ // Make sure there are no RunningStatusUndefined before the currently running event:
+ if (hasRunning) {
+ for (cEvent *p = events.First(); p; p = events.Next(p)) {
+ if (p->RunningStatus() > SI::RunningStatusNotRunning)
+ break;
+ p->SetRunningStatus(SI::RunningStatusNotRunning);
+ }
+ }
}
void cSchedule::DropOutdated(time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version)
diff --git a/menu.c b/menu.c
index 788ce0f..7e4f362 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 1.441 2006/06/03 13:32:42 kls Exp $
+ * $Id: menu.c 1.443 2006/07/23 09:23:11 kls Exp $
*/
#include "menu.h"
@@ -39,7 +39,7 @@
#define MAXRECORDCONTROLS (MAXDEVICES * MAXRECEIVERS)
#define MAXINSTANTRECTIME (24 * 60 - 1) // 23:59 hours
#define MAXWAITFORCAMMENU 4 // seconds to wait for the CAM menu to open
-#define MINFREEDISK 300 // minimum free disk space required to start recording
+#define MINFREEDISK 300 // minimum free disk space (in MB) required to start recording
#define NODISKSPACEDELTA 300 // seconds between "Not enough disk space to start recording!" messages
#define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1)
@@ -3146,6 +3146,7 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
return osEnd;
}
case k1 ... k9:
+ group = -1;
if (number >= 0) {
if (number > Channels.MaxNumber())
number = Key - k0;
diff --git a/menuitems.c b/menuitems.c
index 517664c..cbfcf05 100644
--- a/menuitems.c
+++ b/menuitems.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menuitems.c 1.45 2006/06/03 13:20:01 kls Exp $
+ * $Id: menuitems.c 1.46 2006/07/23 09:42:17 kls Exp $
*/
#include "menuitems.h"
@@ -75,6 +75,7 @@ eOSState cMenuEditIntItem::ProcessKey(eKeys Key)
if (state == osUnknown) {
int newValue = *value;
+ bool IsRepeat = Key & k_Repeat;
Key = NORMALKEY(Key);
switch (Key) {
case kNone: break;
@@ -88,10 +89,14 @@ eOSState cMenuEditIntItem::ProcessKey(eKeys Key)
case kLeft: // TODO might want to increase the delta if repeated quickly?
newValue = *value - 1;
fresh = true;
+ if (!IsRepeat && newValue < min && max != INT_MAX)
+ newValue = max;
break;
case kRight:
newValue = *value + 1;
fresh = true;
+ if (!IsRepeat && newValue > max && min != INT_MIN)
+ newValue = min;
break;
default:
if (*value < min) { *value = min; Set(); }
diff --git a/newplugin b/newplugin
index 98b8645..dd49140 100755
--- a/newplugin
+++ b/newplugin
@@ -12,7 +12,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
-# $Id: newplugin 1.28 2006/04/24 17:18:41 kls Exp $
+# $Id: newplugin 1.29 2006/06/24 09:15:17 kls Exp $
$PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n";
@@ -61,6 +61,8 @@ $MAKEFILE = qq
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
+# IPORTANT: the presence of this macro is important for the Make.config
+# file. So it must be defined, even if it is not used here!
#
PLUGIN = $PLUGIN_NAME
diff --git a/svdrp.c b/svdrp.c
index 34f283f..6972681 100644
--- a/svdrp.c
+++ b/svdrp.c
@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
- * $Id: svdrp.c 1.97 2006/06/11 09:04:36 kls Exp $
+ * $Id: svdrp.c 1.98 2006/07/22 13:59:43 kls Exp $
*/
#include "svdrp.h"
@@ -1594,8 +1594,12 @@ bool cSVDRP::Process(void)
isyslog("lost connection to SVDRP client");
Close();
}
- else
- break;
+ else {
+ isyslog("SVDRP client closed connection");
+ //TODO give cSVDRP::Close() an extra parameter to avoid this code duplication
+ file.Close();
+ DELETENULL(PUTEhandler);
+ }
}
if (Setup.SVDRPTimeout && time(NULL) - lastActivity > Setup.SVDRPTimeout) {
isyslog("timeout on SVDRP connection");
diff --git a/thread.c b/thread.c
index c65f9e2..1749fc1 100644
--- a/thread.c
+++ b/thread.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.c 1.55 2006/06/02 13:51:39 kls Exp $
+ * $Id: thread.c 1.56 2006/06/24 10:10:58 kls Exp $
*/
#include "thread.h"
@@ -423,7 +423,6 @@ bool cPipe::Open(const char *Command, const char *Mode)
iopipe = 1;
}
close(fd[iopipe]);
- f = fdopen(fd[1 - iopipe], mode);
if ((f = fdopen(fd[1 - iopipe], mode)) == NULL) {
LOG_ERROR;
close(fd[1 - iopipe]);
diff --git a/vdr.1 b/vdr.1
index 2325086..86f5bdf 100644
--- a/vdr.1
+++ b/vdr.1
@@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
-.\" $Id: vdr.1 1.25 2006/04/30 08:55:12 kls Exp $
+.\" $Id: vdr.1 1.26 2006/06/24 10:07:16 kls Exp $
.\"
.TH vdr 1 "30 Apr 2006" "1.4.0" "Video Disk Recorder"
.SH NAME
@@ -137,6 +137,10 @@ be set from the transponder data, but for security reasons
vdr can switch to a lesser privileged user id during normal
operation.
.TP
+.BI \-\-vfat
+Encode special characters in recording names to avoid problems
+with VFAT file systems.
+.TP
.BI \-v\ dir ,\ \-\-video= dir
Use \fIdir\fR as video directory.
The default is \fI/video\fR.