r5638 - in /vdr/vdr/trunk/debian: ./ patches/

tiber-guest at users.alioth.debian.org tiber-guest at users.alioth.debian.org
Mon Oct 29 19:27:06 UTC 2007


Author: tiber-guest
Date: Mon Oct 29 19:27:05 2007
New Revision: 5638

URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/?sc=1&rev=5638
Log:
* NOT RELEASED YET
* Synced optional patches with e-tobi.net version of the VDR package
  - Added opt-50_graphtft-0.1.dpatch
  - Added opt-51_cuttime.dpatch
  - Added opt-39_noepg.dpatch
  - Added opt-32_iptv.dpatch
  - Added opt-43-x_recordshowfree.dpatch
  - Added opt-37-x_menuorg.dpatch
  - Added opt-31-x_reelchannelscan.dpatch
  - Added opt-48-x_pin.dpatch
  - Removed opt-37_submenu.dpatch
  - Updated opt-48_pin.dpatch

Added:
    vdr/vdr/trunk/debian/patches/opt-31-x_reelchannelscan.dpatch
    vdr/vdr/trunk/debian/patches/opt-32_iptv.dpatch
    vdr/vdr/trunk/debian/patches/opt-37-x_menuorg.dpatch
    vdr/vdr/trunk/debian/patches/opt-43-x_recordshowfree.dpatch
    vdr/vdr/trunk/debian/patches/opt-48-x_pin.dpatch
    vdr/vdr/trunk/debian/patches/opt-50_graphtft-0.1.dpatch
    vdr/vdr/trunk/debian/patches/opt-51_cuttime.dpatch
Removed:
    vdr/vdr/trunk/debian/patches/opt-37_submenu.dpatch
Modified:
    vdr/vdr/trunk/debian/changelog
    vdr/vdr/trunk/debian/patches/00list
    vdr/vdr/trunk/debian/patches/16_channels.conf.terr-fix.dpatch   (props changed)
    vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch
    vdr/vdr/trunk/debian/patches/opt-48_pin.dpatch   (props changed)
    vdr/vdr/trunk/debian/patches/patchtest

Modified: vdr/vdr/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/changelog?rev=5638&op=diff
==============================================================================
--- vdr/vdr/trunk/debian/changelog (original)
+++ vdr/vdr/trunk/debian/changelog Mon Oct 29 19:27:05 2007
@@ -1,3 +1,20 @@
+vdr (1.4.7-3) UNRELEASED; urgency=low
+
+  * NOT RELEASED YET
+  * Synced optional patches with e-tobi.net version of the VDR package
+    - Added opt-50_graphtft-0.1.dpatch
+    - Added opt-51_cuttime.dpatch
+    - Added opt-39_noepg.dpatch
+    - Added opt-32_iptv.dpatch
+    - Added opt-43-x_recordshowfree.dpatch
+    - Added opt-37-x_menuorg.dpatch
+    - Added opt-31-x_reelchannelscan.dpatch
+    - Added opt-48-x_pin.dpatch
+    - Removed opt-37_submenu.dpatch
+    - Updated opt-48_pin.dpatch
+
+ -- Tobias Grimm <tg at e-tobi.net>  Mon, 29 Oct 2007 19:53:15 +0100
+
 vdr (1.4.7-2) unstable; urgency=low
 
   [ Thomas Schmidt ]

Modified: vdr/vdr/trunk/debian/patches/00list
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/00list?rev=5638&op=diff
==============================================================================
--- vdr/vdr/trunk/debian/patches/00list (original)
+++ vdr/vdr/trunk/debian/patches/00list Mon Oct 29 19:27:05 2007
@@ -24,6 +24,12 @@
 # Patch needed for the analogtv plugin.
 # opt-30-x_analogtv
 
+# Makes VDR aware of the reelchannalscan plugin
+# opt-31-x_reelchannelscan
+
+# Patch required by the IPTV plug-in
+# opt-32_iptv
+
 # Patch that shows if there is a valid setup value left or right with < and >.
 # opt-35_setup-show-valid
 
@@ -31,8 +37,8 @@
 # opt-36_CutterQueue
 # opt-36_CutterQueue-AutoDelete
 
-# Patch needed for the submenu plugin.
-# opt-37_submenu
+# Patch needed for the menuorg plugin.
+# opt-37-x_menuorg
 
 # Patch that suppresses double EPG entries.
 # opt-38_disableDoubleEpgEntrys
@@ -48,6 +54,10 @@
 
 # Patch to allow plugins to replace the VDR mainmenus
 # opt-42-x_MainMenuHooks
+
+# Shows remaining recording capacity in recordings menu.
+# (Requires opt-41-x_timer-info !)
+# opt-43-x_recordshowfree
 
 # Patch needed for the rotor plugin.
 # opt-44_rotor
@@ -68,10 +78,17 @@
 # opt-47_sourcecaps
 
 # Patch for the PIN plugin
-# opt-48_pin
+# opt-48-x_pin
 
 # Patch to share one sat connection for several cards.
 # opt-49_sharelnb
 
 # Patch required for the GraphTFT plugin
 # opt-50_graphtft
+
+# Patch required for the GraphTFT plugin >= 0.1
+# opt-50_graphtft-0.1
+
+# Modifies the start time of recordings to the first cutting mark
+# (disabled by default - enable in VDR's recording setup)
+# opt-51_cuttime

Propchange: vdr/vdr/trunk/debian/patches/16_channels.conf.terr-fix.dpatch
            ('svn:executable' removed)

