summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY2
-rw-r--r--device.c39
-rw-r--r--i18n.c18
4 files changed, 42 insertions, 18 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 2bfe4714..7b1568b6 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -152,6 +152,7 @@ Stefan Huelswitt <huels@iname.com>
for making cStatus::MsgChannelSwitch() only be called if a channel is actually going to
be switched or has actually been switched successfully
for adding a missing StripAudioPackets() to cDvbPlayer::Action()
+ for improving skipping channels that are (currently) not available
Ulrich Röder <roeder@efr-net.de>
for pointing out that there are channels that have a symbol rate higher than
diff --git a/HISTORY b/HISTORY
index 72a4c5b4..e1b778ad 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1574,3 +1574,5 @@ Video Disk Recorder Revision History
- Removed some unnecessary #includes from eit.c and changed cMenuRecordings::Del()
to cMenuRecordings::Delete() to avoid warnings in gcc-3.2 (thanks to Andreas
Schultz for pointing this out).
+- Improved skipping channels that are (currently) not available (thanks to Stefan
+ Huelswitt).
diff --git a/device.c b/device.c
index fa594b29..a7de7fc7 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 1.23 2002/10/05 15:18:39 kls Exp $
+ * $Id: device.c 1.24 2002/10/06 11:31:52 kls Exp $
*/
#include "device.h"
@@ -293,7 +293,9 @@ bool cDevice::SwitchChannel(const cChannel *Channel, bool LiveView)
for (int i = 3; i--;) {
switch (SetChannel(Channel, LiveView)) {
case scrOk: return true;
- case scrNotAvailable: return false;
+ case scrNotAvailable: if (Interface)
+ Interface->Error(tr("Channel not available!"));
+ return false;
case scrNoTransfer: if (Interface)
Interface->Error(tr("Can't start Transfer Mode!"));
return false;
@@ -311,21 +313,24 @@ bool cDevice::SwitchChannel(int Direction)
if (Direction) {
int n = CurrentChannel() + Direction;
int first = n;
- for (;;) {
- cChannel *channel = Channels.GetByNumber(n);
- if (!channel)
- break;
- if (PrimaryDevice()->SwitchChannel(channel, true)) {
- result = true;
- break;
- }
- n += Direction;
- }
- int d = n - first;
- if (abs(d) == 1)
- dsyslog("skipped channel %d", first);
- else if (d)
- dsyslog("skipped channels %d..%d", first, n - sgn(d));
+ cChannel *channel;
+ while ((channel = Channels.GetByNumber(n)) != NULL) {
+ // try only channels which are currently available
+ if (PrimaryDevice()->ProvidesChannel(channel, Setup.PrimaryLimit) || GetDevice(channel, 0))
+ break;
+ n += Direction;
+ }
+ if (channel) {
+ int d = n - first;
+ if (abs(d) == 1)
+ dsyslog("skipped channel %d", first);
+ else if (d)
+ dsyslog("skipped channels %d..%d", first, n - sgn(d));
+ if (PrimaryDevice()->SwitchChannel(channel, true))
+ result = true;
+ }
+ else if (n != first && Interface)
+ Interface->Error(tr("Channel not available!"));
}
return result;
}
diff --git a/i18n.c b/i18n.c
index b814179e..d8dc3b7b 100644
--- a/i18n.c
+++ b/i18n.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: i18n.c 1.94 2002/10/06 09:55:08 kls Exp $
+ * $Id: i18n.c 1.95 2002/10/06 11:31:18 kls Exp $
*
* Translations provided by:
*
@@ -1436,6 +1436,22 @@ const tI18nPhrase Phrases[] = {
"Nu mai sunt dispozitive DVB pentru inregistrare!",
"Nincs szabad DVB kártya a felvételhez!",
},
+ { "Channel not available!",
+ "Kanal nicht verfügbar!",
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ "",//TODO
+ },
{ "Channel locked (recording)!",
"Kanal blockiert (zeichnet auf)!",
"Zaklenjen kanal (snemanje)!",