diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 2bfe4714..7b1568b6 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -152,6 +152,7 @@ Stefan Huelswitt 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 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)!",