Added: vdr/vdr/trunk/debian/patches/opt-31-x_reelchannelscan.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-31-x_reelchannelscan.dpatch?rev=5638&op=file
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-31-x_reelchannelscan.dpatch (added)
+++ vdr/vdr/trunk/debian/patches/opt-31-x_reelchannelscan.dpatch Mon Oct 29 19:27:05 2007
@@ -1,0 +1,26 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-31_reelchannelscan.dpatch by Tobias Grimm <tg at e-tobi.net>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad vdr-1.4.6~/vdr.c vdr-1.4.6/vdr.c
+--- vdr-1.4.6~/vdr.c	2006-12-02 17:22:12.000000000 +0100
++++ vdr-1.4.6/vdr.c	2007-03-25 17:33:45.000000000 +0200
+@@ -685,7 +685,14 @@
+         // Make sure we have a visible programme in case device usage has changed:
+         if (!EITScanner.Active() && cDevice::PrimaryDevice()->HasDecoder() && !cDevice::PrimaryDevice()->HasProgramme()) {
+            static time_t lastTime = 0;
+-           if (time(NULL) - lastTime > MINCHANNELWAIT) {
++
++           bool reelChannelscanIsScanningOnReceivingDevice;
++           if (!cPluginManager::CallFirstService("ReelChannelscan::IsScanningOnReceivingDevice", &reelChannelscanIsScanningOnReceivingDevice))
++           {
++             reelChannelscanIsScanningOnReceivingDevice = false;
++           }
++
++           if (!reelChannelscanIsScanningOnReceivingDevice && time(NULL) - lastTime > MINCHANNELWAIT) {
+               cChannel *Channel = Channels.GetByNumber(cDevice::CurrentChannel());
+               if (Channel && (Channel->Vpid() || Channel->Apid(0))) {
+                  if (!Channels.SwitchTo(cDevice::CurrentChannel()) // try to switch to the original channel...

Added: vdr/vdr/trunk/debian/patches/opt-32_iptv.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-32_iptv.dpatch?rev=5638&op=file
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-32_iptv.dpatch (added)
+++ vdr/vdr/trunk/debian/patches/opt-32_iptv.dpatch Mon Oct 29 19:27:05 2007
@@ -1,0 +1,648 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-40_iptv.dpatch by Tobias Grimm <tg at e-tobi.net>
+## from version 0.0.3 of the IPTV plug-in
+## http://www.saunalahti.fi/~rahrenbe/vdr/iptv/
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch required for the IPTV plugin-in
+
+ at DPATCH@
+diff -urNad vdr-1.4.7~/channels.c vdr-1.4.7/channels.c
+--- vdr-1.4.7~/channels.c	2006-05-28 17:03:40.000000000 +0200
++++ vdr-1.4.7/channels.c	2007-10-29 19:37:57.000000000 +0100
+@@ -166,6 +166,7 @@
+   shortName = strdup("");
+   provider = strdup("");
+   portalName = strdup("");
++  pluginParam = strdup("");
+   memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
+   inversion    = INVERSION_AUTO;
+   bandwidth    = BANDWIDTH_AUTO;
+@@ -187,6 +188,7 @@
+   shortName = NULL;
+   provider = NULL;
+   portalName = NULL;
++  pluginParam = NULL;
+   schedule     = NULL;
+   linkChannels = NULL;
+   refChannel   = NULL;
+@@ -215,6 +217,7 @@
+   free(shortName);
+   free(provider);
+   free(portalName);
++  free(pluginParam);
+ }
+ 
+ cChannel& cChannel::operator= (const cChannel &Channel)
+@@ -223,6 +226,7 @@
+   shortName = strcpyrealloc(shortName, Channel.shortName);
+   provider = strcpyrealloc(provider, Channel.provider);
+   portalName = strcpyrealloc(portalName, Channel.portalName);
++  pluginParam = strcpyrealloc(pluginParam, Channel.pluginParam);
+   memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
+   return *this;
+ }
+@@ -280,9 +284,26 @@
+      transmission = Channel->transmission;
+      guard        = Channel->guard;
+      hierarchy    = Channel->hierarchy;
++     if (IsPlug())  pluginParam = strcpyrealloc(pluginParam, Channel->pluginParam);
+      }
+ }
+ 
++bool cChannel::SetPlugTransponderData(int Source, int Frequency, const char *PluginParam)
++{
++  if (source != Source || frequency != Frequency || (strcmp(pluginParam, PluginParam) != 0)) {
++       if (Number()) {
++          dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *cSource::ToString(source), frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
++          modification |= CHANNELMOD_TRANSP;
++          Channels.SetModified();
++          }
++       source = Source;
++       frequency = Frequency;
++       pluginParam = strcpyrealloc(pluginParam, PluginParam);
++       schedule = NULL;
++       }
++    return true;
++}
++
+ bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH)
+ {
+   // Workarounds for broadcaster stupidity:
+@@ -407,6 +428,18 @@
+      }
+ }
+ 
++void cChannel::SetPluginParam(const char *PluginParam)
++{
++  if (!isempty(PluginParam) && strcmp(pluginParam, PluginParam) != 0) {
++     if (Number()) {
++        dsyslog("changing plugin parameters of channel %d from '%s' to '%s'", Number(), pluginParam, PluginParam);
++        modification |= CHANNELMOD_TRANSP;
++        Channels.SetModified();
++        }
++     pluginParam = strcpyrealloc(pluginParam, PluginParam);
++     }
++}
++
+ #define STRDIFF 0x01
+ #define VALDIFF 0x02
+ 
+@@ -579,7 +612,7 @@
+   if (isdigit(type))
+      type = 'S';
+ #define ST(s) if (strchr(s, type))
+-  char buffer[64];
++  char buffer[256];
+   char *q = buffer;
+   *q = 0;
+   ST(" S ")  q += sprintf(q, "%c", polarization);
+@@ -591,6 +624,7 @@
+   ST("  T")  q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
+   ST("  T")  q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
+   ST("  T")  q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
++  ST("P  ")  snprintf(buffer, sizeof(buffer), "%s", pluginParam);
+   return buffer;
+ }
+ 
+@@ -612,7 +646,7 @@
+ 
+ bool cChannel::StringToParameters(const char *s)
+ {
+-  while (s && *s) {
++  while (s && *s && !IsPlug()) {
+         switch (toupper(*s)) {
+           case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
+           case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
+@@ -722,7 +756,7 @@
+         dpids[0] = 0;
+         ok = false;
+         if (parambuf && sourcebuf && vpidbuf && apidbuf) {
+-           ok = StringToParameters(parambuf) && (source = cSource::FromString(sourcebuf)) >= 0;
++           ok = ((source = cSource::FromString(sourcebuf)) >= 0) && StringToParameters(parambuf);
+ 
+            char *p = strchr(vpidbuf, '+');
+            if (p)
+@@ -813,6 +847,7 @@
+            shortName = strcpyrealloc(shortName, p);
+            }
+         name = strcpyrealloc(name, namebuf);
++        if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, parambuf);
+ 
+         free(parambuf);
+         free(sourcebuf);
+diff -urNad vdr-1.4.7~/channels.h vdr-1.4.7/channels.h
+--- vdr-1.4.7~/channels.h	2006-05-28 17:03:56.000000000 +0200
++++ vdr-1.4.7/channels.h	2007-10-29 19:37:57.000000000 +0100
+@@ -114,6 +114,7 @@
+   char *shortName;
+   char *provider;
+   char *portalName;
++  char *pluginParam;
+   int __BeginData__;
+   int frequency; // MHz
+   int source;
+@@ -165,6 +166,7 @@
+   int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
+   int Transponder(void) const;                    ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
+   static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
++  const char *PluginParam(void) const { return pluginParam; }
+   int Source(void) const { return source; }
+   int Srate(void) const { return srate; }
+   int Vpid(void) const { return vpid; }
+@@ -198,6 +200,7 @@
+   int Hierarchy(void) const { return hierarchy; }
+   const cLinkChannels* LinkChannels(void) const { return linkChannels; }
+   const cChannel *RefChannel(void) const { return refChannel; }
++  bool IsPlug(void) const { return cSource::IsPlug(source); }
+   bool IsCable(void) const { return cSource::IsCable(source); }
+   bool IsSat(void) const { return cSource::IsSat(source); }
+   bool IsTerr(void) const { return cSource::IsTerr(source); }
+@@ -205,12 +208,14 @@
+   bool HasTimer(void) const;
+   int Modification(int Mask = CHANNELMOD_ALL);
+   void CopyTransponderData(const cChannel *Channel);
++  bool SetPlugTransponderData(int Source, int Frequency, const char *PluginParam);
+   bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH);
+   bool SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH);
+   bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission);
+   void SetId(int Nid, int Tid, int Sid, int Rid = 0);
+   void SetName(const char *Name, const char *ShortName, const char *Provider);
+   void SetPortalName(const char *PortalName);
++  void SetPluginParam(const char *PluginParam);
+   void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int Tpid);
+   void SetCaIds(const int *CaIds); // list must be zero-terminated
+   void SetCaDescriptors(int Level);
+diff -urNad vdr-1.4.7~/config.h vdr-1.4.7/config.h
+--- vdr-1.4.7~/config.h	2007-05-12 11:07:16.000000000 +0200
++++ vdr-1.4.7/config.h	2007-10-29 19:38:07.000000000 +0100
+@@ -29,6 +29,10 @@
+ #define APIVERSION  "1.4.5"
+ #define APIVERSNUM   10405  // Version * 10000 + Major * 100 + Minor
+ 
++#define PLUGINPARAMPATCHVERSNUM 1
++
++#define CLOSEFILTERPATCHVERSNUM 1
++
+ // When loading plugins, VDR searches them by their APIVERSION, which
+ // may be smaller than VDRVERSION in case there have been no changes to
+ // VDR header files since the last APIVERSION. This allows compiled
+diff -urNad vdr-1.4.7~/config.h.orig vdr-1.4.7/config.h.orig
+--- vdr-1.4.7~/config.h.orig	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.4.7/config.h.orig	2007-10-29 19:37:57.000000000 +0100
+@@ -0,0 +1,266 @@
++/*
++ * config.h: Configuration file handling
++ *
++ * See the main source file 'vdr.c' for copyright information and
++ * how to reach the author.
++ *
++ * $Id: config.h 1.282.1.5 2007/05/12 09:07:16 kls Exp $
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#include <arpa/inet.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <time.h>
++#include <unistd.h>
++#include "i18n.h"
++#include "tools.h"
++
++// VDR's own version number:
++
++#define VDRVERSION  "1.4.7"
++#define VDRVERSNUM   10407  // Version * 10000 + Major * 100 + Minor
++
++// The plugin API's version number:
++
++#define APIVERSION  "1.4.5"
++#define APIVERSNUM   10405  // Version * 10000 + Major * 100 + Minor
++
++#define PLUGINPARAMPATCHVERSNUM 1
++
++// When loading plugins, VDR searches them by their APIVERSION, which
++// may be smaller than VDRVERSION in case there have been no changes to
++// VDR header files since the last APIVERSION. This allows compiled
++// plugins to work with newer versions of the core VDR as long as no
++// VDR header files have changed.
++
++#define MAXPRIORITY 99
++#define MAXLIFETIME 99
++
++#define MINOSDWIDTH  480
++#define MAXOSDWIDTH  672
++#define MINOSDHEIGHT 324
++#define MAXOSDHEIGHT 567
++
++#define MaxFileName 256
++#define MaxSkinName 16
++#define MaxThemeName 16
++
++class cCommand : public cListObject {
++private:
++  char *title;
++  char *command;
++  bool confirm;
++  static char *result;
++public:
++  cCommand(void);
++  virtual ~cCommand();
++  bool Parse(const char *s);
++  const char *Title(void) { return title; }
++  bool Confirm(void) { return confirm; }
++  const char *Execute(const char *Parameters = NULL);
++  };
++
++typedef uint32_t in_addr_t; //XXX from /usr/include/netinet/in.h (apparently this is not defined on systems with glibc < 2.2)
++
++class cSVDRPhost : public cListObject {
++private:
++  struct in_addr addr;
++  in_addr_t mask;
++public:
++  cSVDRPhost(void);
++  bool Parse(const char *s);
++  bool Accepts(in_addr_t Address);
++  };
++
++template<class T> class cConfig : public cList<T> {
++private:
++  char *fileName;
++  bool allowComments;
++  void Clear(void)
++  {
++    free(fileName);
++    fileName = NULL;
++    cList<T>::Clear();
++  }
++public:
++  cConfig(void) { fileName = NULL; }
++  virtual ~cConfig() { free(fileName); }
++  const char *FileName(void) { return fileName; }
++  bool Load(const char *FileName = NULL, bool AllowComments = false, bool MustExist = false)
++  {
++    cConfig<T>::Clear();
++    if (FileName) {
++       free(fileName);
++       fileName = strdup(FileName);
++       allowComments = AllowComments;
++       }
++    bool result = !MustExist;
++    if (fileName && access(fileName, F_OK) == 0) {
++       isyslog("loading %s", fileName);
++       FILE *f = fopen(fileName, "r");
++       if (f) {
++          char *s;
++          int line = 0;
++          cReadLine ReadLine;
++          result = true;
++          while ((s = ReadLine.Read(f)) != NULL) {
++                line++;
++                if (allowComments) {
++                   char *p = strchr(s, '#');
++                   if (p)
++                      *p = 0;
++                   }
++                stripspace(s);
++                if (!isempty(s)) {
++                   T *l = new T;
++                   if (l->Parse(s))
++                      Add(l);
++                   else {
++                      esyslog("ERROR: error in %s, line %d", fileName, line);
++                      delete l;
++                      result = false;
++                      break;
++                      }
++                   }
++                }
++          fclose(f);
++          }
++       else {
++          LOG_ERROR_STR(fileName);
++          result = false;
++          }
++       }
++    if (!result)
++       fprintf(stderr, "vdr: error while reading '%s'\n", fileName);
++    return result;
++  }
++  bool Save(void)
++  {
++    bool result = true;
++    T *l = (T *)this->First();
++    cSafeFile f(fileName);
++    if (f.Open()) {
++       while (l) {
++             if (!l->Save(f)) {
++                result = false;
++                break;
++                }
++             l = (T *)l->Next();
++             }
++       if (!f.Close())
++          result = false;
++       }
++    else
++       result = false;
++    return result;
++  }
++  };
++
++class cCommands : public cConfig<cCommand> {};
++
++class cSVDRPhosts : public cConfig<cSVDRPhost> {
++public:
++  bool Acceptable(in_addr_t Address);
++  };
++
++extern cCommands Commands;
++extern cCommands RecordingCommands;
++extern cSVDRPhosts SVDRPhosts;
++
++class cSetupLine : public cListObject {
++private:
++  char *plugin;
++  char *name;
++  char *value;
++public:
++  cSetupLine(void);
++  cSetupLine(const char *Name, const char *Value, const char *Plugin = NULL);
++  virtual ~cSetupLine();
++  virtual int Compare(const cListObject &ListObject) const;
++  const char *Plugin(void) { return plugin; }
++  const char *Name(void) { return name; }
++  const char *Value(void) { return value; }
++  bool Parse(char *s);
++  bool Save(FILE *f);
++  };
++
++class cSetup : public cConfig<cSetupLine> {
++  friend class cPlugin; // needs to be able to call Store()
++private:
++  void StoreLanguages(const char *Name, int *Values);
++  bool ParseLanguages(const char *Value, int *Values);
++  bool Parse(const char *Name, const char *Value);
++  cSetupLine *Get(const char *Name, const char *Plugin = NULL);
++  void Store(const char *Name, const char *Value, const char *Plugin = NULL, bool AllowMultiple = false);
++  void Store(const char *Name, int Value, const char *Plugin = NULL);
++public:
++  // Also adjust cMenuSetup (menu.c) when adding parameters here!
++  int __BeginData__;
++  int OSDLanguage;
++  char OSDSkin[MaxSkinName];
++  char OSDTheme[MaxThemeName];
++  int PrimaryDVB;
++  int ShowInfoOnChSwitch;
++  int TimeoutRequChInfo;
++  int MenuScrollPage;
++  int MenuScrollWrap;
++  int MenuButtonCloses;
++  int MarkInstantRecord;
++  char NameInstantRecord[MaxFileName];
++  int InstantRecordTime;
++  int LnbSLOF;
++  int LnbFrequLo;
++  int LnbFrequHi;
++  int DiSEqC;
++  int SetSystemTime;
++  int TimeSource;
++  int TimeTransponder;
++  int MarginStart, MarginStop;
++  int AudioLanguages[I18nNumLanguages + 1];
++  int EPGLanguages[I18nNumLanguages + 1];
++  int EPGScanTimeout;
++  int EPGBugfixLevel;
++  int EPGLinger;
++  int SVDRPTimeout;
++  int ZapTimeout;
++  int PrimaryLimit;
++  int DefaultPriority, DefaultLifetime;
++  int PausePriority, PauseLifetime;
++  int UseSubtitle;
++  int UseVps;
++  int VpsMargin;
++  int RecordingDirs;
++  int VideoDisplayFormat;
++  int VideoFormat;
++  int UpdateChannels;
++  int UseDolbyDigital;
++  int ChannelInfoPos;
++  int ChannelInfoTime;
++  int OSDLeft, OSDTop, OSDWidth, OSDHeight;
++  int OSDMessageTime;
++  int UseSmallFont;
++  int MaxVideoFileSize;
++  int SplitEditedFiles;
++  int MinEventTimeout, MinUserInactivity;
++  int MultiSpeedMode;
++  int ShowReplayMode;
++  int ResumeID;
++  int CurrentChannel;
++  int CurrentVolume;
++  int CurrentDolby;
++  int InitialChannel;
++  int InitialVolume;
++  int __EndData__;
++  cSetup(void);
++  cSetup& operator= (const cSetup &s);
++  bool Load(const char *FileName);
++  bool Save(void);
++  };
++
++extern cSetup Setup;
++
++#endif //__CONFIG_H
+diff -urNad vdr-1.4.7~/device.c vdr-1.4.7/device.c
+--- vdr-1.4.7~/device.c	2006-09-03 12:13:25.000000000 +0200
++++ vdr-1.4.7/device.c	2007-10-29 19:38:07.000000000 +0100
+@@ -509,6 +509,11 @@
+   return -1;
+ }
+ 
++void cDevice::CloseFilter(int Handle)
++{
++  close(Handle);
++}
++
+ void cDevice::AttachFilter(cFilter *Filter)
+ {
+   if (sectionHandler)
+diff -urNad vdr-1.4.7~/device.h vdr-1.4.7/device.h
+--- vdr-1.4.7~/device.h	2006-06-15 11:32:48.000000000 +0200
++++ vdr-1.4.7/device.h	2007-10-29 19:38:07.000000000 +0100
+@@ -302,6 +302,11 @@
+        ///< Opens a file handle for the given filter data.
+        ///< A derived device that provides section data must
+        ///< implement this function.
++  virtual void CloseFilter(int Handle);
++       ///< Closes a file handle that has previously been opened
++       ///< by OpenFilter(). If this is as simple as calling close(Handle),
++       ///< a derived class need not implement this function, because this
++       ///< is done by the default implementation.
+   void AttachFilter(cFilter *Filter);
+        ///< Attaches the given filter to this device.
+   void Detach(cFilter *Filter);
+diff -urNad vdr-1.4.7~/dvbdevice.c vdr-1.4.7/dvbdevice.c
+--- vdr-1.4.7~/dvbdevice.c	2007-02-24 12:10:14.000000000 +0100
++++ vdr-1.4.7/dvbdevice.c	2007-10-29 19:38:07.000000000 +0100
+@@ -726,6 +726,11 @@
+   return -1;
+ }
+ 
++void cDvbDevice::CloseFilter(int Handle)
++{
++  close(Handle);
++}
++
+ void cDvbDevice::TurnOffLiveMode(bool LiveView)
+ {
+   if (LiveView) {
+diff -urNad vdr-1.4.7~/dvbdevice.h vdr-1.4.7/dvbdevice.h
+--- vdr-1.4.7~/dvbdevice.h	2006-05-28 17:05:19.000000000 +0200
++++ vdr-1.4.7/dvbdevice.h	2007-10-29 19:38:07.000000000 +0100
+@@ -79,6 +79,7 @@
+ 
+ protected:
+   virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
++  virtual void CloseFilter(int Handle);
+ 
+ // Image Grab facilities
+ 
+diff -urNad vdr-1.4.7~/i18n.c vdr-1.4.7/i18n.c
+--- vdr-1.4.7~/i18n.c	2007-02-25 13:08:26.000000000 +0100
++++ vdr-1.4.7/i18n.c	2007-10-29 19:37:57.000000000 +0100
+@@ -6126,6 +6126,28 @@
+     "Ingen titel",
+     "Bez názvu",
+   },
++  { "Parameters",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "Parametrit",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
+   { NULL }
+   };
+ 
+diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
+--- vdr-1.4.7~/menu.c	2006-12-02 12:12:02.000000000 +0100
++++ vdr-1.4.7/menu.c	2007-10-29 19:37:57.000000000 +0100
+@@ -216,6 +216,7 @@
+   cChannel *channel;
+   cChannel data;
+   char name[256];
++  char pluginParam[256];
+   void Setup(void);
+ public:
+   cMenuEditChannel(cChannel *Channel, bool New = false);
+@@ -248,6 +249,7 @@
+ 
+   // Parameters for all types of sources:
+   strn0cpy(name, data.name, sizeof(name));
++  strn0cpy(pluginParam, data.pluginParam, sizeof(pluginParam));
+   Add(new cMenuEditStrItem( tr("Name"),          name, sizeof(name), tr(FileNameChars)));
+   Add(new cMenuEditSrcItem( tr("Source"),       &data.source));
+   Add(new cMenuEditIntItem( tr("Frequency"),    &data.frequency));
+@@ -276,6 +278,7 @@
+   ST("  T")  Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
+   ST("  T")  Add(new cMenuEditMapItem( tr("Guard"),        &data.guard,        GuardValues));
+   ST("  T")  Add(new cMenuEditMapItem( tr("Hierarchy"),    &data.hierarchy,    HierarchyValues, tr("none")));
++  ST("P  ")  Add(new cMenuEditStrItem( tr("Parameters"),    pluginParam, sizeof(pluginParam), tr(FileNameChars)));
+ 
+   SetCurrent(Get(current));
+   Display();
+@@ -290,6 +293,7 @@
+      if (Key == kOk) {
+         if (Channels.HasUniqueChannelID(&data, channel)) {
+            data.name = strcpyrealloc(data.name, name);
++           data.pluginParam = strcpyrealloc(data.pluginParam, pluginParam);
+            if (channel) {
+               *channel = data;
+               isyslog("edited channel %d %s", channel->Number(), *data.ToText());
+diff -urNad vdr-1.4.7~/sections.c vdr-1.4.7/sections.c
+--- vdr-1.4.7~/sections.c	2005-09-18 13:30:29.000000000 +0200
++++ vdr-1.4.7/sections.c	2007-10-29 19:38:07.000000000 +0100
+@@ -105,7 +105,7 @@
+   for (fh = filterHandles.First(); fh; fh = filterHandles.Next(fh)) {
+       if (fh->filterData.Is(FilterData->pid, FilterData->tid, FilterData->mask)) {
+          if (--fh->used <= 0) {
+-            close(fh->handle);
++            device->CloseFilter(fh->handle);
+             filterHandles.Del(fh);
+             break;
+             }
+diff -urNad vdr-1.4.7~/sources.c vdr-1.4.7/sources.c
+--- vdr-1.4.7~/sources.c	2004-12-26 12:58:52.000000000 +0100
++++ vdr-1.4.7/sources.c	2007-10-29 19:37:57.000000000 +0100
+@@ -37,6 +37,7 @@
+   char buffer[16];
+   char *q = buffer;
+   switch (Code & st_Mask) {
++    case stPlug:  *q++ = 'P'; break;
+     case stCable: *q++ = 'C'; break;
+     case stSat:   *q++ = 'S';
+                   {
+@@ -56,6 +57,7 @@
+ {
+   int type = stNone;
+   switch (toupper(*s)) {
++    case 'P': type = stPlug;  break;
+     case 'C': type = stCable; break;
+     case 'S': type = stSat;   break;
+     case 'T': type = stTerr;  break;
+diff -urNad vdr-1.4.7~/sources.conf vdr-1.4.7/sources.conf
+--- vdr-1.4.7~/sources.conf	2007-02-17 17:15:13.000000000 +0100
++++ vdr-1.4.7/sources.conf	2007-10-29 19:37:57.000000000 +0100
+@@ -188,3 +188,7 @@
+ # Terrestrial
+ 
+ T       Terrestrial
++
++# Plugin
++
++P       Plugin
+diff -urNad vdr-1.4.7~/sources.h vdr-1.4.7/sources.h
+--- vdr-1.4.7~/sources.h	2005-05-14 11:30:41.000000000 +0200
++++ vdr-1.4.7/sources.h	2007-10-29 19:37:57.000000000 +0100
+@@ -16,10 +16,11 @@
+ public:
+   enum eSourceType {
+     stNone  = 0x0000,
++    stPlug  = 0x2000,
+     stCable = 0x4000,
+     stSat   = 0x8000,
+     stTerr  = 0xC000,
+-    st_Mask = 0xC000,
++    st_Mask = 0xE000,
+     st_Neg  = 0x0800,
+     st_Pos  = 0x07FF,
+     };
+@@ -35,6 +36,7 @@
+   static cString ToString(int Code);
+   static int FromString(const char *s);
+   static int FromData(eSourceType SourceType, int Position = 0, bool East = false);
++  static bool IsPlug(int Code) { return (Code & st_Mask) == stPlug; }
+   static bool IsCable(int Code) { return (Code & st_Mask) == stCable; }
+   static bool IsSat(int Code) { return (Code & st_Mask) == stSat; }
+   static bool IsTerr(int Code) { return (Code & st_Mask) == stTerr; }

Added: vdr/vdr/trunk/debian/patches/opt-37-x_menuorg.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-37-x_menuorg.dpatch?rev=5638&op=file
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-37-x_menuorg.dpatch (added)
+++ vdr/vdr/trunk/debian/patches/opt-37-x_menuorg.dpatch Mon Oct 29 19:27:05 2007
@@ -1,0 +1,274 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-37-x_menuorg.dpatch by Tobias Grimm <tg at e-tobi.net>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch is required by the MenuOrg plugin. It adds a service
+## DP: interface, that can be implemented by plugins to reorganize 
+## DP: VDR's main menu entries with the ability to create custom sub
+## DP: menus.
+
+ at DPATCH@
+diff -urNad vdr-1.4.7~/mainmenuitemsprovider.h vdr-1.4.7/mainmenuitemsprovider.h
+--- vdr-1.4.7~/mainmenuitemsprovider.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.4.7/mainmenuitemsprovider.h	2007-08-22 21:30:20.000000000 +0200
+@@ -0,0 +1,57 @@
++/*
++ * vdr-menuorg - A plugin for the Linux Video Disk Recorder
++ * Copyright (C) 2007 Thomas Creutz, Tobias Grimm
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ *
++ * $Id:$
++ *
++ */
++
++#ifndef __MAINMENUITEMSPROVIDER_H
++#define __MAINMENUITEMSPROVIDER_H
++
++#include <vector>
++
++class cOsdItem;
++class cOsdMenu;
++
++class IMenuItemDefinition
++{
++    public:
++        virtual ~IMenuItemDefinition() {};
++        virtual bool IsCustomOsdItem() = 0;
++        virtual bool IsPluginItem() = 0;
++        virtual cOsdItem* CustomOsdItem() = 0;
++        virtual const char* PluginMenuEntry() = 0;
++        virtual int PluginIndex() = 0;
++};
++
++typedef std::vector<IMenuItemDefinition*> MenuItemDefinitions;
++
++#define MENU_ITEMS_PROVIDER_SERVICE_ID "MenuOrgPatch-v0.1::MainMenuItemsProvider"
++
++class IMainMenuItemsProvider
++{
++    public:
++        virtual ~IMainMenuItemsProvider() {};
++        virtual MenuItemDefinitions* MainMenuItems() = 0;
++        virtual void EnterRootMenu() = 0;
++        virtual void EnterSubMenu(cOsdItem* item) = 0;
++        virtual bool LeaveSubMenu() = 0;
++        virtual cOsdMenu* Execute(cOsdItem* item) = 0;
++};
++
++#endif //__MAINMENUITEMSPROVIDER_H
+diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
+--- vdr-1.4.7~/menu.c	2007-08-22 21:30:20.000000000 +0200
++++ vdr-1.4.7/menu.c	2007-08-22 21:30:20.000000000 +0200
+@@ -14,6 +14,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <math.h>
++#include "menuorgpatch.h"
+ #include "channels.h"
+ #include "config.h"
+ #include "cutter.h"
+@@ -3057,6 +3058,9 @@
+   cancelEditingItem = NULL;
+   stopRecordingItem = NULL;
+   recordControlsState = 0;
++
++  MenuOrgPatch::EnterRootMenu();
++
+   Set();
+ 
+   // Initial submenus:
+@@ -3084,6 +3088,25 @@
+   Clear();
+   SetTitle("VDR");
+   SetHasHotkeys();
++  
++  if (MenuOrgPatch::IsCustomMenuAvailable()) {
++    MenuItemDefinitions* menuItems = MenuOrgPatch::MainMenuItems();
++    for (MenuItemDefinitions::iterator i = menuItems->begin(); i != menuItems->end(); i++) {       
++      if ((*i)->IsCustomOsdItem()) {
++        cOsdItem* osdItem = (*i)->CustomOsdItem();
++        if (osdItem) {
++          osdItem->SetText(hk(osdItem->Text()));
++          Add(osdItem);
++          }
++        }
++      else  if ((*i)->IsPluginItem()) {
++        const char *item = (*i)->PluginMenuEntry();
++        if (item)
++          Add(new cMenuPluginItem(hk(item), (*i)->PluginIndex()));
++        }
++      }
++    }
++  else {
+ 
+   // Basic menu items:
+ 
+@@ -3111,6 +3134,8 @@
+   if (Commands.Count())
+      Add(new cOsdItem(hk(tr("Commands")),  osCommands));
+ 
++  }
++
+   Update(true);
+ 
+   Display();
+@@ -3238,6 +3263,41 @@
+                          state = osEnd;
+                        }
+                        break;
++    case osBack:       {
++                          if (MenuOrgPatch::IsCustomMenuAvailable())
++                          {
++                            bool leavingMenuSucceeded = MenuOrgPatch::LeaveSubMenu();
++                            Set();
++                            stopReplayItem = NULL;
++                            cancelEditingItem = NULL;
++                            stopRecordingItem = NULL;
++                            recordControlsState = 0;
++                            Update(true);
++                            Display();
++                            if (leavingMenuSucceeded)
++                              return osContinue;
++                            else
++                              return osEnd;
++                          }
++                       }
++                       break;
++    case osUser1:      {
++                          if (MenuOrgPatch::IsCustomMenuAvailable()) {
++                            MenuOrgPatch::EnterSubMenu(Get(Current()));
++                            Set();
++                            return osContinue;
++                          }
++                       }
++                       break;
++    case osUser2:      {
++                          if (MenuOrgPatch::IsCustomMenuAvailable()) {
++                            cOsdMenu* osdMenu = MenuOrgPatch::Execute(Get(Current()));
++                            if (osdMenu)
++                              return AddSubMenu(osdMenu);
++                            return osEnd;
++                          }
++                       }
++                       break;
+     default: switch (Key) {
+                case kRecord:
+                case kRed:    if (!HadSubMenu)
+diff -urNad vdr-1.4.7~/menuorgpatch.h vdr-1.4.7/menuorgpatch.h
+--- vdr-1.4.7~/menuorgpatch.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.4.7/menuorgpatch.h	2007-08-22 21:31:33.000000000 +0200
+@@ -0,0 +1,101 @@
++/*
++ * vdr-menuorg - A plugin for the Linux Video Disk Recorder
++ * Copyright (C) 2007 Thomas Creutz, Tobias Grimm
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ *
++ * $Id:$
++ *
++ */
++
++#ifndef __MENUORGPATCH_H
++#define __MENUORGPATCH_H
++
++#include "mainmenuitemsprovider.h"
++#include "plugin.h"
++
++class MenuOrgPatch
++{
++    private:
++        static IMainMenuItemsProvider* _mainMenuItemsProvider;
++
++    private:
++        static IMainMenuItemsProvider* MainMenuItemsProvider()
++        {
++            if (!_mainMenuItemsProvider)
++            {
++                IMainMenuItemsProvider* mainMenuItemsProvider;
++            
++                if (cPluginManager::CallFirstService(MENU_ITEMS_PROVIDER_SERVICE_ID, &mainMenuItemsProvider))
++                {
++                    _mainMenuItemsProvider = mainMenuItemsProvider;
++                }
++            }
++            return _mainMenuItemsProvider;
++        }
++
++    public:
++        static bool IsCustomMenuAvailable()
++        {
++            return (MainMenuItemsProvider() != NULL);
++        }
++        
++        static void EnterRootMenu()
++        {
++            if (MainMenuItemsProvider())
++            {
++                MainMenuItemsProvider()->EnterRootMenu();
++            }
++        }
++
++        static bool LeaveSubMenu()
++        {
++            if (MainMenuItemsProvider())
++            {
++                return MainMenuItemsProvider()->LeaveSubMenu();
++            }
++            return false;
++        }
++        
++        static void EnterSubMenu(cOsdItem* item)
++        {
++            if (MainMenuItemsProvider())
++            {
++                MainMenuItemsProvider()->EnterSubMenu(item);
++            }
++        }
++        
++        static MenuItemDefinitions* MainMenuItems()
++        {
++            if (MainMenuItemsProvider())
++            {
++                return MainMenuItemsProvider()->MainMenuItems();
++            }
++            return NULL;
++        }
++        
++        static cOsdMenu* Execute(cOsdItem* item)
++        {
++            if (MainMenuItemsProvider())
++            {
++                return MainMenuItemsProvider()->Execute(item);
++            }
++            return NULL;
++        }
++};
++
++IMainMenuItemsProvider* MenuOrgPatch::_mainMenuItemsProvider = NULL;
++
++#endif //__MENUORGPATCH_H

Modified: vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch?rev=5638&op=diff
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch (original)
+++ vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch Mon Oct 29 19:27:05 2007
@@ -1,6 +1,6 @@
 #! /bin/sh /usr/share/dpatch/dpatch-run
-## opt-39_noepg.dpatch by Torsten Kunkel <vdr at tkunkel.de>
-## extracted from noepg plugin version 0.0.2 (vdr-1.3.41-plain.patch)
+## opt-39_noepg.dpatch by Torsten/WarEagle at vdrportal.de
+## http://vdrportal.de/board/thread.php?postid=658080#post658080
 ##
 ## Thomas Günther <tom at toms-cafe.de>:
 ##   - solved conflicts with other patches
@@ -10,93 +10,136 @@
 ## DP: This is useful if you get epg data of the channels from external sources.
 
 @DPATCH@
---- vdr-1.3.41/channels.c
-+++ vdr-1.3.41/channels.c
-@@ -7,6 +7,7 @@
-  * $Id: channels.c 1.48 2006/01/14 15:51:02 kls Exp $
-  */
+diff -ur vdr-1.4.7-org/config.c vdr-1.4.7+noEPG/config.c
+--- vdr-1.4.7-org/config.c	2007-01-26 14:32:19.000000000 +0100
++++ vdr-1.4.7+noEPG/config.c	2007-10-20 22:30:44.000000000 +0200
+@@ -277,1 +277,3 @@
+-  InitialVolume = -1;
++  InitialVolume = -1;
++  noEPGMode = 0;
++  noEPGList=strdup("");
+@@ -432,1 +434,6 @@
+-  else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
++  else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
++  else if (!strcasecmp(Name, "noEPGMode"))           noEPGMode          = atoi(Value);
++  else if (!strcasecmp(Name, "noEPGList")){
++    free(noEPGList);
++    noEPGList=strdup(Value);
++  }
+@@ -506,1 +513,3 @@
+-  Store("InitialVolume",      InitialVolume);
++  Store("InitialVolume",      InitialVolume);
++  Store("noEPGMode",          noEPGMode);
++  Store("noEPGList",          noEPGList);
+diff -ur vdr-1.4.7-org/config.h vdr-1.4.7+noEPG/config.h
+--- vdr-1.4.7-org/config.h	2007-05-12 11:07:16.000000000 +0200
++++ vdr-1.4.7+noEPG/config.h	2007-10-13 18:45:46.000000000 +0200
+@@ -254,1 +254,3 @@
+-  int InitialVolume;
++  int InitialVolume;
++  char *noEPGList;
++  int noEPGMode;
+diff -ur vdr-1.4.7-org/eit.c vdr-1.4.7+noEPG/eit.c
+--- vdr-1.4.7-org/eit.c	2006-10-09 18:14:36.000000000 +0200
++++ vdr-1.4.7+noEPG/eit.c	2007-10-13 18:45:46.000000000 +0200
+@@ -22,8 +22,28 @@
+ class cEIT : public SI::EIT {
+ public:
+   cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bool OnlyRunningStatus = false);
++private:
++  bool allowedEPG(tChannelID kanalID);
+   };
  
