Commit af2a1352 authored by Klaus Schmidinger's avatar Klaus Schmidinger

Version 1.1.30

- Fixed minimum lifespan of deleted recordings (thanks to Jaakko Hyvätti).
- Updated French OSD texts (thanks to Olivier Jacques).
- Fixed paging through lists with repeated Left/Right keys.
- Fixed setting the PCR-PID in case it is equal to one of the other PIDs (thanks
  to Oliver Endriss for reporting this one).
- Fixed double call to MainMenuAction() of a plugin if invoked via a hotkey (thanks
  to Kai Moeller for reporting this one).
- Fixed handling dedicated keys.
- Now turning off live PIDs when replaying. This avoids short spikes from other
  channels when switching between Transfer Mode channels, and also lets an ongoing
  replay continue even if a recording is started on the primary device.
- The RCU channel display no longer changes when a recording on a different
  channel starts on the primary device.
- Restoring the current channel in case a recording has switched the transponder.
  If all devices are busy and none of them can provide the current channel, the
  message "Channel not available!" will be displayed.
- Removed the (no longer necessary) 'panic' stuff from cThread.
- Added cStatus::OsdItem() to provide the entire list of menu items to a plugin
  (thanks to Carsten Siebholz).
- The red ("Record") and yellow ("Pause") button in the "Main" menu are no longer
  available when replaying.
