summaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
Diffstat (limited to 'patches')
-rw-r--r--patches/respect_ca.diff43
-rw-r--r--patches/thread.c.diff29
-rw-r--r--patches/vdr-1.3.11-localchannelprovide.diff61
-rw-r--r--patches/vdr-1.3.24.LocalChannelProvide.diff93
-rw-r--r--patches/vdr-1.3.6-incompletesections.diff22
-rw-r--r--patches/vdr-1.6.0-ignore_missing_cam.diff13
-rw-r--r--patches/vdr-1.6.0-intcamdevices.patch78
-rw-r--r--patches/vdr-cap_net_raw.diff11
-rw-r--r--patches/vdr-pluginactivity.diff113
9 files changed, 102 insertions, 361 deletions
diff --git a/patches/respect_ca.diff b/patches/respect_ca.diff
deleted file mode 100644
index 8240b19..0000000
--- a/patches/respect_ca.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-# The cannels.conf ca field can be used to bind a channel to a specific
-# device. The streamdev-client does not consider this information, so
-# there's no way to keep VDR from using streamdev for a specific
-# channel. Apply this patch if you need this feature.
-#
-# This fix should probably become part of streamdev. However as it
-# changes the behaviour of streamdev, I decided to keep it as a separate
-# patch until there is something like a new official streamdev release.
-#
---- client/device.h.bak 2006-11-09 12:25:21.000000000 +0100
-+++ client/device.h 2006-11-09 12:26:57.000000000 +0100
-@@ -50,6 +50,7 @@
- cStreamdevDevice(void);
- virtual ~cStreamdevDevice();
-
-+ virtual int ProvidesCa(const cChannel *Channel) const;
- virtual bool ProvidesSource(int Source) const;
- virtual bool ProvidesTransponder(const cChannel *Channel) const;
- virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1,
---- client/device.c.bak 2006-11-09 12:23:24.000000000 +0100
-+++ client/device.c 2006-11-09 12:35:48.000000000 +0100
-@@ -57,6 +57,12 @@
- #endif
- }
-
-+int cStreamdevDevice::ProvidesCa(const cChannel *Channel) const
-+{
-+ // Encrypted is acceptable for now. Will ask the server later.
-+ return Channel->Ca() <= CA_DVB_MAX ? cDevice::ProvidesCa(Channel) : 1;
-+}
-+
- bool cStreamdevDevice::ProvidesSource(int Source) const {
- Dprintf("ProvidesSource, Source=%d\n", Source);
- return false;
-@@ -78,7 +84,7 @@
- if (ClientSocket.DataSocket(siLive) != NULL
- && TRANSPONDER(Channel, m_Channel))
- res = true;
-- else {
-+ else if (ProvidesCa(Channel)) {
- res = prio && ClientSocket.ProvidesChannel(Channel, Priority);
- ndr = true;
- }
diff --git a/patches/thread.c.diff b/patches/thread.c.diff
deleted file mode 100644
index a03ffac..0000000
--- a/patches/thread.c.diff
+++ /dev/null
@@ -1,29 +0,0 @@
---- vdr-vanilla/thread.c 2003-10-10 18:19:15.000000000 +0200
-+++ vdr-vanilla-thread/thread.c 2003-10-10 18:43:36.000000000 +0200
-@@ -158,12 +158,21 @@
-
- bool cThread::Active(void)
- {
-- if (threadPid) {
-- if (kill(threadPid, SIGIO) < 0) { // couldn't find another way of checking whether the thread is still running - any ideas?
-- if (errno == ESRCH)
-- threadPid = 0;
-- else
-+ if (thread) {
-+ /*
-+ * Single UNIX Spec v2 says:
-+ *
-+ * The pthread_kill() function is used to request
-+ * that a signal be delivered to the specified thread.
-+ *
-+ * As in kill(), if sig is zero, error checking is
-+ * performed but no signal is actually sent.
-+ */
-+ int err;
-+ if ((err = pthread_kill(thread, 0)) != 0) {
-+ if (err != ESRCH)
- LOG_ERROR;
-+ thread = 0;
- }
- else
- return true;
diff --git a/patches/vdr-1.3.11-localchannelprovide.diff b/patches/vdr-1.3.11-localchannelprovide.diff
deleted file mode 100644
index 448d7fc..0000000
--- a/patches/vdr-1.3.11-localchannelprovide.diff
+++ /dev/null
@@ -1,61 +0,0 @@
-diff -u vdr-1.3.11/config.c vdr-1.3.11.LocalChannelProvide/config.c
---- vdr-1.3.11/config.c 2004-05-16 14:43:55.000000000 +0200
-+++ vdr-1.3.11.LocalChannelProvide/config.c 2004-08-29 17:55:59.000000000 +0200
-@@ -297,6 +297,7 @@
- ResumeID = 0;
- CurrentChannel = -1;
- CurrentVolume = MAXVOLUME;
-+ LocalChannelProvide = 1;
- }
-
- cSetup& cSetup::operator= (const cSetup &s)
-@@ -450,6 +451,7 @@
- else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value);
- else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
- else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
-+ else if (!strcasecmp(Name, "LocalChannelProvide")) LocalChannelProvide = atoi(Value);
- else
- return false;
- return true;
-@@ -510,6 +512,7 @@
- Store("ResumeID", ResumeID);
- Store("CurrentChannel", CurrentChannel);
- Store("CurrentVolume", CurrentVolume);
-+ Store("LocalChannelProvide",LocalChannelProvide);
-
- Sort();
-
-diff -u vdr-1.3.11/config.h vdr-1.3.11.LocalChannelProvide/config.h
---- vdr-1.3.11/config.h 2004-06-10 15:18:50.000000000 +0200
-+++ vdr-1.3.11.LocalChannelProvide/config.h 2004-08-29 17:47:32.000000000 +0200
-@@ -251,6 +251,7 @@
- int ResumeID;
- int CurrentChannel;
- int CurrentVolume;
-+ int LocalChannelProvide;
- int __EndData__;
- cSetup(void);
- cSetup& operator= (const cSetup &s);
-diff -u vdr-1.3.11/dvbdevice.c vdr-1.3.11.LocalChannelProvide/dvbdevice.c
---- vdr-1.3.11/dvbdevice.c 2004-06-19 11:33:42.000000000 +0200
-+++ vdr-1.3.11.LocalChannelProvide/dvbdevice.c 2004-08-29 18:00:37.000000000 +0200
-@@ -674,6 +674,8 @@
-
- bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const
- {
-+ if (Setup.LocalChannelProvide != 1)
-+ return false;
- bool result = false;
- bool hasPriority = Priority < 0 || Priority > this->Priority();
- bool needsDetachReceivers = false;
-diff -u vdr-1.3.11/menu.c vdr-1.3.11.LocalChannelProvide/menu.c
---- vdr-1.3.11/menu.c 2004-06-13 22:26:51.000000000 +0200
-+++ vdr-1.3.11.LocalChannelProvide/menu.c 2004-08-29 17:52:31.000000000 +0200
-@@ -1878,6 +1878,7 @@
- Add(new cMenuEditIntItem( tr("Setup.DVB$Primary DVB interface"), &data.PrimaryDVB, 1, cDevice::NumDevices()));
- Add(new cMenuEditBoolItem(tr("Setup.DVB$Video format"), &data.VideoFormat, "4:3", "16:9"));
- Add(new cMenuEditStraItem(tr("Setup.DVB$Update channels"), &data.UpdateChannels, 5, updateChannelsTexts));
-+ Add(new cMenuEditBoolItem(tr("Channels available locally"), &data.LocalChannelProvide));
- }
-
- eOSState cMenuSetupDVB::ProcessKey(eKeys Key)
diff --git a/patches/vdr-1.3.24.LocalChannelProvide.diff b/patches/vdr-1.3.24.LocalChannelProvide.diff
deleted file mode 100644
index 830960a..0000000
--- a/patches/vdr-1.3.24.LocalChannelProvide.diff
+++ /dev/null
@@ -1,93 +0,0 @@
-diff -Nu vdr-1.3.24/config.c vdr-1.3.24.LocalChannelProvide/config.c
---- vdr-1.3.24/config.c 2005-02-20 13:52:59.000000000 +0100
-+++ vdr-1.3.24.LocalChannelProvide/config.c 2005-05-12 19:23:58.000000000 +0200
-@@ -301,6 +301,7 @@
- CurrentChannel = -1;
- CurrentVolume = MAXVOLUME;
- CurrentDolby = 0;
-+ LocalChannelProvide = 1;
- }
-
- cSetup& cSetup::operator= (const cSetup &s)
-@@ -458,6 +459,7 @@
- else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
- else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
- else if (!strcasecmp(Name, "CurrentDolby")) CurrentDolby = atoi(Value);
-+ else if (!strcasecmp(Name, "LocalChannelProvide")) LocalChannelProvide = atoi(Value);
- else
- return false;
- return true;
-@@ -522,6 +524,7 @@
- Store("CurrentChannel", CurrentChannel);
- Store("CurrentVolume", CurrentVolume);
- Store("CurrentDolby", CurrentDolby);
-+ Store("LocalChannelProvide",LocalChannelProvide);
-
- Sort();
-
-diff -Nu vdr-1.3.24/config.h vdr-1.3.24.LocalChannelProvide/config.h
---- vdr-1.3.24/config.h 2005-05-05 13:04:18.000000000 +0200
-+++ vdr-1.3.24.LocalChannelProvide/config.h 2005-05-12 19:24:31.000000000 +0200
-@@ -255,6 +255,7 @@
- int CurrentChannel;
- int CurrentVolume;
- int CurrentDolby;
-+ int LocalChannelProvide;
- int __EndData__;
- cSetup(void);
- cSetup& operator= (const cSetup &s);
-diff -Nu vdr-1.3.24/dvbdevice.c vdr-1.3.24.LocalChannelProvide/dvbdevice.c
---- vdr-1.3.24/dvbdevice.c 2005-03-20 11:10:38.000000000 +0100
-+++ vdr-1.3.24.LocalChannelProvide/dvbdevice.c 2005-05-12 19:19:29.000000000 +0200
-@@ -746,6 +746,8 @@
-
- bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const
- {
-+ if (Setup.LocalChannelProvide != 1)
-+ return false;
- bool result = false;
- bool hasPriority = Priority < 0 || Priority > this->Priority();
- bool needsDetachReceivers = false;
-diff -Nu vdr-1.3.24/i18n.c vdr-1.3.24.LocalChannelProvide/i18n.c
---- vdr-1.3.24/i18n.c 2005-05-05 15:12:54.000000000 +0200
-+++ vdr-1.3.24.LocalChannelProvide/i18n.c 2005-05-12 19:30:50.000000000 +0200
-@@ -5325,6 +5325,27 @@
- "ST:TNG konsool",
- "ST:TNG konsol",
- },
-+ { "Channels available locally",
-+ "Kanäle lokal beziehen",
-+ "",// TODO
-+ "",
-+ "",
-+ "",// TODO
-+ "",// TODO
-+ "",// TODO
-+ "",
-+ "",// TODO
-+ "",// TODO
-+ "",// TODO
-+ "",
-+ "",
-+ "",// TODO
-+ "",// TODO
-+ "",
-+ "",
-+ "",
-+ "",
-+ },
- { NULL }
- };
-
-diff -Nu vdr-1.3.24/menu.c vdr-1.3.24.LocalChannelProvide/menu.c
---- vdr-1.3.24/menu.c 2005-03-20 16:14:51.000000000 +0100
-+++ vdr-1.3.24.LocalChannelProvide/menu.c 2005-05-12 19:26:57.000000000 +0200
-@@ -1968,7 +1968,7 @@
- Add(new cMenuEditIntItem( tr("Setup.DVB$Audio languages"), &numAudioLanguages, 0, I18nNumLanguages));
- for (int i = 0; i < numAudioLanguages; i++)
- Add(new cMenuEditStraItem(tr("Setup.DVB$Audio language"), &data.AudioLanguages[i], I18nNumLanguages, I18nLanguages()));
--
-+ Add(new cMenuEditBoolItem(tr("Channels available locally"), &data.LocalChannelProvide));
- SetCurrent(Get(current));
- Display();
- }
diff --git a/patches/vdr-1.3.6-incompletesections.diff b/patches/vdr-1.3.6-incompletesections.diff
deleted file mode 100644
index a58a121..0000000
--- a/patches/vdr-1.3.6-incompletesections.diff
+++ /dev/null
@@ -1,22 +0,0 @@
---- vdr-1.3.6/sections.c 2004-02-07 17:51:57.000000000 +0200
-+++ sections.c 2004-03-21 18:34:47.000000000 +0200
-@@ -185,11 +185,17 @@
- if (fh) {
- // Read section data:
- unsigned char buf[4096]; // max. allowed size for any EIT section
-- int r = safe_read(fh->handle, buf, sizeof(buf));
-+ struct stat statbuf;
-+ int st = fstat(fh->handle, &statbuf);
-+ int ispipe = (st == 0 && !S_ISCHR(statbuf.st_mode));
-+ /*printf("ispipe %d\n", ispipe);*/
-+ int r = safe_read(fh->handle, buf, ispipe ? 3 : sizeof(buf));
- if (!DeviceHasLock)
- continue; // we do the read anyway, to flush any data that might have come from a different transponder
-- if (r > 3) { // minimum number of bytes necessary to get section length
-+ if (r >= 3) { // minimum number of bytes necessary to get section length
- int len = (((buf[1] & 0x0F) << 8) | (buf[2] & 0xFF)) + 3;
-+ if (ispipe)
-+ r += safe_read(fh->handle, buf+3, len-3);
- if (len == r) {
- // Distribute data to all attached filters:
- int pid = fh->filterData.pid;
diff --git a/patches/vdr-1.6.0-ignore_missing_cam.diff b/patches/vdr-1.6.0-ignore_missing_cam.diff
new file mode 100644
index 0000000..60d93bd
--- /dev/null
+++ b/patches/vdr-1.6.0-ignore_missing_cam.diff
@@ -0,0 +1,13 @@
+--- device.c.orig 2008-03-28 11:47:25.000000000 +0100
++++ device.c 2008-03-28 11:47:09.000000000 +0100
+@@ -375,8 +375,8 @@
+ }
+ }
+ }
+- if (!NumUsableSlots)
+- return NULL; // no CAM is able to decrypt this channel
++// if (!NumUsableSlots)
++// return NULL; // no CAM is able to decrypt this channel
+ }
+
+ bool NeedsDetachReceivers = false;
diff --git a/patches/vdr-1.6.0-intcamdevices.patch b/patches/vdr-1.6.0-intcamdevices.patch
new file mode 100644
index 0000000..aab1fb4
--- /dev/null
+++ b/patches/vdr-1.6.0-intcamdevices.patch
@@ -0,0 +1,78 @@
+Index: vdr-1.6.0-nocamdevices/device.c
+===================================================================
+--- vdr-1.6.0-nocamdevices/device.c
++++ vdr-1.6.0-nocamdevices/device.c 2008-04-27 18:55:37.000000000 +0300
+@@ -363,6 +363,7 @@
+ int NumCamSlots = CamSlots.Count();
+ int SlotPriority[NumCamSlots];
+ int NumUsableSlots = 0;
++ bool InternalCamNeeded = false;
+ if (Channel->Ca() >= CA_ENCRYPTED_MIN) {
+ for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) {
+ SlotPriority[CamSlot->Index()] = MAXPRIORITY + 1; // assumes it can't be used
+@@ -376,7 +377,7 @@
+ }
+ }
+ if (!NumUsableSlots)
+- return NULL; // no CAM is able to decrypt this channel
++ InternalCamNeeded = true; // no CAM is able to decrypt this channel
+ }
+
+ bool NeedsDetachReceivers = false;
+@@ -392,11 +393,13 @@
+ continue; // this device shall be temporarily avoided
+ if (Channel->Ca() && Channel->Ca() <= CA_DVB_MAX && Channel->Ca() != device[i]->CardIndex() + 1)
+ continue; // a specific card was requested, but not this one
+- if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true))
++ if (InternalCamNeeded && !device[i]->HasInternalCam())
++ continue; // no CAM is able to decrypt this channel and the device uses vdr handled CAMs
++ if (NumUsableSlots && !device[i]->HasInternalCam() && !CamSlots.Get(j)->Assign(device[i], true))
+ continue; // CAM slot can't be used with this device
+ bool ndr;
+ if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job
+- if (NumUsableSlots && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j))
++ if (NumUsableSlots && !device[i]->HasInternalCam() && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j))
+ ndr = true; // using a different CAM slot requires detaching receivers
+ // Put together an integer number that reflects the "impact" using
+ // this device would have on the overall system. Each condition is represented
+@@ -410,18 +413,18 @@
+ imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving
+ imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device
+ imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
+- imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
++ imp <<= 8; imp |= min(max(((NumUsableSlots && !device[i]->HasInternalCam()) ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used)
+ imp <<= 1; imp |= ndr; // avoid devices if we need to detach existing receivers
+ imp <<= 1; imp |= device[i]->IsPrimaryDevice(); // avoid the primary device
+- imp <<= 1; imp |= NumUsableSlots ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels
++ imp <<= 1; imp |= (NumUsableSlots || InternalCamNeeded) ? 0 : device[i]->HasCi(); // avoid cards with Common Interface for FTA channels
+ imp <<= 1; imp |= device[i]->HasDecoder(); // avoid full featured cards
+- imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel
++ imp <<= 1; imp |= (NumUsableSlots && !device[i]->HasInternalCam()) ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel
+ if (imp < Impact) {
+ // This device has less impact than any previous one, so we take it.
+ Impact = imp;
+ d = device[i];
+ NeedsDetachReceivers = ndr;
+- if (NumUsableSlots)
++ if (NumUsableSlots && !device[i]->HasInternalCam())
+ s = CamSlots.Get(j);
+ }
+ }
+Index: vdr-1.6.0-nocamdevices/device.h
+===================================================================
+--- vdr-1.6.0-nocamdevices/device.h
++++ vdr-1.6.0-nocamdevices/device.h 2008-04-27 18:55:49.000000000 +0300
+@@ -335,6 +335,12 @@
+ public:
+ virtual bool HasCi(void);
+ ///< Returns true if this device has a Common Interface.
++ virtual bool HasInternalCam(void) { return false; }
++ ///< Returns true if this device handles encrypted channels itself
++ ///< without VDR assistance. This can be e.g. when the device is a
++ ///< client that gets the stream from another VDR instance that has
++ ///< already decrypted the stream. In this case ProvidesChannel()
++ ///< shall check whether the channel can be decrypted.
+ void SetCamSlot(cCamSlot *CamSlot);
+ ///< Sets the given CamSlot to be used with this device.
+ cCamSlot *CamSlot(void) const { return camSlot; }
+
diff --git a/patches/vdr-cap_net_raw.diff b/patches/vdr-cap_net_raw.diff
new file mode 100644
index 0000000..2f714b1
--- /dev/null
+++ b/patches/vdr-cap_net_raw.diff
@@ -0,0 +1,11 @@
+--- vdr.c.orig 2009-02-13 09:45:55.000000000 +0100
++++ vdr.c 2009-02-13 09:46:24.000000000 +0100
+@@ -115,7 +115,7 @@
+ static bool SetCapSysTime(void)
+ {
+ // drop all capabilities except cap_sys_time
+- cap_t caps = cap_from_text("= cap_sys_time=ep");
++ cap_t caps = cap_from_text("= cap_sys_time,cap_net_raw=ep");
+ if (!caps) {
+ fprintf(stderr, "vdr: cap_from_text failed: %s\n", strerror(errno));
+ return false;
diff --git a/patches/vdr-pluginactivity.diff b/patches/vdr-pluginactivity.diff
deleted file mode 100644
index 0b173ae..0000000
--- a/patches/vdr-pluginactivity.diff
+++ /dev/null
@@ -1,113 +0,0 @@
-diff -Nru -x PLUGINS vdr-1.3.12-orig/i18n.c vdr-1.3.12/i18n.c
---- vdr-1.3.12-orig/i18n.c 2004-05-28 15:19:29.000000000 +0200
-+++ vdr-1.3.12/i18n.c 2004-08-17 16:01:07.000000000 +0200
-@@ -1033,8 +1033,8 @@
- "´ÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?",
- "Zaista ponovo pokrenuti?",
- },
-- { "Recording - restart anyway?",
-- "Aufnahme läuft - trotzdem neu starten?",
-+ { "Busy - restart anyway?",
-+ "Beschäftigt - trotzdem neu starten?",
- "Snemanje - zares ponoven zagon?",
- "In registrazione - restart comunque?",
- "Opname loopt - toch opnieuw starten?",
-@@ -1052,8 +1052,8 @@
- "¸Ôñâ ×Ðߨáì - ÔÕÙáâÒØâÕÛìÝÞ ßÕàÕ×ÐßãáâØâì?",
- "Snimanje traje - svejedno restart sistema?",
- },
-- { "Recording - shut down anyway?",
-- "Aufnahme läuft - trotzdem ausschalten?",
-+ { "Busy - shut down anyway?",
-+ "Beschäftigt - trotzdem ausschalten?",
- "Snemanje - zares izklopi?",
- "In registrazione - spengo comunque?",
- "Opname loopt - toch uitschakelen?",
-diff -Nru -x PLUGINS vdr-1.3.12-orig/menu.c vdr-1.3.12/menu.c
---- vdr-1.3.12-orig/menu.c 2004-06-13 22:26:51.000000000 +0200
-+++ vdr-1.3.12/menu.c 2004-08-17 16:00:07.000000000 +0200
-@@ -2201,7 +2201,7 @@
-
- eOSState cMenuSetup::Restart(void)
- {
-- if (Interface->Confirm(cRecordControls::Active() ? tr("Recording - restart anyway?") : tr("Really restart?"))) {
-+ if (Interface->Confirm((cRecordControls::Active() || cPluginManager::Active()) ? tr("Busy - restart anyway?") : tr("Really restart?"))) {
- cThread::EmergencyExit(true);
- return osEnd;
- }
-diff -Nru -x PLUGINS vdr-1.3.12-orig/plugin.c vdr-1.3.12/plugin.c
---- vdr-1.3.12-orig/plugin.c 2004-05-22 13:25:22.000000000 +0200
-+++ vdr-1.3.12/plugin.c 2004-08-17 15:57:52.000000000 +0200
-@@ -64,6 +64,11 @@
- {
- }
-
-+bool cPlugin::Active(void)
-+{
-+ return false;
-+}
-+
- const char *cPlugin::MainMenuEntry(void)
- {
- return NULL;
-@@ -369,6 +374,18 @@
- return NULL;
- }
-
-+bool cPluginManager::Active(void)
-+{
-+ if (pluginManager) {
-+ for (cDll *dll = pluginManager->dlls.First(); dll; dll = pluginManager->dlls.Next(dll)) {
-+ cPlugin *p = dll->Plugin();
-+ if (p && p->Active())
-+ return true;
-+ }
-+ }
-+ return false;
-+}
-+
- void cPluginManager::Shutdown(bool Log)
- {
- cDll *dll;
-diff -Nru -x PLUGINS vdr-1.3.12-orig/plugin.h vdr-1.3.12/plugin.h
---- vdr-1.3.12-orig/plugin.h 2004-04-30 15:46:21.000000000 +0200
-+++ vdr-1.3.12/plugin.h 2004-08-17 15:56:51.000000000 +0200
-@@ -36,6 +36,7 @@
- virtual bool Initialize(void);
- virtual bool Start(void);
- virtual void Housekeeping(void);
-+ virtual bool Active(void);
-
- virtual const char *MainMenuEntry(void);
- virtual cOsdObject *MainMenuAction(void);
-@@ -85,6 +86,7 @@
- static bool HasPlugins(void);
- static cPlugin *GetPlugin(int Index);
- static cPlugin *GetPlugin(const char *Name);
-+ static bool Active(void);
- void Shutdown(bool Log = false);
- };
-
-diff -Nru -x PLUGINS vdr-1.3.12-orig/vdr.c vdr-1.3.12/vdr.c
---- vdr-1.3.12-orig/vdr.c 2004-06-13 15:52:09.000000000 +0200
-+++ vdr-1.3.12/vdr.c 2004-08-17 15:59:18.000000000 +0200
-@@ -707,8 +707,8 @@
- Skins.Message(mtError, tr("Can't shutdown - option '-s' not given!"));
- break;
- }
-- if (cRecordControls::Active()) {
-- if (Interface->Confirm(tr("Recording - shut down anyway?")))
-+ if (cRecordControls::Active() || cPluginManager::Active()) {
-+ if (Interface->Confirm(tr("Busy - shut down anyway?")))
- ForceShutdown = true;
- }
- LastActivity = 1; // not 0, see below!
-@@ -821,7 +821,7 @@
- Skins.Message(mtInfo, tr("Editing process finished"));
- }
- }
-- if (!Interact && ((!cRecordControls::Active() && !cCutter::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) {
-+ if (!Interact && ((!cRecordControls::Active() && !cCutter::Active() && !cPluginManager::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) {
- time_t Now = time(NULL);
- if (Now - LastActivity > ACTIVITYTIMEOUT) {
- // Shutdown: