[SCM] vdr packaging repository branch, e-tobi, updated. debian/1.7.28-1_etobi1-44-ge5e333d

etobi git at e-tobi.net
Wed Mar 6 21:25:33 UTC 2013


The following commit has been merged in the e-tobi branch:
commit 3ebd89f2b69a82c1d3386576cf0217e02456adec
Author: etobi <git at e-tobi.net>
Date:   Sun Mar 3 09:26:48 2013 +0100

    Refreshed the patches and dropped the following ones:
      - opt-20_liemikuutio.patch
      - opt-22-x_edit_marks.patch
      - opt-24_jumpplay.patch
      - opt-50_graphtft-liemikuutio.patch

diff --git a/debian/.vdr-patches b/debian/.vdr-patches
index 10dbe45..632c207 100644
--- a/debian/.vdr-patches
+++ b/debian/.vdr-patches
@@ -1,14 +1,10 @@
-debian/patches/opt-20_liemikuutio.patch:0623db6ca26f22d370ed76ac6d33c32b
-debian/patches/opt-41-x_timer-info.patch:6d2ef9eb7928d8767b003801e0ea383c
+debian/patches/opt-41-x_timer-info.patch:4c2b204c4bfaaeaecf2d2fde1f141853
 debian/patches/12_osdbase-maxitems.patch:1d642929dad4862e048d708e06eb750b
-debian/patches/opt-24_jumpplay.patch:c3c55532ea955ced6c5fce27107e7cc1
-debian/patches/opt-50_graphtft-liemikuutio.patch:0a69b092b9e3b0391c693904aac319c9
-debian/patches/opt-45_yaepg.patch:cf3dcab06c31c75ae975b6476ea4b426
+debian/patches/opt-45_yaepg.patch:d2201e3789e07a035b18a5c5c8d55901
 debian/patches/04_newplugin.patch:e9f5d4813e87b1bcebb5878409cac72d
-debian/patches/opt-27_ttxtsubs.patch:ca69efb83cc4a6c52756255f3699be5f
-debian/patches/opt-42-x_MainMenuHooks.patch:35d440930b32c270b8239d3fa55f8f15
+debian/patches/opt-27_ttxtsubs.patch:34695bbf53d9c9e1ceca217654628ffa
+debian/patches/opt-42-x_MainMenuHooks.patch:06caf4f11337d69cdea72d6e6e42afe1
 debian/patches/06_default_svdrp_port_0.patch:ec71e0702cd792605e67175aa542bfd6
-debian/patches/opt-50_graphtft.patch:f8a96457c65a5cb3893b0f9425eb26d9
-debian/patches/opt-37-x_menuorg.patch:6ead4164e6b78018529e6e15c08439dd
-debian/patches/opt-22-x_edit_marks.patch:8d97ff831572f8942144aae66f99ff0a
+debian/patches/opt-50_graphtft.patch:b81bd650601ce0a5c43b315a7660ce0c
+debian/patches/opt-37-x_menuorg.patch:153108b150c56a383233b4d7e1118e01
 debian/patches/99_ncursesw-include.patch:b5d57e1aaabc4339f60cc031342d3333
diff --git a/debian/changelog b/debian/changelog
index 917493a..591a355 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+vdr (1.7.38-1~etobi2) UNRELEASED; urgency=low
+
+  * Refreshed the patches and dropped the following ones:
+    - opt-20_liemikuutio.patch
+    - opt-22-x_edit_marks.patch
+    - opt-24_jumpplay.patch
+    - opt-50_graphtft-liemikuutio.patch
+
+ -- Tobias Grimm <etobi at debian.org>  Sun, 03 Mar 2013 09:24:30 +0100
+
 vdr (1.7.38-1~etobi1) unstable; urgency=low
 
   * New upstream release