-+#include "config.h"
- #include "channels.h"
- #include <linux/dvb/frontend.h>
- #include <ctype.h>
-@@ -1030,6 +1031,17 @@
-   return NULL;
- }
- 
-+//TK
-+bool cChannels::keinEPGScan(tChannelID kanalID)
-+{
-+  bool rc=false;
++bool cEIT::allowedEPG(tChannelID kanalID){
++  bool rc;
 +
-+  if (strstr(::Setup.noEPG,kanalID.ToString())!=NULL){
++  if (Setup.noEPGMode == 1){
++    rc=false;
++    if (strstr(::Setup.noEPGList,kanalID.ToString())!=NULL){
++      rc=true;
++    }
++  }else{
 +    rc=true;
++    if (strstr(::Setup.noEPGList,kanalID.ToString())!=NULL){
++      rc=false;
++    }
 +  }
++
 +  return rc;
 +}
 +
- cString ChannelString(const cChannel *Channel, int Number)
+ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bool OnlyRunningStatus)
+ :SI::EIT(Data, false)
  {
-   char buffer[256];
---- vdr-1.3.41/channels.h
-+++ vdr-1.3.41/channels.h
-@@ -248,6 +248,7 @@
-       ///< modification has been made, and 2 if the user has made a modification.
-       ///< Calling this function resets the 'modified' flag to 0.
-   cChannel *NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid = 0);
-+  bool keinEPGScan(tChannelID kanalID);//TK
-   };
- 
- extern cChannels Channels;
---- vdr-1.3.41/config.c
-+++ vdr-1.3.41/config.c
-@@ -238,6 +238,7 @@
-   EPGScanTimeout = 5;
-   EPGBugfixLevel = 3;
-   EPGLinger = 0;
-+  strcpy(noEPG, "");
-   SVDRPTimeout = 300;
-   ZapTimeout = 3;
-   SortTimers = 1;
-@@ -398,6 +399,7 @@
-   else if (!strcasecmp(Name, "EPGScanTimeout"))      EPGScanTimeout     = atoi(Value);
-   else if (!strcasecmp(Name, "EPGBugfixLevel"))      EPGBugfixLevel     = atoi(Value);
-   else if (!strcasecmp(Name, "EPGLinger"))           EPGLinger          = atoi(Value);
-+  else if (!strcasecmp(Name, "noEPG"))               strn0cpy(noEPG, Value, 999);
-   else if (!strcasecmp(Name, "SVDRPTimeout"))        SVDRPTimeout       = atoi(Value);
-   else if (!strcasecmp(Name, "ZapTimeout"))          ZapTimeout         = atoi(Value);
-   else if (!strcasecmp(Name, "SortTimers"))          SortTimers         = atoi(Value);
-@@ -465,6 +467,7 @@
-   Store("EPGScanTimeout",     EPGScanTimeout);
-   Store("EPGBugfixLevel",     EPGBugfixLevel);
-   Store("EPGLinger",          EPGLinger);
-+  Store("noEPG",              noEPG);
-   Store("SVDRPTimeout",       SVDRPTimeout);
-   Store("ZapTimeout",         ZapTimeout);
-   Store("SortTimers",         SortTimers);
---- vdr-1.3.41/config.h
-+++ vdr-1.3.41/config.h
-@@ -210,6 +210,7 @@
-   int EPGScanTimeout;
-   int EPGBugfixLevel;
-   int EPGLinger;
-+  char noEPG[999];
-   int SVDRPTimeout;
-   int ZapTimeout;
-   int SortTimers;
---- vdr-1.3.41/eit.c
-+++ vdr-1.3.41/eit.c
-@@ -35,6 +35,13 @@
+@@ -35,6 +55,15 @@
    if (!channel)
       return; // only collect data for known channels
  
