diff options
-rw-r--r-- | CONTRIBUTORS | 23 | ||||
-rw-r--r-- | HISTORY | 33 | ||||
-rw-r--r-- | PLUGINS/src/servicedemo/Makefile | 3 | ||||
-rw-r--r-- | ci.c | 7 | ||||
-rw-r--r-- | config.c | 8 | ||||
-rw-r--r-- | config.h | 4 | ||||
-rw-r--r-- | device.c | 7 | ||||
-rw-r--r-- | eit.c | 6 | ||||
-rw-r--r-- | epg.c | 42 | ||||
-rw-r--r-- | menu.c | 5 | ||||
-rw-r--r-- | menuitems.c | 7 | ||||
-rwxr-xr-x | newplugin | 4 | ||||
-rw-r--r-- | svdrp.c | 10 | ||||
-rw-r--r-- | thread.c | 3 | ||||
-rw-r--r-- | vdr.1 | 6 |
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 @@ -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 @@ -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() @@ -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) @@ -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: @@ -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); @@ -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) @@ -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) @@ -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(); } @@ -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 @@ -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"); @@ -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]); @@ -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. |