diff --git a/debian/patches/opt-20_liemikuutio.patch b/debian/patches/opt-20_liemikuutio.patch
deleted file mode 100644
index cb55526..0000000
--- a/debian/patches/opt-20_liemikuutio.patch
+++ /dev/null
@@ -1,1512 +0,0 @@
-Description: Patch collection - see HISTORY-liemikuutio for details.
-Author: Rolf Ahrenberg <Rolf.Ahrenberg AT sci.fi>
-Origin: http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.7.27-liemikuutio-1.34.patch.gz
-
-Index: vdr/config.h
-===================================================================
---- vdr.orig/config.h	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/config.h	2012-06-06 22:47:49.000000000 +0200
-@@ -36,6 +36,8 @@
- // plugins to work with newer versions of the core VDR as long as no
- // VDR header files have changed.
- 
-+#define LIEMIKUUTIO  134
-+ 
- #define MAXPRIORITY       99
- #define MINPRIORITY       (-MAXPRIORITY)
- #define LIVEPRIORITY      0                  // priority used when selecting a device for live viewing
-Index: vdr/cutter.c
-===================================================================
---- vdr.orig/cutter.c	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/cutter.c	2012-06-06 22:47:49.000000000 +0200
-@@ -8,6 +8,7 @@
-  */
- 
- #include "cutter.h"
-+#include "interface.h"
- #include "menu.h"
- #include "recording.h"
- #include "remux.h"
-@@ -204,7 +205,7 @@
- bool cCutter::error = false;
- bool cCutter::ended = false;
- 
--bool cCutter::Start(const char *FileName)
-+bool cCutter::Start(const char *FileName, const char *TargetFileName, bool Overwrite)
- {
-   cMutexLock MutexLock(&mutex);
-   if (!cuttingThread) {
-@@ -218,11 +219,16 @@
-      if (cMark *First = FromMarks.First())
-         Recording.SetStartTime(Recording.Start() + (int(First->Position() / Recording.FramesPerSecond() + 30) / 60) * 60);
- 
--     const char *evn = Recording.PrefixFileName('%');
--     if (evn && RemoveVideoFile(evn) && MakeDirs(evn, true)) {
-+     cString evn = (TargetFileName && *TargetFileName) ? Recording.UpdateFileName(TargetFileName) : Recording.PrefixFileName('%');
-+     if (!Overwrite && *evn && (access(*evn, F_OK) == 0) && !Interface->Confirm(tr("File already exists - overwrite?"))) {
-+        do {
-+           evn = PrefixVideoFileName(*evn, '%');
-+        } while (*evn && (access(*evn, F_OK) == 0));
-+        }
-+     if (*evn && RemoveVideoFile(*evn) && MakeDirs(*evn, true)) {
-         // XXX this can be removed once RenameVideoFile() follows symlinks (see videodir.c)
-         // remove a possible deleted recording with the same name to avoid symlink mixups:
--        char *s = strdup(evn);
-+        char *s = strdup(*evn);
-         char *e = strrchr(s, '.');
-         if (e) {
-            if (strcmp(e, ".rec") == 0) {
-Index: vdr/cutter.h
-===================================================================
---- vdr.orig/cutter.h	2012-04-26 21:27:38.000000000 +0200
-+++ vdr/cutter.h	2012-06-06 22:47:49.000000000 +0200
-@@ -24,7 +24,7 @@
-   static bool error;
-   static bool ended;
- public:
--  static bool Start(const char *FileName);
-+  static bool Start(const char *FileName, const char *TargetFileName = NULL, bool Overwrite = true);
-   static void Stop(void);
-   static bool Active(const char *FileName = NULL);
-          ///< Returns true if the cutter is currently active.
-Index: vdr/filetransfer.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/filetransfer.c	2012-06-06 22:47:49.000000000 +0200
-@@ -0,0 +1,278 @@
-+/*
-+ * filetransfer.c: The video file transfer facilities
-+ *
-+ * See the main source file 'vdr.c' for copyright information and
-+ * how to reach the author.
-+ *
-+ * $Id: $
-+ */
-+
-+#include "videodir.h"
-+#include "filetransfer.h"
-+
-+static cString StripLastDirectory(const char *DirName)
-+{
-+  if (DirName && *DirName) {
-+     cString s(DirName);
-+     int l = strlen(*s);
-+     const char *p = *s + l;
-+     while (l > 0) {
-+           if (*p-- == '/')
-+              break;
-+           l--;
-+           }
-+     if (l)
-+        s = s.Truncate(l);
-+     return s;
-+     }
-+  return NULL;
-+}
-+
-+// --- cCopyingThread --------------------------------------------------------
-+
-+class cCopyingThread : public cThread {
-+private:
-+  const char *error;
-+  bool deleteSource;
-+  cString source;
-+  cString target;
-+protected:
-+  virtual void Action(void);
-+public:
-+  cCopyingThread(const char *SourceName, const char *ToFileName, bool DeleteSource = false);
-+  virtual ~cCopyingThread();
-+  const char *Error(void) { return error; }
-+  };
-+
-+cCopyingThread::cCopyingThread(const char *SourceName, const char *TargetName, bool DeleteSource)
-+:cThread("copying"),
-+ error(NULL),
-+ deleteSource(DeleteSource),
-+ source(SourceName),
-+ target(TargetName)
-+{
-+  // add missing directory delimiters
-+  const char *delim = "/";
-+  if (!endswith(*source, delim))
-+     source = cString::sprintf("%s%s", *source, delim);
-+  if (!endswith(*target, delim))
-+     target = cString::sprintf("%s%s", *target, delim);
-+
-+  Start();
-+}
-+
-+cCopyingThread::~cCopyingThread()
-+{
-+  Cancel(3);
-+}
-+
-+void cCopyingThread::Action(void)
-+{
-+  SetPriority(19);
-+  SetIOPriority(7);
-+
-+  if (strcmp(*source, *target)) {
-+     // validate target directory
-+     if (strstr(*target, *source)) {
-+        error = "invalid target";
-+        return;
-+        }
-+
-+     // recordings methods require the last directory delimiter to be stripped off
-+     cString recname = target;
-+     recname.Truncate(strlen(*recname) - 1);
-+     Recordings.AddByName(*recname, false);
-+
-+     RemoveFileOrDir(*target);
-+     if (!MakeDirs(*target, true)) {
-+        error = "MakeDirs";
-+        return;
-+        }
-+
-+     if (deleteSource && EntriesOnSameFileSystem(*source, *target)) {
-+        if (rename(*source, *target) == -1) {
-+           error = "rename";
-+           return;
-+           }
-+        // delete all empty source directories
-+        recname = source;
-+        recname.Truncate(strlen(*recname) - 1);
-+        recname = StripLastDirectory(*recname);
-+        do {
-+           if (!RemoveEmptyDirectories(*recname, true))
-+              break;
-+           recname = StripLastDirectory(*recname);
-+           }
-+        while (strcmp(*recname, VideoDirectory));
-+        }
-+     else {
-+        int required = DirSizeMB(*source);
-+        int available = FreeDiskSpaceMB(*target);
-+
-+        // validate free space
-+        if (required < available) {
-+           cReadDir d(*source);
-+           struct dirent *e;
-+           bool success = true;
-+
-+           // allocate copying buffer
-+           const int len = 1024 * 1024;
-+           char *buffer = MALLOC(char, len);
-+           if (!buffer) {
-+              error = "MALLOC";
-+              return;
-+              }
-+
-+           // loop through all files, but skip all sub-directories
-+           while (Running() && (e = d.Next()) != NULL) {
-+                 // skip generic entries
-+                 if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..") && strcmp(e->d_name, "lost+found")) {
-+                    cString sourceFile = cString::sprintf("%s%s", *source, e->d_name);
-+                    cString targetFile = cString::sprintf("%s%s", *target, e->d_name);
-+
-+                    // copy only regular files
-+                    struct stat sts;
-+                    if (!stat(*sourceFile, &sts) && S_ISREG(sts.st_mode)) {
-+                       int r = -1, w = -1;
-+                       cUnbufferedFile *inputFile = cUnbufferedFile::Create(*sourceFile, O_RDONLY | O_LARGEFILE);
-+                       cUnbufferedFile *outputFile = cUnbufferedFile::Create(*targetFile, O_RDWR | O_CREAT | O_LARGEFILE);
-+
-+                       // validate files
-+                       if (!inputFile || !outputFile) {
-+                          success = false;
-+                          break;
-+                          }
-+
-+                       // do actual copy
-+                       do {
-+                         r = inputFile->Read(buffer, len);
-+                         if (r > 0)
-+                            w = outputFile->Write(buffer, r);
-+                         else
-+                            w = 0;
-+                       } while (Running() && r > 0 && w > 0);
-+                       DELETENULL(inputFile);
-+                       DELETENULL(outputFile);
-+
-+                       // validate result
-+                       if (!Running() || r < 0 || w < 0) {
-+                          success = false;
-+                          break;
-+                          }
-+                       }
-+                   }
-+                }
-+
-+           // release allocated buffer
-+           free(buffer);
-+
-+           // delete all created target files and directories
-+           if (!success) {
-+              target = StripLastDirectory(*target);
-+              RemoveFileOrDir(*target, true);
-+              target = StripLastDirectory(*target);
-+              RemoveEmptyDirectories(*target, true);
-+              error = "copy failed";
-+              return;
-+              }
-+           }
-+        else {
-+           // delete all created empty target directories
-+           recname = target;
-+           recname.Truncate(strlen(*recname) - 1);
-+           recname = StripLastDirectory(*recname);
-+           do {
-+              if (!RemoveEmptyDirectories(*recname, true))
-+                 break;
-+              recname = StripLastDirectory(*recname);
-+              }
-+           while (strcmp(*recname, VideoDirectory));
-+           error = "insufficient free space";
-+           return;
-+           }
-+        }
-+
-+     if (deleteSource) {
-+        // Recordings' methods require the last directory delimiter to be stripped off
-+        source.Truncate(strlen(*source) - 1);
-+        cRecording *recording = Recordings.GetByName(*source);
-+        if (recording->Delete())
-+           Recordings.DelByName(*source, false);
-+        }
-+     else
-+        Recordings.TouchUpdate();
-+     }
-+}
-+
-+// --- cFileTransfer ----------------------------------------------------------------
-+
-+cMutex cFileTransfer::mutex;
-+char *cFileTransfer::copiedVersionName = NULL;
-+cCopyingThread *cFileTransfer::copyingThread = NULL;
-+bool cFileTransfer::error = false;
-+bool cFileTransfer::ended = false;
-+
-+bool cFileTransfer::Start(cRecording *Recording, const char *FileName, bool CopyOnly)
-+{
-+  cMutexLock MutexLock(&mutex);
-+  if (!copyingThread) {
-+     cString NewName = NewVideoFileName(Recording->FileName(), FileName);
-+     error = false;
-+     ended = false;
-+     if (strlen(*NewName)) {
-+        copiedVersionName = strdup(*NewName);
-+        copyingThread = new cCopyingThread(Recording->FileName(), copiedVersionName, !CopyOnly);
-+        return true;
-+        }
-+     }
-+  return false;
-+}
-+
-+void cFileTransfer::Stop(void)
-+{
-+  cMutexLock MutexLock(&mutex);
-+  bool Interrupted = copyingThread && copyingThread->Active();
-+  const char *Error = copyingThread ? copyingThread->Error() : NULL;
-+  DELETENULL(copyingThread);
-+  if ((Interrupted || Error)) {
-+     if (Interrupted)
-+        isyslog("file transfer has been interrupted");
-+     if (Error)
-+        esyslog("ERROR: '%s' during file transfer", Error);
-+     RemoveVideoFile(copiedVersionName); //XXX what if this file is currently being replayed?
-+     Recordings.DelByName(copiedVersionName);
-+     free(copiedVersionName);
-+     copiedVersionName = NULL;
-+     }
-+}
-+
-+bool cFileTransfer::Active(void)
-+{
-+  cMutexLock MutexLock(&mutex);
-+  if (copyingThread) {
-+     if (copyingThread->Active())
-+        return true;
-+     error = copyingThread->Error();
-+     Stop();
-+     free(copiedVersionName);
-+     copiedVersionName = NULL;
-+     ended = true;
-+     }
-+  return false;
-+}
-+
-+bool cFileTransfer::Error(void)
-+{
-+  cMutexLock MutexLock(&mutex);
-+  bool result = error;
-+  error = false;
-+  return result;
-+}
-+
-+bool cFileTransfer::Ended(void)
-+{
-+  cMutexLock MutexLock(&mutex);
-+  bool result = ended;
-+  ended = false;
-+  return result;
-+}
-Index: vdr/filetransfer.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/filetransfer.h	2012-06-06 22:47:49.000000000 +0200
-@@ -0,0 +1,33 @@
-+/*
-+ * filetransfer.h: The video file transfer facilities
-+ *
-+ * See the main source file 'vdr.c' for copyright information and
-+ * how to reach the author.
-+ *
-+ * $Id: $
-+ */
-+
-+#ifndef __FILETRANSFER_H
-+#define __FILETRANSFER_H
-+
-+#include "recording.h"
-+#include "thread.h"
-+
-+class cCopyingThread;
-+
-+class cFileTransfer {
-+private:
-+  static cMutex mutex;
-+  static char *copiedVersionName;
-+  static cCopyingThread *copyingThread;
-+  static bool error;
-+  static bool ended;
-+public:
-+  static bool Start(cRecording *Recording, const char *NewName, bool CopyOnly = false);
-+  static void Stop(void);
-+  static bool Active(void);
-+  static bool Error(void);
-+  static bool Ended(void);
-+  };
-+
-+#endif //__FILETRANSFER_H
-Index: vdr/HISTORY-liemikuutio
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/HISTORY-liemikuutio	2012-06-06 22:47:49.000000000 +0200
-@@ -0,0 +1,165 @@
-+-----------------------------------
-+Liemikuutio for Video Disc Recorder
-+
-+Maintainer: Rolf Ahrenberg
-+-----------------------------------
-+
-+2006-01-08: Version 1.0
-+
-+- Based on enAIO with these original patches:
-+  Simple recordings sorting by Walter at VDRPortal
-+  Alternate rename recordings by Ralf MÃŒller
-+  Menu selection by Peter Dittmann
-+  Recording length by Tobias Faust
-+
-+2006-01-15: Version 1.1
-+
-+- Removed patches already found in vdr-1.3.39.
-+
-+2006-01-25: Version 1.2
-+
-+- Added "Main menu command position" feature.
-+
-+2006-02-05: Version 1.3
-+
-+- Improved menu selection response.
-+
-+2006-04-18: Version 1.4
-+
-+- Added Estonian translation (Thanks to Arthur Konovalov).
-+
-+2006-04-30: Version 1.5
-+
-+- Added progress bar view into "What's on now?" menu.
-+
-+2006-06-06: Version 1.6
-+
-+- Added French translation (Thanks to ECLiPSE).
-+
-+2006-06-14: Version 1.7
-+
-+- Fixed RENR crash.
-+
-+2006-07-14: Version 1.8
-+
-+- Fixed RENR/OSD bug.
-+
-+2006-08-27: Version 1.9
-+
-+- Some modifications to the recording length and rename recordings
-+  patches (Thanks to Firefly).
-+- Added k1_k3_jumps_20s patch by Petri Hintukainen.
-+
-+2006-08-29: Version 1.10
-+
-+- The cRecording:Title() method now defaults to original formatting.
-+
-+2006-09-04: Version 1.11
-+
-+- Removed unused variable from cRecording::Title() method (Thanks to
-+  C.Y.M.).
-+- Some modifications to the rename recordings patch (Thanks to Firefly).
-+
-+2006-09-13: Version 1.12
-+
-+- More modifications to the rename recordings patch (Thanks to Firefly).
-+
-+2006-10-01: Version 1.13
-+
-+- Removed unnecessary syslog printing (Thanks to Firefly).
-+
-+2007-08-14: Version 1.14
-+
-+- Updated for vdr-1.5.7.
-+
-+2007-10-16: Version 1.15
-+
-+- Added recmenu play patch (Thanks to Ville Skyttä).
-+- Updated French translation (Thanks to ECLiPSE).
-+
-+2007-11-04: Version 1.16
-+
-+- Updated for vdr-1.5.11.
-+
-+2007-12-08: Version 1.17
-+
-+- Added binary skip patch.
-+- Removed k1_k3_jumps_20s patch.
-+
-+2008-02-17: Version 1.18
-+
-+- Updated for vdr-1.5.15.
-+
-+2008-03-02: Version 1.19
-+
-+- Modified binary skip to use kPrev and kNext keys and the skip is now
-+  always shortened after a direction change (Thanks to Timo Eskola).
-+- Readded k1_k3_jumps_20s patch.
-+
-+2008-04-04: Version 1.20
-+
-+- Added bitrate information into rename menu.
-+- Readded the path editing support of rename recordings patch (Thanks
-+  to Firefly).
-+
-+2008-05-08: Version 1.21
-+
-+- Fixed rename recordings (Thanks to Firefly).
-+- Added a DVB subtitles hack for old recordings (Thanks to Anssi Hannula).
-+
-+2009-01-08: Version 1.22
-+
-+- Updated for vdr-1.7.3.
-+
-+2009-01-25: Version 1.23
-+
-+- Updated for vdr-1.7.4.
-+
-+2009-02-27: Version 1.24
-+
-+- Fixed compilation under gcc-4.4.
-+
-+2009-04-05: Version 1.25
-+
-+- Fixed the length detection of recordings (Thanks to Thomas Günther).
-+
-+2009-04-17: Version 1.26
-+
-+- Fixed the length detection of audio recordings (Thanks to Thomas Günther).
-+
-+2009-04-26: Version 1.27
-+
-+- Fixed the length detection of empty recordings (Thanks to Thomas Günther).
-+
-+2009-07-12: Version 1.28
-+
-+- Fixed the TS/PES detection of recording marks.
-+
-+2009-11-23: Version 1.29
-+
-+- Updated Estonian translation (Thanks to Arthur Konovalov).
-+
-+2010-02-01: Version 1.30
-+
-+- Updated for vdr-1.7.12.
-+
-+2011-09-04: Version 1.31
-+
-+- Updated for vdr-1.7.21.
-+- Removed progress bar view form "What's on now?" menu.
-+- Removed "Main menu command position" and recordings length/sorting features.
-+- Changed renaming functionality to support different filesystems and binded it to key '0'.
-+
-+2011-10-19: Version 1.32
-+
-+- Refactored renaming functionality to support both background moving and copying.
-+- Removed main menu command position changes completely.
-+
-+2011-11-16: Version 1.33
-+
-+- Updated the filetransfer patch.
-+
-+2012-03-03: Version 1.34
-+
-+- Updated the filetransfer patch.
-+- Removed the DVB subtitles hack for old recordings.
-Index: vdr/Makefile
-===================================================================
---- vdr.orig/Makefile	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/Makefile	2012-06-06 22:47:49.000000000 +0200
-@@ -41,8 +41,8 @@
- SILIB    = $(LSIDIR)/libsi.a
- 
- OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o\
--       dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o\
--       lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o\
-+       dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filetransfer.o filter.o font.o i18n.o\
-+       interface.o keys.o lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o\
-        receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o\
-        skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
-        timers.o tools.o transfer.o vdr.o videodir.o
-Index: vdr/menu.c
-===================================================================
---- vdr.orig/menu.c	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/menu.c	2012-06-06 22:47:49.000000000 +0200
-@@ -18,6 +18,7 @@
- #include "config.h"
- #include "cutter.h"
- #include "eitscan.h"
-+#include "filetransfer.h"
- #include "i18n.h"
- #include "interface.h"
- #include "plugin.h"
-@@ -2180,6 +2181,167 @@
-   SetText(cString::sprintf("%d\t\t%d\t%s", totalEntries, newEntries, name));
- }
- 
-+// --- cMenuEditRecording ----------------------------------------------------
-+
-+class cMenuEditRecording : public cOsdMenu {
-+private:
-+  char name[MaxFileName];
-+  cMenuEditStrItem *file;
-+  cOsdItem *marksItem, *resumeItem;
-+  bool isResume, isMarks;
-+  cRecording *recording;
-+  void SetHelpKeys(void);
-+  eOSState SetFolder(void);
-+public:
-+  cMenuEditRecording(cRecording *Recording);
-+  virtual eOSState ProcessKey(eKeys Key);
-+};
-+
-+cMenuEditRecording::cMenuEditRecording(cRecording *Recording)
-+:cOsdMenu(tr("Edit recording"), 14)
-+{
-+  cMarks marks;
-+
-+  file = NULL;
-+  recording = Recording;
-+
-+  if (recording) {
-+     Utf8Strn0Cpy(name, recording->Name(), sizeof(name));
-+     Add(file = new cMenuEditStrItem(tr("File"), name, sizeof(name)));
-+
-+     Add(new cOsdItem("", osUnknown, false));
-+
-+     Add(new cOsdItem(cString::sprintf("%s:\t%s", tr("Date"), *DayDateTime(recording->Start())), osUnknown, false));
-+
-+     cChannel *channel = Channels.GetByChannelID(((cRecordingInfo *)recording->Info())->ChannelID());
-+     if (channel)
-+        Add(new cOsdItem(cString::sprintf("%s:\t%s", tr("Channel"), *ChannelString(channel, 0)), osUnknown, false));
-+
-+     int recLen = recording->LengthInSeconds();
-+     if (recLen >= 0)
-+        Add(new cOsdItem(cString::sprintf("%s:\t%d:%02d:%02d", tr("Length"), recLen / 3600, recLen / 60 % 60, recLen % 60), osUnknown, false));
-+     else
-+        recLen = 0;
-+
-+     int dirSize = DirSizeMB(recording->FileName());
-+     cString bitRate = recLen ? cString::sprintf(" (%.2f MBit/s)", 8.0 * dirSize / recLen) : cString("");
-+     Add(new cOsdItem(cString::sprintf("%s:\t%s", tr("Format"), recording->IsPesRecording() ? tr("PES") : tr("TS")), osUnknown, false));
-+     Add(new cOsdItem((dirSize > 9999) ? cString::sprintf("%s:\t%.2f GB%s", tr("Size"), dirSize / 1024.0, *bitRate) : cString::sprintf("%s:\t%d MB%s", tr("Size"), dirSize, *bitRate), osUnknown, false));
-+
-+     Add(new cOsdItem("", osUnknown, false));
-+
-+     isMarks = marks.Load(recording->FileName(), recording->FramesPerSecond(), recording->IsPesRecording()) && marks.Count();
-+     marksItem = new cOsdItem(tr("Delete marks information?"), osUser1, isMarks);
-+     Add(marksItem);
-+
-+     cResumeFile ResumeFile(recording->FileName(), recording->IsPesRecording());
-+     isResume = (ResumeFile.Read() != -1);
-+     resumeItem = new cOsdItem(tr("Delete resume information?"), osUser2, isResume);
-+     Add(resumeItem);
-+     }
-+
-+  SetHelpKeys();
-+}
-+
-+void cMenuEditRecording::SetHelpKeys(void)
-+{
-+  SetHelp(tr("Button$Folder"), tr("Button$Cut"), tr("Button$Copy"), tr("Button$Rename/Move"));
-+}
-+
-+eOSState cMenuEditRecording::SetFolder(void)
-+{
-+  cMenuFolder *mf = (cMenuFolder *)SubMenu();
-+  if (mf) {
-+     cString Folder = mf->GetFolder();
-+     char *p = strrchr(name, FOLDERDELIMCHAR);
-+     if (p)
-+        p++;
-+     else
-+        p = name;
-+     if (!isempty(*Folder))
-+        strn0cpy(name, cString::sprintf("%s%c%s", *Folder, FOLDERDELIMCHAR, p), sizeof(name));
-+     else if (p != name)
-+        memmove(name, p, strlen(p) + 1);
-+     SetCurrent(file);
-+     Display();
-+     }
-+  return CloseSubMenu();
-+}
-+
-+eOSState cMenuEditRecording::ProcessKey(eKeys Key)
-+{
-+  eOSState state = cOsdMenu::ProcessKey(Key);
-+
-+  if (state == osUnknown) {
-+     switch (Key) {
-+       case kRed:
-+            return AddSubMenu(new cMenuFolder(tr("Select folder"), &Folders, name));
-+            break;
-+       case kGreen:
-+            if (!cCutter::Active()) {
-+               if (!isMarks)
-+                  Skins.Message(mtError, tr("No editing marks defined!"));
-+               else if (!cCutter::Start(recording->FileName(), strcmp(recording->Name(), name) ? *NewVideoFileName(recording->FileName(), name) : NULL, false))
-+                  Skins.Message(mtError, tr("Can't start editing process!"));
-+               else
-+                  Skins.Message(mtInfo, tr("Editing process started"));
-+               }
-+            else
-+               Skins.Message(mtError, tr("Editing process already active!"));
-+            return osContinue;
-+       case kYellow:
-+       case kBlue:
-+            if (strcmp(recording->Name(), name)) {
-+               if (!cFileTransfer::Active()) {
-+                  if (cFileTransfer::Start(recording, name, (Key == kYellow)))
-+                     Skins.Message(mtInfo, tr("File transfer started"));
-+                  else
-+                     Skins.Message(mtError, tr("Can't start file transfer!"));
-+                  }
-+               else
-+                  Skins.Message(mtError, tr("File transfer already active!"));
-+               }
-+            return osRecordings;
-+       default:
-+            break;
-+       }
-+     return osContinue;
-+     }
-+  else if (state == osEnd && HasSubMenu())
-+     state = SetFolder();
-+  else if (state == osUser1) {
-+     if (isMarks && Interface->Confirm(tr("Delete marks information?"))) {
-+        cMarks marks;
-+        marks.Load(recording->FileName(), recording->FramesPerSecond(), recording->IsPesRecording());
-+        cMark *mark = marks.First();
-+        while (mark) {
-+              cMark *nextmark = marks.Next(mark);
-+              marks.Del(mark);
-+              mark = nextmark;
-+              }
-+        marks.Save();
-+        isMarks = false;
-+        marksItem->SetSelectable(isMarks);
-+        SetCurrent(First());
-+        Display();
-+        }
-+     return osContinue;
-+     }
-+  else if (state == osUser2) {
-+     if (isResume && Interface->Confirm(tr("Delete resume information?"))) {
-+        cResumeFile ResumeFile(recording->FileName(), recording->IsPesRecording());
-+        ResumeFile.Delete();
-+        isResume = false;
-+        resumeItem->SetSelectable(isResume);
-+        SetCurrent(First());
-+        Display();
-+        }
-+     return osContinue;
-+     }
-+
-+  return state;
-+}
-+
- // --- cMenuRecordings -------------------------------------------------------
- 
- cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
-@@ -2417,6 +2579,19 @@
-   return osContinue;
- }
- 
-+eOSState cMenuRecordings::Edit(void)
-+{
-+  if (HasSubMenu() || Count() == 0)
-+     return osContinue;
-+  cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
-+  if (ri && !ri->IsDirectory()) {
-+     cRecording *recording = GetRecording(ri);
-+     if (recording)
-+        return AddSubMenu(new cMenuEditRecording(recording));
-+     }
-+  return osContinue;
-+}
-+
- eOSState cMenuRecordings::ProcessKey(eKeys Key)
- {
-   bool HadSubMenu = HasSubMenu();
-@@ -2431,6 +2606,7 @@
-        case kYellow: return Delete();
-        case kInfo:
-        case kBlue:   return Info();
-+       case k0:      return Edit();
-        case k1...k9: return Commands(Key);
-        case kNone:   if (Recordings.StateChanged(recordingsState))
-                         Set(true);
-@@ -3300,6 +3476,7 @@
-   replaying = false;
-   stopReplayItem = NULL;
-   cancelEditingItem = NULL;
-+  cancelFileTransferItem = NULL;
-   stopRecordingItem = NULL;
-   recordControlsState = 0;
-   Set();
-@@ -3394,6 +3571,19 @@
-      result = true;
-      }
- 
-+  // File transfer control:
-+  bool FileTransferActive = cFileTransfer::Active();
-+  if (FileTransferActive && !cancelFileTransferItem) {
-+     // TRANSLATORS: note the leading blank!
-+     Add(cancelFileTransferItem = new cOsdItem(tr(" Cancel file transfer"), osCancelTransfer));
-+     result = true;
-+     }
-+  else if (cancelFileTransferItem && !FileTransferActive) {
-+     Del(cancelFileTransferItem->Index());
-+     cancelFileTransferItem = NULL;
-+     result = true;
-+     }
-+
-   // Record control:
-   if (cRecordControls::StateChanged(recordControlsState)) {
-      while (stopRecordingItem) {
-@@ -3442,6 +3632,12 @@
-                           return osEnd;
-                           }
-                        break;
-+    case osCancelTransfer:
-+                       if (Interface->Confirm(tr("Cancel file transfer?"))) {
-+                          cFileTransfer::Stop();
-+                          return osEnd;
-+                          }
-+                       break;
-     case osPlugin:     {
-                          cMenuPluginItem *item = (cMenuPluginItem *)Get(Current());
-                          if (item) {
-@@ -4401,6 +4597,10 @@
- 
- // --- cReplayControl --------------------------------------------------------
- 
-+#define REPLAYCONTROLSKIPLIMIT   9    // s
-+#define REPLAYCONTROLSKIPSECONDS 90   // s
-+#define REPLAYCONTROLSKIPTIMEOUT 5000 // ms
-+
- cReplayControl *cReplayControl::currentReplayControl = NULL;
- cString cReplayControl::fileName;
- 
-@@ -4413,6 +4613,9 @@
-   lastCurrent = lastTotal = -1;
-   lastPlay = lastForward = false;
-   lastSpeed = -2; // an invalid value
-+  lastSkipKey = kNone;
-+  lastSkipSeconds = REPLAYCONTROLSKIPSECONDS;
-+  lastSkipTimeout.Set(0);
-   timeoutShow = 0;
-   timeSearchActive = false;
-   cRecording Recording(fileName);
-@@ -4732,7 +4935,7 @@
-      if (!cCutter::Active()) {
-         if (!marks.Count())
-            Skins.Message(mtError, tr("No editing marks defined!"));
--        else if (!cCutter::Start(fileName))
-+        else if (!cCutter::Start(fileName, NULL, false))
-            Skins.Message(mtError, tr("Can't start editing process!"));
-         else
-            Skins.Message(mtInfo, tr("Editing process started"));
-@@ -4821,6 +5024,32 @@
-     case kGreen:   SkipSeconds(-60); break;
-     case kYellow|k_Repeat:
-     case kYellow:  SkipSeconds( 60); break;
-+    case k1|k_Repeat:
-+    case k1:       SkipSeconds(-20); break;
-+    case k3|k_Repeat:
-+    case k3:       SkipSeconds( 20); break;
-+    case kPrev|k_Repeat:
-+    case kPrev:    if (lastSkipTimeout.TimedOut()) {
-+                      lastSkipSeconds = REPLAYCONTROLSKIPSECONDS;
-+                      lastSkipKey = kPrev;
-+                   }
-+                   else if (RAWKEY(lastSkipKey) != kPrev && lastSkipSeconds > (2 * REPLAYCONTROLSKIPLIMIT)) {
-+                      lastSkipSeconds /= 2;
-+                      lastSkipKey = kNone;
-+                   }
-+                   lastSkipTimeout.Set(REPLAYCONTROLSKIPTIMEOUT);
-+                   SkipSeconds(-lastSkipSeconds); break;
-+    case kNext|k_Repeat:
-+    case kNext:    if (lastSkipTimeout.TimedOut()) {
-+                      lastSkipSeconds = REPLAYCONTROLSKIPSECONDS;
-+                      lastSkipKey = kNext;	
-+                   }
-+                   else if (RAWKEY(lastSkipKey) != kNext && lastSkipSeconds > (2 * REPLAYCONTROLSKIPLIMIT)) {
-+                      lastSkipSeconds /= 2;
-+                      lastSkipKey = kNone;
-+                   }
-+                   lastSkipTimeout.Set(REPLAYCONTROLSKIPTIMEOUT);
-+                   SkipSeconds(lastSkipSeconds); break;
-     case kStop:
-     case kBlue:    Hide();
-                    Stop();
-@@ -4830,12 +5059,8 @@
-       switch (int(Key)) {
-         // Editing:
-         case kMarkToggle:      MarkToggle(); break;
--        case kPrev|k_Repeat:
--        case kPrev:
-         case kMarkJumpBack|k_Repeat:
-         case kMarkJumpBack:    MarkJump(false); break;
--        case kNext|k_Repeat:
--        case kNext:
-         case kMarkJumpForward|k_Repeat:
-         case kMarkJumpForward: MarkJump(true); break;
-         case kMarkMoveBack|k_Repeat:
-Index: vdr/menu.h
-===================================================================
---- vdr.orig/menu.h	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/menu.h	2012-06-06 22:47:49.000000000 +0200
-@@ -101,6 +101,7 @@
-   bool replaying;
-   cOsdItem *stopReplayItem;
-   cOsdItem *cancelEditingItem;
-+  cOsdItem *cancelFileTransferItem;
-   cOsdItem *stopRecordingItem;
-   int recordControlsState;
-   static cOsdObject *pluginOsdObject;
-@@ -204,6 +205,7 @@
-   eOSState Delete(void);
-   eOSState Info(void);
-   eOSState Commands(eKeys Key = kNone);
-+  eOSState Edit(void);
- protected:
-   cRecording *GetRecording(cMenuRecordingItem *Item);
- public:
-@@ -261,6 +263,9 @@
-   int lastCurrent, lastTotal;
-   bool lastPlay, lastForward;
-   int lastSpeed;
-+  int lastSkipSeconds;
-+  eKeys lastSkipKey;
-+  cTimeMs lastSkipTimeout;
-   time_t timeoutShow;
-   bool timeSearchActive, timeSearchHide;
-   int timeSearchTime, timeSearchPos;
-Index: vdr/osdbase.c
-===================================================================
---- vdr.orig/osdbase.c	2012-06-06 22:47:37.000000000 +0200
-+++ vdr/osdbase.c	2012-06-06 22:47:49.000000000 +0200
-@@ -77,6 +77,7 @@
- {
-   isMenu = true;
-   digit = 0;
-+  key_nr = -1;
-   hasHotkeys = false;
-   displayMenuItems = 0;
-   title = NULL;
-@@ -126,7 +127,7 @@
-         digit = -1; // prevents automatic hotkeys - input already has them
-      if (digit >= 0) {
-         digit++;
--        buffer = cString::sprintf(" %c %s", (digit < 10) ? '0' + digit : ' ' , s);
-+        buffer = cString::sprintf(" %2d%s %s", digit, (digit > 9) ? "" : " ", s);
-         s = buffer;
-         }
-      }
-@@ -476,20 +477,60 @@
-      }
- }
- 
-+#define MENUKEY_TIMEOUT 1500
-+
- eOSState cOsdMenu::HotKey(eKeys Key)
- {
--  for (cOsdItem *item = First(); item; item = Next(item)) {
-+  bool match = false;
-+  bool highlight = false;
-+  int  item_nr;
-+  int  i;
-+
-+  if (Key == kNone) {
-+     if (lastActivity.TimedOut())
-+        Key = kOk;
-+     else
-+        return osContinue;
-+     }
-+  else
-+     lastActivity.Set(MENUKEY_TIMEOUT);
-+  for (cOsdItem *item = Last(); item; item = Prev(item)) {
-       const char *s = item->Text();
--      if (s && (s = skipspace(s)) != NULL) {
--         if (*s == Key - k1 + '1') {
-+      i = 0;
-+      item_nr = 0;
-+      if (s && (s = skipspace(s)) != '\0' && '0' <= s[i] && s[i] <= '9') {
-+         do {
-+            item_nr = item_nr * 10 + (s[i] - '0');
-+            }
-+         while ( !((s[++i] == '\t')||(s[i] == ' ')) && (s[i] != '\0') && ('0' <= s[i]) && (s[i] <= '9'));
-+         if ((Key == kOk) && (item_nr == key_nr)) {
-             current = item->Index();
-             RefreshCurrent();
-             Display();
-             cRemote::Put(kOk, true);
-+            key_nr = -1;
-             break;
-             }
-+         else if (Key != kOk) {
-+            if (!highlight && (item_nr == (Key - k0))) {
-+               highlight = true;
-+               current = item->Index();
-+               }
-+            if (!match && (key_nr == -1) && ((item_nr / 10) == (Key - k0))) {
-+               match = true;
-+               key_nr = (Key - k0);
-+               }
-+            else if (((key_nr == -1) && (item_nr == (Key - k0))) || (!match && (key_nr >= 0) && (item_nr == (10 * key_nr + Key - k0)))) {
-+               current = item->Index();
-+               cRemote::Put(kOk, true);
-+               key_nr = -1;
-+               break;
-+               }
-+            }
-          }
-       }
-+  if ((!match) && (Key != kNone))
-+     key_nr = -1;
-   return osContinue;
- }
- 
-@@ -528,8 +569,8 @@
-         }
-      }
-   switch (int(Key)) {
--    case k0:      return osUnknown;
--    case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
-+    case kNone:
-+    case k0...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
-     case kUp|k_Repeat:
-     case kUp:   CursorUp();   break;
-     case kDown|k_Repeat:
-Index: vdr/osdbase.h
-===================================================================
---- vdr.orig/osdbase.h	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/osdbase.h	2012-06-06 22:47:49.000000000 +0200
-@@ -30,6 +30,7 @@
-                 osStopRecord,
-                 osStopReplay,
-                 osCancelEdit,
-+                osCancelTransfer,
-                 osSwitchDvb,
-                 osBack,
-                 osEnd,
-@@ -97,6 +98,8 @@
-   char *status;
-   int digit;
-   bool hasHotkeys;
-+  int key_nr;
-+  cTimeMs lastActivity;
-   void DisplayHelp(bool Force = false);
- protected:
-   void SetDisplayMenu(void);
-Index: vdr/po/de_DE.po
-===================================================================
---- vdr.orig/po/de_DE.po	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/po/de_DE.po	2012-06-06 22:49:54.000000000 +0200
-@@ -1359,3 +1359,70 @@
- 
- msgid "free"
- msgstr "frei"
-+
-+msgid "Edit recording"
-+msgstr "Muokkaa tallennetta"
-+
-+msgid "Button$Cut"
-+msgstr "Leikkaa"
-+
-+msgid "Button$Copy"
-+msgstr "Kopioi"
-+
-+msgid "Button$Rename/Move"
-+msgstr "Nimeä/Siirrä"
-+
-+msgid "Date"
-+msgstr "Päiväys"
-+
-+msgid "Length"
-+msgstr "Pituus"
-+
-+msgid "Format"
-+msgstr "Tiedostomuoto"
-+
-+msgid "PES"
-+msgstr "PES"
-+
-+msgid "TS"
-+msgstr "TS"
-+
-+msgid "Size"
-+msgstr "Koko"
-+
-+msgid "Delete marks information?"
-+msgstr "Poista tallenteen merkinnät?"
-+
-+msgid "Delete resume information?"
-+msgstr "Poista tallenteen paluutiedot?"
-+
-+msgid "File transfer started"
-+msgstr "Tiedoston siirto aloitettu"
-+
-+msgid "Can't start file transfer!"
-+msgstr "Tiedoston siirron aloitus epäonnistui!"
-+
-+msgid "File transfer already active!"
-+msgstr "Tiedoston siirto on jo käynnissä!"
-+ 
-+#. TRANSLATORS: note the leading blank!
-+msgid " Cancel file transfer"
-+msgstr " Peru tiedoston siirto"
-+
-+msgid "Cancel file transfer?"
-+msgstr "Perutaanko tiedoston siirto?"
-+
-+msgid "Transfering file - shut down anyway?"
-+msgstr "Tiedoston siirto kesken - sammutetaanko?"
-+
-+msgid "Transfering file - restart anyway?"
-+msgstr "Tiedoston siirto kesken - käynnistetäänkö uudelleen?"
-+
-+msgid "File transfer failed!"
-+msgstr "Tiedoston siirto epäonnistui!"
-+
-+msgid "File transfer finished"
-+msgstr "Tiedoston siirto valmis"
-+
-+msgid "File already exists - overwrite?"
-+msgstr "Tiedosto on jo olemassa - ylikirjoitetaanko?"
-Index: vdr/po/fi_FI.po
-===================================================================
---- vdr.orig/po/fi_FI.po	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/po/fi_FI.po	2012-06-06 22:50:29.000000000 +0200
-@@ -1362,3 +1362,70 @@
- 
- msgid "free"
- msgstr "vapaana"
-+
-+msgid "Edit recording"
-+msgstr "Muokkaa tallennetta"
-+
-+msgid "Button$Cut"
-+msgstr "Leikkaa"
-+
-+msgid "Button$Copy"
-+msgstr "Kopioi"
-+
-+msgid "Button$Rename/Move"
-+msgstr "Nimeä/Siirrä"
-+
-+msgid "Date"
-+msgstr "Päiväys"
-+
-+msgid "Length"
-+msgstr "Pituus"
-+
-+msgid "Format"
-+msgstr "Tiedostomuoto"
-+
-+msgid "PES"
-+msgstr "PES"
-+
-+msgid "TS"
-+msgstr "TS"
-+
-+msgid "Size"
-+msgstr "Koko"
-+
-+msgid "Delete marks information?"
-+msgstr "Poista tallenteen merkinnät?"
-+
-+msgid "Delete resume information?"
-+msgstr "Poista tallenteen paluutiedot?"
-+
-+msgid "File transfer started"
-+msgstr "Tiedoston siirto aloitettu"
-+
-+msgid "Can't start file transfer!"
-+msgstr "Tiedoston siirron aloitus epäonnistui!"
-+
-+msgid "File transfer already active!"
-+msgstr "Tiedoston siirto on jo käynnissä!"
-+ 
-+#. TRANSLATORS: note the leading blank!
-+msgid " Cancel file transfer"
-+msgstr " Peru tiedoston siirto"
-+
-+msgid "Cancel file transfer?"
-+msgstr "Perutaanko tiedoston siirto?"
-+
-+msgid "Transfering file - shut down anyway?"
-+msgstr "Tiedoston siirto kesken - sammutetaanko?"
-+
-+msgid "Transfering file - restart anyway?"
-+msgstr "Tiedoston siirto kesken - käynnistetäänkö uudelleen?"
-+
-+msgid "File transfer failed!"
-+msgstr "Tiedoston siirto epäonnistui!"
-+
-+msgid "File transfer finished"
-+msgstr "Tiedoston siirto valmis"
-+
-+msgid "File already exists - overwrite?"
-+msgstr "Tiedosto on jo olemassa - ylikirjoitetaanko?"
-Index: vdr/recording.c
-===================================================================
---- vdr.orig/recording.c	2012-06-06 22:47:37.000000000 +0200
-+++ vdr/recording.c	2012-06-06 22:47:49.000000000 +0200
-@@ -936,6 +936,16 @@
-   return NULL;
- }
- 
-+const char *cRecording::UpdateFileName(const char *FileName)
-+{
-+  if (FileName && *FileName) {
-+     free(fileName);
-+     fileName = strdup(FileName);
-+     return fileName;
-+     }
-+  return NULL;
-+}
-+
- int cRecording::HierarchyLevels(void) const
- {
-   const char *s = name;
-@@ -1226,7 +1236,7 @@
-      }
- }
- 
--void cRecordings::DelByName(const char *FileName)
-+void cRecordings::DelByName(const char *FileName, bool RemoveRecording)
- {
-   LOCK_THREAD;
-   cRecording *recording = GetByName(FileName);
-@@ -1234,7 +1244,7 @@
-      cThreadLock DeletedRecordingsLock(&DeletedRecordings);
-      Del(recording, false);
-      char *ext = strrchr(recording->fileName, '.');
--     if (ext) {
-+     if (ext && RemoveRecording) {
-         strncpy(ext, DELEXT, strlen(ext));
-         if (access(recording->FileName(), F_OK) == 0) {
-            recording->deleted = time(NULL);
-Index: vdr/recording.h
-===================================================================
---- vdr.orig/recording.h	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/recording.h	2012-06-06 22:47:49.000000000 +0200
-@@ -117,6 +117,7 @@
-   const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1) const;
-   const cRecordingInfo *Info(void) const { return info; }
-   const char *PrefixFileName(char Prefix);
-+  const char *UpdateFileName(const char *FileName);
-   int HierarchyLevels(void) const;
-   void ResetResume(void) const;
-   double FramesPerSecond(void) const { return framesPerSecond; }
-@@ -188,7 +189,7 @@
-   void ResetResume(const char *ResumeFileName = NULL);
-   cRecording *GetByName(const char *FileName);
-   void AddByName(const char *FileName, bool TriggerUpdate = true);
--  void DelByName(const char *FileName);
-+  void DelByName(const char *FileName, bool RemoveRecording = true);
-   void UpdateByName(const char *FileName);
-   int TotalFileSizeMB(void);
-   double MBperMinute(void);
-Index: vdr/shutdown.c
-===================================================================
---- vdr.orig/shutdown.c	2012-03-28 21:56:44.000000000 +0200
-+++ vdr/shutdown.c	2012-06-06 22:47:49.000000000 +0200
-@@ -17,6 +17,7 @@
- #include "channels.h"
- #include "config.h"
- #include "cutter.h"
-+#include "filetransfer.h"
- #include "i18n.h"
- #include "interface.h"
- #include "menu.h"
-@@ -166,6 +167,10 @@
-      if (!Interactive || !Interface->Confirm(tr("Editing - shut down anyway?")))
-         return false;
-      }
-+  if (cFileTransfer::Active()) {
-+     if (!Interactive || !Interface->Confirm(tr("Transfering file - shut down anyway?")))
-+        return false;
-+     }
- 
-   cTimer *timer = Timers.GetNextActiveTimer();
-   time_t Next = timer ? timer->StartTime() : 0;
-@@ -209,6 +214,10 @@
-      if (!Interactive || !Interface->Confirm(tr("Editing - restart anyway?")))
-         return false;
-      }
-+  if (cFileTransfer::Active()) {
-+     if (!Interactive || !Interface->Confirm(tr("Transfering file - restart anyway?")))
-+        return false;
-+     }
- 
-   cTimer *timer = Timers.GetNextActiveTimer();
-   time_t Next  = timer ? timer->StartTime() : 0;
-Index: vdr/svdrp.c
-===================================================================
---- vdr.orig/svdrp.c	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/svdrp.c	2012-06-06 22:47:49.000000000 +0200
-@@ -31,6 +31,7 @@
- #include "cutter.h"
- #include "device.h"
- #include "eitscan.h"
-+#include "filetransfer.h"
- #include "keys.h"
- #include "menu.h"
- #include "plugin.h"
-@@ -193,6 +194,11 @@
-   "    After a CLRE command, no further EPG processing is done for 10\n"
-   "    seconds, so that data sent with subsequent PUTE commands doesn't\n"
-   "    interfere with data from the broadcasters.",
-+  "CPYR <number> <new name>\n"
-+  "    Copy the recording with the given number. Before a recording can be\n"
-+  "    copied, an LSTR command must have been executed in order to retrieve\n"
-+  "    the recording numbers. The numbers don't change during subsequent CPYR\n"
-+  "    commands.",
-   "DELC <number>\n"
-   "    Delete channel.",
-   "DELR <number>\n"
-@@ -256,6 +262,11 @@
-   "    used to easily activate or deactivate a timer.",
-   "MOVC <number> <to>\n"
-   "    Move a channel to a new position.",
-+  "MOVR <number> <new name>\n"
-+  "    Move the recording with the given number. Before a recording can be\n"
-+  "    moved, an LSTR command must have been executed in order to retrieve\n"
-+  "    the recording numbers. The numbers don't change during subsequent MOVR\n"
-+  "    commands.",
-   "NEWC <settings>\n"
-   "    Create a new channel. Settings must be in the same format as returned\n"
-   "    by the LSTC command.",
-@@ -611,6 +622,32 @@
-      }
- }
- 
-+void cSVDRP::CmdCPYR(const char *Option)
-+{
-+  if (*Option) {
-+     char *tail;
-+     int n = strtol(Option, &tail, 10);
-+     cRecording *recording = Recordings.Get(n - 1);
-+     if (recording && tail && tail != Option) {
-+        char *oldName = strdup(recording->Name());
-+        tail = skipspace(tail);
-+        if (!cFileTransfer::Active()) {
-+           if (cFileTransfer::Start(recording, tail, true))
-+              Reply(250, "Copying recording \"%s\" to \"%s\"", oldName, tail);
-+           else
-+              Reply(554, "Can't start file transfer");
-+           }
-+        else
-+           Reply(554, "File transfer already active");
-+        free(oldName);
-+        }
-+     else
-+        Reply(550, "Recording \"%d\" not found%s", n, Recordings.Count() ? "" : " (use LSTR before copying)");
-+     }
-+  else
-+     Reply(501, "Invalid Option \"%s\"", Option);
-+}
-+
- void cSVDRP::CmdDELC(const char *Option)
- {
-   if (*Option) {
-@@ -1289,6 +1326,32 @@
-      Reply(501, "Missing channel number");
- }
- 
-+void cSVDRP::CmdMOVR(const char *Option)
-+{
-+  if (*Option) {
-+     char *tail;
-+     int n = strtol(Option, &tail, 10);
-+     cRecording *recording = Recordings.Get(n - 1);
-+     if (recording && tail && tail != Option) {
-+        char *oldName = strdup(recording->Name());
-+        tail = skipspace(tail);
-+        if (!cFileTransfer::Active()) {
-+           if (cFileTransfer::Start(recording, tail))
-+              Reply(250, "Moving recording \"%s\" to \"%s\"", oldName, tail);
-+           else
-+              Reply(554, "Can't start file transfer");
-+           }
-+        else
-+           Reply(554, "File transfer already active");
-+        free(oldName);
-+        }
-+     else
-+        Reply(550, "Recording \"%d\" not found%s", n, Recordings.Count() ? "" : " (use LSTR before moving)");
-+     }
-+  else
-+     Reply(501, "Invalid Option \"%s\"", Option);
-+}
-+
- void cSVDRP::CmdNEWC(const char *Option)
- {
-   if (*Option) {
-@@ -1618,6 +1681,7 @@
-   s = skipspace(s);
-   if      (CMD("CHAN"))  CmdCHAN(s);
-   else if (CMD("CLRE"))  CmdCLRE(s);
-+  else if (CMD("CPYR"))  CmdCPYR(s);
-   else if (CMD("DELC"))  CmdDELC(s);
-   else if (CMD("DELR"))  CmdDELR(s);
-   else if (CMD("DELT"))  CmdDELT(s);
-@@ -1633,6 +1697,7 @@
-   else if (CMD("MODC"))  CmdMODC(s);
-   else if (CMD("MODT"))  CmdMODT(s);
-   else if (CMD("MOVC"))  CmdMOVC(s);
-+  else if (CMD("MOVR"))  CmdMOVR(s);
-   else if (CMD("NEWC"))  CmdNEWC(s);
-   else if (CMD("NEWT"))  CmdNEWT(s);
-   else if (CMD("NEXT"))  CmdNEXT(s);
-Index: vdr/svdrp.h
-===================================================================
---- vdr.orig/svdrp.h	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/svdrp.h	2012-06-06 22:47:49.000000000 +0200
-@@ -56,6 +56,7 @@
-   void PrintHelpTopics(const char **hp);
-   void CmdCHAN(const char *Option);
-   void CmdCLRE(const char *Option);
-+  void CmdCPYR(const char *Option);
-   void CmdDELC(const char *Option);
-   void CmdDELR(const char *Option);
-   void CmdDELT(const char *Option);
-@@ -71,6 +72,7 @@
-   void CmdMODC(const char *Option);
-   void CmdMODT(const char *Option);
-   void CmdMOVC(const char *Option);
-+  void CmdMOVR(const char *Option);
-   void CmdNEWC(const char *Option);
-   void CmdNEWT(const char *Option);
-   void CmdNEXT(const char *Option);
-Index: vdr/vdr.c
-===================================================================
---- vdr.orig/vdr.c	2012-06-06 22:47:37.000000000 +0200
-+++ vdr/vdr.c	2012-06-06 22:47:49.000000000 +0200
-@@ -45,6 +45,7 @@
- #include "dvbdevice.h"
- #include "eitscan.h"
- #include "epg.h"
-+#include "filetransfer.h"
- #include "i18n.h"
- #include "interface.h"
- #include "keys.h"
-@@ -1235,6 +1236,12 @@
-               else
-                  Skins.Message(mtInfo, tr("Editing process finished"));
-               }
-+           if (!cFileTransfer::Active() && cFileTransfer::Ended()) {
-+              if (cFileTransfer::Error())
-+                 Skins.Message(mtError, tr("File transfer failed!"));
-+              else
-+                 Skins.Message(mtInfo, tr("File transfer finished"));
-+              }
-            }
- 
-         // SIGHUP shall cause a restart:
-@@ -1250,7 +1257,7 @@
-               ShutdownHandler.countdown.Cancel();
-            }
- 
--        if ((Now - LastInteract) > ACTIVITYTIMEOUT && !cRecordControls::Active() && !cCutter::Active() && !Interface->HasSVDRPConnection() && (Now - cRemote::LastActivity()) > ACTIVITYTIMEOUT) {
-+        if ((Now - LastInteract) > ACTIVITYTIMEOUT && !cRecordControls::Active() && !cCutter::Active() && !cFileTransfer::Active() && !Interface->HasSVDRPConnection() && (Now - cRemote::LastActivity()) > ACTIVITYTIMEOUT) {
-            // Handle housekeeping tasks
- 
-            // Shutdown:
-@@ -1297,6 +1304,7 @@
- 
-   PluginManager.StopPlugins();
-   cRecordControls::Shutdown();
-+  cFileTransfer::Stop();
-   cCutter::Stop();
-   delete Menu;
-   cControl::Shutdown();
-Index: vdr/videodir.c
-===================================================================
---- vdr.orig/videodir.c	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/videodir.c	2012-06-06 22:47:49.000000000 +0200
-@@ -224,6 +224,22 @@
-   return NULL;
- }
- 
-+cString NewVideoFileName(const char *FileName, const char *NewDirName)
-+{
-+  char *NewDir = ExchangeChars(strdup(NewDirName), true);
-+  if (NewDir) {
-+     const char *p = FileName + strlen(FileName); // p points at the terminating 0
-+     while (p-- > FileName) {
-+           if (*p == '/')
-+              break;
-+           }
-+     cString NewName = cString::sprintf("%s/%s%s", VideoDirectory, NewDir, p);
-+     free(NewDir);
-+     return NewName;
-+     }
-+  return NULL;
-+}
-+
- void RemoveEmptyVideoDirectories(void)
- {
-   cVideoDirectory Dir;
-Index: vdr/videodir.h
-===================================================================
---- vdr.orig/videodir.h	2012-06-06 21:30:58.000000000 +0200
-+++ vdr/videodir.h	2012-06-06 22:47:49.000000000 +0200
-@@ -22,6 +22,7 @@
- bool VideoFileSpaceAvailable(int SizeMB);
- int VideoDiskSpace(int *FreeMB = NULL, int *UsedMB = NULL); // returns the used disk space in percent
- cString PrefixVideoFileName(const char *FileName, char Prefix);
-+cString NewVideoFileName(const char *FileName, const char *NewDirName);
- void RemoveEmptyVideoDirectories(void);
- bool IsOnVideoDirectoryFileSystem(const char *FileName);
- 
diff --git a/debian/patches/opt-22-x_edit_marks.patch b/debian/patches/opt-22-x_edit_marks.patch
deleted file mode 100644
index 72d7f4a..0000000
--- a/debian/patches/opt-22-x_edit_marks.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-Description: Patch adds keys '1', '3' in replay mode to move marks by +/-5secs.
- When in replay mode key '0' sets a mark and stops there.
- 'Green' and 'Yellow' act as 'Prev' and 'Next'.
-Author: FrankJepsen at vdrportal.de
-Origin: http://vdrportal.de/board/thread.php?postid=718583#post718583
-
-Index: vdr/menu.c
-===================================================================
---- vdr.orig/menu.c	2012-06-06 23:10:20.000000000 +0200
-+++ vdr/menu.c	2012-06-06 23:10:22.000000000 +0200
-@@ -5024,10 +5024,6 @@
-     case kGreen:   SkipSeconds(-60); break;
-     case kYellow|k_Repeat:
-     case kYellow:  SkipSeconds( 60); break;
--    case k1|k_Repeat:
--    case k1:       SkipSeconds(-20); break;
--    case k3|k_Repeat:
--    case k3:       SkipSeconds( 20); break;
-     case kPrev|k_Repeat:
-     case kPrev:    if (lastSkipTimeout.TimedOut()) {
-                       lastSkipSeconds = REPLAYCONTROLSKIPSECONDS;
-@@ -5055,10 +5051,48 @@
-                    Stop();
-                    return osEnd;
-     default: {
-+      bool play, forward;
-+      int speed;
-+      int Current, Total;
-+      cMark *m;
-+
-       DoShowMode = false;
-       switch (int(Key)) {
-         // Editing:
--        case kMarkToggle:      MarkToggle(); break;
-+        case k1|k_Repeat:
-+        case k1:               if (GetReplayMode(play, forward, speed) && !play && GetIndex(Current, Total) && (m = marks.Get(Current)) != NULL) {
-+                                  displayFrames = true;
-+                                  int p = SkipFrames(-SecondsToFrames(5, FramesPerSecond()));
-+                                  cMark *m2;
-+                                  if ((m2 = marks.Prev(m)) != NULL && m2->Position() >= p)
-+                                     break;
-+                                  m->SetPosition(p);
-+                                  Goto(m->Position(), true);
-+                                  marks.Save();
-+                                  }
-+                               else
-+                                  SkipSeconds(-20);
-+                               break;
-+        case k3|k_Repeat:
-+        case k3:               if (GetReplayMode(play, forward, speed) && !play && GetIndex(Current, Total) && (m = marks.Get(Current)) != NULL) {
-+                                  displayFrames = true;
-+                                  int p = SkipFrames(SecondsToFrames(5, FramesPerSecond()));
-+                                  cMark *m2;
-+                                  if ((m2 = marks.Next(m)) != NULL && m2->Position() <= p)
-+                                     break;
-+                                  m->SetPosition(p);
-+                                  Goto(m->Position(), true);
-+                                  marks.Save();
-+                                  }
-+                               else
-+                                  SkipSeconds(20);
-+                               break;
-+        case kMarkToggle:      if (GetReplayMode(play, forward, speed) && play) {
-+                                  displayFrames = true;
-+                                  Pause();
-+                                  }
-+                               MarkToggle();
-+                               break;
-         case kMarkJumpBack|k_Repeat:
-         case kMarkJumpBack:    MarkJump(false); break;
-         case kMarkJumpForward|k_Repeat:
diff --git a/debian/patches/opt-24_jumpplay.patch b/debian/patches/opt-24_jumpplay.patch
deleted file mode 100644
index 514db64..0000000
--- a/debian/patches/opt-24_jumpplay.patch
+++ /dev/null
@@ -1,427 +0,0 @@
-Description: Play after jump to next mark. Automatically jump over commercial breaks.
- See README.jumpplay and MANUAL for details.
- .
- 2011-03-19: Remove marks reloading for VDR-1.7.17, by Udo Richter <udo_richter at gmx.de>
-Author: Torsten Kunkel <vdr at tkunkel.de>, Thomas Günther <tom at toms-cafe.de>
-Origin: http://toms-cafe.de/vdr/download/vdr-jumpplay-1.0-1.7.6.diff
-
-Index: vdr/MANUAL
-===================================================================
---- vdr.orig/MANUAL	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/MANUAL	2012-06-06 23:10:25.000000000 +0200
-@@ -862,6 +862,25 @@
-                          0 resulting in a file named 'resume', and any other
-                          value resulting in 'resume.n'.
- 
-+  Jump&Play = no         Turns playing on or off after jumping forward to the
-+                         next editing mark with the '9' key.
-+
-+  Play&Jump = no         Turns automatic jumping over commercial breaks on or
-+                         off. This includes jumping to the first mark, if the
-+                         replay starts at the beginning of a recording - and
-+                         stopping the replay at the last mark.
-+                         With this setting enabled, the behaviour of the '8'
-+                         key during replay is changed too. It moves the actual
-+                         replay position not only three seconds before the
-+                         next "start" mark, but also before the next "end"
-+                         mark. This can be used to test, if the editing marks
-+                         are correctly positioned for a "smooth" jump over a
-+                         commercial break.
-+
-+  Pause at last mark = no
-+                         Turns pausing of replay at the last editing mark on or
-+                         off.
-+
-   Miscellaneous:
- 
-   Min. event timeout = 30
-Index: vdr/README.jumpplay
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/README.jumpplay	2012-06-06 23:10:25.000000000 +0200
-@@ -0,0 +1,92 @@
-+JumpPlay patch for VDR
-+----------------------
-+
-+This patch changes the replay behaviour for recordings that contain editing
-+marks. It allows to immediately continue the replay after jumping forward to
-+the next mark, and to automatically jump over the commercial break to the next
-+"start" mark, if an "end" mark is reached.
-+
-+The features of this patch can be turned on or off with parameters in the replay
-+setup. See MANUAL for description of this parameters: "Jump&Play", "Play&Jump",
-+"Pause at last mark" and "Reload marks".
-+
-+
-+* History
-+
-+  2003-07-04: jumpandrun.diff - the Noad <theNoad at SoftHome.net>
-+    Jump&Play
-+
-+  2003-12-06: Version 0.0 - Torsten Kunkel <vdr at tkunkel.de>
-+    Play&Jump (only if progressbar is visible)
-+    Setup parameters Jump&Play and Play&Jump in the replay setup
-+
-+  2004-01-20: Version 0.1 - Thomas Günther <tom at toms-cafe.de>
-+    Jump&Play:
-+      - fixed speed after jump
-+      - fixed removing of marks
-+    Play&Jump:
-+      - jump only on "end" marks
-+
-+  2004-01-27: Version 0.2 - Thomas Günther <tom at toms-cafe.de>
-+    Jump&Play:
-+      - fixed double jump
-+    Play&Jump:
-+      - fixed mark detection: fuzzy detection (until 3 seconds after mark)
-+      - jump without progressbar
-+      - mode "progressbar only" for old behaviour
-+
-+  2004-01-31: Version 0.3 - Thomas Günther <tom at toms-cafe.de>
-+    Jump&Play:
-+      - fixed display frames
-+    Play&Jump:
-+      - fixed end of playing at last mark
-+
-+  2004-07-11: Version 0.4 - Thomas Günther <tom at toms-cafe.de>
-+    Jump&Play:
-+      - don't play after jump to end
-+    Play&Jump:
-+      - don't prevent jumping after hide or show
-+    Less conflicts with other patches (Elchi/AutoPID)
-+
-+  2004-08-21: Version 0.5 - Thomas Günther <tom at toms-cafe.de>
-+    Play&Jump:
-+      - exact jumps, replay like edited recording (no fuzzy mark detection)
-+      - jump to first mark if replay starts at the beginning
-+      - check jump marks with '8' key
-+      - mode "progressbar only" removed
-+    Description in README.jumpplay
-+
-+  2004-12-28: Version 0.6 - Thomas Günther <tom at toms-cafe.de>
-+    Adapted noad extensions (from the Noad <theNoad at SoftHome.net>) to
-+    jumpplay-0.5:
-+      - cyclic reloading of marks found by noad online-scan
-+      - don't stop after the last mark in case of live-recordings
-+    New setup parameter "Load marks interval (s)"
-+    Updated description in README.jumpplay
-+
-+  2006-04-14: Version 0.7 - Thomas Günther <tom at toms-cafe.de>
-+    Fixed jump to first mark (crashed with plugin extrecmenu-0.9)
-+    Added version define JUMPPLAYVERSNUM
-+    Added placeholders for Czech language texts
-+    Cleaned up i18n entries (support only VDR >= 1.3.29)
-+    Improved description of i18n placeholders - hoping for real language texts
-+
-+  2006-05-12: Version 0.8 - Thomas Günther <tom at toms-cafe.de>
-+    Fixed segfault in dvbplayer thread while the replaycontrol thread is
-+    reloading the marks (thanks to horchi at vdrportal.de for reporting this -
-+    see http://vdrportal.de/board/thread.php?postid=450463#post450463):
-+    New class cMarksReload checks the timestamp of marks.vdr in 10 seconds
-+    intervals, so the marks in the threads dvbplayer and replaycontrol can be
-+    reloaded independently
-+    Changed setup parameter "Load marks interval (s)" to "Reload marks"
-+    Updated description in README.jumpplay
-+
-+  2006-05-28: Version 0.9 - Thomas Günther <tom at toms-cafe.de>
-+    New setup parameter "Pause at last mark"
-+    Updated description in README.jumpplay
-+    Moved parameters description to MANUAL
-+
-+  2009-03-31: Version 1.0 - Thomas Günther <tom at toms-cafe.de>
-+    Play&Jump:
-+      - set resume position to 0 if replay stops at the first mark
-+    Added French language texts (thanks to Michaël Nival)
-Index: vdr/config.c
-===================================================================
---- vdr.orig/config.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/config.c	2012-06-06 23:10:25.000000000 +0200
-@@ -455,6 +455,9 @@
-   ShowReplayMode = 0;
-   ShowRemainingTime = 0;
-   ResumeID = 0;
-+  JumpPlay = 0;
-+  PlayJump = 0;
-+  PauseLastMark = 0;
-   CurrentChannel = -1;
-   CurrentVolume = MAXVOLUME;
-   CurrentDolby = 0;
-@@ -650,6 +653,9 @@
-   else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
-   else if (!strcasecmp(Name, "ShowRemainingTime"))   ShowRemainingTime  = atoi(Value);
-   else if (!strcasecmp(Name, "ResumeID"))            ResumeID           = atoi(Value);
-+  else if (!strcasecmp(Name, "JumpPlay"))            JumpPlay           = atoi(Value);
-+  else if (!strcasecmp(Name, "PlayJump"))            PlayJump           = atoi(Value);
-+  else if (!strcasecmp(Name, "PauseLastMark"))       PauseLastMark      = atoi(Value);
-   else if (!strcasecmp(Name, "CurrentChannel"))      CurrentChannel     = atoi(Value);
-   else if (!strcasecmp(Name, "CurrentVolume"))       CurrentVolume      = atoi(Value);
-   else if (!strcasecmp(Name, "CurrentDolby"))        CurrentDolby       = atoi(Value);
-@@ -748,6 +754,9 @@
-   Store("ShowReplayMode",     ShowReplayMode);
-   Store("ShowRemainingTime",  ShowRemainingTime);
-   Store("ResumeID",           ResumeID);
-+  Store("JumpPlay",           JumpPlay);
-+  Store("PlayJump",           PlayJump);
-+  Store("PauseLastMark",      PauseLastMark);
-   Store("CurrentChannel",     CurrentChannel);
-   Store("CurrentVolume",      CurrentVolume);
-   Store("CurrentDolby",       CurrentDolby);
-Index: vdr/config.h
-===================================================================
---- vdr.orig/config.h	2012-06-06 23:10:20.000000000 +0200
-+++ vdr/config.h	2012-06-06 23:10:25.000000000 +0200
-@@ -38,6 +38,8 @@
- 
- #define LIEMIKUUTIO  134
-  
-+#define JUMPPLAYVERSNUM 100
-+
- #define MAXPRIORITY       99
- #define MINPRIORITY       (-MAXPRIORITY)
- #define LIVEPRIORITY      0                  // priority used when selecting a device for live viewing
-@@ -320,6 +322,9 @@
-   int ShowReplayMode;
-   int ShowRemainingTime;
-   int ResumeID;
-+  int JumpPlay;
-+  int PlayJump;
-+  int PauseLastMark;
-   int CurrentChannel;
-   int CurrentVolume;
-   int CurrentDolby;
-Index: vdr/dvbplayer.c
-===================================================================
---- vdr.orig/dvbplayer.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/dvbplayer.c	2012-06-06 23:10:25.000000000 +0200
-@@ -204,6 +204,7 @@
-   cNonBlockingFileReader *nonBlockingFileReader;
-   cRingBufferFrame *ringBuffer;
-   cPtsIndex ptsIndex;
-+  cMarks marks;
-   cFileName *fileName;
-   cIndexFile *index;
-   cUnbufferedFile *replayFile;
-@@ -286,6 +287,7 @@
-      }
-   else if (PauseLive)
-      framesPerSecond = cRecording(FileName).FramesPerSecond(); // the fps rate might have changed from the default
-+  marks.Load(FileName, framesPerSecond, isPesRecording);
- }
- 
- cDvbPlayer::~cDvbPlayer()
-@@ -364,6 +366,10 @@
-   if (index) {
-      int Index = ptsIndex.FindIndex(DeviceGetSTC());
-      if (Index >= 0) {
-+        // set resume position to 0 if replay stops at the first mark
-+        if (Setup.PlayJump && marks.First() &&
-+            abs(Index - marks.First()->Position()) <= int(round(RESUMEBACKUP * framesPerSecond)))
-+           Index = 0;
-         Index -= int(round(RESUMEBACKUP * framesPerSecond));
-         if (Index > 0)
-            Index = index->GetNextIFrame(Index, false);
-@@ -390,11 +396,26 @@
- {
-   uchar *p = NULL;
-   int pc = 0;
-+  bool cutIn = false;
-+  int total = -1;
- 
-   readIndex = Resume();
-   if (readIndex >= 0)
-      isyslog("resuming replay at index %d (%s)", readIndex, *IndexToHMSF(readIndex, true, framesPerSecond));
- 
-+  if (Setup.PlayJump && readIndex <= 0 && marks.First() && index) {
-+     int Index = marks.First()->Position();
-+     uint16_t FileNumber;
-+     off_t FileOffset;
-+     if (index->Get(Index, &FileNumber, &FileOffset) &&
-+         NextFile(FileNumber, FileOffset)) {
-+        isyslog("PlayJump: start replay at first mark %d (%s)",
-+                Index, *IndexToHMSF(Index, true, framesPerSecond));
-+        readIndex = Index;
-+        }
-+     }
-+
-+  bool LastMarkPause = false;
-   nonBlockingFileReader = new cNonBlockingFileReader;
-   int Length = 0;
-   bool Sleep = false;
-@@ -421,7 +442,7 @@
- 
-           // Read the next frame from the file:
- 
--          if (playMode != pmStill && playMode != pmPause) {
-+          if (playMode != pmStill && playMode != pmPause && !LastMarkPause) {
-              if (!readFrame && (replayFile || readIndex >= 0)) {
-                 if (!nonBlockingFileReader->Reading()) {
-                    if (!SwitchToPlayFrame && (playMode == pmFast || (playMode == pmSlow && playDir == pdBackward))) {
-@@ -458,6 +479,44 @@
-                    else if (index) {
-                       uint16_t FileNumber;
-                       off_t FileOffset;
-+                      if (Setup.PlayJump || Setup.PauseLastMark) {
-+                         // check for end mark - jump to next mark or pause
-+                         readIndex++;
-+                         marks.Update();
-+                         cMark *m = marks.Get(readIndex);
-+                         if (m && (m->Index() & 0x01) != 0) {
-+                            m = marks.Next(m);
-+                            int Index;
-+                            if (m)
-+                               Index = m->Position();
-+                            else if (Setup.PauseLastMark) {
-+                               // pause at last mark
-+                               isyslog("PauseLastMark: pause at position %d (%s)",
-+                                       readIndex, *IndexToHMSF(readIndex, true, framesPerSecond));
-+                               LastMarkPause = true;
-+                               Index = -1;
-+                               }
-+                            else if (total == index->Last())
-+                               // at last mark jump to end of recording
-+                               Index = index->Last() - 1;
-+                            else
-+                               // jump but stay off end of live-recordings
-+                               Index = index->GetNextIFrame(index->Last() - int(round(MAXSTUCKATEOF * framesPerSecond)), true);
-+                            // don't jump in edited recordings
-+                            if (Setup.PlayJump && Index > readIndex &&
-+                                Index > index->GetNextIFrame(readIndex, true)) {
-+                               isyslog("PlayJump: %d frames to %d (%s)",
-+                                       Index - readIndex, Index,
-+                                       *IndexToHMSF(Index, true, framesPerSecond));
-+                               readIndex = Index;
-+                               cutIn = true;
-+                               }
-+                            }
-+                         readIndex--;
-+                      }
-+                      // for detecting growing length of live-recordings
-+                      if (index->Get(readIndex + 1, &FileNumber, &FileOffset, &readIndependent) && readIndependent)
-+                         total = index->Last();
-                       if (index->Get(readIndex + 1, &FileNumber, &FileOffset, &readIndependent, &Length) && NextFile(FileNumber, FileOffset))
-                          readIndex++;
-                       else
-@@ -502,6 +561,13 @@
-              // Store the frame in the buffer:
- 
-              if (readFrame) {
-+                if (cutIn) {
-+                   if (isPesRecording)
-+                      cRemux::SetBrokenLink(readFrame->Data(), readFrame->Count());
-+                   else
-+                      TsSetTeiOnBrokenPackets(readFrame->Data(), readFrame->Count());
-+                   cutIn = false;
-+                   }
-                 if (ringBuffer->Put(readFrame))
-                    readFrame = NULL;
-                 else
-@@ -567,8 +633,13 @@
-                 p = NULL;
-                 }
-              }
--          else
-+          else {
-+             if (LastMarkPause) {
-+                LastMarkPause = false;
-+                playMode = pmPause;
-+                }
-              Sleep = true;
-+             }
- 
-           // Handle hitting begin/end of recording:
- 
-Index: vdr/menu.c
-===================================================================
---- vdr.orig/menu.c	2012-06-06 23:10:22.000000000 +0200
-+++ vdr/menu.c	2012-06-06 23:10:26.000000000 +0200
-@@ -3276,6 +3276,9 @@
-   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
-   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show remaining time"), &data.ShowRemainingTime));
-   Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
-+  Add(new cMenuEditBoolItem(tr("Setup.Replay$Jump&Play"), &data.JumpPlay));
-+  Add(new cMenuEditBoolItem(tr("Setup.Replay$Play&Jump"), &data.PlayJump));
-+  Add(new cMenuEditBoolItem(tr("Setup.Replay$Pause at last mark"), &data.PauseLastMark));
- }
- 
- void cMenuSetupReplay::Store(void)
-@@ -4882,8 +4885,10 @@
-         marks.Add(Current);
-         bool Play, Forward;
-         int Speed;
--        if (GetReplayMode(Play, Forward, Speed) && !Play)
-+        if (GetReplayMode(Play, Forward, Speed) && !Play) {
-            Goto(Current, true);
-+           displayFrames = true;
-+           }
-         }
-      ShowTimed(2);
-      marks.Save();
-@@ -4897,8 +4902,17 @@
-      if (GetIndex(Current, Total)) {
-         cMark *m = Forward ? marks.GetNext(Current) : marks.GetPrev(Current);
-         if (m) {
--           Goto(m->Position(), true);
--           displayFrames = true;
-+           bool Play2, Forward2;
-+           int Speed;
-+           if (Setup.JumpPlay && GetReplayMode(Play2, Forward2, Speed) &&
-+               Play2 && Forward && m->Position() < Total - SecondsToFrames(3, FramesPerSecond())) {
-+              Goto(m->Position());
-+              Play();
-+              }
-+           else {
-+              Goto(m->Position(), true);
-+              displayFrames = true;
-+              }
-            }
-         }
-      }
-@@ -4954,7 +4968,7 @@
-      if (!m)
-         m = marks.GetNext(Current);
-      if (m) {
--        if ((m->Index() & 0x01) != 0)
-+        if ((m->Index() & 0x01) != 0 && !Setup.PlayJump)
-            m = marks.Next(m);
-         if (m) {
-            Goto(m->Position() - SecondsToFrames(3, FramesPerSecond()));
-Index: vdr/po/de_DE.po
-===================================================================
---- vdr.orig/po/de_DE.po	2012-06-06 23:10:20.000000000 +0200
-+++ vdr/po/de_DE.po	2012-06-06 23:10:26.000000000 +0200
-@@ -1077,6 +1077,15 @@
- msgid "Replay"
- msgstr "Wiedergabe"
- 
-+msgid "Setup.Replay$Jump&Play"
-+msgstr "Wiedergabe nach Sprung"
-+
-+msgid "Setup.Replay$Play&Jump"
-+msgstr "Sprung bei Schnittmarke"
-+
-+msgid "Setup.Replay$Pause at last mark"
-+msgstr "Pause bei letzter Marke"
-+
- msgid "Setup.Replay$Multi speed mode"
- msgstr "Mehrstufiger Vor-/Rücklauf"
- 
-Index: vdr/po/fr_FR.po
-===================================================================
---- vdr.orig/po/fr_FR.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/fr_FR.po	2012-06-06 23:10:26.000000000 +0200
-@@ -1083,6 +1083,15 @@
- msgid "Replay"
- msgstr "Lecture"
- 
-+msgid "Setup.Replay$Jump&Play"
-+msgstr "Lecture après saut"
-+
-+msgid "Setup.Replay$Play&Jump"
-+msgstr "Saut sur les marques de découpes"
-+
-+msgid "Setup.Replay$Pause at last mark"
-+msgstr "Pause après la dernière marque"
-+
- msgid "Setup.Replay$Multi speed mode"
- msgstr "Mode multi-vitesses"
- 
diff --git a/debian/patches/opt-27_ttxtsubs.patch b/debian/patches/opt-27_ttxtsubs.patch
index 2122080..ac35630 100644
--- a/debian/patches/opt-27_ttxtsubs.patch
+++ b/debian/patches/opt-27_ttxtsubs.patch
@@ -3,9 +3,9 @@ Origin: ttxsubs plugin
 
 Index: vdr/MANUAL
 ===================================================================
---- vdr.orig/MANUAL	2012-06-06 23:10:25.000000000 +0200
-+++ vdr/MANUAL	2012-06-06 23:10:30.000000000 +0200
-@@ -735,6 +735,9 @@
+--- vdr.orig/MANUAL	2013-03-03 09:21:21.000000000 +0100
++++ vdr/MANUAL	2013-03-03 09:22:06.000000000 +0100
+@@ -756,6 +756,9 @@
                           background transparency. By default the values as broadcast
                           are used.
  
@@ -15,24 +15,11 @@ Index: vdr/MANUAL
    LNB:
  
    Use DiSEqC = no        Generally turns DiSEqC support on or off.
-Index: vdr/Makefile
-===================================================================
---- vdr.orig/Makefile	2012-06-06 23:10:20.000000000 +0200
-+++ vdr/Makefile	2012-06-06 23:10:30.000000000 +0200
-@@ -47,6 +47,8 @@
-        skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
-        timers.o tools.o transfer.o vdr.o videodir.o
- 
-+OBJS += vdrttxtsubshooks.o
-+
- ifndef NO_KBD
- DEFINES += -DREMOTE_KBD
- endif
 Index: vdr/channels.c
 ===================================================================
---- vdr.orig/channels.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/channels.c	2012-06-06 23:10:30.000000000 +0200
-@@ -378,6 +378,26 @@
+--- vdr.orig/channels.c	2013-03-03 08:43:26.000000000 +0100
++++ vdr/channels.c	2013-03-03 09:22:06.000000000 +0100
+@@ -408,6 +408,26 @@
       }
  }
  
@@ -59,7 +46,7 @@ Index: vdr/channels.c
  void cChannel::SetCaIds(const int *CaIds)
  {
    if (caids[0] && caids[0] <= CA_USER_MAX)
-@@ -506,10 +526,17 @@
+@@ -536,10 +556,17 @@
          q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs, Channel->dtypes);
          }
       *q = 0;
@@ -78,7 +65,7 @@ Index: vdr/channels.c
       if (Channel->spids[0]) {
          *q++ = ';';
          q += IntArrayToString(q, Channel->spids, 10, Channel->slangs);
-@@ -680,6 +707,32 @@
+@@ -710,6 +737,32 @@
                      }
                spids[NumSpids] = 0;
                }
@@ -113,8 +100,8 @@ Index: vdr/channels.c
             if (caidbuf) {
 Index: vdr/channels.h
 ===================================================================
---- vdr.orig/channels.h	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/channels.h	2012-06-06 23:10:30.000000000 +0200
+--- vdr.orig/channels.h	2013-03-03 08:43:26.000000000 +0100
++++ vdr/channels.h	2013-03-03 09:22:06.000000000 +0100
 @@ -35,6 +35,7 @@
  #define MAXDPIDS 16 // dolby (AC3 + DTS)
  #define MAXSPIDS 32 // subtitles
@@ -150,7 +137,7 @@ Index: vdr/channels.h
    int caids[MAXCAIDS + 1]; // list is zero-terminated
    int nid;
    int tid;
-@@ -164,6 +178,8 @@
+@@ -166,6 +180,8 @@
    uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); }
    uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); }
    int Tpid(void) const { return tpid; }
@@ -159,7 +146,7 @@ Index: vdr/channels.h
    const int *Caids(void) const { return caids; }
    int Ca(int Index = 0) const { return Index < MAXCAIDS ? caids[Index] : 0; }
    int Nid(void) const { return nid; }
-@@ -190,6 +206,7 @@
+@@ -192,6 +208,7 @@
    void SetName(const char *Name, const char *ShortName, const char *Provider);
    void SetPortalName(const char *PortalName);
    void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, int *Atypes, char ALangs[][MAXLANGCODE2], int *Dpids, int *Dtypes, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
@@ -169,8 +156,8 @@ Index: vdr/channels.h
    void SetLinkChannels(cLinkChannels *LinkChannels);
 Index: vdr/ci.c
 ===================================================================
---- vdr.orig/ci.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/ci.c	2012-06-06 23:10:30.000000000 +0200
+--- vdr.orig/ci.c	2013-03-03 08:43:26.000000000 +0100
++++ vdr/ci.c	2013-03-03 09:22:06.000000000 +0100
 @@ -1914,6 +1914,8 @@
           AddPid(Channel->Sid(), *Dpid, STREAM_TYPE_PRIVATE);
       for (const int *Spid = Channel->Spids(); *Spid; Spid++)
@@ -180,21 +167,11 @@ Index: vdr/ci.c
       }
  }
  
-@@ -1937,6 +1939,9 @@
-          CaPmt.AddPid(*Dpid, STREAM_TYPE_PRIVATE);
-      for (const int *Spid = Channel->Spids(); *Spid; Spid++)
-          CaPmt.AddPid(*Spid, STREAM_TYPE_PRIVATE); 
-+     if (Channel->Tpid() && Setup.SupportTeletext) {
-+        CaPmt.AddPid(Channel->Tpid(), STREAM_TYPE_PRIVATE);
-+        }
-      cas->SendPMT(&CaPmt);
-      cTimeMs Timeout(QUERY_REPLY_TIMEOUT);
-      do {
 Index: vdr/config.c
 ===================================================================
---- vdr.orig/config.c	2012-06-06 23:10:25.000000000 +0200
-+++ vdr/config.c	2012-06-06 23:10:30.000000000 +0200
-@@ -396,6 +396,7 @@
+--- vdr.orig/config.c	2013-03-03 09:21:21.000000000 +0100
++++ vdr/config.c	2013-03-03 09:22:06.000000000 +0100
+@@ -397,6 +397,7 @@
    MarginStop = 10;
    AudioLanguages[0] = -1;
    DisplaySubtitles = 0;
@@ -202,7 +179,7 @@ Index: vdr/config.c
    SubtitleLanguages[0] = -1;
    SubtitleOffset = 0;
    SubtitleFgTransparency = 0;
-@@ -594,6 +595,7 @@
+@@ -601,6 +602,7 @@
    else if (!strcasecmp(Name, "MarginStop"))          MarginStop         = atoi(Value);
    else if (!strcasecmp(Name, "AudioLanguages"))      return ParseLanguages(Value, AudioLanguages);
    else if (!strcasecmp(Name, "DisplaySubtitles"))    DisplaySubtitles   = atoi(Value);
@@ -210,7 +187,7 @@ Index: vdr/config.c
    else if (!strcasecmp(Name, "SubtitleLanguages"))   return ParseLanguages(Value, SubtitleLanguages);
    else if (!strcasecmp(Name, "SubtitleOffset"))      SubtitleOffset     = atoi(Value);
    else if (!strcasecmp(Name, "SubtitleFgTransparency")) SubtitleFgTransparency = atoi(Value);
-@@ -695,6 +697,7 @@
+@@ -709,6 +711,7 @@
    Store("MarginStop",         MarginStop);
    StoreLanguages("AudioLanguages", AudioLanguages);
    Store("DisplaySubtitles",   DisplaySubtitles);
@@ -220,8 +197,8 @@ Index: vdr/config.c
    Store("SubtitleFgTransparency", SubtitleFgTransparency);
 Index: vdr/config.h
 ===================================================================
---- vdr.orig/config.h	2012-06-06 23:10:25.000000000 +0200
-+++ vdr/config.h	2012-06-06 23:10:30.000000000 +0200
+--- vdr.orig/config.h	2013-03-03 09:21:21.000000000 +0100
++++ vdr/config.h	2013-03-03 09:22:06.000000000 +0100
 @@ -273,6 +273,7 @@
    int MarginStart, MarginStop;
    int AudioLanguages[I18N_MAX_LANGUAGES + 1];
@@ -232,8 +209,8 @@ Index: vdr/config.h
    int SubtitleFgTransparency, SubtitleBgTransparency;
 Index: vdr/device.c
 ===================================================================
---- vdr.orig/device.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/device.c	2012-06-06 23:10:30.000000000 +0200
+--- vdr.orig/device.c	2013-03-03 08:43:26.000000000 +0100
++++ vdr/device.c	2013-03-03 09:22:06.000000000 +0100
 @@ -18,6 +18,7 @@
  #include "receiver.h"
  #include "status.h"
@@ -242,7 +219,7 @@ Index: vdr/device.c
  
  // --- cLiveSubtitle ---------------------------------------------------------
  
-@@ -1297,6 +1298,13 @@
+@@ -1313,6 +1314,13 @@
                    }
                 break;
            case 0xBD: { // private stream 1
@@ -256,7 +233,7 @@ Index: vdr/device.c
                 int PayloadOffset = Data[8] + 9;
  
                 // Compatibility mode for old subtitles plugin:
-@@ -1456,6 +1464,7 @@
+@@ -1472,6 +1480,7 @@
       tsToPesVideo.Reset();
       tsToPesAudio.Reset();
       tsToPesSubtitle.Reset();
@@ -264,7 +241,7 @@ Index: vdr/device.c
       }
    else if (Length < TS_SIZE) {
       esyslog("ERROR: skipped %d bytes of TS fragment", Length);
-@@ -1501,6 +1510,17 @@
+@@ -1517,6 +1526,17 @@
                      if (!VideoOnly || HasIBPTrickSpeed())
                         PlayTsSubtitle(Data, TS_SIZE);
                      }
@@ -284,9 +261,9 @@ Index: vdr/device.c
             else if (Pid == patPmtParser.Ppid()) {
 Index: vdr/device.h
 ===================================================================
---- vdr.orig/device.h	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/device.h	2012-06-06 23:10:30.000000000 +0200
-@@ -569,6 +569,7 @@
+--- vdr.orig/device.h	2013-03-03 08:43:26.000000000 +0100
++++ vdr/device.h	2013-03-03 09:22:06.000000000 +0100
+@@ -584,6 +584,7 @@
    cTsToPes tsToPesVideo;
    cTsToPes tsToPesAudio;
    cTsToPes tsToPesSubtitle;
@@ -296,9 +273,9 @@ Index: vdr/device.h
    const cPatPmtParser *PatPmtParser(void) const { return &patPmtParser; }
 Index: vdr/menu.c
 ===================================================================
---- vdr.orig/menu.c	2012-06-06 23:10:26.000000000 +0200
-+++ vdr/menu.c	2012-06-06 23:10:30.000000000 +0200
-@@ -2959,6 +2959,7 @@
+--- vdr.orig/menu.c	2013-03-03 09:21:21.000000000 +0100
++++ vdr/menu.c	2013-03-03 09:22:06.000000000 +0100
+@@ -2840,6 +2840,7 @@
       Add(new cMenuEditIntItem( tr("Setup.DVB$Subtitle foreground transparency"), &data.SubtitleFgTransparency, 0, 9));
       Add(new cMenuEditIntItem( tr("Setup.DVB$Subtitle background transparency"), &data.SubtitleBgTransparency, 0, 10));
       }
@@ -308,8 +285,8 @@ Index: vdr/menu.c
    Display();
 Index: vdr/pat.c
 ===================================================================
---- vdr.orig/pat.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/pat.c	2012-06-06 23:10:30.000000000 +0200
+--- vdr.orig/pat.c	2013-03-03 08:43:26.000000000 +0100
++++ vdr/pat.c	2013-03-03 09:22:06.000000000 +0100
 @@ -13,6 +13,7 @@
  #include "libsi/section.h"
  #include "libsi/descriptor.h"
@@ -365,9 +342,9 @@ Index: vdr/pat.c
             }
 Index: vdr/po/ca_ES.po
 ===================================================================
---- vdr.orig/po/ca_ES.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/ca_ES.po	2012-06-06 23:10:30.000000000 +0200
-@@ -959,6 +959,9 @@
+--- vdr.orig/po/ca_ES.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/ca_ES.po	2013-03-03 09:22:06.000000000 +0100
+@@ -971,6 +971,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Transparència fons subtítols"
  
@@ -379,9 +356,9 @@ Index: vdr/po/ca_ES.po
  
 Index: vdr/po/cs_CZ.po
 ===================================================================
---- vdr.orig/po/cs_CZ.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/cs_CZ.po	2012-06-06 23:10:30.000000000 +0200
-@@ -958,6 +958,9 @@
+--- vdr.orig/po/cs_CZ.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/cs_CZ.po	2013-03-03 09:22:06.000000000 +0100
+@@ -970,6 +970,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Průhlednost pozadí titulků"
  
@@ -393,9 +370,9 @@ Index: vdr/po/cs_CZ.po
  
 Index: vdr/po/da_DK.po
 ===================================================================
---- vdr.orig/po/da_DK.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/da_DK.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/da_DK.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/da_DK.po	2013-03-03 09:22:06.000000000 +0100
+@@ -968,6 +968,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Undertekst baggrundsgennemsigtighed"
  
@@ -407,9 +384,9 @@ Index: vdr/po/da_DK.po
  
 Index: vdr/po/de_DE.po
 ===================================================================
---- vdr.orig/po/de_DE.po	2012-06-06 23:10:26.000000000 +0200
-+++ vdr/po/de_DE.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/de_DE.po	2013-03-03 09:21:21.000000000 +0100
++++ vdr/po/de_DE.po	2013-03-03 09:22:06.000000000 +0100
+@@ -968,6 +968,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Untertitel-Transparenz Hintergrund"
  
@@ -421,9 +398,9 @@ Index: vdr/po/de_DE.po
  
 Index: vdr/po/el_GR.po
 ===================================================================
---- vdr.orig/po/el_GR.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/el_GR.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/el_GR.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/el_GR.po	2013-03-03 09:22:06.000000000 +0100
+@@ -968,6 +968,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr ""
  
@@ -435,9 +412,9 @@ Index: vdr/po/el_GR.po
  
 Index: vdr/po/es_ES.po
 ===================================================================
---- vdr.orig/po/es_ES.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/es_ES.po	2012-06-06 23:10:30.000000000 +0200
-@@ -957,6 +957,9 @@
+--- vdr.orig/po/es_ES.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/es_ES.po	2013-03-03 09:22:06.000000000 +0100
+@@ -969,6 +969,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Transparencia fondo subtítulos"
  
@@ -449,9 +426,9 @@ Index: vdr/po/es_ES.po
  
 Index: vdr/po/et_EE.po
 ===================================================================
---- vdr.orig/po/et_EE.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/et_EE.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/et_EE.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/et_EE.po	2013-03-03 09:22:06.000000000 +0100
+@@ -968,6 +968,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Subtiitri tausta läbipaistvus"
  
@@ -463,9 +440,9 @@ Index: vdr/po/et_EE.po
  
 Index: vdr/po/fi_FI.po
 ===================================================================
---- vdr.orig/po/fi_FI.po	2012-06-06 23:10:20.000000000 +0200
-+++ vdr/po/fi_FI.po	2012-06-06 23:10:30.000000000 +0200
-@@ -959,6 +959,9 @@
+--- vdr.orig/po/fi_FI.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/fi_FI.po	2013-03-03 09:22:06.000000000 +0100
+@@ -971,6 +971,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Tekstityksen taustan läpinäkyvyys"
  
@@ -477,11 +454,11 @@ Index: vdr/po/fi_FI.po
  
 Index: vdr/po/fr_FR.po
 ===================================================================
---- vdr.orig/po/fr_FR.po	2012-06-06 23:10:26.000000000 +0200
-+++ vdr/po/fr_FR.po	2012-06-06 23:10:30.000000000 +0200
-@@ -962,6 +962,9 @@
+--- vdr.orig/po/fr_FR.po	2013-03-03 09:21:21.000000000 +0100
++++ vdr/po/fr_FR.po	2013-03-03 09:22:06.000000000 +0100
+@@ -978,6 +978,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
- msgstr "Transparence du fond"
+ msgstr "Transparence du fond des sous-titres"
  
 +msgid "Setup.DVB$Enable teletext support"
 +msgstr ""
@@ -491,9 +468,9 @@ Index: vdr/po/fr_FR.po
  
 Index: vdr/po/hr_HR.po
 ===================================================================
---- vdr.orig/po/hr_HR.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/hr_HR.po	2012-06-06 23:10:30.000000000 +0200
-@@ -958,6 +958,9 @@
+--- vdr.orig/po/hr_HR.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/hr_HR.po	2013-03-03 09:22:06.000000000 +0100
+@@ -970,6 +970,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Transparentnost pozadine titla"
  
@@ -505,9 +482,9 @@ Index: vdr/po/hr_HR.po
  
 Index: vdr/po/hu_HU.po
 ===================================================================
---- vdr.orig/po/hu_HU.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/hu_HU.po	2012-06-06 23:10:30.000000000 +0200
-@@ -959,6 +959,9 @@
+--- vdr.orig/po/hu_HU.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/hu_HU.po	2013-03-03 09:22:06.000000000 +0100
+@@ -971,6 +971,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Felirat hátterének transzparenciája"
  
@@ -519,9 +496,9 @@ Index: vdr/po/hu_HU.po
  
 Index: vdr/po/it_IT.po
 ===================================================================
---- vdr.orig/po/it_IT.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/it_IT.po	2012-06-06 23:10:30.000000000 +0200
-@@ -963,6 +963,9 @@
+--- vdr.orig/po/it_IT.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/it_IT.po	2013-03-03 09:22:06.000000000 +0100
+@@ -975,6 +975,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Trasparenza sfondo sottotitoli"
  
@@ -533,9 +510,9 @@ Index: vdr/po/it_IT.po
  
 Index: vdr/po/lt_LT.po
 ===================================================================
---- vdr.orig/po/lt_LT.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/lt_LT.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/lt_LT.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/lt_LT.po	2013-03-03 09:22:06.000000000 +0100
+@@ -968,6 +968,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Subtitrų fono permatomumas"
  
@@ -547,9 +524,9 @@ Index: vdr/po/lt_LT.po
  
 Index: vdr/po/nl_NL.po
 ===================================================================
---- vdr.orig/po/nl_NL.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/nl_NL.po	2012-06-06 23:10:30.000000000 +0200
-@@ -960,6 +960,9 @@
+--- vdr.orig/po/nl_NL.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/nl_NL.po	2013-03-03 09:22:06.000000000 +0100
+@@ -972,6 +972,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Transparantie achtergrond ondertiteling"
  
@@ -561,9 +538,9 @@ Index: vdr/po/nl_NL.po
  
 Index: vdr/po/nn_NO.po
 ===================================================================
---- vdr.orig/po/nn_NO.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/nn_NO.po	2012-06-06 23:10:30.000000000 +0200
-@@ -957,6 +957,9 @@
+--- vdr.orig/po/nn_NO.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/nn_NO.po	2013-03-03 09:22:06.000000000 +0100
+@@ -969,6 +969,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr ""
  
@@ -575,9 +552,9 @@ Index: vdr/po/nn_NO.po
  
 Index: vdr/po/pl_PL.po
 ===================================================================
---- vdr.orig/po/pl_PL.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/pl_PL.po	2012-06-06 23:10:30.000000000 +0200
-@@ -957,6 +957,9 @@
+--- vdr.orig/po/pl_PL.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/pl_PL.po	2013-03-03 09:22:06.000000000 +0100
+@@ -969,6 +969,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Prze¼rocze podtytu³ów: T³o"
  
@@ -589,9 +566,9 @@ Index: vdr/po/pl_PL.po
  
 Index: vdr/po/pt_PT.po
 ===================================================================
---- vdr.orig/po/pt_PT.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/pt_PT.po	2012-06-06 23:10:30.000000000 +0200
-@@ -957,6 +957,9 @@
+--- vdr.orig/po/pt_PT.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/pt_PT.po	2013-03-03 09:22:06.000000000 +0100
+@@ -969,6 +969,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Transparência de fundo das legendas"
  
@@ -603,11 +580,11 @@ Index: vdr/po/pt_PT.po
  
 Index: vdr/po/ro_RO.po
 ===================================================================
---- vdr.orig/po/ro_RO.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/ro_RO.po	2012-06-06 23:10:30.000000000 +0200
-@@ -959,6 +959,9 @@
+--- vdr.orig/po/ro_RO.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/ro_RO.po	2013-03-03 09:22:06.000000000 +0100
+@@ -970,6 +970,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
- msgstr "Transparenþa fundalului subtitrãrii"
+ msgstr "Transparenţa fundalului subtitrării"
  
 +msgid "Setup.DVB$Enable teletext support"
 +msgstr ""
@@ -617,9 +594,9 @@ Index: vdr/po/ro_RO.po
  
 Index: vdr/po/ru_RU.po
 ===================================================================
---- vdr.orig/po/ru_RU.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/ru_RU.po	2012-06-06 23:10:30.000000000 +0200
-@@ -957,6 +957,9 @@
+--- vdr.orig/po/ru_RU.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/ru_RU.po	2013-03-03 09:22:06.000000000 +0100
+@@ -969,6 +969,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "¿àÞ×àÐçÝÞáâì äÞÝÐ áãÑâØâàÞÒ"
  
@@ -631,9 +608,9 @@ Index: vdr/po/ru_RU.po
  
 Index: vdr/po/sk_SK.po
 ===================================================================
---- vdr.orig/po/sk_SK.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/sk_SK.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/sk_SK.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/sk_SK.po	2013-03-03 09:22:06.000000000 +0100
+@@ -968,6 +968,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Priehµadnos» pozadia titulkov"
  
@@ -645,9 +622,9 @@ Index: vdr/po/sk_SK.po
  
 Index: vdr/po/sl_SI.po
 ===================================================================
---- vdr.orig/po/sl_SI.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/sl_SI.po	2012-06-06 23:10:30.000000000 +0200
-@@ -957,6 +957,9 @@
+--- vdr.orig/po/sl_SI.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/sl_SI.po	2013-03-03 09:22:06.000000000 +0100
+@@ -969,6 +969,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Transparentnost ozadja podnapisov"
  
@@ -659,9 +636,9 @@ Index: vdr/po/sl_SI.po
  
 Index: vdr/po/sv_SE.po
 ===================================================================
---- vdr.orig/po/sv_SE.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/sv_SE.po	2012-06-06 23:10:30.000000000 +0200
-@@ -959,6 +959,9 @@
+--- vdr.orig/po/sv_SE.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/sv_SE.po	2013-03-03 09:22:06.000000000 +0100
+@@ -971,6 +971,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Transparent bakgrund textremsa"
  
@@ -673,9 +650,9 @@ Index: vdr/po/sv_SE.po
  
 Index: vdr/po/tr_TR.po
 ===================================================================
---- vdr.orig/po/tr_TR.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/tr_TR.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/tr_TR.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/tr_TR.po	2013-03-03 09:22:06.000000000 +0100
+@@ -968,6 +968,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Altyazý arka þeffaflýk"
  
@@ -687,9 +664,9 @@ Index: vdr/po/tr_TR.po
  
 Index: vdr/po/uk_UA.po
 ===================================================================
---- vdr.orig/po/uk_UA.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/uk_UA.po	2012-06-06 23:10:30.000000000 +0200
-@@ -956,6 +956,9 @@
+--- vdr.orig/po/uk_UA.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/uk_UA.po	2013-03-03 09:22:06.000000000 +0100
+@@ -969,6 +969,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "Прозорість заднього плану субтитрів"
  
@@ -701,9 +678,9 @@ Index: vdr/po/uk_UA.po
  
 Index: vdr/po/zh_CN.po
 ===================================================================
---- vdr.orig/po/zh_CN.po	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/po/zh_CN.po	2012-06-06 23:10:30.000000000 +0200
-@@ -959,6 +959,9 @@
+--- vdr.orig/po/zh_CN.po	2013-03-03 08:43:26.000000000 +0100
++++ vdr/po/zh_CN.po	2013-03-03 09:22:06.000000000 +0100
+@@ -971,6 +971,9 @@
  msgid "Setup.DVB$Subtitle background transparency"
  msgstr "字幕背景透明度"
  
@@ -715,8 +692,8 @@ Index: vdr/po/zh_CN.po
  
 Index: vdr/receiver.c
 ===================================================================
---- vdr.orig/receiver.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/receiver.c	2012-06-06 23:10:30.000000000 +0200
+--- vdr.orig/receiver.c	2013-01-23 21:58:27.000000000 +0100
++++ vdr/receiver.c	2013-03-03 09:22:06.000000000 +0100
 @@ -67,7 +67,8 @@
              (Channel->Ppid() == Channel->Vpid() || AddPid(Channel->Ppid())) &&
              AddPids(Channel->Apids()) &&
@@ -729,9 +706,9 @@ Index: vdr/receiver.c
  }
 Index: vdr/remux.c
 ===================================================================
---- vdr.orig/remux.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/remux.c	2012-06-06 23:10:30.000000000 +0200
-@@ -219,6 +219,29 @@
+--- vdr.orig/remux.c	2013-03-03 08:43:26.000000000 +0100
++++ vdr/remux.c	2013-03-03 09:22:06.000000000 +0100
+@@ -385,6 +385,29 @@
    return i;
  }
  
@@ -761,7 +738,7 @@ Index: vdr/remux.c
  int cPatPmtGenerator::MakeLanguageDescriptor(uchar *Target, const char *Language)
  {
    int i = 0;
-@@ -306,6 +329,7 @@
+@@ -472,6 +495,7 @@
    if (Channel) {
       int Vpid = Channel->Vpid();
       int Ppid = Channel->Ppid();
@@ -769,7 +746,7 @@ Index: vdr/remux.c
       uchar *p = buf;
       int i = 0;
       p[i++] = 0x02; // table id
-@@ -338,6 +362,10 @@
+@@ -504,6 +528,10 @@
           i += MakeStream(buf + i, 0x06, Channel->Spid(n));
           i += MakeSubtitlingDescriptor(buf + i, Channel->Slang(n), Channel->SubtitlingType(n), Channel->CompositionPageId(n), Channel->AncillaryPageId(n));
           }
@@ -780,15 +757,15 @@ Index: vdr/remux.c
  
       int sl = i - SectionLength - 2 + 4; // -2 = SectionLength storage, +4 = length of CRC
       buf[SectionLength] |= (sl >> 8) & 0x0F;
-@@ -411,6 +439,7 @@
-   pmtPid = -1;
+@@ -577,6 +605,7 @@
+   pmtPids[0] = 0;
    vpid = vtype = 0;
    ppid = 0;
 +  tpid = 0;
  }
  
  void cPatPmtParser::ParsePat(const uchar *Data, int Length)
-@@ -496,11 +525,13 @@
+@@ -665,11 +694,13 @@
       int NumSpids = 0;
       vpid = vtype = 0;
       ppid = 0;
@@ -802,7 +779,7 @@ Index: vdr/remux.c
       SI::PMT::Stream stream;
       for (SI::Loop::Iterator it; Pmt.streamLoop.getNext(stream, it); ) {
           dbgpatpmt("     stream type = %02X, pid = %d", stream.getStreamType(), stream.getPid());
-@@ -599,6 +630,28 @@
+@@ -768,6 +799,28 @@
                                      spids[NumSpids]= 0;
                                      }
                                   break;
@@ -833,9 +810,9 @@ Index: vdr/remux.c
                                   dbgpatpmt(" '%s'", ld->languageCode);
 Index: vdr/remux.h
 ===================================================================
---- vdr.orig/remux.h	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/remux.h	2012-06-06 23:10:30.000000000 +0200
-@@ -174,6 +174,7 @@
+--- vdr.orig/remux.h	2013-03-03 08:43:26.000000000 +0100
++++ vdr/remux.h	2013-03-03 09:22:06.000000000 +0100
+@@ -294,6 +294,7 @@
    int MakeStream(uchar *Target, uchar Type, int Pid);
    int MakeAC3Descriptor(uchar *Target, uchar Type);
    int MakeSubtitlingDescriptor(uchar *Target, const char *Language, uchar SubtitlingType, uint16_t CompositionPageId, uint16_t AncillaryPageId);
@@ -843,7 +820,7 @@ Index: vdr/remux.h
    int MakeLanguageDescriptor(uchar *Target, const char *Language);
    int MakeCRC(uchar *Target, const uchar *Data, int Length);
    void GeneratePmtPid(const cChannel *Channel);
-@@ -219,6 +220,7 @@
+@@ -341,6 +342,7 @@
    int vpid;
    int ppid;
    int vtype;
@@ -851,7 +828,7 @@ Index: vdr/remux.h
    int apids[MAXAPIDS + 1]; // list is zero-terminated
    int atypes[MAXAPIDS + 1]; // list is zero-terminated
    char alangs[MAXAPIDS][MAXLANGCODE2];
-@@ -231,6 +233,8 @@
+@@ -353,6 +355,8 @@
    uint16_t compositionPageIds[MAXSPIDS];
    uint16_t ancillaryPageIds[MAXSPIDS];
    bool updatePrimaryDevice;
@@ -860,7 +837,7 @@ Index: vdr/remux.h
  protected:
    int SectionLength(const uchar *Data, int Length) { return (Length >= 3) ? ((int(Data[1]) & 0x0F) << 8)| Data[2] : 0; }
  public:
-@@ -263,6 +267,9 @@
+@@ -389,6 +393,9 @@
    int Vtype(void) const { return vtype; }
         ///< Returns the video stream type as defined by the current PMT, or 0 if no video
         ///< stream type has been detected, yet.
@@ -870,7 +847,7 @@ Index: vdr/remux.h
    const int *Apids(void) const { return apids; }
    const int *Dpids(void) const { return dpids; }
    const int *Spids(void) const { return spids; }
-@@ -277,6 +284,8 @@
+@@ -403,6 +410,8 @@
    uchar SubtitlingType(int i) const { return (0 <= i && i < MAXSPIDS) ? subtitlingTypes[i] : uchar(0); }
    uint16_t CompositionPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? compositionPageIds[i] : uint16_t(0); }
    uint16_t AncillaryPageId(int i) const { return (0 <= i && i < MAXSPIDS) ? ancillaryPageIds[i] : uint16_t(0); }
@@ -881,8 +858,8 @@ Index: vdr/remux.h
  // TS to PES converter:
 Index: vdr/vdr.5
 ===================================================================
---- vdr.orig/vdr.5	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/vdr.5	2012-06-06 23:10:30.000000000 +0200
+--- vdr.orig/vdr.5	2013-03-03 08:43:26.000000000 +0100
++++ vdr/vdr.5	2013-03-03 09:22:06.000000000 +0100
 @@ -233,6 +233,12 @@
  
  .B ...:201;2001=deu,2002=eng:...
@@ -899,7 +876,7 @@ Index: vdr/vdr.5
 Index: vdr/vdrttxtsubshooks.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/vdrttxtsubshooks.c	2012-06-06 23:10:30.000000000 +0200
++++ vdr/vdrttxtsubshooks.c	2013-03-03 09:22:06.000000000 +0100
 @@ -0,0 +1,63 @@
 +/*
 + * vdr-ttxtsubs - A plugin for the Linux Video Disk Recorder
@@ -967,7 +944,7 @@ Index: vdr/vdrttxtsubshooks.c
 Index: vdr/vdrttxtsubshooks.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/vdrttxtsubshooks.h	2012-06-06 23:10:30.000000000 +0200
++++ vdr/vdrttxtsubshooks.h	2013-03-03 09:22:06.000000000 +0100
 @@ -0,0 +1,46 @@
 +/*
 + * vdr-ttxtsubs - A plugin for the Linux Video Disk Recorder
diff --git a/debian/patches/opt-37-x_menuorg.patch b/debian/patches/opt-37-x_menuorg.patch
index 28b7eb4..6837889 100644
--- a/debian/patches/opt-37-x_menuorg.patch
+++ b/debian/patches/opt-37-x_menuorg.patch
@@ -8,7 +8,7 @@ Author: Tobias Grimm <tg at e-tobi.net>
 Index: vdr/mainmenuitemsprovider.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/mainmenuitemsprovider.h	2012-06-06 23:10:39.000000000 +0200
++++ vdr/mainmenuitemsprovider.h	2013-03-03 09:22:16.000000000 +0100
 @@ -0,0 +1,60 @@
 +/*
 + * vdr-menuorg - A plugin for the Linux Video Disk Recorder
@@ -72,9 +72,9 @@ Index: vdr/mainmenuitemsprovider.h
 +#endif //__MAINMENUITEMSPROVIDER_H
 Index: vdr/menu.c
 ===================================================================
---- vdr.orig/menu.c	2012-06-06 23:10:30.000000000 +0200
-+++ vdr/menu.c	2012-06-06 23:10:39.000000000 +0200
-@@ -32,6 +32,7 @@
+--- vdr.orig/menu.c	2013-03-03 09:22:06.000000000 +0100
++++ vdr/menu.c	2013-03-03 09:22:16.000000000 +0100
+@@ -31,6 +31,7 @@
  #include "timers.h"
  #include "transfer.h"
  #include "videodir.h"
@@ -82,8 +82,8 @@ Index: vdr/menu.c
  
  #define MAXWAIT4EPGINFO   3 // seconds
  #define MODETIMEOUT       3 // seconds
-@@ -3483,6 +3484,9 @@
-   cancelFileTransferItem = NULL;
+@@ -3371,6 +3372,9 @@
+   cancelEditingItem = NULL;
    stopRecordingItem = NULL;
    recordControlsState = 0;
 +
@@ -92,7 +92,7 @@ Index: vdr/menu.c
    Set();
  
    // Initial submenus:
-@@ -3511,6 +3515,29 @@
+@@ -3399,6 +3403,29 @@
    SetTitle("VDR");
    SetHasHotkeys();
  
@@ -122,7 +122,7 @@ Index: vdr/menu.c
    // Basic menu items:
  
    Add(new cOsdItem(hk(tr("Schedule")),   osSchedule));
-@@ -3537,6 +3564,8 @@
+@@ -3425,6 +3452,8 @@
    if (Commands.Count())
       Add(new cOsdItem(hk(tr("Commands")),  osCommands));
  
@@ -131,7 +131,7 @@ Index: vdr/menu.c
    Update(true);
  
    Display();
-@@ -3661,6 +3690,41 @@
+@@ -3530,6 +3559,41 @@
                           state = osEnd;
                         }
                         break;
@@ -176,7 +176,7 @@ Index: vdr/menu.c
 Index: vdr/menuorgpatch.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/menuorgpatch.h	2012-06-06 23:10:39.000000000 +0200
++++ vdr/menuorgpatch.h	2013-03-03 09:22:16.000000000 +0100
 @@ -0,0 +1,100 @@
 +/*
 + * vdr-menuorg - A plugin for the Linux Video Disk Recorder
diff --git a/debian/patches/opt-41-x_timer-info.patch b/debian/patches/opt-41-x_timer-info.patch
index 93cb5bd..7076e26 100644
--- a/debian/patches/opt-41-x_timer-info.patch
+++ b/debian/patches/opt-41-x_timer-info.patch
@@ -6,7 +6,7 @@ Origin: http://toms-cafe.de/vdr/download/vdr-timer-info-0.5-1.7.13.diff
 Index: vdr/README.timer-info
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/README.timer-info	2012-06-06 23:10:42.000000000 +0200
++++ vdr/README.timer-info	2013-03-03 09:22:22.000000000 +0100
 @@ -0,0 +1,69 @@
 ++------------------------------------------------------------------------------+
 +|               Info about the timer-info-patch by Brougs78                    |
@@ -79,9 +79,9 @@ Index: vdr/README.timer-info
 +   http://toms-cafe.de/vdr/download/vdr-timer-info-0.5-1.7.13.diff
 Index: vdr/menu.c
 ===================================================================
---- vdr.orig/menu.c	2012-06-06 23:10:39.000000000 +0200
-+++ vdr/menu.c	2012-06-06 23:10:42.000000000 +0200
-@@ -998,8 +998,10 @@
+--- vdr.orig/menu.c	2013-03-03 09:22:16.000000000 +0100
++++ vdr/menu.c	2013-03-03 09:22:22.000000000 +0100
+@@ -1004,8 +1004,10 @@
  class cMenuTimerItem : public cOsdItem {
  private:
    cTimer *timer;
@@ -92,7 +92,7 @@ Index: vdr/menu.c
    virtual int Compare(const cListObject &ListObject) const;
    virtual void Set(void);
    cTimer *Timer(void) { return timer; }
-@@ -1008,6 +1010,7 @@
+@@ -1015,6 +1017,7 @@
  cMenuTimerItem::cMenuTimerItem(cTimer *Timer)
  {
    timer = Timer;
@@ -100,7 +100,7 @@ Index: vdr/menu.c
    Set();
  }
  
-@@ -1038,7 +1041,10 @@
+@@ -1045,7 +1048,10 @@
       File++;
    else
       File = timer->File();
@@ -112,8 +112,8 @@ Index: vdr/menu.c
                      !(timer->HasFlags(tfActive)) ? ' ' : timer->FirstDay() ? '!' : timer->Recording() ? '#' : '>',
                      timer->Channel()->Number(),
                      *name,
-@@ -1051,6 +1057,57 @@
-                     File));
+@@ -1064,6 +1070,57 @@
+      DisplayMenu->SetItem(Text(), Index, Current, Selectable);
  }
  
 +void cMenuTimerItem::SetDiskStatus(char DiskStatus)
@@ -170,7 +170,7 @@ Index: vdr/menu.c
  // --- cMenuTimers -----------------------------------------------------------
  
  class cMenuTimers : public cOsdMenu {
-@@ -1063,14 +1120,17 @@
+@@ -1076,14 +1133,17 @@
    eOSState Info(void);
    cTimer *CurrentTimer(void);
    void SetHelpKeys(void);
@@ -189,7 +189,7 @@ Index: vdr/menu.c
  {
    SetMenuCategory(mcTimer);
    helpKeys = -1;
-@@ -1082,6 +1142,7 @@
+@@ -1095,6 +1155,7 @@
    SetCurrent(First());
    SetHelpKeys();
    Timers.IncBeingEdited();
@@ -197,7 +197,7 @@ Index: vdr/menu.c
  }
  
  cMenuTimers::~cMenuTimers()
-@@ -1120,7 +1181,7 @@
+@@ -1133,7 +1194,7 @@
       timer->OnOff();
       timer->SetEventFromSchedule();
       RefreshCurrent();
@@ -206,7 +206,7 @@ Index: vdr/menu.c
       if (timer->FirstDay())
          isyslog("timer %s first day set to %s", *timer->ToDescr(), *timer->PrintFirstDay());
       else
-@@ -1179,6 +1240,67 @@
+@@ -1192,6 +1253,67 @@
    return osContinue;
  }
  
@@ -274,7 +274,7 @@ Index: vdr/menu.c
  eOSState cMenuTimers::ProcessKey(eKeys Key)
  {
    int TimerNumber = HasSubMenu() ? Count() : -1;
-@@ -1187,18 +1309,22 @@
+@@ -1200,18 +1322,22 @@
    if (state == osUnknown) {
       switch (Key) {
         case kOk:     return Edit();
diff --git a/debian/patches/opt-42-x_MainMenuHooks.patch b/debian/patches/opt-42-x_MainMenuHooks.patch
index ee571af..85b6c78 100644
--- a/debian/patches/opt-42-x_MainMenuHooks.patch
+++ b/debian/patches/opt-42-x_MainMenuHooks.patch
@@ -4,9 +4,9 @@ Author: Frank Schmirler <vdrdev at schmirler.de>
 
 Index: vdr/menu.c
 ===================================================================
---- vdr.orig/menu.c	2012-06-06 23:10:42.000000000 +0200
-+++ vdr/menu.c	2012-06-06 23:10:45.000000000 +0200
-@@ -3617,15 +3617,30 @@
+--- vdr.orig/menu.c	2013-03-03 09:22:22.000000000 +0100
++++ vdr/menu.c	2013-03-03 09:22:28.000000000 +0100
+@@ -3505,15 +3505,30 @@
  
    // Initial submenus:
  
@@ -43,7 +43,7 @@ Index: vdr/menu.c
  }
  
  cOsdObject *cMenuMain::PluginOsdObject(void)
-@@ -3771,13 +3786,34 @@
+@@ -3646,13 +3661,34 @@
    eOSState state = cOsdMenu::ProcessKey(Key);
    HadSubMenu |= HasSubMenu();
  
@@ -84,7 +84,7 @@ Index: vdr/menu.c
      case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
                            cOsdItem *item = Get(Current());
                            if (item) {
-@@ -3870,6 +3906,8 @@
+@@ -3739,6 +3775,8 @@
                 default:      break;
                 }
      }
@@ -95,11 +95,11 @@ Index: vdr/menu.c
    if (Key != kNone) {
 Index: vdr/config.h
 ===================================================================
---- vdr.orig/config.h	2012-06-06 23:10:30.000000000 +0200
-+++ vdr/config.h	2012-06-06 23:10:45.000000000 +0200
-@@ -40,6 +40,8 @@
-  
- #define JUMPPLAYVERSNUM 100
+--- vdr.orig/config.h	2013-03-03 09:22:06.000000000 +0100
++++ vdr/config.h	2013-03-03 09:22:28.000000000 +0100
+@@ -36,6 +36,8 @@
+ // plugins to work with newer versions of the core VDR as long as no
+ // VDR header files have changed.
  
 +#define MAINMENUHOOKSVERSNUM 1.0
 +
@@ -109,7 +109,7 @@ Index: vdr/config.h
 Index: vdr/README.MainMenuHooks
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ vdr/README.MainMenuHooks	2012-06-06 23:10:45.000000000 +0200
++++ vdr/README.MainMenuHooks	2013-03-03 09:22:28.000000000 +0100
 @@ -0,0 +1,55 @@
 +This is a "patch" for the Video Disk Recorder (VDR).
 +
diff --git a/debian/patches/opt-45_yaepg.patch b/debian/patches/opt-45_yaepg.patch
index 82e0403..9c09859 100644
--- a/debian/patches/opt-45_yaepg.patch
+++ b/debian/patches/opt-45_yaepg.patch
@@ -4,8 +4,8 @@ Origin: http://www.hoochvdr.info/yaepg/vdr-1.3.19-core-yaepg.diff
 
 Index: vdr/PLUGINS/src/dvbsddevice/dvbsdffosd.c
 ===================================================================
---- vdr.orig/PLUGINS/src/dvbsddevice/dvbsdffosd.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/PLUGINS/src/dvbsddevice/dvbsdffosd.c	2012-06-06 23:10:48.000000000 +0200
+--- vdr.orig/PLUGINS/src/dvbsddevice/dvbsdffosd.c	2013-01-23 21:58:28.000000000 +0100
++++ vdr/PLUGINS/src/dvbsddevice/dvbsdffosd.c	2013-03-03 09:22:33.000000000 +0100
 @@ -77,6 +77,10 @@
              Cmd(OSD_SetWindow, 0, i + 1);
              Cmd(OSD_Close);
@@ -42,8 +42,8 @@ Index: vdr/PLUGINS/src/dvbsddevice/dvbsdffosd.c
  }
 Index: vdr/device.h
 ===================================================================
---- vdr.orig/device.h	2012-06-06 23:10:30.000000000 +0200
-+++ vdr/device.h	2012-06-06 23:10:48.000000000 +0200
+--- vdr.orig/device.h	2013-03-03 09:22:06.000000000 +0100
++++ vdr/device.h	2013-03-03 09:22:33.000000000 +0100
 @@ -304,12 +304,12 @@
           ///< Direction (only the sign of Direction is evaluated, positive values
           ///< switch to higher channel numbers).
@@ -61,9 +61,9 @@ Index: vdr/device.h
    static void SetCurrentChannel(const cChannel *Channel) { currentChannel = Channel ? Channel->Number() : 0; }
 Index: vdr/osd.c
 ===================================================================
---- vdr.orig/osd.c	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/osd.c	2012-06-06 23:10:48.000000000 +0200
-@@ -1644,6 +1644,7 @@
+--- vdr.orig/osd.c	2013-03-03 08:43:26.000000000 +0100
++++ vdr/osd.c	2013-03-03 09:22:33.000000000 +0100
+@@ -1643,6 +1643,7 @@
           }
        }
    Osds.Append(this);
@@ -73,9 +73,9 @@ Index: vdr/osd.c
  cOsd::~cOsd()
 Index: vdr/osd.h
 ===================================================================
---- vdr.orig/osd.h	2012-06-06 23:09:01.000000000 +0200
-+++ vdr/osd.h	2012-06-06 23:10:48.000000000 +0200
-@@ -931,6 +931,7 @@
+--- vdr.orig/osd.h	2013-03-03 08:43:26.000000000 +0100
++++ vdr/osd.h	2013-03-03 09:22:33.000000000 +0100
+@@ -926,6 +926,7 @@
         ///<        MyOsdDrawPixmap(Left() + pm->ViewPort().X(), Top() + pm->ViewPort().Y(), pm->Data(), w, h, h * d);
         ///<        delete pm;
         ///<        }
diff --git a/debian/patches/opt-50_graphtft.patch b/debian/patches/opt-50_graphtft.patch
index f229485..93fa56a 100644
--- a/debian/patches/opt-50_graphtft.patch
+++ b/debian/patches/opt-50_graphtft.patch
@@ -4,9 +4,9 @@ Origin: https://vdr-graphtft.svn.sourceforge.net/svnroot/vdr-graphtft
 
 Index: vdr/menu.c
 ===================================================================
---- vdr.orig/menu.c	2012-06-06 23:02:31.000000000 +0200
-+++ vdr/menu.c	2012-06-06 23:02:39.000000000 +0200
-@@ -169,6 +169,7 @@
+--- vdr.orig/menu.c	2013-03-03 09:22:28.000000000 +0100
++++ vdr/menu.c	2013-03-03 09:22:37.000000000 +0100
+@@ -168,6 +168,7 @@
  public:
    cMenuEditChannel(cChannel *Channel, bool New = false);
    virtual eOSState ProcessKey(eKeys Key);
@@ -14,7 +14,7 @@ Index: vdr/menu.c
    };
  
  cMenuEditChannel::cMenuEditChannel(cChannel *Channel, bool New)
-@@ -347,6 +348,7 @@
+@@ -353,6 +354,7 @@
    cMenuChannels(void);
    ~cMenuChannels();
    virtual eOSState ProcessKey(eKeys Key);
@@ -22,7 +22,7 @@ Index: vdr/menu.c
    };
  
  cMenuChannels::cMenuChannels(void)
-@@ -1127,6 +1129,7 @@
+@@ -1140,6 +1142,7 @@
    virtual ~cMenuTimers();
    virtual void Display(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -30,7 +30,7 @@ Index: vdr/menu.c
    };
  
  cMenuTimers::cMenuTimers(void)
-@@ -1355,6 +1358,7 @@
+@@ -1368,6 +1371,7 @@
  {
    cOsdMenu::Display();
    DisplayMenu()->SetEvent(event);
@@ -38,7 +38,7 @@ Index: vdr/menu.c
    if (event->Description())
       cStatus::MsgOsdTextItem(event->Description());
  }
-@@ -1477,6 +1481,8 @@
+@@ -1497,6 +1501,8 @@
    static void SetCurrentChannel(int ChannelNr) { currentChannel = ChannelNr; }
    static const cEvent *ScheduleEvent(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -47,7 +47,7 @@ Index: vdr/menu.c
    };
  
  int cMenuWhatsOn::currentChannel = 0;
-@@ -1505,6 +1511,18 @@
+@@ -1525,6 +1531,18 @@
    SetHelpKeys();
  }
  
@@ -66,7 +66,7 @@ Index: vdr/menu.c
  bool cMenuWhatsOn::Update(void)
  {
    bool result = false;
-@@ -1645,6 +1663,8 @@
+@@ -1665,6 +1683,8 @@
    cMenuSchedule(void);
    virtual ~cMenuSchedule();
    virtual eOSState ProcessKey(eKeys Key);
@@ -75,7 +75,7 @@ Index: vdr/menu.c
    };
  
  cMenuSchedule::cMenuSchedule(void)
-@@ -1671,6 +1691,18 @@
+@@ -1691,6 +1711,18 @@
    cMenuWhatsOn::ScheduleEvent(); // makes sure any posted data is cleared
  }
  
@@ -94,7 +94,7 @@ Index: vdr/menu.c
  void cMenuSchedule::PrepareScheduleAllThis(const cEvent *Event, const cChannel *Channel)
  {
    Clear();
-@@ -2033,6 +2065,7 @@
+@@ -2055,6 +2087,7 @@
    cMenuCam(cCamSlot *CamSlot);
    virtual ~cMenuCam();
    virtual eOSState ProcessKey(eKeys Key);
@@ -102,7 +102,7 @@ Index: vdr/menu.c
    };
  
  cMenuCam::cMenuCam(cCamSlot *CamSlot)
-@@ -2213,6 +2246,7 @@
+@@ -2242,6 +2275,7 @@
    cMenuRecording(const cRecording *Recording, bool WithButtons = false);
    virtual void Display(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -110,7 +110,7 @@ Index: vdr/menu.c
  };
  
  cMenuRecording::cMenuRecording(const cRecording *Recording, bool WithButtons)
-@@ -2229,6 +2263,7 @@
+@@ -2258,6 +2292,7 @@
  {
    cOsdMenu::Display();
    DisplayMenu()->SetRecording(recording);
@@ -118,7 +118,7 @@ Index: vdr/menu.c
    if (recording->Info()->Description())
       cStatus::MsgOsdTextItem(recording->Info()->Description());
  }
-@@ -2797,6 +2832,7 @@
+@@ -2667,6 +2702,7 @@
    cMenuSetupOSD(void);
    virtual ~cMenuSetupOSD();
    virtual eOSState ProcessKey(eKeys Key);
@@ -126,7 +126,7 @@ Index: vdr/menu.c
    };
  
  cMenuSetupOSD::cMenuSetupOSD(void)
-@@ -2938,6 +2974,7 @@
+@@ -2817,6 +2853,7 @@
  public:
    cMenuSetupEPG(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -134,7 +134,7 @@ Index: vdr/menu.c
    };
  
  cMenuSetupEPG::cMenuSetupEPG(void)
-@@ -3034,6 +3071,7 @@
+@@ -2914,6 +2951,7 @@
  public:
    cMenuSetupDVB(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -142,7 +142,7 @@ Index: vdr/menu.c
    };
  
  cMenuSetupDVB::cMenuSetupDVB(void)
-@@ -3179,6 +3217,7 @@
+@@ -3060,6 +3098,7 @@
  public:
    cMenuSetupLNB(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -150,7 +150,7 @@ Index: vdr/menu.c
    };
  
  cMenuSetupLNB::cMenuSetupLNB(void)
-@@ -3281,6 +3320,7 @@
+@@ -3163,6 +3202,7 @@
  public:
    cMenuSetupCAM(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -158,7 +158,7 @@ Index: vdr/menu.c
    };
  
  cMenuSetupCAM::cMenuSetupCAM(void)
-@@ -3459,6 +3499,7 @@
+@@ -3347,6 +3387,7 @@
  public:
    cMenuSetupPlugins(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -166,7 +166,7 @@ Index: vdr/menu.c
    };
  
  cMenuSetupPlugins::cMenuSetupPlugins(void)
-@@ -3513,6 +3554,7 @@
+@@ -3402,6 +3443,7 @@
  public:
    cMenuSetup(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -176,8 +176,8 @@ Index: vdr/menu.c
  cMenuSetup::cMenuSetup(void)
 Index: vdr/menu.h
 ===================================================================
---- vdr.orig/menu.h	2012-06-06 23:02:31.000000000 +0200
-+++ vdr/menu.h	2012-06-06 23:02:39.000000000 +0200
+--- vdr.orig/menu.h	2013-03-03 08:43:26.000000000 +0100
++++ vdr/menu.h	2013-03-03 09:22:37.000000000 +0100
 @@ -29,6 +29,7 @@
    void SetText(const char *Text);
    virtual void Display(void);
@@ -210,7 +210,7 @@ Index: vdr/menu.h
    };
  
  class cMenuMain : public cOsdMenu {
-@@ -111,6 +115,7 @@
+@@ -110,6 +114,7 @@
    cMenuMain(eOSState State = osUnknown);
    virtual eOSState ProcessKey(eKeys Key);
    static cOsdObject *PluginOsdObject(void);
@@ -228,8 +228,8 @@ Index: vdr/menu.h
  class cRecordControl {
 Index: vdr/menuitems.h
 ===================================================================
---- vdr.orig/menuitems.h	2012-05-10 00:01:35.000000000 +0200
-+++ vdr/menuitems.h	2012-06-06 23:02:39.000000000 +0200
+--- vdr.orig/menuitems.h	2013-01-23 21:58:28.000000000 +0100
++++ vdr/menuitems.h	2013-03-03 09:22:37.000000000 +0100
 @@ -209,6 +209,7 @@
    cMenuSetupPage(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -240,9 +240,9 @@ Index: vdr/menuitems.h
  #endif //__MENUITEMS_H
 Index: vdr/osdbase.c
 ===================================================================
---- vdr.orig/osdbase.c	2012-06-06 23:02:31.000000000 +0200
-+++ vdr/osdbase.c	2012-06-06 23:08:26.000000000 +0200
-@@ -101,6 +101,7 @@
+--- vdr.orig/osdbase.c	2013-03-03 09:12:55.000000000 +0100
++++ vdr/osdbase.c	2013-03-03 09:22:37.000000000 +0100
+@@ -105,6 +105,7 @@
    free(status);
    displayMenu->Clear();
    cStatus::MsgOsdClear();
@@ -250,7 +250,7 @@ Index: vdr/osdbase.c
    if (!--displayMenuCount)
       DELETENULL(displayMenu);
  }
-@@ -218,6 +219,7 @@
+@@ -222,6 +223,7 @@
    displayMenu->SetMessage(mtStatus, NULL);
    displayMenu->Clear();
    cStatus::MsgOsdClear();
@@ -260,9 +260,9 @@ Index: vdr/osdbase.c
    displayMenuItems = displayMenu->MaxItems();
 Index: vdr/osdbase.h
 ===================================================================
---- vdr.orig/osdbase.h	2012-06-06 23:02:31.000000000 +0200
-+++ vdr/osdbase.h	2012-06-06 23:02:39.000000000 +0200
-@@ -138,6 +138,7 @@
+--- vdr.orig/osdbase.h	2013-03-03 08:43:26.000000000 +0100
++++ vdr/osdbase.h	2013-03-03 09:22:37.000000000 +0100
+@@ -136,6 +136,7 @@
    void Ins(cOsdItem *Item, bool Current = false, cOsdItem *Before = NULL);
    virtual void Display(void);
    virtual eOSState ProcessKey(eKeys Key);
@@ -272,8 +272,8 @@ Index: vdr/osdbase.h
  #endif //__OSDBASE_H
 Index: vdr/recording.h
 ===================================================================
---- vdr.orig/recording.h	2012-06-06 23:02:31.000000000 +0200
-+++ vdr/recording.h	2012-06-06 23:02:39.000000000 +0200
+--- vdr.orig/recording.h	2013-03-03 08:43:26.000000000 +0100
++++ vdr/recording.h	2013-03-03 09:22:37.000000000 +0100
 @@ -68,6 +68,7 @@
    const cEvent *GetEvent(void) const { return event; }
    const char *Title(void) const { return event->Title(); }
@@ -284,8 +284,8 @@ Index: vdr/recording.h
    const char *Aux(void) const { return aux; }
 Index: vdr/status.c
 ===================================================================
---- vdr.orig/status.c	2012-04-26 21:27:40.000000000 +0200
-+++ vdr/status.c	2012-06-06 23:02:39.000000000 +0200
+--- vdr.orig/status.c	2013-01-23 21:58:28.000000000 +0100
++++ vdr/status.c	2013-03-03 09:22:37.000000000 +0100
 @@ -124,3 +124,32 @@
    for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
        sm->OsdProgramme(PresentTime, PresentTitle, PresentSubtitle, FollowingTime, FollowingTitle, FollowingSubtitle);
@@ -321,8 +321,8 @@ Index: vdr/status.c
 +}
 Index: vdr/status.h
 ===================================================================
---- vdr.orig/status.h	2012-04-26 21:27:40.000000000 +0200
-+++ vdr/status.h	2012-06-06 23:02:39.000000000 +0200
+--- vdr.orig/status.h	2013-01-23 21:58:28.000000000 +0100
++++ vdr/status.h	2013-03-03 09:22:37.000000000 +0100
 @@ -81,6 +81,17 @@
                 // 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) {}
diff --git a/debian/patches/series b/debian/patches/series
index b8e8060..cfc095b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,16 +4,6 @@
 
 99_ncursesw-include.patch
 
-# Patch collection (replaces enAIO).
-opt-20_liemikuutio.patch
-
-# Easy editing of cutting marks
-# (Requires opt-20_liemikuutio!)
-opt-22-x_edit_marks.patch
-
-# The Jump patch allows automatic jumping over cutting marks.
-opt-24_jumpplay.patch
-
 # Patch needed for the ttxtsubs plugin.
 opt-27_ttxtsubs.patch
 
@@ -37,7 +27,3 @@ opt-45_yaepg.patch
 
 # Patch required for the GraphTFT plugin
 opt-50_graphtft.patch
-opt-50_graphtft-liemikuutio.patch
-
-# Setup for AC3 transfer, QAM_256, disable primary tuner
-# opt-53_dvbsetup.patch

-- 
vdr packaging repository



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