-+  //TK
++  // noepg >>>
++  //only use epg from channels not blocked by noEPG-patch
 +  tChannelID kanalID;
 +  kanalID=channel->GetChannelID();
-+  if (Channels.keinEPGScan(kanalID)){
++  if (!allowedEPG(kanalID)){
 +    return;
 +  }
++  // noepg <<<
 +
    cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true);
  
    bool Empty = true;
+diff -ur vdr-1.4.7-org/i18n.c vdr-1.4.7+noEPG/i18n.c
+--- vdr-1.4.7-org/i18n.c	2007-02-25 13:08:26.000000000 +0100
++++ vdr-1.4.7+noEPG/i18n.c	2007-10-13 18:45:46.000000000 +0200
+@@ -3414,6 +3414,27 @@
+     "Tid før EPG skanning (t)",
+     "Èasový limit pro snímání EPG (h)",
+   },
++  { "Setup.EPG$Mode of noEPG-Patch",
++    "Art des noEPG-Patches",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++  },
+   { "Setup.EPG$EPG bugfix level",
+     "EPG-Fehlerbereinigung",
+     "Nivo za popravilo EPG napak",
+diff -ur vdr-1.4.7-org/menu.c vdr-1.4.7+noEPG/menu.c
+--- vdr-1.4.7-org/menu.c	2006-12-02 12:12:02.000000000 +0100
++++ vdr-1.4.7+noEPG/menu.c	2007-10-13 18:46:08.000000000 +0200
+@@ -2230,6 +2230,7 @@
+ 
+ class cMenuSetupEPG : public cMenuSetupBase {
+ private:
++  const char *noEPGModes[2];
+   int originalNumLanguages;
+   int numLanguages;
+   void Setup(void);
+@@ -2252,6 +2253,9 @@
+ {
+   int current = Current();
+ 
++  noEPGModes[0]=tr("Blacklist");
++  noEPGModes[1]=tr("Whitelist");
++
+   Clear();
+ 
+   Add(new cMenuEditIntItem( tr("Setup.EPG$EPG scan timeout (h)"),      &data.EPGScanTimeout));
+@@ -2264,1 +2269,2 @@
+-     Add(new cMenuEditStraItem(tr("Setup.EPG$Preferred language"),     &data.EPGLanguages[i], I18nNumLanguages, I18nLanguages()));
++     Add(new cMenuEditStraItem(tr("Setup.EPG$Preferred language"),     &data.EPGLanguages[i], I18nNumLanguages, I18nLanguages()));
++  Add(new cMenuEditStraItem(tr("Setup.EPG$Mode noEPG-Patch"),          &data.noEPGMode, 2, noEPGModes));

Added: vdr/vdr/trunk/debian/patches/opt-43-x_recordshowfree.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-43-x_recordshowfree.dpatch?rev=5638&op=file
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-43-x_recordshowfree.dpatch (added)
+++ vdr/vdr/trunk/debian/patches/opt-43-x_recordshowfree.dpatch Mon Oct 29 19:27:05 2007
@@ -1,0 +1,31 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-32-x_recordshowfree.dpatch by Walter Koch <koch at u32.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Shows remaining recording capacity in recordings menu.
+## DP: (Requires timer-info patch)
+
+ at DPATCH@
+diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
+--- vdr-1.4.7~/menu.c	2007-07-01 21:00:57.000000000 +0200
++++ vdr-1.4.7/menu.c	2007-07-01 21:01:09.000000000 +0200
+@@ -2309,6 +2309,19 @@
+          }
+       }
+   free(LastItemText);
++  
++//kw
++  char *buffer = NULL;
++  int FreeMB;
++  int Percent = VideoDiskSpace(&FreeMB);
++  int Minutes = int(double(FreeMB) / MB_PER_MINUTE);
++  int Hours = Minutes / 60;
++  Minutes %= 60;
++  asprintf(&buffer, "%s   %d%%  %2d:%02d %s  (%.1f GB)", tr("Disk"), Percent, Hours, Minutes, tr("free"), FreeMB / 1024.0 );
++  SetTitle(buffer);
++  free(buffer);
++//kw
++  
+   if (Refresh)
+      Display();
+ }