parent 0686038a
......@@ -460,6 +460,8 @@ Oliver Endriss <o.endriss@gmx.de>
for making the "Left" and "Right" buttons set the cursor to the first or last
list item even if the list consist only of a single page, like, for instance,
the Main menu
for reporting a bug in setting the PCR-PID in case it is equal to one of the other
PIDs
Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
......@@ -495,6 +497,7 @@ Jaakko Hyv
for adding a check if there is a connection to the keyboard
for fixing recording overlapping timers on the same channel in case
DO_REC_AND_PLAY_ON_PRIMARY_DEVICE and/or DO_MULTIPLE_RECORDINGS is not defined
for fixing the minimum lifespan of deleted recordings
Dennis Noordsij <dennis.noordsij@wiral.com>
for reporting a small glitch when switching channels
......@@ -551,7 +554,7 @@ Walter Stroebel <walter.stroebel@lifeline.nl>
Paul Gohn <pgohn@nexgo.de>
for adding 'Hrvatska radiotelevizija' and 'RTV Slovenija' to ca.conf
Teemu Rantanen <teemu.rantanen@tekla.com>
Teemu Rantanen <tvr@iki.fi>
for increased the maximum possible packet size in remux.c to avoid corrupted streams
with broadcasters that send extremely large PES packets
for adding TS error checking to remux.c
......@@ -618,3 +621,12 @@ Christian Jacobsen <christian.jacobsen@stageholding.de>
Andreas Mair <Andreas.Mair@linogate.com>
for reporting a short display of the main menu if a plugin displays its own OSD and
is started through a user defined key macro
Olivier Jacques <jacquesolivier@hotmail.com>)
for translating OSD texts to the French language
Kai Moeller <moeller.ki@gmx.de>
for reporting a double call to MainMenuAction() of a plugin if invoked via a hotkey
Carsten Siebholz <c.siebholz@t-online.de>
for adding cStatus::OsdItem() to provide the entire list of menu items to a plugin
......@@ -2084,3 +2084,27 @@ Video Disk Recorder Revision History
- The new SVDRP command STAT can be used to request information about the disk
usage (thanks to Thomas Koch).
- Fixed faulty calculation of section length in eit.c (thanks to Teemu Rantanen).
2003-05-04: Version 1.1.30
- Fixed minimum lifespan of deleted recordings (thanks to Jaakko Hyvätti).
- Updated French OSD texts (thanks to Olivier Jacques).
- Fixed paging through lists with repeated Left/Right keys.
- Fixed setting the PCR-PID in case it is equal to one of the other PIDs (thanks
to Oliver Endriss for reporting this one).
- Fixed double call to MainMenuAction() of a plugin if invoked via a hotkey (thanks
to Kai Moeller for reporting this one).
- Fixed handling dedicated keys.
- Now turning off live PIDs when replaying. This avoids short spikes from other
channels when switching between Transfer Mode channels, and also lets an ongoing
replay continue even if a recording is started on the primary device.
- The RCU channel display no longer changes when a recording on a different
channel starts on the primary device.
- Restoring the current channel in case a recording has switched the transponder.
If all devices are busy and none of them can provide the current channel, the
message "Channel not available!" will be displayed.
- Removed the (no longer necessary) 'panic' stuff from cThread.
- Added cStatus::OsdItem() to provide the entire list of menu items to a plugin
(thanks to Carsten Siebholz).
- The red ("Record") and yellow ("Pause") button in the "Main" menu are no longer
available when replaying.
......@@ -50,13 +50,13 @@ B1:12110:h:S19.2E:27500:601:602:604:0:28206:0:0:0
Premiere Start:11797:h:S19.2E:27500:255:256:0:101:8:0:0:0
Premiere 1:11797:h:S19.2E:27500:511:512,513;515:0:101:10:0:0:0
Premiere 2:11797:h:S19.2E:27500:1791:1792,1793;1795:0:101:11:0:0:0
Premiere 3:11797:h:S19.2E:27500:2303:2304:0:101:43:0:0:0
Premiere 4:11797:h:S19.2E:27500:767:768:0:101:9:0:0:0
Premiere 5:11797:h:S19.2E:27500:1279:1280:0:101:29:0:0:0
Premiere 3:11797:h:S19.2E:27500:2303:2304,2305:0:101:43:0:0:0
Premiere 4:11797:h:S19.2E:27500:767:768,769:0:101:9:0:0:0
Premiere 5:11797:h:S19.2E:27500:1279:1280,1281:0:101:29:0:0:0
Premiere 6:11797:h:S19.2E:27500:1535:1536:0:101:41:0:0:0
Premiere 7:11797:h:S19.2E:27500:1023:1024:0:101:20:0:0:0
13th Street:11758:h:S19.2E:27500:2303:2304:0:101:42:0:0:0
Studio Universal:12071:h:S19.2E:27500:2047:2048:0:101:36:0:0:0
Studio Universal:11798:h:S19.2E:27500:2047:2048:0:101:36:0:0:0
Premiere Serie:12031:h:S19.2E:27500:1023:1024:0:101:16:0:0:0
Disney Channel:11758:h:S19.2E:27500:2559:2560:0:101:34:0:0:0
Premiere Nostalgie:12031:h:S19.2E:27500:2559:2560:0:101:516:0:0:0
......@@ -67,7 +67,7 @@ Junior:11758:h:S19.2E:27500:255:256:0:101:19:0:0:0
K-Toon:11758:h:S19.2E:27500:511:512:0:101:12:0:0:0
Krimi&Co:12031:h:S19.2E:27500:1535:1536:0:101:23:0:0:0
Goldstar TV:11758:h:S19.2E:27500:3839:3840:0:101:518:0:0:0
Classica:11758:h:S19.2E:27500:767:768:0:101:15:0:0:0
MGM:11758:h:S19.2E:27500:767:768:2:101:515:0:0:0
Sonnenklar TV:12090:v:S19.2E:27500:1023:1024:0:0:32:0:0:0
:Premiere Direkt
Premiere Direkt Portal:12031:h:S19.2E:27500:2815:2816:0:101:18:0:0:0
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.154 2003/04/21 16:23:15 kls Exp $
* $Id: config.h 1.155 2003/04/27 15:56:04 kls Exp $
*/
#ifndef __CONFIG_H
......@@ -19,7 +19,7 @@
#include "device.h"
#include "tools.h"
#define VDRVERSION "1.1.29"
#define VDRVERSION "1.1.30"
#define MAXPRIORITY 99
#define MAXLIFETIME 99
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.c 1.39 2003/04/12 11:51:04 kls Exp $
* $Id: device.c 1.41 2003/05/03 13:40:15 kls Exp $
*/
#include "device.h"
......@@ -50,8 +50,6 @@ cDevice::cDevice(void)
ciHandler = NULL;
player = NULL;
playerDetached = false;
for (int i = 0; i < MAXRECEIVERS; i++)
receiver[i] = NULL;
......@@ -122,13 +120,6 @@ bool cDevice::HasDecoder(void) const
return false;
}
bool cDevice::PlayerDetached(void)
{
bool result = playerDetached;
playerDetached = false;
return result;
}
cOsdBase *cDevice::NewOsd(int x, int y)
{
return NULL;
......@@ -224,15 +215,19 @@ bool cDevice::HasPid(int Pid) const
bool cDevice::AddPid(int Pid, ePidType PidType)
{
if (Pid) {
if (Pid || PidType == ptPcr) {
int n = -1;
int a = -1;
for (int i = 0; i < MAXPIDHANDLES; i++) {
if (pidHandles[i].pid == Pid)
n = i;
else if (a < 0 && i >= ptOther && !pidHandles[i].used)
a = i;
}
if (PidType != ptPcr) { // PPID always has to be explicit
for (int i = 0; i < MAXPIDHANDLES; i++) {
if (i != ptPcr) {
if (pidHandles[i].pid == Pid)
n = i;
else if (a < 0 && i >= ptOther && !pidHandles[i].used)
a = i;
}
}
}
if (n >= 0) {
// The Pid is already in use
if (++pidHandles[n].used == 2 && n <= ptTeletext) {
......@@ -263,22 +258,31 @@ bool cDevice::AddPid(int Pid, ePidType PidType)
return true;
}
void cDevice::DelPid(int Pid)
void cDevice::DelPid(int Pid, ePidType PidType)
{
if (Pid) {
for (int i = 0; i < MAXPIDHANDLES; i++) {
if (pidHandles[i].pid == Pid) {
PRINTPIDS("D");
if (--pidHandles[i].used < 2) {
SetPid(&pidHandles[i], i, false);
if (pidHandles[i].used == 0) {
pidHandles[i].handle = -1;
pidHandles[i].pid = 0;
}
if (Pid || PidType == ptPcr) {
int n = -1;
if (PidType == ptPcr)
n = PidType; // PPID always has to be explicit
else {
for (int i = 0; i < MAXPIDHANDLES; i++) {
if (pidHandles[i].pid == Pid) {
n = i;
break;
}
PRINTPIDS("E");
}
}
}
if (n >= 0 && pidHandles[n].used) {
PRINTPIDS("D");
if (--pidHandles[n].used < 2) {
SetPid(&pidHandles[n], n, false);
if (pidHandles[n].used == 0) {
pidHandles[n].handle = -1;
pidHandles[n].pid = 0;
}
}
PRINTPIDS("E");
}
}
}
......@@ -395,6 +399,11 @@ bool cDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
return false;
}
bool cDevice::HasProgramme(void)
{
return Replaying() || pidHandles[ptAudio].pid || pidHandles[ptVideo].pid;
}
void cDevice::SetVolumeDevice(int Volume)
{
}
......@@ -523,7 +532,6 @@ void cDevice::Detach(cPlayer *Player)
player->device = NULL;
player = NULL;
SetPlayMode(pmNone);
playerDetached = true;
Audios.ClearAudio();
}
}
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.h 1.30 2003/04/26 09:49:12 kls Exp $
* $Id: device.h 1.32 2003/05/03 13:35:55 kls Exp $
*/
#ifndef __DEVICE_H
......@@ -181,6 +181,9 @@ protected:
public:
static int CurrentChannel(void) { return primaryDevice ? currentChannel : 0; }
///< Returns the number of the current channel on the primary device.
virtual bool HasProgramme(void);
///< Returns true if the device is currently showing any programme to
///< the user, either through replaying or live.
// PID handle facilities
......@@ -201,7 +204,7 @@ protected:
///< Returns true if this device is currently receiving the given PID.
bool AddPid(int Pid, ePidType PidType = ptOther);
///< Adds a PID to the set of PIDs this device shall receive.
void DelPid(int Pid);
void DelPid(int Pid, ePidType PidType = ptOther);
///< Deletes a PID from the set of PIDs this device shall receive.
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
///< Does the actual PID setting on this device.
......@@ -300,7 +303,6 @@ public:
private:
cPlayer *player;
bool playerDetached;
protected:
virtual bool CanReplay(void) const;
///< Returns true if this device can currently start a replay session.
......@@ -349,8 +351,6 @@ public:
///< Attaches the given player to this device.
void Detach(cPlayer *Player);
///< Detaches the given player from this device.
bool PlayerDetached(void);
///< Returns true if a player has been detached and resets the 'playerDetached' flag.
// Receiver facilities
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbdevice.c 1.56 2003/04/27 09:44:17 kls Exp $
* $Id: dvbdevice.c 1.59 2003/05/03 14:03:20 kls Exp $
*/
#include "dvbdevice.h"
......@@ -567,6 +567,24 @@ bool cDvbDevice::SetPid(cPidHandle *Handle, int Type, bool On)
return true;
}
void cDvbDevice::TurnOffLiveMode(void)
{
// Avoid noise while switching:
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true));
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
// Turn off live PIDs:
DelPid(pidHandles[ptAudio].pid);
DelPid(pidHandles[ptVideo].pid);
DelPid(pidHandles[ptPcr].pid, ptPcr);
DelPid(pidHandles[ptTeletext].pid);
DelPid(pidHandles[ptDolby].pid);
}
bool cDvbDevice::ProvidesSource(int Source) const
{
int type = Source & cSource::st_Mask;
......@@ -649,42 +667,18 @@ bool cDvbDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
// Turn off live PIDs if necessary:
if (TurnOffLivePIDs) {
// Avoid noise while switching:
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true));
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
// Turn off live PIDs:
DelPid(pidHandles[ptAudio].pid);
DelPid(pidHandles[ptVideo].pid);
DelPid(pidHandles[ptPcr].pid);
DelPid(pidHandles[ptTeletext].pid);
DelPid(pidHandles[ptDolby].pid);
}
if (TurnOffLivePIDs)
TurnOffLiveMode();
dvbTuner->Set(Channel, DoTune);
if (DoTune) {
/*XXX do we still need this???
if (!(status & FE_HAS_LOCK)) {
esyslog("ERROR: channel %d not locked on DVB card %d!", Channel->Number(), CardIndex() + 1);
if (LiveView && IsPrimaryDevice())
cThread::RaisePanic();
return false;
}
XXX*/
}
// PID settings:
if (TurnOnLivePIDs) {
aPid1 = Channel->Apid1();
aPid2 = Channel->Apid2();
if (!(AddPid(Channel->Ppid(), ptPcr) && AddPid(Channel->Apid1(), ptAudio) && AddPid(Channel->Vpid(), ptVideo))) {//XXX+ dolby dpid1!!! (if audio plugins are attached)
int pPid = Channel->Ppid() ? Channel->Ppid() : Channel->Vpid();
if (!(AddPid(pPid, ptPcr) && AddPid(Channel->Apid1(), ptAudio) && AddPid(Channel->Vpid(), ptVideo))) {//XXX+ dolby dpid1!!! (if audio plugins are attached)
esyslog("ERROR: failed to set PIDs for channel %d on device %d", Channel->Number(), CardIndex() + 1);
return false;
}
......@@ -782,6 +776,9 @@ bool cDvbDevice::SetPlayMode(ePlayMode PlayMode)
siProcessor->SetStatus(true);
break;
case pmAudioVideo:
if (playMode == pmNone)
TurnOffLiveMode();
// continue with next...
case pmAudioOnlyBlack:
if (siProcessor)
siProcessor->SetStatus(false);
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbdevice.h 1.20 2002/12/15 14:45:29 kls Exp $
* $Id: dvbdevice.h 1.21 2003/05/02 12:21:51 kls Exp $
*/
#ifndef __DVBDEVICE_H
......@@ -59,6 +59,7 @@ public:
private:
cDvbTuner *dvbTuner;
void TurnOffLiveMode(void);
public:
virtual bool ProvidesSource(int Source) const;
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: i18n.c 1.106 2003/04/21 14:05:17 kls Exp $
* $Id: i18n.c 1.107 2003/05/01 14:10:18 kls Exp $
*
* Translations provided by:
*
......@@ -12,7 +12,7 @@
* Italian Alberto Carraro <bertocar@tin.it>
* Dutch Arnold Niessen <niessen@iae.nl> <arnold.niessen@philips.com>
* Portuguese Paulo Lopes <pmml@netvita.pt>
* French Jean-Claude Repetto <jc@repetto.org>
* French Jean-Claude Repetto <jc@repetto.org> and Olivier Jacques <jacquesolivier@hotmail.com>
* Norwegian Jrgen Tvedt <pjtvedt@online.no> and Truls Slevigen <truls@slevigen.no>
* Finnish Hannu Savolainen <hannu@opensound.com> and Jaakko Hyvtti <jaakko@hyvatti.iki.fi>
* Polish Michael Rakowski <mrak@gmx.de>
......@@ -1940,7 +1940,7 @@ const tI18nPhrase Phrases[] = {
"Scrolla pagina nel menu",
"Scrollen per pagina",
"Scroll da pgina no menu",
"Affichage progr. suivant",
"Scrolling par pages",
"Rask rulling i menyer",
"Valikkojen rullaus",
"Przesuwac stronami",
......@@ -1988,7 +1988,7 @@ const tI18nPhrase Phrases[] = {
"Timeout EPG (h)",
"EPG-scan Timeout (h)",
"Expirou o EPG (h)",
"Temps maxi EPG (h)",
"Inactivit avant rech. EPG (h)",
"Ledig tid fr EPG-sk (h)",
"Ohjelmatied. odotusaika (h)",
"Czas do skanu EPG (h)",
......@@ -2228,7 +2228,7 @@ const tI18nPhrase Phrases[] = {
"Durata predefinita (d)",
"Standaard levensduur (d)",
"Validade por defeito (d)",
"Dure de vie par dfaut (d)",
"Dure de vie par dfaut (j)",
"Normal levetid timer (d)",
"Oletus voimassaoloaika (d)",
"Pierwotna trwalosc (d)",
......@@ -2260,7 +2260,7 @@ const tI18nPhrase Phrases[] = {
"Marca la registrazione",
"Direkte opnamen markeren",
"Marca de gravao rpida",
"Enregistrement immdiat",
"Marquage enregistr. immdiats",
"Markere direkteopptak",
"Merkitse vlitn nauh.",
"Zaznaczyc natychm. nagranie",
......@@ -2292,7 +2292,7 @@ const tI18nPhrase Phrases[] = {
"",//TODO
"",//TODO
"",//TODO
"",//TODO
"Dure enregistr. immdiat (min)",
"",//TODO
"Pikanauhoituksen pituus (min)",
"",//TODO
......@@ -2404,7 +2404,7 @@ const tI18nPhrase Phrases[] = {
"Tempo minimo di pausa (min)", // ??? i don't know...
"Minimale event time-out (min)",
"Perodo mnimo de pausa (min)",
"MinEventTimeout (min)", // Too difficult to translate - read the manual!
"MinEventTimeout (min)",
"Minste hendelsespause (min)",
"Minimi tapahtuman odotus (min)",
"Min. czas do nast. akcji (Event) (min)",
......@@ -2420,7 +2420,7 @@ const tI18nPhrase Phrases[] = {
"Tempo minimo di inattivita' (min)",
"Minimum gebruikers inactiviteit (min)",
"Perodo mnimo de inactividade (min)",
"Dure minimale d'inactivit (min)",
"Dure minimale d'inact. (min)",
"Minimumstid med inaktivitet (min)",
"Minimi kyttjn odotus (min)",
"Min. brak aktywnosci uzytkownika (min)",
......@@ -2486,7 +2486,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
" abcdefghijklmnopqrstuvxyz0123456789-.#~",
"",// TODO
" abcdefghijklmnopqrstuvxyz0123456789-.#~",
"",// TODO
......@@ -2679,7 +2679,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"('Menu' pour passer cette touche)",
"",// TODO
"(Paina 'Valikko' jos nppint ei ole)",
"",// TODO
......@@ -2904,7 +2904,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Lecture",
"",// TODO
"",// TODO
"",// TODO
......@@ -2920,7 +2920,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Pause",
"",// TODO
"",// TODO
"",// TODO
......@@ -2935,7 +2935,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Stop",
"",// TODO
"",// TODO
"",// TODO
......@@ -2952,7 +2952,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Enregistrement",
"",// TODO
"",// TODO
"",// TODO
......@@ -2968,7 +2968,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Avance rapide",
"",// TODO
"",// TODO
"",// TODO
......@@ -2984,7 +2984,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Retour rapide",
"",// TODO
"",// TODO
"",// TODO
......@@ -3016,7 +3016,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Chane+",
"",// TODO
"",// TODO
"",// TODO
......@@ -3032,7 +3032,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Chane-",
"",// TODO
"",// TODO
"",// TODO
......@@ -3145,7 +3145,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"aucun",
"",// TODO
"",// TODO
"",// TODO
......@@ -3161,7 +3161,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"auto",
"",// TODO
"",// TODO
"",// TODO
......@@ -3417,7 +3417,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Pause de l'mission en direct...",
"",// TODO
"",// TODO
"",// TODO
......@@ -3433,7 +3433,7 @@ const tI18nPhrase Phrases[] = {
"",// TODO
"",// TODO
"",// TODO
"",// TODO
"Ce plugin n'a pas de paramtres !",
"",// TODO
"Tll laajennoksella ei ole asetuksia!",
"",// TODO
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 1.240 2003/04/27 12:50:31 kls Exp $
* $Id: menu.c 1.241 2003/05/03 15:59:07 kls Exp $
*/
#include "menu.h"
......@@ -2489,7 +2489,7 @@ void cMenuMain::Set(const char *Plugin)
// Color buttons:
SetHelp(tr("Record"), cDevice::PrimaryDevice()->NumAudioTracks() > 1 ? tr("Language") : NULL, replaying ? NULL : tr("Pause"), replaying ? tr("Button$Stop") : cReplayControl::LastReplayed() ? tr("Resume") : NULL);
SetHelp(!replaying ? tr("Record") : NULL, cDevice::PrimaryDevice()->NumAudioTracks() > 1 ? tr("Language") : NULL, replaying ? NULL : tr("Pause"), replaying ? tr("Button$Stop") : cReplayControl::LastReplayed() ? tr("Resume") : NULL);
Display();
lastActivity = time(NULL);
}
......@@ -2547,7 +2547,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
default: switch (Key) {
case kRecord:
case kRed: if (!HadSubMenu)
state = osRecord;
state = replaying ? osContinue : osRecord;
break;
case kGreen: if (!HadSubMenu) {
int CurrentAudioTrack = -1;
......@@ -2564,7 +2564,7 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
}
break;
case kYellow: if (!HadSubMenu)
state = osPause;
state = replaying ? osContinue : osPause;
break;
case kBlue: if (!HadSubMenu)
state = replaying ? osStopReplay : cReplayControl::LastReplayed() ? osReplay : osContinue;
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: osd.c 1.40 2003/03/23 15:41:54 kls Exp $
* $Id: osd.c 1.42 2003/05/03 14:46:38 kls Exp $
*/
#include "osd.h"
......@@ -423,6 +423,11 @@ void cOsdMenu::Display(void)
Interface->Help(helpRed, helpGreen, helpYellow, helpBlue);
int count = Count();
if (count > 0) {
for (int i = 0; i < count; i++) {
cOsdItem *item = Get(i);
if (item)
cStatus::MsgOsdItem(item->Text(), i);
}
if (current < 0)
current = 0; // just for safety - there HAS to be a current item!
int n = 0;
......@@ -578,7 +583,8 @@ eOSState cOsdMenu::HotKey(eKeys Key)
if (s && (s = skipspace(s)) != NULL) {
if (*s == Key - k1 + '1') {
current = item->Index();
return ProcessKey(kOk);
cRemote::Put(kOk, true);
break;
}
}
}
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: rcu.c 1.4 2003/04/12 14:37:13 kls Exp $
* $Id: rcu.c 1.5 2003/05/02 14:42:40 kls Exp $
*/
#include "rcu.h"
......@@ -315,7 +315,7 @@ void cRcuRemote::ChannelSwitch(const cDevice *Device, int ChannelNumber)
{
if (ChannelNumber && Device->IsPrimaryDevice()) {
LOCK_THREAD;
numberToSend = ChannelNumber;
numberToSend = cDevice::CurrentChannel();
}
}
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: recording.c 1.75 2003/04/12 09:51:44 kls Exp $
* $Id: recording.c 1.76 2003/04/27 15:52:17 kls Exp $
*/
#include "recording.h"
......@@ -78,7 +78,7 @@ void RemoveDeletedRecordings(void)
r0 = r;
r = Recordings.Next(r);
}
if (r0 && time(NULL) - r0->start > DELETEDLIFETIME * 60) {
if (r0 && time(NULL) - r0->start > DELETEDLIFETIME * 3600) {
r0->Remove();
RemoveEmptyVideoDirectories();
LastRemoveCheck += REMOVELATENCY;
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: remote.c 1.36 2002/12/15 15:58:59 kls Exp $
* $Id: remote.c 1.38 2003/05/02 10:49:50 kls Exp $
*/
#include "remote.h"
......@@ -58,7 +58,7 @@ void cRemote::Clear(void)
}
}
bool cRemote::Put(eKeys Key)
bool cRemote::Put(eKeys Key, bool AtFront)
{
if (Key != kNone) {
cMutexLock MutexLock(&mutex);
......@@ -68,9 +68,16 @@ bool cRemote::Put(eKeys Key)
if (d <= 0)
d = MaxKeys + d;
if (d - 1 > 0) {
keys[in] = Key;
if (++in >= MaxKeys)
in = 0;
if (AtFront) {
if (--out < 0)
out = MaxKeys - 1;
keys[out] = Key;
}
else {
keys[in] = Key;
if (++in >= MaxKeys)
in = 0;
}
keyPressed.Broadcast();
return true;
}
......@@ -123,6 +130,11 @@ bool cRemote::Put(const char *Code, bool Repeat, bool Release)
return false;
}
bool cRemote::HasKeys(void)
{
return in != out && !(keys[out] & k_Repeat);
}
eKeys cRemote::Get(int WaitMs, char **UnknownCode)
{
for (;;) {
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: remote.h 1.26 2003/04/27 12:05:48 kls Exp $
* $Id: remote.h 1.28 2003/05/02 10:41:35 kls Exp $
*/
#ifndef __REMOTE_H
......@@ -42,10 +42,10 @@ public:
const char *Name(void) { return name; }
static void SetLearning(cRemote *Learning) { learning = Learning; }
static void Clear(void);
static bool Put(eKeys Key);
static bool Put(eKeys Key, bool AtFront = false);
static bool PutMacro(eKeys Key);
static const char *GetPlugin(void) { return plugin; }
static bool HasKeys(void) { return in != out; }
static bool HasKeys(void);
static eKeys Get(int WaitMs = 1000, char **UnknownCode = NULL);
};
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: status.c 1.4 2002/07/13 10:49:34 kls Exp $
* $Id: status.c 1.5 2003/05/03 14:47:44 kls Exp $
*/
#include "status.h"
......@@ -71,6 +71,12 @@ void cStatus::MsgOsdHelpKeys(const char *Red, const char *Green, const char *Yel
sm->OsdHelpKeys(Red, Green, Yellow, Blue);