[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