Added: vdr/vdr/trunk/debian/patches/opt-48-x_pin.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-48-x_pin.dpatch?rev=5638&op=file
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-48-x_pin.dpatch (added)
+++ vdr/vdr/trunk/debian/patches/opt-48-x_pin.dpatch Mon Oct 29 19:27:05 2007
@@ -1,0 +1,628 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-48_pin.dpatch by Jörg Wendel (Horchi)
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch for the PIN plugin from version 0.1.7 of the Plugin
+## (vdr-1.4.5.diff)
+
+ at DPATCH@
+diff -urNad vdr-1.4.7~/Makefile vdr-1.4.7/Makefile
+--- vdr-1.4.7~/Makefile	2007-08-24 00:09:08.000000000 +0200
++++ vdr-1.4.7/Makefile	2007-08-24 00:09:09.000000000 +0200
+@@ -42,6 +42,8 @@
+ 
+ OBJS += osdcontroller.o rcontroller.o dvbsub.o vdrttxtsubshooks.o
+ 
++OBJS += childlock.o
++
+ FIXFONT_ISO8859_1 = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
+ OSDFONT_ISO8859_1 = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
+ SMLFONT_ISO8859_1 = -adobe-helvetica-medium-r-normal--18-*-100-100-p-*-iso8859-1
+diff -urNad vdr-1.4.7~/childlock.c vdr-1.4.7/childlock.c
+--- vdr-1.4.7~/childlock.c	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.4.7/childlock.c	2007-08-24 00:09:09.000000000 +0200
+@@ -0,0 +1,166 @@
++#include "childlock.h"
++#include "childlockservice.h"
++#include "plugin.h"
++
++using namespace PinPatch;
++
++IChildLockService* ChildLock::_cachedChildLockService = NULL;
++INotificationService* ChildLock::_cachedNotificationService = NULL;
++
++IChildLockService* ChildLock::ChildLockService()
++{
++    if (!_cachedChildLockService)
++    {
++        IChildLockService* childLockService;
++
++        if (cPluginManager::CallFirstService(CHILDLOCK_SERVICE_ID, &childLockService))
++        {
++            _cachedChildLockService = childLockService;
++        }
++        else
++        {
++            _cachedChildLockService = NULL;
++        }
++    }
++
++    return _cachedChildLockService;
++}
++
++bool ChildLock::IsUnlocked()
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsUnlocked();
++    }
++    else
++    {
++        return false;
++    }
++}
++
++bool ChildLock::IsMenuProtected(const char* MenuName)
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsMenuProtected(MenuName);
++    }
++    else
++    {
++        return false;
++    }
++}
++
++bool ChildLock::IsChannelProtected(const cChannel* Channel)
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsChannelProtected(Channel);
++    }
++    else
++    {
++        return false;
++    }
++}
++
++bool ChildLock::IsRecordingProtected(const cRecording* Recording, const char* Name, const char* Base, bool isDirectory)
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsRecordingProtected(Recording, Name, Base, isDirectory);
++    }
++    else
++    {
++        return false;
++    }
++}
++
++bool ChildLock::IsPluginProtected(cPlugin* Plugin)
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsPluginProtected(Plugin);
++    }
++    else
++    {
++        return false;
++    }
++}
++
++bool ChildLock::IsMenuHidden(const char* MenuName)
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsMenuHidden(MenuName);
++    }
++    else
++    {
++        return false;
++    }
++}
++
++bool ChildLock::IsPluginHidden(cPlugin* Plugin)
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsPluginHidden(Plugin);
++    }
++    else
++    {
++        return false;
++    }
++}
++
++bool ChildLock::IsRecordingHidden(const cRecording* Recording, const char* Name, const char* Base, bool isDirectory)
++{
++    if (IChildLockService* childLockService = ChildLockService())
++    {
++        return childLockService->IsRecordingHidden(Recording, Name, Base, isDirectory);
++    }
++    else
++    {
++        return false;
++    }
++}
++
++INotificationService* ChildLock::NotificationService()
++{
++    if (!_cachedNotificationService)
++    {
++        INotificationService* notificationService;
++
++        if (cPluginManager::CallFirstService(NOTIFICATION_SERVICE_ID, &notificationService))
++        {
++            _cachedNotificationService = notificationService;
++        }
++        else
++        {
++            _cachedNotificationService = NULL;
++        }
++    }
++
++    return _cachedNotificationService;
++}
++
++void ChildLock::NotifyTimerCreation(cTimer* Timer, const cEvent *Event)
++{
++    if (INotificationService* notificationService = NotificationService())
++    {
++        notificationService->NotifyTimerCreation(Timer, Event);
++    }
++}
++
++void ChildLock::NotifyRecordingStart(const char* FileName)
++{
++    if (INotificationService* notificationService = NotificationService())
++    {
++        notificationService->NotifyRecordingStart(FileName);
++    }
++}
++
++void ChildLock::NotifyUserAction(const eKeys key, const cOsdObject* Interact)
++{
++    if (INotificationService* notificationService = NotificationService())
++    {
++        notificationService->NotifyUserAction(key, Interact);
++    }
++}
+diff -urNad vdr-1.4.7~/childlock.h vdr-1.4.7/childlock.h
+--- vdr-1.4.7~/childlock.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.4.7/childlock.h	2007-08-24 00:09:09.000000000 +0200
+@@ -0,0 +1,47 @@
++#ifndef __CHILDLOCK_H
++#define __CHILDLOCK_H
++
++#include "keys.h"
++
++class cChannel;
++class cRecording;
++class cPlugin;
++class cTimer;
++class cEvent;
++class cOsdObject;
++
++namespace PinPatch
++{
++
++class IChildLockService;
++class INotificationService;
++
++class ChildLock
++{
++    private:
++        static IChildLockService* _cachedChildLockService;
++        static INotificationService* _cachedNotificationService;
++        
++    private:
++        static IChildLockService* ChildLockService();
++        static INotificationService* NotificationService();
++
++    public:
++        static bool IsUnlocked();
++
++        static bool IsMenuProtected(const char* MenuName);
++        static bool IsChannelProtected(const cChannel* Channel);
++        static bool IsRecordingProtected(const cRecording* Recording, const char* Name, const char* Base, bool isDirectory);
++        static bool IsPluginProtected(cPlugin* Plugin);
++        
++        static bool IsMenuHidden(const char* MenuName);
++        static bool IsPluginHidden(cPlugin* Plugin);
++        static bool IsRecordingHidden(const cRecording* Recording, const char* Name, const char* Base, bool isDirectory);
++        
++        static void NotifyTimerCreation(cTimer* Timer, const cEvent *Event);
++        static void NotifyRecordingStart(const char* FileName);
++        static void NotifyUserAction(const eKeys key, const cOsdObject* Interact);
++};
++
++};
++#endif
+diff -urNad vdr-1.4.7~/childlockservice.h vdr-1.4.7/childlockservice.h
+--- vdr-1.4.7~/childlockservice.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.4.7/childlockservice.h	2007-08-24 00:09:23.000000000 +0200
+@@ -0,0 +1,46 @@
++#ifndef __CHILDLOCKSERVICE_H
++#define __CHILDLOCKSERVICE_H
++
++#include "keys.h"
++
++class cChannel;
++class cRecording;
++class cPlugin;
++class cTimer;
++class cEvent;
++class cOsdObject;
++
++namespace PinPatch
++{
++
++#define CHILDLOCK_SERVICE_ID "ChildLockService-v0.1::ChildLockService"
++
++class IChildLockService
++{
++    public:
++        virtual ~IChildLockService() {};
++        virtual bool IsUnlocked() = 0;
++
++        virtual bool IsMenuProtected(const char* MenuName) = 0;
++        virtual bool IsChannelProtected(const cChannel* Channel) = 0;
++        virtual bool IsRecordingProtected(const cRecording* Recording, const char* Name, const char* Base, bool isDirectory) = 0;
++        virtual bool IsPluginProtected(cPlugin* Plugin) = 0;
++        
++        virtual bool IsMenuHidden(const char* MenuName) = 0;
++        virtual bool IsPluginHidden(cPlugin* Plugin) = 0;
++        virtual bool IsRecordingHidden(const cRecording* Recording, const char* Name, const char* Base, bool isDirectory) = 0;
++};
++
++#define NOTIFICATION_SERVICE_ID "PinPlugin-v0.1::NotificationService"
++
++class INotificationService
++{
++    public:
++        virtual ~INotificationService() {};
++        virtual void NotifyTimerCreation(cTimer* Timer, const cEvent *Event) = 0;
++        virtual void NotifyRecordingStart(const char* FileName) = 0;
++        virtual void NotifyUserAction(const eKeys key, const cOsdObject* Interact) = 0;
++};
++
++};
++#endif
+diff -urNad vdr-1.4.7~/device.c vdr-1.4.7/device.c
+--- vdr-1.4.7~/device.c	2007-08-24 00:09:08.000000000 +0200
++++ vdr-1.4.7/device.c	2007-08-24 00:09:09.000000000 +0200
+@@ -18,6 +18,7 @@
+ #include "receiver.h"
+ #include "status.h"
+ #include "transfer.h"
++#include "childlock.h"
+ 
+ // --- cPesAssembler ---------------------------------------------------------
+ 
+@@ -596,6 +597,7 @@
+      cChannel *channel;
+      while ((channel = Channels.GetByNumber(n, Direction)) != NULL) {
+            // try only channels which are currently available
++           if (PinPatch::ChildLock::IsChannelProtected(channel) == false)
+            if (PrimaryDevice()->ProvidesChannel(channel, Setup.PrimaryLimit) || PrimaryDevice()->CanReplay() && GetDevice(channel, 0))
+               break;
+            n = channel->Number() + Direction;
+@@ -617,6 +619,9 @@
+ 
+ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
+ {
++  if (LiveView && PinPatch::ChildLock::IsChannelProtected(Channel) == true)
++    return scrNotAvailable;
++   
+   if (LiveView)
+      StopReplay();
+ 
+diff -urNad vdr-1.4.7~/i18n.c vdr-1.4.7/i18n.c
+--- vdr-1.4.7~/i18n.c	2007-08-24 00:09:08.000000000 +0200
++++ vdr-1.4.7/i18n.c	2007-08-24 00:09:09.000000000 +0200
+@@ -6693,6 +6693,27 @@
+     "",//TODO
+     "",//TODO
+   },
++  { "Timer$Childlock",
++    "Gesichert",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Adulte",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
+   { NULL }
+   };
+ 
+diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
+--- vdr-1.4.7~/menu.c	2007-08-24 00:09:08.000000000 +0200
++++ vdr-1.4.7/menu.c	2007-08-24 00:09:09.000000000 +0200
+@@ -33,6 +33,7 @@
+ #include "vdrttxtsubshooks.h"
+ #include "dvbsub.h"
+ #include "videodir.h"
++#include "childlock.h"
+ 
+ #define MAXWAIT4EPGINFO   3 // seconds
+ #define MODETIMEOUT       3 // seconds
+@@ -723,6 +724,10 @@
+      Add(new cMenuEditBitItem( tr("VPS"),          &data.flags, tfVps));
+      Add(new cMenuEditIntItem( tr("Priority"),     &data.priority, 0, MAXPRIORITY));
+      Add(new cMenuEditIntItem( tr("Lifetime"),     &data.lifetime, 0, MAXLIFETIME));
++
++     if (PinPatch::ChildLock::IsUnlocked())
++       Add(new cMenuEditBitItem(tr("Timer$Childlock"), &data.flags, tfProtected));
++
+      char* p = strrchr(data.file, '~');
+      if (p) {
+         p++;
+@@ -2293,7 +2298,8 @@
+   for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
+       if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == '~')) {
+          cMenuRecordingItem *Item = new cMenuRecordingItem(recording, level);
+-         if (*Item->Text() && (!LastItem || strcmp(Item->Text(), LastItemText) != 0)) {
++         if ((*Item->Text() && (!LastItem || strcmp(Item->Text(), LastItemText) != 0))
++            && (!PinPatch::ChildLock::IsRecordingHidden(GetRecording(Item), Item->Name(), base, Item->IsDirectory()))) {
+             Add(Item);
+             LastItem = Item;
+             free(LastItemText);
+@@ -2356,6 +2362,9 @@
+ {
+   cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
+   if (ri) {
++     if (PinPatch::ChildLock::IsRecordingProtected(GetRecording(ri), ri->Name(), base, ri->IsDirectory()) == true)
++        return osContinue;
++
+      if (ri->IsDirectory())
+         Open();
+      else {
+@@ -3272,6 +3281,8 @@
+         }
+       else  if ((*i)->IsPluginItem()) {
+         const char *item = (*i)->PluginMenuEntry();
++        cPlugin *plugin = cPluginManager::GetPlugin((*i)->PluginIndex());
++        if (!PinPatch::ChildLock::IsPluginHidden(plugin))
+         if (item)
+           Add(new cMenuPluginItem(hk(item), (*i)->PluginIndex()));
+         }
+@@ -3281,9 +3292,13 @@
+ 
+   // Basic menu items:
+ 
++  if (!PinPatch::ChildLock::IsMenuHidden("Schedule"))
+   Add(new cOsdItem(hk(tr("Schedule")),   osSchedule));
++  if (!PinPatch::ChildLock::IsMenuHidden("Channels"))
+   Add(new cOsdItem(hk(tr("Channels")),   osChannels));
++  if (!PinPatch::ChildLock::IsMenuHidden("Timers"))
+   Add(new cOsdItem(hk(tr("Timers")),     osTimers));
++  if (!PinPatch::ChildLock::IsMenuHidden("Recordings"))
+   Add(new cOsdItem(hk(tr("Recordings")), osRecordings));
+ 
+   // Plugins:
+@@ -3291,18 +3306,22 @@
+   for (int i = 0; ; i++) {
+       cPlugin *p = cPluginManager::GetPlugin(i);
+       if (p) {
++         if (!PinPatch::ChildLock::IsPluginHidden(p)) {
+          const char *item = p->MainMenuEntry();
+          if (item)
+             Add(new cMenuPluginItem(hk(item), i));
+          }
++         }
+       else
+          break;
+       }
+ 
+   // More basic menu items:
+ 
++  if (!PinPatch::ChildLock::IsMenuHidden("Setup"))
+   Add(new cOsdItem(hk(tr("Setup")),      osSetup));
+   if (Commands.Count())
++     if (!PinPatch::ChildLock::IsMenuHidden("Commands"))
+      Add(new cOsdItem(hk(tr("Commands")),  osCommands));
+ 
+   }
+@@ -3393,6 +3412,11 @@
+   eOSState state = cOsdMenu::ProcessKey(Key);
+   HadSubMenu |= HasSubMenu();
+ 
++  cOsdItem* item = Get(Current());
++  if (item && item->Text() && state != osContinue && state != osUnknown && state != osBack)
++     if (PinPatch::ChildLock::IsMenuProtected(item->Text()))
++        return osContinue;
++
+   cOsdMenu *menu = NULL;
+   switch (state) {
+     case osSchedule:
+@@ -3439,6 +3463,7 @@
+                          if (item) {
+                             cPlugin *p = cPluginManager::GetPlugin(item->PluginIndex());
+                             if (p) {
++                               if (!PinPatch::ChildLock::IsPluginProtected(p)) {
+                                cOsdObject *menu = p->MainMenuAction();
+                                if (menu) {
+                                   if (menu->IsMenu())
+@@ -3450,6 +3475,7 @@
+                                   }
+                                }
+                             }
++                         }
+                          state = osEnd;
+                        }
+                        break;
+@@ -3650,6 +3676,7 @@
+   if (Direction) {
+      while (Channel) {
+            Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
++	if (PinPatch::ChildLock::IsChannelProtected(Channel) == false)
+            if (Channel && !Channel->GroupSep() && (cDevice::PrimaryDevice()->ProvidesChannel(Channel, Setup.PrimaryLimit) || cDevice::GetDevice(Channel, 0)))
+               return Channel;
+            }
+@@ -4190,6 +4217,7 @@
+            for (int i = 0; i < MAXRECORDCONTROLS; i++) {
+                if (!RecordControls[i]) {
+                   RecordControls[i] = new cRecordControl(device, Timer, Pause);
++                  PinPatch::ChildLock::NotifyRecordingStart(RecordControls[i]->FileName());
+                   return RecordControls[i]->Process(time(NULL));
+                   }
+                }
+diff -urNad vdr-1.4.7~/timers.c vdr-1.4.7/timers.c
+--- vdr-1.4.7~/timers.c	2007-08-24 00:07:30.000000000 +0200
++++ vdr-1.4.7/timers.c	2007-08-24 00:09:09.000000000 +0200
+@@ -14,6 +14,7 @@
+ #include "i18n.h"
+ #include "libsi/si.h"
+ #include "remote.h"
++#include "childlock.h"
+ 
+ // IMPORTANT NOTE: in the 'sscanf()' calls there is a blank after the '%d'
+ // format characters in order to allow any number of blanks after a numeric
+@@ -23,6 +24,7 @@
+ 
+ cTimer::cTimer(bool Instant, bool Pause, cChannel *Channel)
+ {
++  aux = NULL;
+   startTime = stopTime = 0;
+   lastSetEvent = 0;
+   recording = pending = inVpsMargin = false;
+@@ -43,7 +45,6 @@
+   priority = Pause ? Setup.PausePriority : Setup.DefaultPriority;
+   lifetime = Pause ? Setup.PauseLifetime : Setup.DefaultLifetime;
+   *file = 0;
+-  aux = NULL;
+   event = NULL;
+   if (Instant && channel)
+      snprintf(file, sizeof(file), "%s%s", Setup.MarkInstantRecord ? "@" : "", *Setup.NameInstantRecord ? Setup.NameInstantRecord : channel->Name());
+@@ -51,6 +52,7 @@
+ 
+ cTimer::cTimer(const cEvent *Event)
+ {
++  aux = NULL;
+   startTime = stopTime = 0;
+   lastSetEvent = 0;
+   recording = pending = inVpsMargin = false;
+@@ -79,8 +81,8 @@
+   const char *Title = Event->Title();
+   if (!isempty(Title))
+      strn0cpy(file, Event->Title(), sizeof(file));
+-  aux = NULL;
+   event = NULL; // let SetEvent() be called to get a log message
++  PinPatch::ChildLock::NotifyTimerCreation(this, Event);
+ }
+ 
+ cTimer::cTimer(const cTimer &Timer)
+@@ -246,6 +248,8 @@
+   return ""; // not NULL, so the caller can always use the result
+ }
+ 
++#define AUX_STR_PROTECTED "<pin-plugin><protected>yes</protected></pin-plugin>"
++
+ bool cTimer::Parse(const char *s)
+ {
+   char *channelbuffer = NULL;
+@@ -288,6 +292,8 @@
+         result = false;
+         }
+      }
++  if (aux && strstr(aux, AUX_STR_PROTECTED))
++    SetFlags(tfProtected);
+   free(channelbuffer);
+   free(daybuffer);
+   free(filebuffer);
+@@ -557,6 +563,26 @@
+ void cTimer::SetFlags(uint Flags)
+ {
+   flags |= Flags;
++
++  char* tmp = NULL;
++  char* position;
++
++  if (HasFlags(tfProtected)) {
++     if (!aux || !strstr(aux, AUX_STR_PROTECTED)) {
++        if (aux) {
++           tmp = strdup(aux);
++           free(aux);
++           }
++        asprintf(&aux,"%s%s", tmp ? tmp : "", AUX_STR_PROTECTED);
++        }
++     }
++  else if (aux && (position = strstr(aux, AUX_STR_PROTECTED))) {
++     asprintf(&tmp, "%.*s%s", position-aux, aux, position+strlen(AUX_STR_PROTECTED));
++     free(aux);
++     aux = strdup(tmp);
++     }
++
++  free(tmp);
+ }
+ 
+ void cTimer::ClrFlags(uint Flags)
+diff -urNad vdr-1.4.7~/timers.h vdr-1.4.7/timers.h
+--- vdr-1.4.7~/timers.h	2007-08-24 00:07:30.000000000 +0200
++++ vdr-1.4.7/timers.h	2007-08-24 00:09:09.000000000 +0200
+@@ -20,6 +20,7 @@
+                    tfInstant   = 0x0002,
+                    tfVps       = 0x0004,
+                    tfRecording = 0x0008,
++                   tfProtected = 0x8000,
+                    tfAll       = 0xFFFF,
+                  };
+ enum eTimerMatch { tmNone, tmPartial, tmFull };
+diff -urNad vdr-1.4.7~/vdr.c vdr-1.4.7/vdr.c
+--- vdr-1.4.7~/vdr.c	2007-08-24 00:09:08.000000000 +0200
++++ vdr-1.4.7/vdr.c	2007-08-24 00:09:09.000000000 +0200
+@@ -62,6 +62,7 @@
+ #include "tools.h"
+ #include "transfer.h"
+ #include "videodir.h"
++#include "childlock.h"
+ 
+ #define MINCHANNELWAIT     10 // seconds to wait between failed channel switchings
+ #define ACTIVITYTIMEOUT    60 // seconds before starting housekeeping
+@@ -882,6 +883,7 @@
+         cOsdObject *Interact = Menu ? Menu : cControl::Control();
+         eKeys key = Interface->GetKey((!Interact || !Interact->NeedsFastResponse()) && time(NULL) - LastCamMenu > LASTCAMMENUTIMEOUT);
+         if (NORMALKEY(key) != kNone) {
++           PinPatch::ChildLock::NotifyUserAction(key, Interact);
+            EITScanner.Activity();
+            LastActivity = time(NULL);
+            }
+@@ -947,10 +949,12 @@
+                      cControl::Control()->Hide();
+                   cPlugin *plugin = cPluginManager::GetPlugin(PluginName);
+                   if (plugin) {
++                   if (!PinPatch::ChildLock::IsPluginProtected(plugin)) {
+                      Menu = plugin->MainMenuAction();
+                      if (Menu)
+                         Menu->Show();
+                      }
++                  }
+                   else
+                      esyslog("ERROR: unknown plugin '%s'", PluginName);
+                   }
+@@ -1154,9 +1158,11 @@
+              // Instant resume of the last viewed recording:
+              case kPlay:
+                   if (cReplayControl::LastReplayed()) {
++                     if (PinPatch::ChildLock::IsRecordingProtected(0, cReplayControl::LastReplayed(), 0, false) == false) {
+                      cControl::Shutdown();
+                      cControl::Launch(new cReplayControl);
+                      }
++                     }
+                   break;
+              default:    break;
+              }

Propchange: vdr/vdr/trunk/debian/patches/opt-48_pin.dpatch
            ('svn:executable' removed)

Added: vdr/vdr/trunk/debian/patches/opt-50_graphtft-0.1.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-50_graphtft-0.1.dpatch?rev=5638&op=file
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-50_graphtft-0.1.dpatch (added)
+++ vdr/vdr/trunk/debian/patches/opt-50_graphtft-0.1.dpatch Mon Oct 29 19:27:05 2007
@@ -1,0 +1,313 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-50_graphtft.dpatch by Jörg Wendel (Horchi)
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch from teh Graphtft plugin version 0.0.15
+## DP: http://www.jwendel.de/vdr/
+
+ at DPATCH@
+diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
+--- vdr-1.4.7~/menu.c	2007-08-22 21:25:48.000000000 +0200
++++ vdr-1.4.7/menu.c	2007-08-22 21:25:48.000000000 +0200
+@@ -228,6 +228,9 @@
+ public:
+   cMenuEditChannel(cChannel *Channel, bool New = false);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuEditChannel"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ cMenuEditChannel::cMenuEditChannel(cChannel *Channel, bool New)
+@@ -453,6 +456,9 @@
+   cMenuChannels(void);
+   ~cMenuChannels();
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuChannels"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ cMenuChannels::cMenuChannels(void)
+@@ -945,6 +951,9 @@
+   virtual ~cMenuTimers();
+   virtual void Display(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuTimers"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ cMenuTimers::cMenuTimers(void)
+@@ -1309,6 +1318,9 @@
+   static void SetCurrentChannel(int ChannelNr) { currentChannel = ChannelNr; }
+   static const cEvent *ScheduleEvent(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return now ? "MenuWhatsOnNow" : "MenuWhatsOnNext"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ int cMenuWhatsOn::currentChannel = 0;
+@@ -1475,6 +1487,9 @@
+   cMenuSchedule(void);
+   virtual ~cMenuSchedule();
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSchedule"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ cMenuSchedule::cMenuSchedule(void)
+@@ -1982,6 +1997,9 @@
+   cMenuRecording(const cRecording *Recording, bool WithButtons = false);
+   virtual void Display(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuRecording"; }
++//#endif /* GRAPHTFT */
+ };
+ 
+ cMenuRecording::cMenuRecording(const cRecording *Recording, bool WithButtons)
+@@ -2542,6 +2560,9 @@
+   cMenuSetupOSD(void);
+   virtual ~cMenuSetupOSD();
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSetupOsd"; }
++//#endif
+   };
+ 
+ cMenuSetupOSD::cMenuSetupOSD(void)
+@@ -2645,6 +2666,9 @@
+ public:
+   cMenuSetupEPG(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSetupEpg"; }
++//#endif
+   };
+ 
+ cMenuSetupEPG::cMenuSetupEPG(void)
+@@ -2741,6 +2765,9 @@
+ public:
+   cMenuSetupDVB(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSetupDvb"; }
++//#endif
+   };
+ 
+ cMenuSetupDVB::cMenuSetupDVB(void)
+@@ -2834,6 +2861,9 @@
+ public:
+   cMenuSetupLNB(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSetupLnb"; }
++//#endif
+   };
+ 
+ cMenuSetupLNB::cMenuSetupLNB(void)
+@@ -2898,6 +2928,9 @@
+ public:
+   cMenuSetupCICAM(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSetupCiCam"; }
++//#endif
+   };
+ 
+ cMenuSetupCICAM::cMenuSetupCICAM(void)
+@@ -3060,6 +3093,9 @@
+ public:
+   cMenuSetupPlugins(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSetupPlugins"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ cMenuSetupPlugins::cMenuSetupPlugins(void)
+@@ -3113,6 +3149,9 @@
+ public:
+   cMenuSetup(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuSetup"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ cMenuSetup::cMenuSetup(void)
+diff -urNad vdr-1.4.7~/menu.h vdr-1.4.7/menu.h
+--- vdr-1.4.7~/menu.h	2007-08-22 21:25:48.000000000 +0200
++++ vdr-1.4.7/menu.h	2007-08-22 21:25:48.000000000 +0200
+@@ -29,6 +29,9 @@
+   void SetText(const char *Text);
+   virtual void Display(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuText"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ class cMenuEditTimer : public cOsdMenu {
+@@ -45,6 +48,9 @@
+   cMenuEditTimer(cTimer *Timer, bool New = false);
+   virtual ~cMenuEditTimer();
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuTimerEdit"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ class cMenuEvent : public cOsdMenu {
+@@ -54,6 +60,9 @@
+   cMenuEvent(const cEvent *Event, bool CanSwitch = false, bool Buttons = false);
+   virtual void Display(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuEvent"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ class cMenuMain : public cOsdMenu {
+@@ -72,6 +81,9 @@
+   cMenuMain(eOSState State = osUnknown);
+   virtual eOSState ProcessKey(eKeys Key);
+   static cOsdObject *PluginOsdObject(void);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuMain"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ class cDisplayChannel : public cOsdObject {
+@@ -141,6 +153,9 @@
+   cMenuCam(cCiMenu *CiMenu);
+   virtual ~cMenuCam();
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuCam"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ class cMenuCamEnquiry : public cOsdMenu {
+@@ -153,6 +168,9 @@
+   cMenuCamEnquiry(cCiEnquiry *CiEnquiry);
+   virtual ~cMenuCamEnquiry();
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuCamEnquiry"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ cOsdObject *CamControl(void);
+@@ -180,6 +198,9 @@
+   cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
+   ~cMenuRecordings();
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuRecordings"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ class cRecordControl {
+diff -urNad vdr-1.4.7~/menuitems.h vdr-1.4.7/menuitems.h
+--- vdr-1.4.7~/menuitems.h	2007-08-22 21:25:48.000000000 +0200
++++ vdr-1.4.7/menuitems.h	2007-08-22 21:25:48.000000000 +0200
+@@ -179,6 +179,9 @@
+   cMenuSetupPage(void);
+   virtual eOSState ProcessKey(eKeys Key);
+   void SetPlugin(cPlugin *Plugin);
++//#ifdef USE_GRAPHTFT
++  const char* MenuKind() { return "MenuSetupPage"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ #endif //__MENUITEMS_H
+diff -urNad vdr-1.4.7~/osdbase.c vdr-1.4.7/osdbase.c
+--- vdr-1.4.7~/osdbase.c	2007-08-22 21:25:48.000000000 +0200
++++ vdr-1.4.7/osdbase.c	2007-08-22 21:25:48.000000000 +0200
+@@ -100,6 +100,9 @@
+   free(status);
+   displayMenu->Clear();
+   cStatus::MsgOsdClear();
++//#ifdef USE_GRAPHTFT
++  cStatus::MsgOsdMenuDestroy();
++//#endif /* GRAPHTFT */
+   if (!--displayMenuCount)
+      DELETENULL(displayMenu);
+ }
+@@ -195,6 +198,9 @@
+   displayMenu->SetMessage(mtStatus, NULL);
+   displayMenu->Clear();
+   cStatus::MsgOsdClear();
++//#ifdef USE_GRAPHTFT
++  cStatus::MsgOsdMenuDisplay(MenuKind());
++//#endif /* GRAPHTFT */
+   displayMenu->SetTabs(cols[0], cols[1], cols[2], cols[3], cols[4]);//XXX
+   displayMenu->SetTitle(title);
+   cStatus::MsgOsdTitle(title);
+diff -urNad vdr-1.4.7~/osdbase.h vdr-1.4.7/osdbase.h
+--- vdr-1.4.7~/osdbase.h	2007-08-22 21:25:48.000000000 +0200
++++ vdr-1.4.7/osdbase.h	2007-08-22 21:25:48.000000000 +0200
+@@ -127,6 +127,9 @@
+   void Ins(cOsdItem *Item, bool Current = false, cOsdItem *Before = NULL);
+   virtual void Display(void);
+   virtual eOSState ProcessKey(eKeys Key);
++//#ifdef USE_GRAPHTFT
++  virtual const char* MenuKind() { return "MenuUnknown"; }
++//#endif /* GRAPHTFT */
+   };
+ 
+ #endif //__OSDBASE_H
+diff -urNad vdr-1.4.7~/status.c vdr-1.4.7/status.c
+--- vdr-1.4.7~/status.c	2007-08-22 21:25:42.000000000 +0200
++++ vdr-1.4.7/status.c	2007-08-22 21:25:48.000000000 +0200
+@@ -112,3 +112,19 @@
+   for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
+       sm->OsdProgramme(PresentTime, PresentTitle, PresentSubtitle, FollowingTime, FollowingTitle, FollowingSubtitle);
+ }
++
++
++//#ifdef USE_GRAPHTFT
++void cStatus::MsgOsdMenuDisplay(const char* kind)
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
++      sm->OsdMenuDisplay(kind);
++}
++
++void cStatus::MsgOsdMenuDestroy()
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
++      sm->OsdMenuDestroy();
++}
++//#endif /* GRAPHTFT */
++
+diff -urNad vdr-1.4.7~/status.h vdr-1.4.7/status.h
+--- vdr-1.4.7~/status.h	2007-08-22 21:25:42.000000000 +0200
++++ vdr-1.4.7/status.h	2007-08-22 21:28:34.000000000 +0200
+@@ -67,6 +67,12 @@
+                // The OSD displays the single line Text with the current channel information.
+   virtual void OsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle) {}
+                // The OSD displays the given programme information.
++//#ifdef USE_GRAPHTFT
++  virtual void OsdMenuDisplay(const char* kind) {}
++               // report menu creation
++  virtual void OsdMenuDestroy() {}
++               // report menu destruvtion
++//#endif /* GRAPHTFT */
+ public:
+   cStatus(void);
+   virtual ~cStatus();
+@@ -86,6 +92,10 @@
+   static void MsgOsdTextItem(const char *Text,  bool Scroll = false);
+   static void MsgOsdChannel(const char *Text);
+   static void MsgOsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle);
++//#ifdef USE_GRAPHTFT
++  static void MsgOsdMenuDisplay(const char* kind);
++  static void MsgOsdMenuDestroy();
++//#endif /* GRAPHTFT */
+   };
+ 
+ #endif //__STATUS_H

Added: vdr/vdr/trunk/debian/patches/opt-51_cuttime.dpatch
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/opt-51_cuttime.dpatch?rev=5638&op=file
==============================================================================
--- vdr/vdr/trunk/debian/patches/opt-51_cuttime.dpatch (added)
+++ vdr/vdr/trunk/debian/patches/opt-51_cuttime.dpatch Mon Oct 29 19:27:05 2007
@@ -1,0 +1,139 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-32_cuttime.dpatch by Udo Richter <udo_richter at gmx.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Modifies the start time of recordings to the first cutting mark..
+## DP: 
+## DP: 2007-07-01 Tobias Grimm <tg at e-tobi.net>
+## DP:     - Added setup option to enable/disable CutTime
+
+ at DPATCH@
+diff -urNad vdr-1.4.7~/config.c vdr-1.4.7/config.c
+--- vdr-1.4.7~/config.c	2007-08-05 10:28:22.000000000 +0200
++++ vdr-1.4.7/config.c	2007-08-05 10:31:33.000000000 +0200
+@@ -250,6 +250,7 @@
+ 
+ cSetup::cSetup(void)
+ {
++  CutTimePatchEnabled = 0;
+   OSDLanguage = 0;
+   strcpy(OSDSkin, "sttng");
+   strcpy(OSDTheme, "default");
+@@ -550,6 +551,7 @@
+   else if (!strcasecmp(Name, "ShowRecLength"))       ShowRecLength      = atoi(Value);
+   else if (!strcasecmp(Name, "ShowProgressBar"))     ShowProgressBar    = atoi(Value);
+   else if (!strcasecmp(Name, "MenuCmdPosition"))     MenuCmdPosition    = atoi(Value);
++  else if (!strcasecmp(Name, "CutTimePatchEnabled")) CutTimePatchEnabled= atoi(Value);
+   else
+      return false;
+   return true;
+@@ -635,6 +637,7 @@
+   Store("ShowRecLength",      ShowRecLength);
+   Store("ShowProgressBar",    ShowProgressBar);
+   Store("MenuCmdPosition",    MenuCmdPosition);
++  Store("CutTimePatchEnabled",CutTimePatchEnabled);
+ 
+   Sort();
+ 
+diff -urNad vdr-1.4.7~/config.h vdr-1.4.7/config.h
+--- vdr-1.4.7~/config.h	2007-08-05 10:28:22.000000000 +0200
++++ vdr-1.4.7/config.h	2007-08-05 10:28:23.000000000 +0200
+@@ -293,6 +293,7 @@
+   int InitialChannel;
+   int InitialVolume;
+   int ShowRecDate, ShowRecTime, ShowRecLength, ShowProgressBar, MenuCmdPosition;
++  int CutTimePatchEnabled;
+   int __EndData__;
+   cSetup(void);
+   cSetup& operator= (const cSetup &s);
+diff -urNad vdr-1.4.7~/cutter.c vdr-1.4.7/cutter.c
+--- vdr-1.4.7~/cutter.c	2006-07-30 12:22:08.000000000 +0200
++++ vdr-1.4.7/cutter.c	2007-08-05 10:28:23.000000000 +0200
+@@ -190,6 +190,14 @@
+      error = false;
+      ended = false;
+      cRecording Recording(FileName);
++     
++     if (Setup.CutTimePatchEnabled) {
++        cMarks FromMarks;
++        FromMarks.Load(FileName);
++        cMark *First=FromMarks.First();
++        if (First) Recording.SetStartTime(Recording.start+((First->position/FRAMESPERSEC+30)/60)*60);
++     }
++     
+      const char *evn = Recording.PrefixFileName('%');
+      if (evn && RemoveVideoFile(evn) && MakeDirs(evn, true)) {
+         // XXX this can be removed once RenameVideoFile() follows symlinks (see videodir.c)
+diff -urNad vdr-1.4.7~/i18n.c vdr-1.4.7/i18n.c
+--- vdr-1.4.7~/i18n.c	2007-08-05 10:28:22.000000000 +0200
++++ vdr-1.4.7/i18n.c	2007-08-05 10:28:23.000000000 +0200
+@@ -4367,6 +4367,28 @@
+     "Opdel redigerede filer",
+     "Dìlit editované soubory",
+   },
++  { "Setup.CutTimePatch$Adapt start time to cutting marks",
++    "Startzeit an Schnittmarken anpassen",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++    "",
++  },
+   { "Setup.Replay$Multi speed mode",
+     "Mehrstufiger Vor-/Rücklauf",
+     "Re¾im z veè hitrostmi",
+diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
+--- vdr-1.4.7~/menu.c	2007-08-05 10:28:22.000000000 +0200
++++ vdr-1.4.7/menu.c	2007-08-05 10:28:23.000000000 +0200
+@@ -3028,6 +3028,7 @@
+   Add(new cMenuEditBoolItem(tr("Setup.Recording$Show date"),                 &data.ShowRecDate));
+   Add(new cMenuEditBoolItem(tr("Setup.Recording$Show time"),                 &data.ShowRecTime));
+   Add(new cMenuEditBoolItem(tr("Setup.Recording$Show length"),               &data.ShowRecLength));
++  Add(new cMenuEditBoolItem(tr("Setup.CutTimePatch$Adapt start time to cutting marks"), &data.CutTimePatchEnabled));
+ }
+ 
+ // --- cMenuSetupReplay ------------------------------------------------------
+diff -urNad vdr-1.4.7~/recording.c vdr-1.4.7/recording.c
+--- vdr-1.4.7~/recording.c	2007-08-05 10:28:22.000000000 +0200
++++ vdr-1.4.7/recording.c	2007-08-05 10:28:23.000000000 +0200
+@@ -796,6 +796,15 @@
+   return titleBuffer;
+ }
+ 
++void cRecording::SetStartTime(time_t Start) 
++{
++  start=Start;
++  if (fileName) {
++  	 free(fileName);
++  	 fileName = NULL;
++  	 }
++}
++
+ const char *cRecording::PrefixFileName(char Prefix)
+ {
+   cString p = PrefixVideoFileName(FileName(), Prefix);
+diff -urNad vdr-1.4.7~/recording.h vdr-1.4.7/recording.h
+--- vdr-1.4.7~/recording.h	2007-08-05 10:28:22.000000000 +0200
++++ vdr-1.4.7/recording.h	2007-08-05 10:28:23.000000000 +0200
+@@ -87,6 +87,7 @@
+   const char *FileName(void) const;
+   const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1, bool Original = true) const;
+   const cRecordingInfo *Info(void) const { return info; }
++  void SetStartTime(time_t Start);
+   const char *PrefixFileName(char Prefix);
+   int HierarchyLevels(void) const;
+   void ResetResume(void) const;

Modified: vdr/vdr/trunk/debian/patches/patchtest
URL: http://svn.debian.org/wsvn/pkg-vdr-dvb/vdr/vdr/trunk/debian/patches/patchtest?rev=5638&op=diff
==============================================================================
--- vdr/vdr/trunk/debian/patches/patchtest (original)
+++ vdr/vdr/trunk/debian/patches/patchtest Mon Oct 29 19:27:05 2007
@@ -21,7 +21,9 @@
     opt-27_subtitles-ttxtsubs \
     opt-27-x_subtitles-ttxtsubs-volumebar-fix \
     opt-30-x_analogtv \
-    opt-37_submenu \
+    opt-31-x_reelchannelscan \
+    opt-32_iptv \
+    opt-37-x_menuorg \
     opt-38_disableDoubleEpgEntrys \
     opt-39_noepg \
     opt-40_wareagle-icons \
@@ -29,20 +31,20 @@
     opt-42-x_MainMenuHooks \
     opt-44_rotor \
     opt-45_yaepg \
-    opt-46_dvdarchive \
-    opt-46_dmh-dvd-archive \
-    opt-46-x_dmh-dvd-archive-debian \
     opt-47_sourcecaps \
-    opt-48_pin \
-    opt-50_graphtft"
+    opt-48-x_pin \
+    opt-50_graphtft-0.1 \
+    opt-51_cuttime"
 testpatch="$standard \
     opt-20_liemikuutio \
     opt-24_jumpplay \
     opt-27_subtitles-ttxtsubs \
     opt-27-x_subtitles-ttxtsubs-volumebar-fix \
     opt-30-x_analogtv \
+    opt-31-x_reelchannelscan \
+    opt-32_iptv \
     opt-36_CutterQueue-AutoDelete \
-    opt-37_submenu \
+    opt-37-x_menuorg \
     opt-38_disableDoubleEpgEntrys \
     opt-39_noepg \
     opt-41-x_timer-info \
@@ -52,9 +54,9 @@
     opt-46_dvdarchive \
     opt-46_dmh-dvd-archive \
     opt-46-x_dmh-dvd-archive-debian \
-    opt-48_pin \
+    opt-48-x_pin \
     opt-49_sharelnb \
-    opt-50_graphtft"
+    opt-50_graphtft-0.1"
 mustfail_patch="XX_patchtest-patch-error"
 mustfail_compile="XX_patchtest-compile-error"
 




More information about the pkg-vdr-dvb-changes mailing list